Tiga keluarga dokumen
| Keluarga | Flow UI | Jumlah tipe | AI |
|---|---|---|---|
| master | Master / bukti pelatihan | bukti-1 … bukti-8 | Sebagian (aiMode: assist) |
| trainer | Trainer BNSP | 15 dokumen (trainer-*) | Via section generator (4 gelombang) |
| branding | Branding trainer | 4 output teks | Per dokumen (aiMode: assist) |
apps/api/src/generation/document-definitions/registry.ts
Diagram pipeline
Mode AI per dokumen
aiMode | Arti |
|---|---|
none | 100% deterministik dari data WSP + canonical state |
assist | Base payload tetap; AI hanya mengisi field di enrichableFieldPaths |
exactFieldPaths tidak pernah diubah AI (nama trainer, kode unit, tanggal, dll.).
Multi-prompt enrichment (master)
Dokumen panjang (mis. bukti-1, bukti-6) tidak di-enrich sekali jadi. Mereka punyaenrichmentGroups: 2–4 prompt terpisah, masing-masing fokus ke bagian (intro, analisis, rekomendasi). Hasilnya di-merge path-by-path ke payload.
bukti-6 + bukti-6-deck berbagi enrichmentGroup yang sama — AI cukup jalan sekali untuk keduanya.
Trainer: dua lapisan AI
- Section generator — mengisi
masterJsonper section (organizer, curriculum, pretest, …) dalam 4 gelombang - Composer per dokumen — memetakan
masterJson→ payload tiap file trainer (sebagian besar deterministik dari KUK/unit)
Chat sebelum generate
| Prompt | File | Fungsi |
|---|---|---|
| Interviewer | apps/api/src/ai/prompts/interviewer.prompt.ts | Tanya fakta inti (trainer/master/branding) |
| Extractor | apps/api/src/ai/prompts/extractor.prompt.ts | Parse jawaban user → field terstruktur |