Skip to Content
Engineering HandbookTechnical Standards

Technical Standards

Coding by stack

  • haer-platform-web / haer-claims-mobile (TypeScript) — hindari any, prefer unknown + 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 vet bersih, error di-wrap dengan konteks.
  • haer-connector (Python 3.12) — ruff strict (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.

  1. Tulis test yang reproduce bug / meng-encode behavior baru.
  2. Jalanin & liat gagal dulu. Test yang belum pernah keliatan gagal nggak membuktikan apa-apa.
  3. Implement kode minimum biar lolos.
  4. 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 lewat backend-server.ts. Kontrak lintas-package taruh di packages/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.md tiap repo + .ai/instructions/* (haer-platform-web).