Skip to content

ExRen/DRMS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DRMS β€” Document Retention Management System

Sistem Manajemen Retensi Dokumen untuk PT ASABRI (Persero).
Mengelola siklus hidup arsip dari pencatatan, penyimpanan, retensi, hingga pemusnahan sesuai Jadwal Retensi Arsip (JRA).


πŸ“‹ Daftar Isi


πŸ— Arsitektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     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)                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ›  Tech Stack

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)

✨ Fitur

Manajemen Arsip

  • 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

Retensi & Siklus Hidup

  • 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

Pemusnahan Arsip

  • 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

Sistem Pendukung

  • 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)

πŸ“¦ Prasyarat

  • Node.js β‰₯ 20.0.0
  • pnpm β‰₯ 8.0.0
  • Docker & Docker Compose (untuk database, Redis, MinIO)

πŸš€ Instalasi & Setup

1. Clone repository

git clone https://github.com/<your-org>/drms.git
cd drms

2. Install dependencies

pnpm install

3. Setup environment variables

cp .env.example .env

Edit .env dan isi nilai yang sesuai (lihat Environment Variables).

4. Jalankan infrastructure (Docker)

pnpm docker:dev

Ini akan menjalankan:

  • PostgreSQL pada port 5433
  • Redis pada port 6380
  • MinIO pada port 9000 (API) dan 9001 (Console)

5. Migrasi & seed database

# Generate Prisma Client
pnpm db:generate

# Jalankan migrasi
pnpm db:migrate:dev

# Seed data awal (Unit Kerja, Kode Klasifikasi, Admin user)
pnpm db:seed

πŸ’» Menjalankan Development Server

# 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

πŸ” Environment Variables

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 development mode, LDAP verification di-skip.


πŸ“ Struktur Proyek

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 Schema

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

Enum Status Arsip

AKTIF β†’ INAKTIF β†’ USUL_MUSNAH β†’ MUSNAH
                β†’ PERMANEN

πŸ”Œ API Modules

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


πŸ“œ Scripts

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 tests

πŸ“„ Lisensi

Private β€” Internal PT ASABRI (Persero)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages