# POS Gateway Phase 1 - Legacy Facade Safe Mode

Tanggal: 2026-04-09

## Tujuan

Menambahkan facade internal pada endpoint pyPOS lama agar bisa forward ke POS Gateway **secara opsional**, tanpa mengubah perilaku default endpoint lama.

## Prinsip Safety

1. Endpoint lama tetap aktif dan tetap menjadi jalur utama.
2. Facade default nonaktif (`OFF`).
3. Tersedia mode `shadow` untuk observasi tanpa mengubah response endpoint lama.
4. Tersedia mode `active` untuk endpoint tertentu saat siap cutover bertahap.

## Config Flag

File: `application/config/pos_gateway.php`

Key penting:

1. `pos_gateway_enabled`  
2. `pos_gateway_legacy_facade_enabled`  
3. `pos_gateway_legacy_facade_mode` (`off|shadow|active`)  
4. `pos_gateway_legacy_facade_endpoint_map` (toggle per endpoint)

## Endpoint Lama yang Sudah Dipasang Hook Facade

1. `nonrest_setuploadstream` -> `sales_batch`
2. `nonrest_getuploadcompilestatus` -> `compile_status_query`
3. `nonrest_get_preorder` -> `preorder_get`
4. `nonrest_use_preorder` -> `preorder_use`
5. `datasync_serversync` -> `sync_pull`
6. `prodiskon_checkfreeprodukquota` -> `promo_quota_check`
7. `activityreportapi_settlement` -> `settlement_push`

## File yang Diubah pada Phase 1

1. `application/config/pos_gateway.php`
2. `application/libraries/PosGateway/LegacyFacadeBridge.php`
3. `application/controllers/eusvc/NonRest.php`
4. `application/controllers/eusvc/DataSync.php`
5. `application/controllers/eusvc/ProDiskon.php`
6. `application/modules/penjualan/controllers/ActivityReportApi.php`

## Cara Pakai Bertahap

## Tahap A - Shadow Observability (disarankan awal)

1. `pos_gateway_enabled = true`
2. `pos_gateway_legacy_facade_enabled = true`
3. `pos_gateway_legacy_facade_mode = "shadow"`
4. Enable endpoint map satu per satu sesuai target uji.

Hasil:
- Endpoint lama tetap memproses seperti biasa.
- Gateway dipanggil paralel untuk observasi dan log.
- Tidak ada perubahan contract response ke client lama.

## Tahap B - Active untuk Endpoint Terpilih

1. Pastikan data shadow stabil.
2. Ubah `pos_gateway_legacy_facade_mode = "active"`.
3. Aktifkan hanya endpoint map yang siap.
4. Uji regresi response contract sebelum memperluas endpoint lain.

## Catatan Penting

1. Hook facade ini belum mengubah endpoint lama secara permanen.
2. Cutover endpoint dilakukan dengan toggle config, bukan edit kode ulang.
3. Untuk production, aktifkan bertahap per endpoint agar rollback mudah.
