Sistem Manajemen Retensi Dokumen untuk PT ASABRI (Persero).
Mengelola siklus hidup arsip dari pencatatan, penyimpanan, retensi, hingga pemusnahan sesuai Jadwal Retensi Arsip (JRA).
- Arsitektur
- Tech Stack
- Fitur
- Prasyarat
- Instalasi & Setup
- Menjalankan Development Server
- Environment Variables
- Struktur Proyek
- Database Schema
- API Modules
- Scripts
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DRMS Monorepo β
β (pnpm + Turborepo) β
ββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ€
β β β
β apps/web β apps/api β
β (Next.js 14) β (NestJS 10) β
β - UI/Dashboard β - REST API β
β - TailwindCSS β - JWT Auth β
β - React Query β - LDAP Integration β
β - Zustand β - Swagger Docs β
β β - Cron Scheduler β
ββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ€
β β β
β packages/shared β packages/database β
β (Enums, Types, β (Prisma ORM) β
β Constants) β - Schema & Migrations β
β β - Seed Data β
ββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββ€
β Infrastructure β
β PostgreSQL 16 Β· Redis 7 Β· MinIO Β· Nginx β
β (Docker Compose) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Teknologi |
|---|---|
| Frontend | Next.js 14, React 18, TailwindCSS 3, Zustand, React Query, Recharts |
| Backend | NestJS 10, Passport (JWT + LDAP), Swagger/OpenAPI, node-cron |
| Database | PostgreSQL 16 via Prisma ORM 5 |
| Storage | MinIO (S3-compatible object storage) |
| Cache | Redis 7 via ioredis + cache-manager |
| Auth | LDAP/Active Directory + JWT |
| Monorepo | pnpm Workspaces + Turborepo |
| Infra | Docker Compose (Postgres, Redis, MinIO, Nginx) |
- CRUD Arsip Aktif β Input, edit, detail, dan daftar arsip aktif dengan kode klasifikasi JRA
- Arsip Inaktif β Daftar dan detail arsip yang sudah melewati masa retensi aktif
- Upload File Digital β Unggah scan dokumen ke MinIO dengan presigned URL
- Lokasi Penyimpanan Fisik β Pencatatan rak, laci, boks, dan folder
- Otomatis Transisi Status β Cron job harian memindahkan arsip AKTIF β INAKTIF β siap MUSNAH berdasarkan JRA
- Perpanjangan Retensi β Workflow pengajuan dan approval perpanjangan masa simpan
- Monitoring Retensi β Dashboard monitoring arsip yang mendekati batas retensi
- Usul Musnah β Workflow pengajuan pemusnahan dengan nota dinas
- Approval Berjenjang β Persetujuan oleh USER_APPROVAL + verifikasi oleh USER_SETUM
- Audit Trail β Semua aksi terekam lengkap di audit log
- Dashboard β Statistik dan grafik overview arsip (Recharts)
- Notifikasi β Pemberitahuan retensi berakhir, approval status, dll
- Audit Log β Pencatatan setiap perubahan data oleh siapa dan kapan
- LDAP Authentication β Login via Active Directory perusahaan
- Role-Based Access Control β 3 role:
USER,USER_APPROVAL,USER_SETUM - Master Data β Kode Klasifikasi (JRA) dan Unit Kerja (hierarkis)
- Node.js β₯ 20.0.0
- pnpm β₯ 8.0.0
- Docker & Docker Compose (untuk database, Redis, MinIO)
git clone https://github.com/<your-org>/drms.git
cd drmspnpm installcp .env.example .envEdit .env dan isi nilai yang sesuai (lihat Environment Variables).
pnpm docker:devIni akan menjalankan:
- PostgreSQL pada port
5433 - Redis pada port
6380 - MinIO pada port
9000(API) dan9001(Console)
# Generate Prisma Client
pnpm db:generate
# Jalankan migrasi
pnpm db:migrate:dev
# Seed data awal (Unit Kerja, Kode Klasifikasi, Admin user)
pnpm db:seed# Jalankan semua apps sekaligus (API + Web)
pnpm dev| Service | URL |
|---|---|
| Web (Next.js) | http://localhost:3000 |
| API (NestJS) | http://localhost:4000 |
| Swagger Docs | http://localhost:4000/api/docs |
| MinIO Console | http://localhost:9001 |
Semua environment variable didefinisikan di file .env pada root project.
Lihat .env.example untuk template lengkap.
| Variable | Deskripsi | Wajib |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | β |
JWT_SECRET |
Secret key untuk JWT token (min 32 karakter) | β |
JWT_EXPIRY |
Durasi token JWT (default: 8h) |
β |
LDAP_URL |
URL server Active Directory | β * |
LDAP_BIND_DN |
Distinguished Name service account | β * |
LDAP_BIND_CREDENTIALS |
Password service account LDAP | β * |
LDAP_SEARCH_BASE |
Base DN untuk pencarian user | β * |
MINIO_ACCESS_KEY |
Access key MinIO | β |
MINIO_SECRET_KEY |
Secret key MinIO | β |
MINIO_ENDPOINT |
Host MinIO (default: localhost) |
β |
MINIO_PORT |
Port MinIO (default: 9000) |
β |
MINIO_BUCKET_NAME |
Nama bucket (default: drms-arsip) |
β |
REDIS_HOST |
Host Redis (default: localhost) |
β |
REDIS_PORT |
Port Redis (default: 6380) |
β |
NEXT_PUBLIC_API_URL |
URL API untuk frontend | β |
NEXTAUTH_SECRET |
Secret untuk NextAuth.js | β |
NOTIF_HARI_SEBELUM_RETENSI |
Hari sebelum retensi untuk kirim notifikasi | β |
CRON_RETENSI_SCHEDULE |
Jadwal cron pengecekan retensi | β |
* LDAP variables wajib di production. Di
developmentmode, LDAP verification di-skip.
drms/
βββ apps/
β βββ api/ # NestJS Backend
β β βββ src/
β β βββ common/ # Guards, Decorators, Interceptors, Filters
β β βββ modules/
β β β βββ arsip/ # CRUD arsip aktif/inaktif/musnah
β β β βββ auth/ # Login LDAP + JWT
β β β βββ audit-log/ # Pencatatan audit trail
β β β βββ dashboard/ # Statistik & grafik
β β β βββ lokasi-simpan/ # Lokasi penyimpanan fisik
β β β βββ master/ # Kode Klasifikasi & Unit Kerja
β β β βββ notifikasi/ # Sistem notifikasi
β β β βββ perpanjangan-retensi/ # Workflow perpanjangan
β β β βββ retensi/ # Scheduler & logic retensi
β β β βββ storage/ # MinIO file upload/download
β β β βββ users/ # Manajemen user & role
β β β βββ usul-musnah/ # Workflow pemusnahan
β β βββ prisma/ # Prisma module (DI)
β β
β βββ web/ # Next.js Frontend
β βββ src/
β βββ app/
β β βββ (app)/ # Authenticated pages
β β β βββ arsip/ # Halaman arsip (aktif/inaktif/musnah)
β β β βββ audit-log/ # Halaman audit log
β β β βββ dashboard/ # Halaman dashboard
β β β βββ monitoring/ # Monitoring lokasi & retensi
β β β βββ notifikasi/ # Halaman notifikasi
β β β βββ perpanjangan/ # Halaman perpanjangan retensi
β β β βββ usul-musnah/ # Halaman usul musnah
β β βββ login/ # Halaman login
β βββ hooks/ # Custom React hooks
β βββ lib/ # API client, utilities
β βββ store/ # Zustand state management
β
βββ packages/
β βββ database/ # Prisma ORM package
β β βββ prisma/
β β βββ schema.prisma # Database schema
β β βββ migrations/ # SQL migrations
β β βββ seed/ # Seed data (Unit Kerja, Kode Klasifikasi, Admin)
β β
β βββ shared/ # Shared types & constants
β βββ src/
β βββ constants/ # File, Pagination, Retensi constants
β βββ enums/ # Role, Status, Kondisi enums
β
βββ docker/
β βββ docker-compose.yml # PostgreSQL, Redis, MinIO
β βββ nginx/nginx.conf # Reverse proxy config
β
βββ .env.example # Template environment variables
βββ package.json # Root workspace config
βββ pnpm-workspace.yaml # pnpm workspace definition
βββ turbo.json # Turborepo pipeline config
βββ tsconfig.base.json # Shared TypeScript config
Database menggunakan PostgreSQL dengan Prisma ORM. Model utama:
| Model | Deskripsi |
|---|---|
UnitKerja |
Unit organisasi (hierarkis, parent-child) |
KodeKlasifikasi |
Kode JRA dengan retensi aktif & inaktif (bulan) |
User |
User yang login via LDAP, memiliki role & unit kerja |
Arsip |
Dokumen arsip dengan status siklus hidup |
LokasiSimpan |
Lokasi fisik penyimpanan (rak, laci, boks, folder) |
UsulMusnah |
Pengajuan pemusnahan arsip (approval berjenjang) |
PerpanjanganRetensi |
Pengajuan perpanjangan masa retensi |
AuditLog |
Log perubahan data (siapa, kapan, apa) |
Notifikasi |
Notifikasi in-app untuk user |
AKTIF β INAKTIF β USUL_MUSNAH β MUSNAH
β PERMANEN
| Module | Endpoint Prefix | Deskripsi |
|---|---|---|
| Auth | /api/auth |
Login LDAP, JWT token, profile |
| Users | /api/users |
CRUD user, role management |
| Arsip | /api/arsip |
CRUD arsip, filter, pencarian |
| Retensi | /api/retensi |
Monitoring & scheduler retensi |
| Lokasi Simpan | /api/lokasi-simpan |
CRUD lokasi penyimpanan fisik |
| Usul Musnah | /api/usul-musnah |
Workflow pemusnahan arsip |
| Perpanjangan Retensi | /api/perpanjangan |
Workflow perpanjangan retensi |
| Storage | /api/storage |
Upload/download file via MinIO |
| Notifikasi | /api/notifikasi |
Daftar & read notifikasi |
| Dashboard | /api/dashboard |
Statistik arsip |
| Audit Log | /api/audit-log |
Daftar log aktivitas |
| Master | /api/master |
Kode Klasifikasi & Unit Kerja |
Dokumentasi API lengkap tersedia di Swagger UI: http://localhost:4000/api/docs
Semua script dijalankan dari root project:
# Development
pnpm dev # Jalankan API + Web secara paralel
pnpm build # Build semua packages
# Database
pnpm db:generate # Generate Prisma Client
pnpm db:migrate:dev # Jalankan migrasi (development)
pnpm db:migrate:deploy # Jalankan migrasi (production)
pnpm db:seed # Seed data awal
pnpm db:studio # Buka Prisma Studio (GUI)
pnpm db:reset # Reset database (β οΈ hapus semua data)
# Docker
pnpm docker:dev # Start infrastructure containers
pnpm docker:down # Stop infrastructure containers
# Quality
pnpm lint # Lint semua packages
pnpm test # Jalankan testsPrivate β Internal PT ASABRI (Persero)