Skip to main content
Ada dua jenis sertifikat: PDF TrainerHub (otomatis setelah kursus selesai) dan BNSP (upload file resmi).

Tipe sertifikat

TipeCara dapatFormat
TrainerHubProgress kursus 100% → generate di UIPDF + nomor + QR
BNSPAdmin/peserta uploadPDF/image di R2

Alur TrainerHub (otomatis)

Syarat generate

SyaratError code
User punya profil pesertaPESERTA_NOT_FOUND
Progress kursus 100%COURSE_NOT_COMPLETE
Belum ada sertifikat kursus inireturn existing
Request dari workspace contextWORKSPACE_REQUIRED
Kode: apps/api/src/certificates/certificate.service.ts

Nomor sertifikat

Format dibangun dari tahun + judul kursus + urutan tahun itu:
buildCertificateNumber({ year, courseTitle, sequence })
QR mengarah ke: {FRONTEND_URL}/validate/{certificateNumber}

Validasi publik

Tanpa login:
GET /api/certificates/validate/:certificateNumber
Mengembalikan data peserta, kursus, tanggal selesai — untuk verifikasi pihak ketiga.

API peserta

EndpointFungsi
GET /sertifikat/meList sertifikat workspace (scoped)
GET /certificates/meLegacy list by user
GET /certificates/eligible-coursesKursus + progress + sudah punya sertifikat?
POST /certificates/generate/:courseIdGenerate PDF (butuh workspace header)
Frontend route: /:slug/sertifikatSertifikat.tsx

BNSP upload

Admin atau peserta bisa upload sertifikat BNSP resmi:
  • File disimpan di R2 path peserta/{id}/sertifikat/
  • Field opsional: nomorSertifikat, lsp
  • Satu record BNSP per peserta (update jika sudah ada)

Sequence generate

Halaman terkait