MDR
Tab pertama Master Doc. Register: grid register, toolbar-nya, dan tombol-tombol yang menggerakkan dokumen (Import MDR, Upload, Upload Transmittal, Generate Transmittal).

Satu baris per entri ts_documents_master, dikelompokkan per discipline secara default. Kolomnya adalah template MDR project (getProjectSelectedColumn, dipelihara di Project Register), itu sebabnya dua instance menampilkan set kolom yang berbeda. Project KTP menampilkan ID, Document Number, Title, Vendor Codes, Last Revision, Project Code, Discipline, Document Type, Area Number, Route Type, Document Size, Contract / PO Number, Weight Factor, Document Category, Previous Document Number, Remarks, Document Sub-Type dan Drawing Category.
| Tombol | Yang dibuka | Dijelaskan di |
|---|---|---|
| Upload | dialog Upload File: pilih file, lalu langkah upload option mencocokkan tiap file ke baris MDR dan membuat revisi library serta routing-nya | Upload) |
| Delete | menghapus baris MDR terpilih, baris matriksnya dan baris ts_mdr_progress-nya | admin saja |
| Import MDR | dialog Import MDR from Excel Template: download template, upload yang sudah diisi | Import MDR) |
| Replace MDR | dialog yang sama dalam mode replace: baris yang sudah ada diperbarui, tidak diduplikasi | Import MDR) |
| Upload Transmittal | alur return di instance berbasis audit | Upload Transmittal) |
| Search | dialog Search MDR Data, basic dan advanced | di bawah |
| Sort | dialog sort pada kolom template | |
| Export Excel | cmd=exportXLS, grid sebagai workbook | |
dialog Select Column, lalu grid dicetak dengan kolom yang dicentang (cmd=printgrid) | ||
| Ungroup, Regroup By | cmd=regroup: mengubah pengelompokan | di bawah |


Search
cmd=search membuka documents_master_search.htm dengan dua tab. Basic Search satu kotak teks yang dicocokkan ke nomor dan judul dokumen di folder saat ini, atau semua folder kalau Search in all folders dicentang. Advance Search baris field / operator / nilai pada kolom template, plus sort. Hasilnya menggantikan grid sampai Refresh.


Print dan Regroup


Daftar Regroup By berisi Discipline, Document Type dan kolom-kolom yang dinyalakan instance: enable_doc_category, enable_system_code, enable_doc_classification, enable_func_code dan enable_contract_po_number masing-masing menambah satu (cmd=getRegroupOption). Pilihannya disimpan per user dan project di ts_grouping_parameter, jadi grid terbuka dengan cara yang sama lain kali.
Import MDR
Ringkasan
Import MDR membuat massal grid perencanaan MDR (ts_documents_master) dan matriks routing (ts_matrix_rout) dari file Excel (.xlsx). Ini import bertahap dua fase dengan pratinjau sel merah, memakai $pdo, dan di sebagian besar fork mendukung beberapa tipe matriks.
Posisinya di alur kerja
Import MDR (ini) → ts_documents_master (grid) + ts_matrix_rout (matriks)
↓
Upload (file) → ts_documents (register) + ts_routing ← lihat Upload
↓
Upload Transmittal → mencap nomor submission ke register / routing ← lihat Upload TransmittalAlur pengguna
- Documents Master, Import MDR (
import_act, privilege edit). - Pilih MDR atau VDR (
dm_is_vdr), pilih.xlsx, Upload. - Grid pratinjau tampil. Sel yang tidak valid disorot merah dan memblokir commit sampai diperbaiki.
- Konfirmasi untuk meng-commit baris-baris ke MDR.
Cara kerjanya
- Fase 1, staging dan parse:
act=importexceldidocuments_master_handler_post.phpmemanggilproceedTempMDRImport(), lalusaveTemporaryDocs()didocuments_master.inc.php. Ia membaca file dengan PhpSpreadsheet, mengambil baris data pertama darits_projects.mdr_row_as_value_start, menyelesaikan pemetaan kolom-ke-field darits_mdr_template_settingyang di-join dengants_mdr_column, dan menyimpan setiap baris plus matriksnya sebagai JSON kets_docmaster_metadata_temp. - Fase 2, validasi (pratinjau): nomor dokumen duplikat, format tanggal (
dd-Mon-yy), format plan date (dd-mm-yyyy), originator dits_company, kombinasi sub-discipline dan discipline. - Fase 3, commit:
proceedSaveTempdata()memanggilinsertMetadataToDocumentsMaster(), yang menulists_documents_masterlewat modelMdr(model/mdr.php), daninsertMatrixData()menulists_matrix_rout.
Kedua fungsi staging dan model Mdr ada di kelima fork.
Kontrak data dan template
Tata letak kolom ditentukan data per project, bukan hard-coded: mdr_row_as_value_start plus ts_mdr_template_setting dan ts_mdr_column menentukan kolom Excel mana yang dipetakan ke field ts_documents_master mana, dan di mana blok user-matrix dimulai. Kode action matriks dipetakan ke sequence di insertMatrixData(): R → sequence 1, L → sequence 2, A → sequence 3, selainnya → 4.
Urutan sheet adalah kolom metadata, lalu blok User Matrix (hanya tipe doc_number), lalu kolom Plan Date.
Tipe matriks
getProjectMdrMatrixType() membaca tipe matriks project: doc_number, issued_status atau transmission_type. Master, Jadestone, Medco dan JOTRE punya fungsi ini. Timas tidak; ia hanya mengenal satu tipe matriks.
Kolom Plan Date (INA01-809, hanya master)
Template membawa satu kolom Plan Date <ISSUED_CODE> per baris di ts_issued_status untuk project itu, baris header kedua DD-MM-YYYY, ditulis setelah blok User Matrix oleh mdrSettingDownload(). Import menyimpan nilainya di ts_mdr_progress.progress_content pada ['two'][<issued_code>]['plan_date'] sebagai Y-m-d, field yang sama yang ditulis Edit Progress. Ditulis dan dibaca untuk setiap tipe matriks: plan date adalah per Issued Status dan tidak ada hubungannya dengan tipe matriks.
- Dicari lewat teks header, tidak pernah dengan menghitung kolom.
saveTemporaryDocs()mencocokkan baris 1 denganPlan Date <code>dan hanya menerima kode yang benar-benar dimiliki project, lalu menyimpan setiap nilai di bawah keyplan_date_<ISSUED_CODE>ditemp_data. Metadata tetap dikunci dengan huruf kolom. Grid pratinjau dan commit sama-sama membacanya kembali per kode lewatextractPlanDatesFromTempData(). - Kenapa bukan hitungan kolom. Menghitung mundur dari kolom terakhir rusak kalau file diunduh sebelum sebuah Issued Status ditambah atau dihapus. Menghitung maju dengan
count(get_doc_column_master2()) - 1rusak karena fungsi itu memfilterts_mdr_template_setting.is_import = 1sementara penulis template (mdrSettingList()) tidak. Di data dev INA01 itu selisih dua kolom. - Sel kosong diimpor tanpa masalah dan menyimpan plan date kosong. File tanpa kolom Plan Date membiarkan apa pun yang sudah tersimpan tidak tersentuh, jadi file template lama tetap bisa diimpor.
- Pemeriksaan format terjadi di
cmd=temporaryMetadataValidation(d-m-Y), dilaporkan di bucketinvalidDateCellList2. Urutan cabang bucket itu ditemplates/tracking_v2/documents_master_browse.htmharus sama dengan urutan cabang yang memilih$data["msg"], atau sel merah dan pesannya tidak sinkron.
Hanya master yang punya ini
extractPlanDatesFromTempData() hanya ada di master. Empat fork lain tidak mengimpor plan date dari template MDR.
Tabel database yang terpengaruh
| Tabel | Operasi | Catatan |
|---|---|---|
ts_docmaster_metadata_temp | insert / select / delete | staging (baris plus matriks sebagai JSON) |
ts_documents_master | insert (lewat Mdr) | satu baris per baris spreadsheet; dm_is_vdr dari opsi |
ts_matrix_rout | insert | matriks reviewer per dokumen |
ts_mdr_progress | insert / update | weight factor plus plan date per Issued Status (plan date: hanya master) |
ts_projects, ts_mdr_template_setting, ts_mdr_column | select | baris awal plus pemetaan kolom |
ts_issued_status, ts_progress_gate | select | kolom Plan Date plus kerangka progress |
ts_company, ts_sub_discipline, ts_docdiscipline, ts_org_person | select | validasi plus pencarian reviewer |
Hal yang perlu diwaspadai
- Tata letak ditentukan data.
mdr_row_as_value_startatau pemetaan yang salah diam-diam membaca header sebagai data. Mulai dari template khusus project. - Pencarian nama reviewer gagal diam-diam. Nama matriks yang tidak terselesaikan menghasilkan
person_idkosong dan entri matriks itu dilewati, meninggalkan celah routing yang baru terlihat di Upload). - Satu import staging per pengguna dan project. Memulai import baru menimpa yang belum dikonfirmasi.
- Blok User Matrix harus berakhir di header merge-nya, bukan di
getHighestColumn(), karena sheet tidak lagi berakhir dengan matriks.saveTemporaryDocs()membaca akhir merge untukUser Matrixdan hanya menyimpan huruf kolomnya. Memakai alamat sel mentah (CE1) membiarkan digit baris di rentang per baris, jadiCE1.4menjadiCE14dan pembacaan melebar ke ribuan baris, bukan satu. Itu INA27-236, error 504 pada file 2.600 baris. File kecil terlihat baik-baik saja, jadi hanya file besar yang menangkapnya.
Perbedaan antar instance (Import MDR)
Diperiksa pada 2026-09-06.
| Instance | Perbedaan |
|---|---|
| Timas | Tidak ada getProjectMdrMatrixType(); hanya satu tipe matriks. |
| Jadestone, Medco, JOTRE, Timas | Tidak ada kolom Plan Date di template dan tidak ada extractPlanDatesFromTempData(). |
Upload
Ringkasan
Upload menerima file dokumen, membuat baris register (ts_documents) untuk PDF, menyimpan filenya, dan memulai routing dari matriks project. Mesinnya memakai $pdo, dengan gating feature flag dan pemetaan otomatis referensi DMS. UI-nya sederhana: dialog opsi lama (Convert / Modify Routing / Force Upload) sudah hilang di master, dan watermark PDF dinonaktifkan. Ia juga membawa dua bug yang diketahui, lihat Hal yang perlu diwaspadai.
Prasyarat
1. Import MDR / Add → ts_documents_master (grid perencanaan) ← Import MDR
2. Upload (ini) → ts_documents (register) + ts_routing ← membuat + me-routing
3. Upload Transmittal → mencap nomor submission ke baris-baris ituNomor dokumen harus ada di ts_documents_master, dan matriks routing ts_matrix_rout harus terisi. Kalau tidak, Upload menolak filenya ("User matrix empty").
Alur pengguna (master)
- Documents Master, Upload (
upload_act, privilegeupload). - Jendela Upload File terbuka langsung. Pilih Issued Status (disembunyikan kalau skema nama file project tidak punya
issued_code), tambahkan file di pengunggah multi-file, Start Upload. - Sebuah prompt konfirmasi bertanya "Whether originator of document is correct?" sebelum file naik.
- Setiap file divalidasi, disimpan, dan, untuk PDF, didaftarkan dan di-routing. Hasilnya dikembalikan sebagai JSON per file.
Nama file penting. Nomor dokumen, revisi dan judul diambil dari nama file sesuai ts_file_name_setting. Nomor yang tidak cocok atau nama yang salah bentuk ditolak.
Yang disederhanakan atau dihapus
Di documents_master_browse.htm master, tombol upload_act langsung memanggil multiuploadOptionProcess(); baris yang membuka dialog lama, // multiuploadOption();, dikomentari. Jadi tiga pilihan v2 tidak ditawarkan lagi:
| Opsi lama | Yang dilakukannya | Status di master |
|---|---|---|
Convert Document(s) (valConvert) | Menjalankan pdf_converter.php untuk mendeteksi halaman PDF berukuran besar, mengantrekannya di ts_routconvert_queue, dan menahan dokumen dari inbox sampai dikonversi. | Tidak bisa dipilih. Handler masih punya if ($_GET['valConvert']==1) include "pdf_converter.php", tetapi parameternya tidak pernah dikirim, jadi Convert adalah kode mati. |
Modify Routing(s) (valModify) | Menyimpan routing baru ke ts_routmaster_temp supaya pengunggah bisa meninjaunya sebelum email notifikasi terkirim. | Tidak bisa dipilih. Tombol toolbar upload_routing dan modify_routing_process di dalam showUpload dikomentari. Routing mengikuti jalur "kirim sekarang". |
Force Upload (forceStatus) | Melewati penjaga next-expected-submission dan previous-revision-returned untuk upload di luar urutan. | Tidak bisa dipilih sebagai toggle. Penjaga next-expected diatur oleh flag config enable_next_issue_code. |
Juga dihapus: watermark PDF SPRD / VOID. Rutin yang mencap PDF superseded atau void dengan deskripsi issued-nya saat upload tidak punya baris aktif tersisa di handler di kelima fork. Flag enable_watermark ada di seed master, Jadestone, Medco dan JOTRE, default 0, dan handler upload tidak membacanya.
Medco menghidupkan dialognya lagi, dengan satu opsi
INA28-229 (2026-07-12) mengaktifkan kembali dialog Upload Option di Medco dengan Force Upload saja. upload_act di sana menjalankan checkPerms('upload', multiuploadOption), dan multiuploadOptionProcess() memanggil showUpload(0, 0, 0, valForce). Convert dan Modify Routing tetap tidak tersedia.
Jadestone tidak menanyakan originator
Form upload-nya mengeset showOriginator: false dengan catatan "originator is not asked per file anymore, it is always the logged in user". Empat fork lain menampilkan prompt itu.
Cara kerjanya
Handler documents_master_multiupload_upload.php memvalidasi nama file, mencari baris MDR, memeriksa matriks, memasukkan ts_documents, menyimpan file (ts_file_explorer, ts_map_documents_library, ts_map_doc_file), dan membuat routing (ts_routing, ts_map_routing_file, ts_map_routing_to) dengan tanggal jatuh tempo. Issued Status menentukan durasi review, pemeriksaan next-expected-submission, dan metadata issued yang disimpan di record. Nilai referensi DMS disalin ke ts_map_routing_file lewat MODULE_REFERENCE_TABLE_CONFIG dan getAllDmsRefDataByRelatedTable() di tracking_function.inc.php, di kelima fork.
Folder library: hanya Deliverables saat upload
Di v2, Upload menurunkan folder library bersarang dari metadata MDR dokumen lewat getLibCodeAutoGenerateFromDocMaster(), dibentuk oleh ts_projects.project_east_java (hierarki Medco / Ophir / East Java).
Upload tidak melakukan itu lagi. Fungsi itu tidak dirujuk lagi dari handler upload sama sekali, di kelima fork. Sebagai gantinya dokumen yang diunggah diarsipkan ke satu folder tetap, folder Deliverables project, lewat getLibCodeDeliverablesByProjectCode(). Penempatan bersarang berdasarkan metadata MDR terjadi kemudian, saat auto-publish routing (sign-off approver), bukan saat upload. Lihat Auto Folder Creation dan Sign Off.
Timas mengarsipkan secara berbeda
Handler upload Timas tidak punya getLibCodeDeliverablesByProjectCode() dan tidak membaca enable_autopublish. Ia mencari folder project langsung dari ts_doc_library. Baca handler-nya sebelum berasumsi perilaku Deliverables berlaku di sana.
Aturan penempatan D
Kalau matriks berisi baris D (Transmit / DocCon), handler menegakkan penempatannya dan menunda auto-publish. Detail di Action Indicated. Timas tidak punya pemeriksaan docconFound.
Tabel database yang terpengaruh
| Tabel | Operasi |
|---|---|
ts_documents_master | select, update (dm_revision) |
ts_documents | insert (PDF), update (doc_due_date) |
ts_file_explorer, ts_map_documents_library, ts_map_doc_file | insert |
ts_matrix_rout | select (matriks) |
ts_routing, ts_map_routing_file, ts_map_routing_to | insert |
Hal yang perlu diwaspadai
matrix_doc_no='4'hard-coded. Masih ada di kelima fork. Query penghitung action memfilterWHERE tmr.matrix_doc_no='4', sebuah literal, jadi ia selalu menghitung action matriks dokumen nomor 4, bukan dokumen yang diunggah.is_trash='y'hard-coded. Masih ada di kelima fork. Insertts_map_routing_filemengikat$is_trash="y", menandai setiap tautan file routing sebagai sampah.- Matriks harus ada atau upload gagal. Jalankan Import MDR) dulu.
- Rollback manual, bukan transaksional. Error di tengah jalan bisa meninggalkan data yatim.
- Kode mati yang terlihat seperti fitur. Convert dan Modify Routing masih punya kode backend tetapi tidak ada yang mengirim parameternya.
cron/cron_issue_staging_oversize.phpada tetapi merupakan job notifikasi ukuran file. Ia bukan pengganti langkah Convert yang dihapus.
Perbedaan antar instance (Upload)
Diperiksa pada 2026-09-06.
| Instance | Perbedaan |
|---|---|
| Medco | Dialog Upload Option diaktifkan kembali dengan Force Upload saja (INA28-229). forceStatus dibaca dua kali di handler. |
| Jadestone | Tidak ada prompt konfirmasi originator. Originator selalu pengguna yang login. |
| Timas | Tidak ada aturan docconFound, tidak ada getLibCodeDeliverablesByProjectCode(), tidak ada pembacaan enable_autopublish di handler upload. |
| JOTRE | Sama dengan master di setiap hal yang diperiksa. |
Upload Transmittal
Ringkasan
Upload Transmittal mengimpor Transmittal Sheet (.xlsx) yang sudah diisi dan mencap dokumen register yang cocok dengan nomor submission dan referensi dokumen sebelumnya. Kontrak tata letak dan posisi selnya adalah yang selalu dipakai INACT. Di master importer ini memakai $pdo, memeriksa tipe file, dan tidak lagi memperbarui remarks routing.
Ini bukan importer umum: ia hanya memperbarui baris ts_documents yang sudah ada, dicocokkan tepat pada doc_number plus doc_rev.
Prasyarat dan urutan
1. Import MDR / Add → ts_documents_master
2. Upload (file) → ts_documents (register) + ts_routing
3. Upload Transmittal → mencap nomor submission / prev-doc ke baris-baris ituMengunggah transmittal sebelum langkah 2 tidak mencocokkan baris apa pun.
Alur pengguna
- Documents Master, Upload Transmittal (
import_transmittal_act, privilege edit). - Pilih Transmittal Sheet
.xlsxyang sudah diisi, Save. - Saat berhasil server merespons
Success.; nama yang duplikat meresponsTransmittal <name> already exist.
Cara kerjanya
Handler act=importtransmittal di documents_master_handler_post.php:
- Pemeriksaan tipe file. File non-Excel ditolak dengan "Invalid file type. Please upload an Excel file."
- Pemeriksaan duplikat. Nama file tanpa ekstensi dibandingkan dengan
ts_correspondence.corr_doc_number. - Simpan file.
uploadTransmittal()menulisnya kedocUpload/correspondence/. - Parse Excel dengan PHPExcel, library legacy. Sheet pertama ke array.
- Baca sel header. H9 nomor transmittal, H7 kontrak, B7 company pengirim.
- Insert
ts_correspondence(corrkind_id=1).library_codedicari dari folder default transmittal masuk, bukan1.1hard-coded yang lama. - Catat file.
ts_file_explorer,ts_map_corr_file. - Loop baris dokumen dari baris 25, berhenti di kolom A kosong pertama. Untuk setiap baris, update
ts_documents(doc_submission_number,doc_number_prev)WHERE doc_number=<A> AND doc_rev=<F>. Di master, Jadestone dan Medco update lama kets_routing.rout_remarksdikomentari. - Selesaikan pengirim.
ts_company.company_desc LIKE '%<from>%'.
Kontrak data dan template
| Sel | Arti |
|---|---|
| H9 | Transmittal Number |
| H7 | Contract Number |
| B7 | From, company pengirim |
Tabel dokumen: header baris 24, data dari baris 25. A = Document Number, F = Rev, N = dokumen sebelumnya (doc_number_prev), P = Remarks.
Yang terjadi pada baris yang tidak cocok
Di master, UPDATE per baris adalah prepared statement dan import dibatalkan dengan "Failed to map transmittal file5." hanya kalau statement-nya gagal. Baris yang cocok dengan nol dokumen lolos diam-diam. Medco menambahkan pemeriksaan rowCount() == 0 dan gagal secara eksplisit pada baris yang tidak cocok; apakah satu dokumen yang tidak cocok membatalkan seluruh import Medco belum dipastikan.
Tabel database yang terpengaruh
| Tabel | Operasi | Catatan |
|---|---|---|
ts_correspondence | insert, update | header (corrkind_id=1); company_id setelah pencarian |
ts_file_explorer, ts_map_corr_file | insert | file tersimpan plus tautan |
ts_documents | update | doc_submission_number, doc_number_prev (cocokkan doc_number plus doc_rev) |
ts_routing | update, hanya JOTRE dan Timas | rout_remarks dari kolom P |
ts_company | select | penyelesaian pengirim |
Hal yang perlu diwaspadai
- Butuh kecocokan revisi persis. Spasi di akhir atau format berbeda di kolom F berarti barisnya diam-diam tidak diperbarui.
- Hanya update. Dokumen yang tidak ada di register tidak dibuat.
- Remarks tidak diimpor di master. Kolom P di-parse tetapi tidak disimpan di mana pun. JOTRE dan Timas masih menulisnya ke
ts_routing.rout_remarks, yang punya catatan ketidakcocokan kolom antar versi template. - Masih PHPExcel di sini, sementara Import MDR) memakai PhpSpreadsheet.
- SQL yang sebagian besar tidak di-escape pada nilai sel di bagian handler yang lama. Perlakukan unggahan sebagai input tepercaya.
Perbedaan antar instance (Upload Transmittal)
Diperiksa pada 2026-09-06.
| Instance | Perbedaan |
|---|---|
| JOTRE | Update ts_routing.rout_remarks aktif. Kolom P disimpan. |
| Timas | Sama dengan JOTRE. |
| Medco | Kegagalan eksplisit pada baris yang tidak cocok (rowCount() == 0). |
Master dan Jadestone sama.
Generate Transmittal
Tidak aktif. Tidak bisa dijangkau dari UI di semua big five.
Tombol toolbar-nya dikomentari; logika backend-nya utuh. Diperiksa 2026-09-06: tombol yang dikomentari, handler cmd=generateTransmittal, file prototipe yang dihapus dan typo Content-Type identik di kelima fork.
Ringkasan
Generate Transmittal menghasilkan Transmittal Sheet (.xlsx) terisi untuk sebuah dokumen MDR yang dipilih dengan menggabungkannya ke template Excel per company, lalu mengalirkannya sebagai unduhan. Ia adalah penghasil sheet yang dimaksudkan untuk dipakai Upload Transmittal). Jangan jelaskan ke pengguna bahwa fitur ini tersedia.
Kenapa tidak muncul di UI
Di documents_master_header.inc.php, perhatikan // di awal:
// $tpl->Assign('toolbar_generate_transmittal','procBarMDR.addButton("generate_transmittal_act", 13, "Generate Transmittal", ...);');Variabel template tidak pernah di-assign, jadi tombolnya tidak pernah dirender. Dispatch dan rute backend-nya ada tetapi tidak ada yang memicunya.
Cara kerjanya kalau diaktifkan
cmd=generateTransmittal di documents_master_handler_form.php mencari dokumen di ts_documents_master, mengambil template originator dari ts_company_transmittal (comp_file_name, di docUpload/routing/), memuatnya dengan PHPExcel, mengisi sel-sel tetap, menulis satu baris dokumen, dan mengalirkan TRANSMITTAL <date>.xlsx.
Kontrak data dan template
.xlsx per company, diunggah lewat Reference, Company. Sel: G6 project, G9 kontraktor (To), G16 attention, G12 alamat, O48 issued-by, S46 tanggal, dan baris dokumen di baris 53 (B53 nomor item, C53 nomor dokumen, L53 judul). Hanya membaca, tidak menulis.
Cacat yang diketahui di kode yang tidak aktif ini
- Hanya satu dokumen. Tidak ada loop; satu dokumen per sheet.
- Typo Content-Type. Header respons mengirim
pplication/...bukanapplication/.... - Prototipe yatim
documents_master_create_transmittal.phpdari v2 sudah dihapus di setiap fork. - Class OOP
Transmittal(HTML2PDF) ada untuk fitur Return di routing dan tidak terhubung ke generator ini.
Cara mengaktifkan kembali
Buka komentar tombolnya, pastikan setiap originator punya template di ts_company_transmittal dan docUpload/routing/, perbaiki typo Content-Type, dan uji siklus bolak-baliknya lewat Upload Transmittal). Perlakukan sebagai perubahan kode sungguhan dengan work item.
Perbedaan antar instance (Generate Transmittal)
Diperiksa pada 2026-09-06. Tidak ada. Kelima fork identik di setiap hal di atas.
Related
- Master Doc. Register: ikhtisar layar.
- Distribution Matrix dan Progress: dua tab lainnya.