Technical Standards
Coding by stack
- haer-platform-web / haer-claims-mobile (TypeScript) — hindari
any, preferunknown+ narrow. ESLint bersih (--max-warnings=0), Prettier. Komentar cuma untuk workaround/business logic kritis (pakai JSDoc, bukan inline). - haer-platform-api (TypeScript) — pola NestJS: module/controller/service/DTO. Entity TypeORM = source of truth schema. Auth & tenant resolve server-side.
- haer-platform-bgjobs (Go) — idiomatik Go,
go vetbersih, error di-wrap dengan konteks. - haer-connector (Python 3.12) —
ruffstrict (lint + format). FastAPI + SQLAlchemy 2 async.
Aturan lintas-stack: match konvensi lokal (conformance > selera), jangan nambah dependency tanpa approval, jangan refactor di luar scope ticket.
Testing — TDD
Tulis test sebelum implementasi: red → green → refactor.
- Tulis test yang reproduce bug / meng-encode behavior baru.
- Jalanin & liat gagal dulu. Test yang belum pernah keliatan gagal nggak membuktikan apa-apa.
- Implement kode minimum biar lolos.
- Refactor dengan test hijau.
- Unit-test logic murni; integration-test yang lintas boundary; E2E-test routing/auth/kontrak.
- Test harus meng-encode kenapa behavior penting, bukan cuma apa. Test yang nggak bisa gagal saat business logic berubah itu salah.
- Jangan disable/skip test buat ngehijauin PR.
API design
- Kontrak entity-based, ikuti konvensi OData / REST (HR standard).
- haer-platform-web: call backend dari browser lewat
apps/web/src/lib/api/api-client.ts+/api/proxy; dari server lewatbackend-server.ts. Kontrak lintas-package taruh dipackages/types. - Perubahan kontrak (endpoint/shape/auth berubah) wajib ditulis di PR “API contract impact” + kabarin konsumer (web & mobile). Lihat merge order.
Security
- Nggak ada secret/token/credential/URL production di source.
- Nggak ada PII di log/error/telemetry (email, nama, no. HP, NIK, nominal benefit/klaim).
- Auth: Zitadel (JWT). Verifikasi token + resolve tenant server-side; jangan percaya tenant/user/role dari client.
- Authz: enforce RBAC/RBP di action, bukan cuma route. Scope tenant/company di setiap query/mutation yang bisa bocor lintas-tenant.
- Audit log untuk CREATE / UPDATE / DELETE di data tenant.
- Validasi input di trust boundary (Server Action, route handler,
/api/proxy, handler backend).
UI (web & mobile)
Urutan reuse (web): export @haer/ui → komponen packages/ui/src/app-base/* →
komponen app-base baru. Pakai token semantik (tokens.css /
design-system.css) — nggak ada literal warna/spacing/tipografi/z-index kalau
token-nya ada. Handle state loading/empty/error/success eksplisit. Hormati
prefers-reduced-motion. Baca /DESIGN.md sebelum bikin/ubah UI.
Source of truth:
AGENTS.mdtiap repo +.ai/instructions/*(haer-platform-web).