feat(kesehatan): refactor ringkasan kesehatan to auto-derived stats

- Add IbuHamil and Balita models to schema.prisma
- Implement IbuHamil and Balita API modules (CRUD)
- Implement /stats endpoint for aggregated health KPIs
- Refactor ringkasan-kesehatan admin page to dashboard-style UI
- Update sidebar with Ibu Hamil and Balita entries
- Fix type errors and icon exports in admin UI
- Bump version to 0.1.52
This commit is contained in:
2026-05-04 16:52:14 +08:00
parent fc6846f7a1
commit dccba1f82b
30 changed files with 2706 additions and 197 deletions

View File

@@ -0,0 +1,55 @@
import Elysia, { t } from "elysia";
import ibuHamilCreate from "./create";
import ibuHamilDelete from "./del";
import ibuHamilFindById from "./find-by-id";
import ibuHamilFindMany from "./find-many";
import ibuHamilUpdate from "./updt";
const IbuHamil = new Elysia({ prefix: "/ibuhamil", tags: ["Kesehatan/IbuHamil"] })
.post("/create", ibuHamilCreate, {
body: t.Object({
nama: t.String(),
nik: t.Optional(t.String()),
usiaKehamilan: t.Number({ minimum: 0 }),
hpht: t.Optional(t.String()),
taksiranLahir: t.Optional(t.String()),
alamat: t.Optional(t.String()),
noHp: t.Optional(t.String()),
catatan: t.Optional(t.String()),
posyanduId: t.Optional(t.String()),
status: t.Union([
t.Literal("AKTIF"),
t.Literal("MELAHIRKAN"),
t.Literal("KEGUGURAN"),
t.Literal("NONAKTIF"),
]),
}),
})
.get("/find-many", ibuHamilFindMany)
.delete("/del/:id", ibuHamilDelete)
.get("/:id", ibuHamilFindById)
.put(
"/:id",
ibuHamilUpdate,
{
body: t.Object({
nama: t.String(),
nik: t.Optional(t.String()),
usiaKehamilan: t.Number({ minimum: 0 }),
hpht: t.Optional(t.String()),
taksiranLahir: t.Optional(t.String()),
alamat: t.Optional(t.String()),
noHp: t.Optional(t.String()),
catatan: t.Optional(t.String()),
posyanduId: t.Optional(t.String()),
status: t.Union([
t.Literal("AKTIF"),
t.Literal("MELAHIRKAN"),
t.Literal("KEGUGURAN"),
t.Literal("NONAKTIF"),
]),
}),
}
);
export default IbuHamil;