# 🏛️ System Architecture Aplikasi **GoPrint Service General** dirancang menggunakan kombinasi prinsip **Clean Architecture**, **CQRS (Command Query Responsibility Segregation)**, dan **Event-Driven / Worker Patterns**. ## 1. High-Level Topologi Aplikasi ini bertindak sebagai **Middleware / Bridging API** antara: 1. **Sistem Internal (SIMRS Lokal):** Berkomunikasi via REST API & gRPC. 2. **Sistem Eksternal (Nasional):** Berkomunikasi via HTTP Client ke BPJS (VClaim/Antrol) dan Kemenkes (SatuSehat FHIR & KFA). ## 2. Core Components ### A. Transport Layer (Dual-Protocol Server) * **HTTP/REST (Gin Framework):** Menyediakan antarmuka standar bagi *frontend* dan sistem *legacy*. Implementasi *Service Registry* (`httpServer.ServiceRegistry`) menjamin manajemen rute yang modular. * **gRPC:** Menggunakan Protobuf untuk komunikasi internal antar-*microservice* dengan latensi ultra-rendah dan *payload* terkompresi. ### B. Data & Infrastructure Layer * **Multi-Database Manager (`database.go`):** Mampu melayani multi-koneksi sekaligus (Postgres, MySQL, SQLServer, SQLite, MongoDB). Otomatis memisahkan beban *Read* (menggunakan *Read Replicas* dengan *round-robin balancer*) dan *Write* (ke *Primary DB*). Terdapat *auto-tuning* koneksi (MaxOpen, MaxIdle). * **Cache Manager (`cache.go`):** Redis digunakan secara ekstensif dengan pola **Cache-Aside**. Pada modul `permission`, pencarian dan *tree-hierarchy* di- *cache* (kunci menggunakan *hash* SHA-256 dari parameter *query*) dan diinvalidasi otomatis saat terjadi `Create`/`Update`/`Delete`. * **Object Storage:** MinIO/S3 terintegrasi untuk penyimpanan aset (seperti hasil *ImagingStudy* atau dokumen medis). ### C. Business Logic Layer (CQRS Pattern) Setiap modul (contoh: `role/permission`) dibagi dengan jelas: * **Command Repository:** Khusus mutasi data (`Create`, `Update`, `Delete`) dengan GORM ke Primary DB. * **Query Repository:** Khusus pengambilan data (`FindAll`, `Search`) menggunakan `sqlx` ke Read Replica DB agar sangat cepat dan tidak mengganggu transaksi utama. * **Service:** Menangani aturan bisnis, validasi, dan integrasi ke *Cache Manager*. ### D. External Integration & Background Workers * **BPJS Client (`bpjs/client.go`):** Meng- *handle* generasi *header* HMAC SHA256, *timestamp*, otomatis dekripsi *payload* VClaim V2, dan *error handling* standar BPJS. * **SatuSehat Client (`satusehat/types.go`):** Menyediakan `FHIRPayload` *builder* (*fluent interface*) untuk JSON FHIR, serta manajemen *Access Token* OAuth2. * **Background Workers:** Berjalan secara asinkron (`goroutine`) menggunakan `errgroup`. *Worker* seperti `migrator.go` menyinkronkan data pasien secara bertahap untuk menghindari *Rate Limit* Kemenkes, dicatat via `tracker file`. ## 3. Observability & Logging Menggunakan sistem *logging* internal (berbasis `logrus`): * Menambahkan **X-Request-ID** dan **Trace ID** di *Context*. * Menjalankan *Hook* waktu **WIB (Asia/Jakarta)** secara ketat. * Rotasi *log file* harian (`dailyFileWriter`) ke dalam folder `logs/YYYY/MM/YYYY-MM-DD.log`.