# nersus15/integrasi-stunting architecture

> Architecture diagram of the GitHub repository nersus15/integrasi-stunting, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nersus15/integrasi-stunting
- Repository: https://github.com/nersus15/integrasi-stunting

## Overview

This repository runs a stunting-data service: HTTP clients submit or query family, child, health, and facility records; handlers delegate validation and access-sensitive operations to the service, which persists and reads domain data through the repository. A separate Kafka stream path processes incoming FHIR bundles into those records, with transaction retry and failure-listing support. The domain model and FHIR conversion helpers form the internal data-mapping layer. README is empty; stream-to-Kafka wiring and several route details are not established by the excerpts, so uncertain links are omitted.

Main entry points: [`modules/stunting/service/stream.go`](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/stream.go) (FHIR stream processor), [`modules/stunting/service/service.go`](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/service.go) (Stunting service), [`modules/stunting/helper/types/jakantro.go`](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/helper/types/jakantro.go) (Payload conversion), [`modules/stunting/handler/http.go`](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/handler/http.go) (HTTP handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Application runtime"]
  node_main["Service startup<br/>[main.go]"]
  node_module["Module registration<br/>[module.go]"]
  node_config["Module configuration<br/>[config.go]"]
end

subgraph group_api["HTTP API"]
  node_httphandler["HTTP handlers<br/>[http.go]"]
  node_service["Stunting service<br/>[service.go]"]
end

subgraph group_stream["FHIR ingestion"]
  node_streamhandler["Kafka handler<br/>[kafka.go]"]
  node_streamservice["FHIR stream processor<br/>[stream.go]"]
end

subgraph group_domain["Domain and mapping"]
  node_types["Payload conversion<br/>[jakantro.go]"]
  node_fhir["FHIR mapping<br/>[fhir.go]"]
  node_entities["Clinical entities<br/>[jakantro.go]"]
end

subgraph group_persistence["Persistence"]
  node_repository["Data repository<br/>[repository.go]"]
  node_cache["Cache<br/>[cache.go]"]
  node_database[("Stunting database<br/>[01_postgresql.sql]")]
end

node_httpclient(("API client"))
node_kafka["Kafka broker"]

node_httpclient -->|"sends requests"| node_httphandler
node_main -->|"starts modules"| node_module
node_main -->|"loads configuration"| node_config
node_httphandler -->|"delegates operations"| node_service
node_httphandler -->|"requests failure listing"| node_streamservice
node_httphandler -->|"parses payloads"| node_types
node_service -->|"reads and writes"| node_repository
node_service -->|"converts payloads"| node_types
node_service -->|"updates domain records"| node_entities
node_streamhandler -->|"dispatches messages"| node_streamservice
node_kafka -->|"delivers messages"| node_streamhandler
node_streamservice -->|"maps FHIR resources"| node_fhir
node_streamservice -->|"converts mapped data"| node_types
node_streamservice -->|"creates visits"| node_service
node_streamservice -->|"looks up and stores records"| node_repository
node_fhir -->|"produces payloads"| node_types
node_types -->|"maps to entities"| node_entities
node_repository -->|"queries and persists"| node_database
node_repository -->|"reads and writes"| node_cache

click node_main "https://github.com/nersus15/integrasi-stunting/blob/main/app/main.go"
click node_module "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/module.go"
click node_httphandler "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/handler/http.go"
click node_service "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/service.go"
click node_streamhandler "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/handler/kafka.go"
click node_streamservice "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/stream.go"
click node_types "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/helper/types/jakantro.go"
click node_fhir "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/helper/utils/fhir.go"
click node_entities "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/entity/jakantro.go"
click node_config "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/config/config.go"
click node_repository "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/repository/repository.go"
click node_cache "https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/repository/cache.go"
click node_database "https://github.com/nersus15/integrasi-stunting/blob/main/migration/stunting/postgres/01_postgresql.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_module,node_config,node_httpclient toneBlue
class node_httphandler,node_service toneAmber
class node_streamhandler,node_streamservice toneMint
class node_types,node_fhir,node_entities toneRose
class node_repository,node_cache,node_database,node_kafka toneIndigo
```

## Components

### Application runtime

- [Service startup](https://github.com/nersus15/integrasi-stunting/blob/main/app/main.go): `app/main.go`
- [Module registration](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/module.go): `modules/stunting/module.go`
- [Module configuration](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/config/config.go): `modules/stunting/config/config.go`

### HTTP API

- [HTTP handlers](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/handler/http.go): `modules/stunting/handler/http.go`
- [Stunting service](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/service.go): `modules/stunting/service/service.go`

### FHIR ingestion

- [Kafka handler](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/handler/kafka.go): `modules/stunting/handler/kafka.go`
- [FHIR stream processor](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/service/stream.go): `modules/stunting/service/stream.go`

### Domain and mapping

- [Payload conversion](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/helper/types/jakantro.go): `modules/stunting/helper/types/jakantro.go`
- [FHIR mapping](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/helper/utils/fhir.go): `modules/stunting/helper/utils/fhir.go`
- [Clinical entities](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/entity/jakantro.go): `modules/stunting/entity/jakantro.go`

### Persistence

- [Data repository](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/repository/repository.go): `modules/stunting/repository/repository.go`
- [Cache](https://github.com/nersus15/integrasi-stunting/blob/main/modules/stunting/repository/cache.go): `modules/stunting/repository/cache.go`
- [Stunting database](https://github.com/nersus15/integrasi-stunting/blob/main/migration/stunting/postgres/01_postgresql.sql): `migration/stunting/postgres/01_postgresql.sql`

### Other components

- **API client**
- **Kafka broker**

## Connections

- API client → HTTP handlers: sends requests
- Service startup → Module registration: starts modules
- Service startup → Module configuration: loads configuration
- HTTP handlers → Stunting service: delegates operations
- HTTP handlers → FHIR stream processor: requests failure listing
- HTTP handlers → Payload conversion: parses payloads
- Stunting service → Data repository: reads and writes
- Stunting service → Payload conversion: converts payloads
- Stunting service → Clinical entities: updates domain records
- Kafka handler → FHIR stream processor: dispatches messages
- Kafka broker → Kafka handler: delivers messages
- FHIR stream processor → FHIR mapping: maps FHIR resources
- FHIR stream processor → Payload conversion: converts mapped data
- FHIR stream processor → Stunting service: creates visits
- FHIR stream processor → Data repository: looks up and stores records
- FHIR mapping → Payload conversion: produces payloads
- Payload conversion → Clinical entities: maps to entities
- Data repository → Stunting database: queries and persists
- Data repository → Cache: reads and writes
