# Dokumentasi Owner Aplikasi: POS Lama, POS Baru (PyPOS), dan ERP

Tanggal: 2026-04-21  
Workspace: `W:\POS_DUMMY`  
Environment acuan: `existing_production_project_for_pypos` (ERP target UAT/staging)

## 1) Tujuan Dokumen

Dokumen ini merangkum:
1. Endpoint yang dipakai POS Lama (WEB_POS).
2. Endpoint yang dipakai POS Baru (PyPOS).
3. CLI/endpoint ERP yang memproses data dari dua POS berbeda.
4. Titik kritikal operasional yang perlu diketahui owner aplikasi.

## 2) Ringkasan Arsitektur

1. POS Lama (`WEB_POS`) berbasis web lokal (XAMPP), jalur legacy, tanpa JWT.
2. POS Baru (`PyPOS`) berbasis aplikasi Python, integrasi modern, mendukung JWT.
3. Keduanya masuk ke ERP yang sama, lalu diproses pipeline backend (compile -> point -> bridge -> validasi -> penjualan/finalisasi).
4. Ada jalur yang dipisah per POS (mis. generator penjualan), dan ada jalur shared yang dipakai keduanya (mis. `run_cliSalesPointCustomer`, `createBridgeV2`, validator).

## 3) Endpoint POS Lama (WEB_POS)

### 3.1 Jalur dari aplikasi POS Lama

1. Local generator + sender (di kode WEB_POS):
   - `.../eusvc/NonRest/createTransaksiFile`
   - `.../eusvc/NonRest/sendAllFileToServer`
2. Upload ke ERP:
   - `.../eusvc/NonRest/setUploadStream`

### 3.2 Jalur backend ERP untuk data POS Lama

1. `.../eusvc/NonRest/compileFilesV2`
2. `.../eusvc/NonRest/compileFilesDataV2`
3. `.../eusvc/NonRest/compileFilesDataRegistryV2`
4. `.../eusvc/NonRest/genTransaksiPenjualan`
5. `.../cliTransaksi/run_cliSalesPointCustomer` (opsional query `debuger=1`)
6. `.../eusvc/DataSync/createBridgeV2` (opsional query `debuger=1`)
7. `.../eusvc/DataSync/cli_sumProdukPos` (opsional query `debuger=1`)
8. `.../eusvc/NonRest/validatorSettlementVsNotaV3` (opsional query `force=1`)

## 4) Endpoint POS Baru (PyPOS)

Berikut endpoint dari konfigurasi `Python POS/config.json`:

### 4.1 Device, auth, dan bootstrap

1. `ep_device` -> `/eusvc/NonRest/postDeviceRegistrasi`
2. `ep_device_cek` -> `/eusvc/NonRest/checkDevRegisV2`
3. `ep_jwt_issue` -> `/eusvc/NonRest/issueJwt`
4. `ep_jwt_refresh` -> `/eusvc/NonRest/refreshJwt`
5. `ep_branch_lookup` -> `/eusvc/DataSync/publicBranchLookup`
6. `ep_ui_assets` -> `/eusvc/DataSync/uiAssets`

### 4.2 Sinkronisasi data master

1. `ep_datas` -> `/eusvc/DataSync/doSync_auto`
2. `ep_update_cek` -> `/eusvc/NonRest/server_CheckUpdate`
3. `ep_server_sync` -> `/eusvc/DataSync/serverSync`

### 4.3 Upload dan compile status

1. `ep_upload_stream` -> `/eusvc/NonRest/setUploadStream`
2. `ep_upload_compile_status` -> `/eusvc/NonRest/getUploadCompileStatus`

### 4.4 Diskon, preorder, settlement

1. `ep_diskon_save_free_produk` -> `/eusvc/ProDiskon/saveFreeProduk`
2. `ep_diskon_check_free_produk` -> `/eusvc/ProDiskon/checkFreeProdukQuota`
3. `ep_preorder_get` -> `/eusvc/NonRest/get_preorder`
4. `ep_preorder_use` -> `/eusvc/NonRest/use_preorder`
5. `ep_settlement_direct` -> `/penjualan/ActivityReportApi/settlement`

### 4.5 Jalur backend ERP untuk data PyPOS

1. `.../eusvc/NonRest/prosesFilePOS`
2. `.../eusvc/NonRest/genTransaksiPenjualanPyPos`
3. `.../cliTransaksi/run_cliSettlementPyPOS`
4. `.../cliTransaksi/run_cliSalesPointCustomer` (shared, opsional `debuger=1`)
5. `.../eusvc/DataSync/createBridgeV2` (shared, opsional `debuger=1`)
6. `.../eusvc/NonRest/validatorSettlementVsNotaV3` (shared, opsional `force=1`)

## 5) CLI/Proses ERP Inti Pengolah Dua POS

## 5.1 Inbound dan compile

1. `setUploadStream()` menerima upload jalur legacy.
2. `setUploadStream__GLG()` disiapkan untuk isolasi jalur jika perlu split kompatibilitas.
3. `compileFilesV2`, `compileFilesDataV2`, `compileFilesDataRegistryV2` memproses file inbound ke DB.
4. `prosesFilePOS()` menangani jalur proses file untuk PyPOS.

## 5.2 Pembentukan antrian penjualan

1. `genTransaksiPenjualan()` untuk jalur POS Lama.
2. `genTransaksiPenjualanPyPos()` untuk jalur PyPOS.
3. Keduanya menyiapkan antrian untuk proses poin/penjualan lanjutan.

## 5.3 Proses shared setelah antrian

1. `CliTransaksi/run_cliSalesPointCustomer`
2. `DataSync/createBridgeV2_get`
3. `NonRest/validatorSettlementVsNotaV3`
4. `CliTransaksi/run_cliPenjualan` (finalisasi sesuai jadwal operasional)

## 5.4 Proses khusus PyPOS

1. `CliTransaksi/run_cliSettlementPyPOS`  
   Dipakai untuk normalisasi/builder payload settlement PyPOS agar kompatibel dengan engine legacy downstream.

## 6) Tabel Data Kritis (Owner View)

Tabel-tabel yang penting dimonitor:

1. `transaksi_consolidasi` (jalur POS lama)
2. `transaksi_consolidasi_v2` (jalur PyPOS)
3. `transaksi_point` (antrian proses penjualan)
4. `__raw_rek_pembantu__4` (sumber summary bridge)
5. `transaksi_data_sum_realtimepos_bridge` (summary bridge)
6. `transaksi_payment_source` (settlement source)
7. `upload_idempotency_registry` (status upload/compile idempotent)
8. `db_transaction_failed` (rekam gagal transaksi idempotent)

## 7) Endpoint/CLI Shared (Cross-Impact Risk)

Berikut jalur yang dipakai oleh dua POS sekaligus:

1. `setUploadStream` (jika belum dipisah jalur khusus)
2. `run_cliSalesPointCustomer`
3. `createBridgeV2`
4. `validatorSettlementVsNotaV3`

Implikasi owner:

1. Perubahan di jalur shared harus diuji ke dua POS, bukan salah satu.
2. Jika ada bug di shared path, potensi gangguan bisa ke seluruh operasional.
3. Untuk perubahan berisiko tinggi, gunakan strategi alias/split endpoint agar POS lama tetap aman.

## 8) Monitoring & Log yang Disarankan untuk Owner

1. UI monitor endpoint:
   - `existing_production_project_for_pypos/monitoring_endpoint_pos.html`
2. Audit endpoint utama:
   - `application/controllers/eusvc/log/pypos_endpoint_audit.log`
3. Log per endpoint (folder):
   - `application/controllers/eusvc/log/`
4. Catatan:
   - IP `0.0.0.0` pada log biasanya berasal dari eksekusi CLI/cron, bukan request browser.

## 9) Aturan Release Operasional (Owner Checklist)

1. Jangan ubah kontrak endpoint legacy tanpa fallback/alias.
2. Uji regresi minimal:
   - upload POS lama,
   - sync POS lama,
   - upload PyPOS,
   - sync PyPOS,
   - settlement PyPOS,
   - CLI shared (`run_cliSalesPointCustomer`, `createBridgeV2`, validator).
3. Pastikan rollback plan siap (kode + database + jadwal job).
4. Lakukan deployment di jam low traffic jika menyentuh jalur shared.
5. Simpan evidence UAT tertulis per endpoint utama.

## 10) Sumber Verifikasi Kode (Acuan Teknis)

ERP target:

1. `existing_production_project_for_pypos/application/controllers/eusvc/NonRest.php`
   - `setUploadStream__GLG` (line 501)
   - `setUploadStream` (line 839)
   - `compileFilesV2` (line 1805)
   - `compileFilesDataV2` (line 2112)
   - `compileFilesDataRegistryV2` (line 2316)
   - `genTransaksiPenjualan` (line 4535)
   - `validatorSettlementVsNotaV2` (line 6217)
   - `validatorSettlementVsNotaV3` (line 6331)
   - `genTransaksiPenjualanPyPos` (line 11006)
   - `prosesFilePOS` (line 10833)
   - `issueJwt` (line 7345)
   - `refreshJwt` (line 7418)
2. `existing_production_project_for_pypos/application/controllers/eusvc/DataSync.php`
   - `uiAssets_get` (line 582)
   - `publicBranchLookup_post` (line 874)
   - `doSync_auto_post` (line 1162)
   - `doSync_autoV2_post` (line 1175)
   - `serverSync_post` (line 1316)
   - `cli_sumProdukPos_get` (line 3481)
   - `createBridgeV2_get` (line 5121)
3. `existing_production_project_for_pypos/application/controllers/CliTransaksi.php`
   - `run_cliSalesPointCustomer` (line 12055)
   - `run_cliPenjualan` (line 14356)
   - `run_cliSettlementPyPOS` (line 23483)
4. `existing_production_project_for_pypos/application/controllers/eusvc/ProDiskon.php`
   - `saveFreeProduk_post` (line 600)
   - `checkFreeProdukQuota_post` (line 844)
5. `existing_production_project_for_pypos/application/modules/penjualan/controllers/ActivityReportApi.php`
   - `settlement` (line 2609)

POS lama:

1. `WEB_POS/application/controllers/eusvc/NonRest.php`
   - `createTransaksiFile` (line 176)
   - `sendAllFileToServer` (line 360)

POS baru:

1. `Python POS/config.json`
   - daftar endpoint integrasi PyPOS ke ERP.

---

Jika owner butuh, dokumen ini bisa diturunkan lagi menjadi:
1. runbook operasional harian tim support,
2. SOP incident per titik flow (upload, compile, settlement, bridge, validator),
3. matriks PIC antar tim (Python POS vs Backend ERP vs Infra/DBA).
