Skip to content

INACT

INACT adalah aplikasi web untuk document control proyek engineering dan procurement proyek. Tim proyek mendaftarkan dokumennya di Master Document Register (MDR), me-routing dokumen untuk review dan approval, menerbitkan transmittal ke klien, dan menyimpan salinan yang sudah disetujui di Document Library. Versi 3 menambahkan modul procurement, cost control dan asset: RFQ, purchase order, invoice, budget, equipment.

Binari mengembangkan dan memelihara INACT untuk beberapa klien. Setiap klien menjalankan salinannya sendiri, yang disebut instance. Secara komersial INACT dijual sebagai tiga grup modul: DMS, inti pengelolaan dokumen yang dimiliki setiap klien; Procurement, yang hanya dinyalakan sebagian klien; dan Cost Control & Budgeting, yang berdiri di atas Procurement. Perbandingan instance menyebutkan siapa punya apa.

Stack

BahasaPHP 7.3 atau lebih baru, tanpa framework full-stack
HalamanTemplate PHP yang dirender di server, dhtmlxGrid untuk grid
DatabaseMySQL, PostgreSQL atau SQL Server. Satu code base, semua akses lewat PDO
SkemaMigrasi dan seed phinx di bawah db/
LibrarySlim 4, illuminate/database, PhpSpreadsheet, HTML2PDF dan TCPDF, PHPMailer, semuanya lewat Composer
Job latar belakangSkrip PHP di bawah cron/, dijalankan oleh crontab

Model fork

Repository master adalah binari-digital/inact, project Jira INA01. Repository ini juga di-mirror ke GitLab INARTS sebagai inact/inact-v3-master.

Setiap klien mendapat repository yang di-fork dari master. Fork-fork ini nyaris identik: 54 modul yang sama, library yang sama, seed yang sama. Seiring waktu fork-fork ini berbeda karena pekerjaan khusus klien masuk, tetapi perbedaannya ada di dalam fitur, misalnya sebuah config key, sebuah gate, atau handler yang diubah, bukan di modul utuh. Diukur pada 2026-09-05: per fork ada 93 sampai 178 file modul yang berbeda dari master, dari sekitar 2.900 file.

Akibatnya:

  • Perbaikan yang berguna secara umum dikerjakan di satu instance, lalu di-clone sebagai work item ke project Jira setiap sibling dan di-port repository per repository. Target port default adalah big five: master, Jadestone, Medco, JOTRE dan Prima Energy.
  • Jangan pernah berasumsi sebuah fitur ada di satu fork karena ada di fork lain. Grep sibling-nya dulu.
  • Setiap perubahan harus jalan di ketiga driver database, karena instance-instance memang berbeda.

Twin terenkripsi

Klien menerima build yang di-encode dengan ionCube. Setiap instance seperti itu punya repository *-encrypted yang menyimpan build ter-encode dan di-mirror ke GitLab INARTS. Build ter-encode tidak bisa jalan di Mac Apple silicon, jadi checkout tersebut hanya salinan referensi. Pengujian build ter-encode dilakukan di situs QA bersama.

Instance

Semua repository ada di bawah binari-digital di GitHub.

KlienJiraRepositoryTwin terenkripsiDatabase
Master, INACT v3INA01inactketiganya
JadestoneINA27ina-jadestoneina-jadestone-encryptedMySQL
MedcoINA28ina-medco-v3ina-medco-v3-encryptedSQL Server
JOTRE, Joint Operation Timas and RekindINA36ina-jotreina-jotre-encryptedMySQL
TimasINA14ina-timasina-timas-encryptedMySQL
TomoriINA12ina-tomoriina-tomori-encryptedSQL Server
KTP, KSO Timas PratiwiINA10ina-ktpMySQL

Kolom database adalah driver yang dikonfigurasi di .env masing-masing instance. Hosting, environment dan perbedaan kode ada di halaman tiap instance.

Tiga klien punya kata "Timas" di namanya

Timas (INA14), KTP (INA10) dan JOTRE (INA36) adalah tiga klien berbeda dengan tiga repository berbeda. Periksa project Jira sebelum menyentuh repository.

INA05, INACT Support, tidak terikat ke satu instance. Setiap item di sana berasal dari tiket support INARTS dan menyebutkan instance-nya di field INACT Instance. Karena ini defect di instance live, defect yang sama biasanya juga ada di fork sibling.

Instance lama juga ada, misalnya Berca, Prima Energy dan BWS. Instance-instance ini tidak masuk target port default dan baru dibuatkan halaman kalau ada pekerjaan yang menyentuhnya.

Ke mana selanjutnya

Baru di sini: Setup lokal, lalu tur codebase, lalu mengerjakan tiket. Ditugaskan ke klien: halaman instance-nya. Menyentuh sebuah modul: halamannya di bawah Modul, dan panduan kontribusi saat halamannya belum ada.