feat(kesehatan): tambah 4 field statistik pct ke RingkasanKesehatanDesa - bump ke 0.1.49
Tambah imunisasiLengkapPct, pemeriksaanRutinPct, giziBaikPct, targetStuntingPct ke schema + migration + Elysia body validation (range 0-100) + updt handler. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
31
MIND/PLAN/task-statistik-kesehatan-ringkasan.md
Normal file
31
MIND/PLAN/task-statistik-kesehatan-ringkasan.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Task: Tambah Statistik Persentase ke RingkasanKesehatanDesa
|
||||
|
||||
## Tujuan
|
||||
Lengkapi schema + API `RingkasanKesehatanDesa` dengan 4 field persentase
|
||||
agar dashboard Statistik Kesehatan (Imunisasi, Pemeriksaan Rutin, Gizi Baik,
|
||||
Target Stunting) punya backend yang bisa di-fetch.
|
||||
|
||||
## Field Baru
|
||||
Tambah ke model `RingkasanKesehatanDesa` (additive, tidak ubah field lama):
|
||||
|
||||
| Field | Tipe | Default | Keterangan |
|
||||
|---|---|---|---|
|
||||
| `imunisasiLengkapPct` | Int | 0 | Persentase imunisasi lengkap (0-100) |
|
||||
| `pemeriksaanRutinPct` | Int | 0 | Persentase pemeriksaan rutin (0-100) |
|
||||
| `giziBaikPct` | Int | 0 | Persentase gizi baik (0-100) |
|
||||
| `targetStuntingPct` | Int | 0 | Persentase target stunting (0-100) |
|
||||
|
||||
## Step
|
||||
|
||||
- [ ] 1. Edit `prisma/schema.prisma` — tambah 4 field
|
||||
- [ ] 2. Run migration: `bunx prisma migrate dev --name add-statistik-pct-ringkasan-kesehatan`
|
||||
- [ ] 3. Update `kesehatan/ringkasan-kesehatan/findUnique.ts` — select field baru
|
||||
- [ ] 4. Update `kesehatan/ringkasan-kesehatan/updt.ts` — tambah validasi Elysia + update logic
|
||||
- [ ] 5. `bun run build` — pastikan 0 error
|
||||
- [ ] 6. Bump version `package.json`
|
||||
- [ ] 7. Commit + push branch baru
|
||||
|
||||
## Prinsip
|
||||
- Additive only — field lama (`ibuHamilAkh`, `balitaTerdaftar`, `alertStunting`) tidak disentuh
|
||||
- Validasi range 0-100 di Elysia `updt.ts`
|
||||
- Tidak ada breaking change kontrak
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "desa-darmasaba",
|
||||
"version": "0.1.48",
|
||||
"version": "0.1.49",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "RingkasanKesehatanDesa"
|
||||
ADD COLUMN "imunisasiLengkapPct" INTEGER NOT NULL DEFAULT 0,
|
||||
ADD COLUMN "pemeriksaanRutinPct" INTEGER NOT NULL DEFAULT 0,
|
||||
ADD COLUMN "giziBaikPct" INTEGER NOT NULL DEFAULT 0,
|
||||
ADD COLUMN "targetStuntingPct" INTEGER NOT NULL DEFAULT 0;
|
||||
@@ -2487,6 +2487,10 @@ model RingkasanKesehatanDesa {
|
||||
ibuHamilAkh Int @default(0)
|
||||
balitaTerdaftar Int @default(0)
|
||||
alertStunting Int @default(0)
|
||||
imunisasiLengkapPct Int @default(0)
|
||||
pemeriksaanRutinPct Int @default(0)
|
||||
giziBaikPct Int @default(0)
|
||||
targetStuntingPct Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
isActive Boolean @default(true)
|
||||
|
||||
@@ -9,6 +9,10 @@ const RingkasanKesehatan = new Elysia({ prefix: "/ringkasankesehatan", tags: ["K
|
||||
ibuHamilAkh: t.Number(),
|
||||
balitaTerdaftar: t.Number(),
|
||||
alertStunting: t.Number(),
|
||||
imunisasiLengkapPct: t.Number({ minimum: 0, maximum: 100 }),
|
||||
pemeriksaanRutinPct: t.Number({ minimum: 0, maximum: 100 }),
|
||||
giziBaikPct: t.Number({ minimum: 0, maximum: 100 }),
|
||||
targetStuntingPct: t.Number({ minimum: 0, maximum: 100 }),
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
@@ -18,6 +18,10 @@ async function ringkasanKesehatanUpdate(context: Context) {
|
||||
ibuHamilAkh: Number(body.ibuHamilAkh),
|
||||
balitaTerdaftar: Number(body.balitaTerdaftar),
|
||||
alertStunting: Number(body.alertStunting),
|
||||
imunisasiLengkapPct: Number(body.imunisasiLengkapPct),
|
||||
pemeriksaanRutinPct: Number(body.pemeriksaanRutinPct),
|
||||
giziBaikPct: Number(body.giziBaikPct),
|
||||
targetStuntingPct: Number(body.targetStuntingPct),
|
||||
},
|
||||
})
|
||||
: await prisma.ringkasanKesehatanDesa.create({
|
||||
@@ -25,6 +29,10 @@ async function ringkasanKesehatanUpdate(context: Context) {
|
||||
ibuHamilAkh: Number(body.ibuHamilAkh),
|
||||
balitaTerdaftar: Number(body.balitaTerdaftar),
|
||||
alertStunting: Number(body.alertStunting),
|
||||
imunisasiLengkapPct: Number(body.imunisasiLengkapPct),
|
||||
pemeriksaanRutinPct: Number(body.pemeriksaanRutinPct),
|
||||
giziBaikPct: Number(body.giziBaikPct),
|
||||
targetStuntingPct: Number(body.targetStuntingPct),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user