Skip to content

Inbox

Inbox adalah tab utama: routing di mana Anda penerima dan routing ada di inbox Anda, dikelompokkan menurut action yang sudah Anda ambil (Open, re-Route, Return, Sign Off, Closed Without Action). Di sinilah Anda membuka routing dan merespons.

Document Routing, Inbox tab: the routings waiting for this user, grouped by the action they have taken
Document Routing, Inbox tab: the routings waiting for this user, grouped by the action they have taken · click to enlarge

Toolbar: New, Response, Refresh, Search, Print, Copy/Forward, Sign Off (multi), Re-route (multi), Group Routing, Download, Archive, Routing Slip, Custom Header, External Transmission, Return Mailbox, Return.

Menjawab routing

Response di Inbox membuka slip yang sama dengan blok response untuk baris user: action yang diambil (Sign Off, Return, re-Route, Route as New, Closed Without Action), result code dan komentar, serta file ber-comment. Apa yang dilakukan tiap action, dan field mana yang ditampilkan, ada di Sign Off), Return) dan Action Indicated). Multi sign-off dan re-route di toolbar Inbox menerapkan satu jawaban ke beberapa baris terpilih.

Sign Off

Ringkasan

Sign Off mencatat respons seorang penerima routing dan memajukan alur kerja. Perilakunya berbeda menurut Action Indicated penanda tangan (Reviewer, Information, Leader, Approver), dari "catat komentar dan lanjut" sampai "finalisasi dokumen dan publikasikan salinan yang sudah direview". Model intinya tidak berubah sejak v2; v3 memodernisasi pipa di sekitarnya: PDO, feature flag, tampilan multi-project, publikasi asinkron.

Dua jalan masuk

JalurCaraAction server
SingleInbox, Response, Sign Offact=resp dengan route_action=4
MultipleInbox, pilih baris, Sign Off, dialogact=multiplesignoff

Multiple Sign Off bekerja lagi di master

INA01-866 menulis ulang handler act=multiplesignoff di atas $pdo dan memindahkan pekerjaan lambatnya ke cron/cron_multiple_signoff_v2.php. Sekarang ia mengikuti sign off tunggal per peran. Jadestone dan Medco punya versi mereka sendiri yang bekerja. JOTRE dan Prima Energy masih membawa handler legacy, dan tombol Sign Off di Inbox mereka dikomentari. Halaman lengkap: Multiple Sign Off. Diperiksa 2026-09-16.

Alur pengguna

Single sign-off, satu dokumen

  1. Di Inbox, pilih satu baris routing dan klik Response (inb_response_act di routing_browse.htm). Tombolnya bertuliskan View alih-alih Response saat barisnya hanya-baca.
  2. Form Response detail (routing_resp.htm) terbuka. Ia menyaring input menurut action si penampil (lihat di bawah). Semua action Approval-type melihat Return Code standar yang sama, dan A (Approval) tambahan melihat Next Expected Submission. Action Non-approval (Review, Information) melihat pilihan Comments / No Comments. Semua punya kotak Comments bersama.
  3. Tombol Sign Off tetap nonaktif sampai field wajib terisi, lalu lightboxRespExec(4) di js/routing.js mem-POST act=resp dengan route_action=4.

Multiple sign-off, massal

  1. Di Inbox, centang beberapa baris dan klik Sign Off (inb_multisignoff_act). Satu baris yang dicentang membuka jendela Sign Off tunggal.
  2. Tiga penjaga pemilihan berjalan di server: project sama, akses ke setiap baris, dan Action Indicated sama.
  3. Jendela dialog berjudul "Multiple Sign Off (Reviewer | For Information | Leader | Approver | Transmit | Checking | Responsible)" terbuka lewat cmd=multisignoff&id=<ids>&mapid=<mapids>; perannya diambil dari baris yang dipilih. Field perannya dibangun di sisi server ke {val_res_style_html} (routing_resp_multisignoff.htm), di atas kotak Comments bersama.
  4. Klik "Yes, sign off these documents", atau, untuk D - Transmit, "Yes - Proceed routing" / "No - Return to Contractor DC". routingMultipleSignoff() mem-POST act=multiplesignoff dan menerima JSON: dokumen yang tidak bisa di-sign off didaftar dengan namanya.

Aturan per peran, Return Code yang rejected dan cron latar belakangnya ada di Multiple Sign Off.

Field respons per peran

Di master, Jadestone dan Medco form detail menentukan input mana yang tampil dari tipe matriks action b (resp_matrix_type = ts_routing_action_indicated.action_matrix_type), bukan dari label action:

Tipe matriks baction_desc (id)KeluargaField yang tampil
AApproval (9)Approval-typeReturn Code + Next Expected Submission
DTransmit (12)Approval-typeReturn Code
CChecking (15)Approval-typeReturn Code
SResponsible (16)Approval-typeReturn Code
LLeader (11)Approval-typeReturn Code, field yang sama dengan A/D/C/S
RReview (8)Non-approvalComments / No Comments
IInformation (5, non-procurement)Non-approvalComments / No Comments
NNotify (14)Non-approvalhanya notifikasi, tanpa respons inbox

Approval-type = A/D/C/S/L, action yang mengisi Result Code dan karenanya bisa menolak. Non-approval = R/I/N, hanya komentar atau notifikasi. Lihat Action Indicated) untuk definisi lengkap.

Semua action Approval-type berbagi dropdown Return Code yang sama. Hanya A (Approval) yang tambahan menampilkan Next Expected Submission. Di dalam A, Next Expected tetap disembunyikan untuk responder Main-Company, jadi praktis muncul untuk Approver Third-Party. Lihat Kesimpulan Next Expected.

JOTRE dan Timas menyaring berdasarkan label

routing_resp.htm mereka masih memakai pengujian v2 a == 'Approval' || a == 'Transmit' || a == 'Checking' || a == 'Responsible' dan string organisasi 'Third Party' yang hard-coded. Tabel di atas menggambarkan master.

Cek realita: apa yang sebenarnya ada di data

Tabel adalah apa yang bisa dirender form. Action mana yang dipakai sebuah routing ditentukan data: import matriks MDR menulis kode matrix_rout_action apa pun yang ada di spreadsheet template project (documents_master.inc.php). Matriks umumnya memakai subset kecil, paling sering A (Approval) dan L (Leader), plus R dan I. D, C dan S didefinisikan dan ditangani kode tetapi sering tidak ada di data matriks. Periksa ts_matrix_rout project kamu.

Kode Action Indicated

Setiap baris penerima membawa Action Indicated sebagai ts_map_routing_to.rout_indicate, action_id numerik. Yang umum:

rout_indicatePerantype matriks
9ApprovalA
11LeaderL
8ReviewR
5InformationI

Himpunan lengkap yang didukung, tiga identitas dan konfigurasi rules_action per action didokumentasikan di Action Indicated).

rout_status_resp: N (menunggu), 4 (sudah sign off), 5 (ditutup tanpa tindakan). Tidak berubah sejak v2.

Perilaku per Action Indicated

  • Reviewer / Information (R / I): hanya memperbarui baris penanda tangan ke rout_status_resp='4' dengan komentarnya. Memajukan sequence saat semua baris non-Information di rout_sequence_no itu sudah merespons. Tanpa finalize.
  • Leader (L): di master, penutupan paksa seluruh routing oleh Leader yang lama (rout_indicate NOT IN(9), sequence mana pun) dikomentari, begitu juga email reviewer-ke-Leader dan Leader-ke-Approver. Yang tetap aktif di jalur single master adalah satu aturan tutup: saat Leader sign-off, baris Reviewer (8) dan Information (5) yang masih menunggu di sequence yang sama diset ke '5' "Closed Without Action" (rout_indicate IN ('8', '5') AND rout_sequence_no = ...). Leader adalah satu-satunya action Approval-type dengan jendela review non-NULL (rout_daysreview = 1).
  • Checking / Responsible (C / S): berperilaku seperti Leader pada penutupan sequence yang sama di jalur single master.
  • Approver (A): finalize yang aktif ada inline di routing_handler_post.php, di blok yang memeriksa rout_indicate == '9'. Ia mengeset ts_map_routing_to.rout_status_resp='5' untuk siapa pun yang masih menunggu, menulis ts_routing.rout_return_status='N' plus tanggal approve, mencatat hasil di ts_documents (doc_res_id, next_expected_id, doc_appdate), dan mengirim email ke Document Control. Fungsi actMultipleProcess() di routing.inc.php terlihat seperti finalize ini tetapi tidak dipanggil dari handler di master; ia masih memakai iw_mysql_query() dan merupakan kode mati.
  • Transmit / DocCon (D): D adalah checkpoint Document Consolidation. Saat sign-off dengan flag auto-publish dan transmittal pada routing external, ia memasukkan dokumen dan mengarsipkan transmittal keluar / submission. Di batch routing ia ditangani lewat alur External Transmission terpisah, bukan dialog ini. Detail lengkap di Action Indicated, D).

Medco merombak C / S / L pada Juni 2026 (INA28-180, INA28-197)

Di Medco ketiga action berbagi satu aturan tutup di kedua jalur single dan multiple, C dan S memfinalisasi routing saat reject di jalur single, dan finalize Approver lewat fungsi baru, actMultipleProcessNew(). Tidak ada yang seperti itu di master. Master punya penutupan sequence yang sama hanya di jalur single, tanpa reject-finalize, dan tanpa actMultipleProcessNew().

Finalize Approver tidak mengeset rout_status='close' di master, Jadestone atau Medco

Barisnya dikomentari dengan catatan "khusus untuk AWE". Finalize mengeset rout_return_status='N' sebagai gantinya. JOTRE dan Timas menutup routing-nya: finalize mereka menjalankan update ts_routing set rout_status='close' secara aktif lewat $pdo.

Field Next Expected Submission: cara tampilnya

Dropdown Next Expected Submission (#next_expected_submissions) adalah pilihan approver tentang issue apa yang harus diharapkan sistem berikutnya untuk dokumen ini. Ia diisi dari ts_next_expected (next_expected_id, next_expected_desc), dengan pra-pilih kode issued dokumen saat ini, di routing.php. Saat submit ia ditulis ke ts_documents.next_expected_id. Kelima fork membaca ts_next_expected di sini.

Ia tampil hanya kalau semua ini terpenuhi, di routing_resp.htm:

  1. Action responder adalah Approval (A). Form awalnya memunculkan field untuk semua action Approval-type, tetapi kondisi 4 dan 5 menyembunyikannya lagi untuk semua kecuali A. Action Non-approval tidak pernah mencapai cabang ini.
  2. Bukan batch routing (batch_routing != 1). Mode massal menyembunyikan Return Code dan Next Expected.
  3. enable_next_issue_code = 1. Kalau flag config-nya 0 field selalu disembunyikan. Ini jawaban paling sederhana untuk "kenapa tidak tampil", dan pemeriksaannya ada di kelima fork.
  4. Responder bukan sisi project-owner: disembunyikan saat resource_organization_name == organization_name_non_owner atau routing-nya procurement (routing_procure == 1).
  5. Untuk setiap action Approval-type selain Approval (a != 'Approval') ia tambahan disembunyikan saat Project Organization responder adalah sisi project-owner (== organization_name_owner). Hanya Approval (A) yang dikecualikan.

Sisi owner bisa dikonfigurasi di master, Jadestone dan Medco. organization_name_owner / organization_name_non_owner diturunkan dari inact_operator_role (company | contractor, default contractor). Dengan default, project owner adalah sisi "Third Party". Kalau inact_operator_role = company, owner adalah sisi "Main Company" dan dua kolom di bawah bertukar. JOTRE dan Timas tidak punya key itu; mereka membandingkan dengan literal 'Third Party'.

Kesimpulan Next Expected

Gabungkan kondisi 4 dan 5 dan hasilnya menyempit ke satu kasus, hanya tampil untuk Approval milik project owner:

ActionResponder non-ownerResponder project-owner
A Approvaldisembunyikan (kondisi 4)tampil
D/C/S/Ldisembunyikan (kondisi 4)disembunyikan (kondisi 5)

Perbandingan string yang rapuh

Kondisi 4 dan 5 membandingkan ts_resource.organization_name yang tersimpan dengan label owner / non-owner hasil resolusi. Kalau nilai org-nya apa pun yang lain (NULL atau kosong, spasi, string yang diganti nama), tidak ada penyembunyian yang berjalan dan Next Expected bocor tampil untuk D/C/S/L juga. Lihat masalah yang diketahui di Users and Privileges. Periksa ts_resource.organization_name responder untuk memprediksi apa yang tampil.

Auto-publish ke Document Library, Approver

Saat Approver sign-off, salinan yang sudah direview dan dianotasi (revisi bersufiks _R) dipublikasikan ke library:

  • Single sign-off: inline (getPDFAfterApprove.php).
  • Multiple sign-off: ditunda ke cron. Di master itu cron/cron_multiple_signoff_v2.php, yang menguras ts_multiple_signoff_list (multi_status='n', satu baris per performer) dan memanggil getPDFAfterApprove.php lewat curl untuk dokumen _R. cron_multiple_signoff.php dan getPDFMultipleSignoffCron.php yang lama sudah hilang dari master; JOTRE dan Prima Energy masih memakai nama lama, Medco punya _v2 versinya sendiri, Jadestone punya keduanya. Lihat Cron job.
  • Dijaga oleh enable_autopublish. Saat flag mati, publikasi dilewati. Lihat inweb_config.
  • Auto-publish single sign-off dinonaktifkan untuk routing non-MDR ("New" / doclib), di mana jalur kodenya dibungkus penjaga if (false). Ada di kelima fork.

Transmittal yang dibuat saat sign-off (enable_transmittal): DocCon versus Approver

Pada routing external dengan enable_autopublish = 1 dan enable_transmittal = 1, jalur finalize juga membuat PDF transmittal dan mengarsipkannya ke dokumen (ts_map_doc_file plus nomor transmittal di ts_documents). Dua sign-off yang berbeda menghasilkan dua transmittal yang berbeda:

Penanda tanganTipe transmittalNomorDisimpan ke
D (DocCon / Transmit)Transmittal("out"), original / submissiontanpa sufiksts_documents.doc_submission_number
A (Approver eksternal)Transmittal("in"), returnsufiks (R)ts_documents.outgoing_transmittal_no

Label "in / out" dan nama kolom tertukar

Hanya transmittal "in" (return) yang mendapat penanda (R). Return ditulis ke kolom bernama outgoing_transmittal_no, submission ke doc_submission_number, dan string nomor submission diakhiri literal -IN. Dalam istilah kode: D membuat transmittal keluar (submission); Approver membuat return (R). Rincian lengkap di Action Indicated, D). Dua blok transmittal lama di routing_handler_post.php mati (if (false)).

Di mana salinan yang dipublikasikan diarsipkan: Auto Folder Creation

Di sini juga struktur folder library dibangun. Di v2 ini terjadi saat upload; di v3 pindah ke sini. Dua mekanisme hidup berdampingan:

  • Legacy: getLibCodeAutoGenerateFromDocMaster() (hierarki project_east_java Medco / Ophir / East-Java) saat membuat baris register. Hanya Medco. Master, Jadestone, JOTRE dan Timas tidak punya fungsi ini.
  • Auto Folder Creation per project, dijaga flag config autopublish_auto_folder_creation: autoPublishDocumentToCustomSubfoler() membaca daftar tipe referensi yang dikustomisasi admin per project dari ts_auto_creation_folder_settings dan membangun subfolder bersarang. Fungsinya ada di kelima fork; key config dan layar admin hanya ada di master, Jadestone dan Medco. Admin mengaturnya di DMS Reference, Auto Folder Creation. Lihat Auto Folder Creation.

Log audit

saveRoutSignOffInfo() menulis ke ts_rout_signoff_info untuk sign-off Leader dan Approver, tidak untuk Reviewer atau Information. Medco membuat ulang tabel ini lewat migrasi phinx; fork lain tidak membawa migrasi itu.

Tabel database yang terpengaruh

TabelOperasiOleh
ts_map_routing_toupdate (rout_status_resp, rout_response, rout_comments, ...)semua
ts_routingupdate (rout_return_status='N', tanggal approve; rout_status='close' hanya di JOTRE dan Timas)approver
ts_documentsinsert / update (doc_res_id, next_expected_id, doc_appdate)approver
ts_rout_signoff_infoinsert (audit)hanya leader dan approver
ts_multiple_signoff_listinsert / updatemultiple sign off, satu baris per performer
ts_documents (_R), ts_file_explorer, ts_map_doc_file, ts_map_documents_library, ts_map_doc_comment_sheetinsertauto-publish approver

Perbedaan antar instance (Sign Off)

Diperiksa pada 2026-09-06.

InstancePerbedaan
Jadestoneact=multiplesignoff versinya sendiri di atas $pdo, dengan guard tambahan (reviewer masih mereview, due date lewat) dan Routing Slip di cron-nya. Selebihnya sama dengan master.
Medcoact=multiplesignoff dengan $pdo. Finalize Approver lewat actMultipleProcessNew(). C/S/L berbagi satu aturan tutup di kedua jalur; reject C/S memfinalisasi routing. Menyimpan getLibCodeAutoGenerateFromDocMaster() legacy. Migrasi ts_rout_signoff_info ada. Cron multiple sign-off-nya adalah cron_multiple_signoff_v2.php.
JOTREiw_mysql_query() masih bekerja, jadi handler multiple sign-off legacy berjalan, tetapi tombol Sign Off di Inbox dikomentari. Finalize Approver mengeset rout_status='close'. Form respons menyaring berdasarkan label dengan 'Third Party' hard-coded. Tidak ada consolidated_routing_view, enable_return_on_audit, inact_operator_role.
TimasMultiple sign-off memakai handler legacy di atas iw_mysql_query(), yang di sana melempar exception (diperiksa 2026-09-06). Finalize Approver mengeset rout_status='close'. Form respons menyaring berdasarkan label. Tidak ada consolidated_routing_view.
Prima EnergyHandler multiple sign-off legacy, iw_mysql_query() melempar exception, dan tombol Sign Off di Inbox dikomentari (diperiksa 2026-09-16).
MasterMultiple Sign Off ditulis ulang oleh INA01-866, lihat catatan di atas.