- New page src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx konsumsi ringkasanKesehatanState (load + submit) dengan 7 NumberInput (3 count + 4 pct). - Tambah Kesehatan_8 "Ringkasan Kesehatan" di 3 instance sidebar (list_PageAdmin.tsx). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
3.1 KiB
Markdown
63 lines
3.1 KiB
Markdown
# Summary: Statistik Persentase Kesehatan di RingkasanKesehatanDesa
|
||
|
||
## Konteks
|
||
|
||
Dashboard admin punya 4 progress bar (Imunisasi Lengkap, Pemeriksaan Rutin,
|
||
Gizi Baik, Target Stunting) yang sebelumnya belum ada backend-nya. Schema
|
||
`RingkasanKesehatanDesa` hanya menyimpan 3 field count (`ibuHamilAkh`,
|
||
`balitaTerdaftar`, `alertStunting`).
|
||
|
||
## Yang Dikerjakan
|
||
|
||
### Step A — Schema + API (v0.1.49)
|
||
1. **Schema** — tambah 4 field `Int @default(0)` di `RingkasanKesehatanDesa`:
|
||
`imunisasiLengkapPct`, `pemeriksaanRutinPct`, `giziBaikPct`, `targetStuntingPct`.
|
||
2. **Migration** — buat manual SQL di
|
||
`prisma/migrations/20260504000000_add_statistik_pct_ringkasan_kesehatan/migration.sql`
|
||
(sandbox non-interaktif, jadi `migrate dev` di-bypass dengan SQL langsung).
|
||
3. **API** —
|
||
- `kesehatan/ringkasan-kesehatan/updt.ts` — handler create + update terima 4 field baru.
|
||
- `kesehatan/ringkasan-kesehatan/index.ts` — Elysia body validation `t.Number({ minimum: 0, maximum: 100 })`.
|
||
- `findUnique.ts` tidak perlu diubah — `findFirst` tanpa `select` otomatis bawa field baru.
|
||
4. Build clean, push ke 2 remote (bipprojectbali + nicoarya20), merge ke `stg`.
|
||
|
||
### Step B — State Admin (v0.1.50)
|
||
- File baru `_state/kesehatan/ringkasan-kesehatan/ringkasanKesehatan.ts` (Valtio proxy):
|
||
- `findUnique.load()` — GET `/api/kesehatan/ringkasankesehatan/find`, isi `data` + sync ke `update.form`.
|
||
- `update.submit()` — zod validate (count ≥ 0, Pct 0-100) → PUT `/api/kesehatan/ringkasankesehatan/update` → refresh.
|
||
- `update.reset()` — reset form ke default.
|
||
|
||
## Decision Log
|
||
|
||
- **Gabung ke `RingkasanKesehatanDesa`** (bukan model baru `StatistikKesehatan`)
|
||
alasan: domain sama (ringkasan kesehatan desa), pattern existing single-row config
|
||
cocok, single fetch untuk dashboard, migration ringan additive.
|
||
- **Tipe `Int` (0–100)** — UI render integer %, tidak butuh desimal.
|
||
- **Suffix `Pct`** — eksplisit semantik persentase (count vs persentase di model yang sama).
|
||
- **Field lama tidak disentuh** — additive only, sesuai AI-CONTRACT §10.
|
||
|
||
## Pending Manual
|
||
|
||
- Jalankan `bunx prisma migrate deploy` di terminal lokal → apply kolom baru ke DB.
|
||
- Trigger GitHub Workflow (publish + re-pull) bila mau deploy STG.
|
||
|
||
## Affected Files
|
||
|
||
```
|
||
prisma/schema.prisma
|
||
prisma/migrations/20260504000000_add_statistik_pct_ringkasan_kesehatan/migration.sql [NEW]
|
||
src/app/api/[[...slugs]]/_lib/kesehatan/ringkasan-kesehatan/updt.ts
|
||
src/app/api/[[...slugs]]/_lib/kesehatan/ringkasan-kesehatan/index.ts
|
||
src/app/admin/(dashboard)/_state/kesehatan/ringkasan-kesehatan/ringkasanKesehatan.ts [NEW]
|
||
src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx [NEW]
|
||
src/app/admin/_com/list_PageAdmin.tsx (3 sidebar instances → tambah Kesehatan_8)
|
||
package.json (0.1.48 → 0.1.51)
|
||
MIND/PLAN/task-statistik-kesehatan-ringkasan.md [NEW]
|
||
```
|
||
|
||
## Commits
|
||
|
||
- `ba2b90be` feat(kesehatan): tambah 4 field statistik pct ke RingkasanKesehatanDesa - bump ke 0.1.49
|
||
- `68a2a639` feat(kesehatan): tambah state file ringkasanKesehatan + bump ke 0.1.50
|
||
- (next) feat(kesehatan): admin page ringkasan-kesehatan + sidebar entry - bump ke 0.1.51
|