Lewati ke isi

Architecture Overview

Gambaran arsitektur target sistem ERP setelah peremajaan. Detail keputusan historis: 09-SEJARAH-DAN-FILOSOFI-SISTEM.md. Ringkasan eksekutif: 00-RINGKASAN-EKSEKUTIF.md.


Tujuan sistem

Sasaran Implementasi
ERP multi-tenant Satu DB PostgreSQL erp, schema tenant_<kode> per unit bisnis
Logika bisnis terkontrol Trigger-first di PostgreSQL (logika + trigger tenant) — stok, HPP FIFO, jurnal
API tipis NestJS — auth, tenant context, validasi, penyajian data, relai FCM
Analitik & dashboard cepat CDC → Kafka → ClickHouse (erp_clickhouse)
Cutover Big-bang setelah rekonsiliasi 100% (06-STRATEGI-MIGRASI-BIGBANG.md)

Diagram konteks

flowchart TB
  subgraph clients [Klien]
    FL[Flutter ERP ×4]
    WEB[Web / migrasi-ui]
    LEG[Delphi legacy - sunset]
  end

  subgraph edge [Edge]
    FB[Firebase Auth]
    API[NestJS erp-backend :3001]
  end

  subgraph core [Core - Source of Truth]
    PG[(PostgreSQL erp)]
    LOG[schema logika]
    PUS[schema pusat]
    TEN[schema tenant_*]
  end

  subgraph analytics [Analytics Pipeline]
    DEB[Debezium Connect]
    KF[Kafka :9092]
    ETL[consumer_clickhouse PM2]
    CH[(ClickHouse erp_clickhouse)]
  end

  subgraph ops [Operasional]
    MON[migrasi-ui / cdc-monitor]
    PM2[PM2 processes]
  end

  FL --> FB
  FL --> API
  WEB --> API
  WEB --> MON
  LEG -.->|referensi migrasi| PG
  API --> PG
  PG --> LOG
  PG --> PUS
  PG --> TEN
  TEN -->|WAL pgoutput| DEB
  DEB --> KF
  KF --> ETL
  ETL --> CH
  API --> CH
  MON --> PG
  MON --> KF
  MON --> CH
  PM2 --> ETL
  PM2 --> MON

Batas sistem (boundaries)

Boundary Di dalam Di luar Catatan
Transaksi operasional PostgreSQL tenant ClickHouse untuk read model laporan/dashboard CH bukan sumber kebenaran saldo
Autentikasi Firebase (authN) — Password tidak disimpan di DB
Otorisasi pusat.pengguna, pengguna_tenant, hak modul Firebase tidak tahu tenant JWT tenant setelah pilih
Legacy MariaDB luckyjayagroup Produksi baru Hanya ETL/migrasi; jangan feature baru
CDC Tabel terpublikasi di debezium_erp_pub Tabel draft/kerja yang belum dipublish Daftar tabel: kafka-topics.md

Lapisan tanggung jawab

Lapisan Owner Tanggung jawab
Schema pusat Database team Registry tenant, pengguna, wilayah, akun master
Schema logika Database team Fungsi bersama: nomor bukti, FIFO, posting jurnal
Schema tenant_* Database team + domain Tabel operasional, view tenant, trigger
Backend NestJS Backend team HTTP API, pool tenant, search_path, ClickHouse query
ETL legacy Database team MariaDB → PG (one-shot / fase E)
CDC consumer Platform / DBA Sink Kafka → CH, DLQ, tuning batch
Flutter Mobile team UX, auth flow, konsumsi API
migrasi-ui Platform Bootstrap tenant, rebuild, monitor lag

Pola arsitektur kunci

1. Trigger-first (OLTP)

Aplikasi menulis ke transaksi / transaksi_detail; trigger menghitung stok, HPP, jurnal. Backend tidak mengganti logika ini untuk operasi standar.

Rujuk: 05-LOGIKA-BISNIS-FIFO-STOK-JURNAL.md, ../database/docs/00-ARSITEKTUR-SCHEMA-PER-TENANT.md.

2. Schema-per-tenant

search_path = tenant_<kode>, logika, pusat per request (pool koneksi per tenant atau DISCARD PLANS).

Rujuk: 04-ARSITEKTUR-MULTI-TENANT.md.

3. CQRS ringan (OLAP)

PostgreSQL = command + consistency. ClickHouse = query agregat (ReplacingMergeTree + MV).

Rujuk: event-flow.md, clickhouse-patterns.md.

4. Auth dua token

  1. JWT aplikasi (pasca Firebase)
  2. JWT tenant (pasca POST /tenants/{kode}/pilih)

Rujuk: 10-ARSITEKTUR-KLIEN-AUTH-REALTIME.md.


Komunikasi antar layanan

Dari Ke Protokol Data
Flutter Firebase OAuth / FCM ID token, push
Flutter NestJS HTTPS + JWT REST JSON
NestJS PostgreSQL SQL DML + EXECUTE fungsi
NestJS ClickHouse Native/HTTP SELECT laporan
PostgreSQL Debezium Logical replication WAL changes
Debezium Kafka JSON CDC erp.tenant_*.<tabel>
Consumer ClickHouse Batch INSERT erp_clickhouse.*
Trigger PG NestJS pg_notify Event → SSE/FCM (rencana)
migrasi-ui PG/Kafka/CH HTTP + subprocess Job operasional

Status implementasi (ringkas)

Komponen Status Catatan
PostgreSQL fondasi A–G ✅ ETL sparepart, CDC aktif 2026-05-21
Backend fondasi + domain 🟠 ~75 endpoint; kontrak OpenAPI belum final
Flutter auth + tenant ✅ Screen operasional menunggu API
Cutover big-bang 🔴 Menunggu rekonsiliasi semua tenant
Control plane CDC API 🟡 Draft + sebagian implementasi ops-cdc

Detail: migration-status.md.


Dokumen terkait