Skip to content

Struktur Direktori ​

OpenSIMRS disimpan dalam satu monorepo: semua layanan backend, frontend, SDK bersama, migrasi database, skrip, dan dokumen berada di satu repositori sebagai folder biasa (tanpa git submodule). Halaman ini menjelaskan isi setiap folder dan pola folder di dalam satu layanan, agar Anda tahu di mana harus mencari atau menambah kode.

Gambaran umum ​

opensimrs/
├── admisi-service/              # layanan backend (Express), satu folder per domain
├── antrian-service/
├── auth-service/
├── ...                          # layanan *-service lainnya
├── penunjang-service/
├── program-puskesmas-service/
├── bpjs-service/                # integrasi BPJS (PCare, VClaim, Antrean)
├── satusehat-service/           # integrasi SATUSEHAT (FHIR Kemenkes)
├── studio-service/              # SIMRS Studio (opsional, mode pengembang)
├── frontend-service/            # aplikasi web Vue 3
├── packages/                    # SDK bersama @opensimrs/*
├── database/
│   ├── migrations/              # migrasi sequelize-cli (.cjs)
│   ├── data/                    # katalog-modul.json (sumber katalog Manajemen Modul)
│   ├── lib/                     # sinkron-katalog.cjs
│   ├── seeders/                 # seeder sequelize-cli
│   └── demo/                    # reset & seeder data demo 8 faskes
├── scripts/                     # skrip bantu: SDK, katalog, changelog, server tiruan
├── deploy/                      # deploy server & helpdesk
├── docs/                        # dokumen teknis di repo
├── changelog.d/                 # fragmen CHANGELOG per PR
├── schema.sql                   # struktur + data referensi nasional
├── docker-compose.yml           # satu-satunya berkas compose
├── package.json                 # skrip npm root (dev, db:*, sdk:refresh, ...)
└── install.sh / install.cmd     # installer lokal tanpa Docker

Layanan backend (*-service/) ​

Setiap layanan adalah aplikasi Node.js + Express yang berdiri sendiri, dengan package.json, .env, dan Dockerfile masing-masing. Semua layanan memakai awalan API /api/v3/... dan satu database PostgreSQL bersama.

FolderPortAwalan APITanggung jawab
admisi-service8081/api/v3/admisiData pasien, registrasi RJ/RI/IGD, penjamin pasien, monitoring kamar
antrian-service8082/api/v3/antrianJadwal dokter, layar antrian & kiosk TV, anjungan pasien mandiri
auth-service8083/api/v3/authLogin, JWT, pindah faskes (superadmin), cache izin di Redis
farmasi-service8084/api/v3/farmasiResep, telaah & penyerahan obat
igd-service8085/api/v3/pelayananPelayanan IGD
inventory-service8086/api/v3/inventoryGudang, pembelian ke supplier, distribusi ke depo, opname
lab-service8087/api/v3/labOrder, hasil & validasi laboratorium, bridging LIS
laporan-service8088/api/v3/laporanLaporan & dashboard
payment-service8089/api/v3/paymentTagihan, kasir, shift, kuitansi
rawat-inap-service8091/api/v3/ranapPelayanan rawat inap
rawat-jalan-service8092/api/v3/rajalAntrian poli (panggil, mulai periksa)
rekamedis-service8093/api/v3/rekam-medisRekam medis elektronik (MongoDB), tindakan, resume & discharge
setting-service8094/api/v3/settingProfil faskes, konfigurasi integrasi, Manajemen Modul
stok-farmasi-service8095/api/v3/stokStok depo farmasi
datamaster-service8096/api/v3/datamasterFaskes, lokasi, pegawai, praktisi, tarif, role, dan datamaster lain
satusehat-service8097/api/v3/satusehatIntegrasi SATUSEHAT
bpjs-service8098/api/v3/bpjsIntegrasi BPJS PCare & VClaim
penunjang-service8099/api/v3/penunjangFisioterapi, Radiologi, MCU, Patologi Anatomi, Mikrobiologi, dan modul penunjang lain
program-puskesmas-service8100/api/v3/program-puskesmasKIA/KB, imunisasi, MTBS, sasaran, UKM, laporan dinkes
studio-service8090/api/v3/studioSIMRS Studio, mode pengembang berbasis AI (opsional)

SIMRS Studio

studio-service hanya aktif bila STUDIO_PENGEMBANG=aktif dan superadmin menyalakan Mode Pengembang. Layanan ini dijalankan di mesin pengembang, bukan di server produksi. Lihat Pengantar SIMRS Studio.

Daftar port lengkap, termasuk PostgreSQL, MongoDB, Redis, gateway nginx, dan server tiruan untuk pengujian, ada di Gambaran Sistem.

Pola folder di dalam satu layanan ​

Ada dua pola yang dipakai di repo. Saat menambah kode, ikuti pola layanan yang sedang Anda ubah.

Pola berlapis (mayoritas layanan) ​

Layanan lama seperti admisi-service dan lab-service memisahkan kode per lapisan. Akses data memakai Sequelize lewat @opensimrs/model-sdk.

admisi-service/
├── src/
│   ├── app.js               # titik masuk Express
│   ├── routes/              # definisi rute (routes.js)
│   ├── controllers/         # menerima request, memanggil service, mengirim respons
│   ├── services/            # logika bisnis
│   ├── repositories/        # query database (Sequelize)
│   ├── validations/         # skema validasi input
│   ├── models/              # definisi model
│   ├── middlewares/         # autentikasi, otorisasi, konteks request, penanganan galat
│   ├── configurations/      # instans Sequelize, Redis, axios, multer
│   ├── exception/           # kelas galat (bad request, not found, unauthorized, ...)
│   ├── responses/           # format respons sukses/galat
│   ├── helper/              # utilitas (JWT, paginasi, ...)
│   ├── listeners/           # pendengar event
│   ├── constant/            # konstanta
│   ├── seeders/             # seeder lokal layanan
│   └── templates/           # templat dokumen
├── test/                    # uji unit
├── .env.example             # contoh variabel lingkungan (tanpa rahasia)
├── .npmrc                   # install-links=true (SDK dipasang sebagai salinan)
├── Dockerfile
└── package.json

Alur sebuah request: routes → middlewares → controllers → services → repositories → database. Respons API berbentuk { message, payload }. lab-service memakai pola yang sama dan menambah folder src/lis/ untuk bridging LIS.

Pola per modul (pg langsung) ​

Layanan yang lebih baru (penunjang-service, program-puskesmas-service, bpjs-service, dan satusehat-service) memakai paket pg langsung dengan berkas server.js, config.js, db.js, dan auth.js sendiri. penunjang-service dan program-puskesmas-service juga mengelompokkan kode per modul:

penunjang-service/
├── src/
│   ├── server.js            # titik masuk Express
│   ├── rute.js              # memasang router tiap modul di bawah /api/v3/penunjang
│   ├── config.js            # membaca .env
│   ├── db.js                # pool pg, helper query & transaksi
│   ├── auth.js              # verifikasi login (JWT)
│   ├── umum/                # helper bersama: izin, kunjungan, tagihan, penomoran, modul, respons
│   ├── radiologi/           # satu folder per modul: rute.js + berkas per sub-fitur
│   ├── fisioterapi/
│   ├── mcu/
│   ├── laundry/
│   └── ...
├── test/                    # uji unit (node --test)
└── package.json

Setiap folder modul punya rute.js sendiri dan berkas per sub-fitur (mis. radiologi/order.js, radiologi/jadwal.js, radiologi/hasil.js). Helper di src/umum/ dipakai lintas modul, misalnya izin.js untuk penegakan izin per aksi dan tagihan.js untuk mengirim tagihan ke payment-service.

Frontend (frontend-service/) ​

Aplikasi web Vue 3 + TypeScript + PrimeVue + Pinia + Tailwind, berjalan di port 5520.

frontend-service/
├── src/
│   ├── main.ts              # titik masuk aplikasi
│   ├── router/              # rute halaman
│   ├── views/               # halaman per modul (Admisi, RawatJalan, Laboratorium, ...)
│   ├── components/          # komponen yang dipakai ulang
│   ├── layouts/             # tata letak halaman
│   ├── stores/              # store Pinia per modul, termasuk modulFaskes.ts (gating modul/fitur)
│   ├── utils/               # utilitas, termasuk utils/pdf/bukaPdf.ts untuk cetak PDF
│   ├── types/               # tipe TypeScript
│   └── assets/              # gambar, logo, gaya
├── public/
├── vite.config.ts
├── tailwind.config.js
└── package.json

SDK bersama (packages/) ​

PaketIsi
@opensimrs/model-sdkDefinisi model dan repository bersama (Sequelize), termasuk helper audit
@opensimrs/authorization-sdkVerifikasi JWT HS256 dan middleware autentikasi
@opensimrs/permission-sdkPemeriksaan izin

Layanan memakai SDK lewat "@opensimrs/<sdk>": "file:../packages/<sdk>" dengan .npmrc berisi install-links=true. Akibatnya SDK terpasang sebagai salinan, bukan symlink.

Setelah mengubah SDK

Perubahan di packages/ baru terlihat oleh layanan setelah Anda menjalankan:

bash
npm run sdk:refresh                   # semua layanan
npm run sdk:refresh -- lab-service    # satu layanan saja

Naikkan juga versi di package.json SDK yang Anda ubah.

Database (database/) ​

Folder/berkasIsi
migrations/Migrasi sequelize-cli bernama YYYYMMDDHHMMSS-deskripsi.cjs (UTC), SQL mentah dan idempoten. Dijalankan dengan npm run db:migrate.
data/katalog-modul.jsonSumber katalog Manajemen Modul: segmen, modul, fitur, bagian, dan preset.
lib/sinkron-katalog.cjsMenyalin isi katalog-modul.json ke tabel ref_* dan preset_*. Dipanggil dari migrasi.
seeders/Seeder sequelize-cli, mis. npm run db:seed:admin.
demo/Skrip data demo: reset-demo.cjs, seed-demo.cjs, seed-transaksi.cjs, isi-master-penunjang.cjs, data faskes fiktif di katalog-demo.cjs, dan seeder datamaster per modul penunjang. Lihat Data Demo.
config.cjsKonfigurasi koneksi untuk sequelize-cli.

schema.sql di root berisi struktur database dan data referensi nasional (wilayah, ICD-10, ICD-9-CM, SNOMED, LOINC, odontogram), tanpa data faskes, pasien, atau pengguna. Penjelasan lengkap ada di Basis Data & Migrasi.

Skrip (scripts/) ​

BerkasFungsi
refresh-sdk.mjsnpm run sdk:refresh: memasang ulang SDK packages/ ke layanan
dokumen-katalog.mjsnpm run docs:katalog: membuat tabel katalog di docs/MANAJEMEN-MODUL.md; --cek dipakai CI
cek-integritas.mjsPemeriksaan integritas lintas berkas (rute katalog, menu, migrasi, fragmen changelog), dijalankan CI
gabung-changelog.mjsMenggabungkan fragmen changelog.d/ ke CHANGELOG.md saat rilis
lis-tiruan.mjs, lis-tiruan-mikro.mjs, lis-pa-tiruan.mjsServer LIS tiruan (laboratorium, mikrobiologi, patologi anatomi) untuk uji bridging
pacs-tiruan.mjs, utd-tiruan.mjs, hdis-tiruan.mjs, marketplace-tiruan.mjsServer tiruan PACS/RIS, UTD, HDIS, dan marketplace untuk pengujian
README-*.mdPetunjuk pemakaian tiap server tiruan

Deploy (deploy/) ​

FolderIsi
deploy/server/deploy.sh, docker-compose.server.yml, gateway.nginx.conf, dan .env.example untuk memasang OpenSIMRS di server dengan Docker atau Podman. Lihat Deployment.
deploy/helpdesk/Panduan dan berkas pendukung agen Helpdesk (OpenClaw): instruksi agen, contoh konfigurasi, skrip uji, gateway tiruan, dan perangkat evaluasi. Lihat Helpdesk.

Dokumen (docs/) dan changelog (changelog.d/) ​

docs/ berisi dokumen teknis yang ikut ditinjau di PR: petunjuk instalasi, lingkungan, Manajemen Modul, roadmap, konteks pengembangan, SIMRS Studio, spesifikasi hardware, dokumentasi API, serta subfolder kontributor/, panduan-pengguna/, rancangan/, testing/, dan audit/.

changelog.d/ berisi fragmen CHANGELOG, satu berkas per PR (<nama-branch>.md) atau per item SIMRS Studio (STD-<nomor>.md). Lihat Panduan Kontribusi › Fragmen changelog.

Berkas di root ​

BerkasFungsi
package.jsonSkrip npm root: dev, dev:core, dev:<layanan>, install:all, infra:up, stack:up, db:migrate, db:demo:*, sdk:refresh, docs:katalog
.env.exampleContoh .env root (koneksi database, SECRET_KEY, DEMO_PASSWORD), tanpa rahasia
docker-compose.ymlSatu-satunya berkas compose: infrastruktur dan seluruh tumpukan
schema.sqlStruktur database + data referensi nasional
mongo-init.jsMenyiapkan database MongoDB aplikasi, tanpa kredensial
.sequelizercKonfigurasi sequelize-cli (lokasi migrasi dan seeder)
install.sh, install.cmd, install.ps1Installer lokal tanpa Docker (macOS/Ubuntu/Debian dan Windows)
uninstall.sh, uninstall.cmd, uninstall.ps1Menghapus instalasi lokal
.github/Workflow CI (workflows/ci.yml) dan templat Pull Request
README.md, CONTRIBUTING.md, CHANGELOG.md, SECURITY.md, GOVERNANCE.md, CODE_OF_CONDUCT.md, COMMUNITY.md, LICENSEDokumen proyek dan komunitas

Langkah berikutnya ​

Dirilis dengan lisensi MIT. Kontak: dev@opensimrs.com