# Inventaris porting PHP

Audit 17 Oktober 2026: **188 dari 188 halaman/endpoint** mempunyai route `.php` dan method controller CI4 yang diuji. Sumber lengkap mempunyai **198 file PHP**: 188 entry point dan 10 file pendukung. Ini pemeriksaan cakupan route/handler; validasi database/browser nyata dibahas di [PORTING_SELESAI.md](PORTING_SELESAI.md).

| File sumber `pos/` | Handler CI4 |
| --- | --- |
| `admin/impersonate.php` | `\App\Controllers\AdminImpersonate::index` |
| `admin/whatsapp_autoreply.php` | `\App\Controllers\AdminAutoreply::index` |
| `admin/whatsapp_chat.php` | `\App\Controllers\AdminWhatsappChat::index` |
| `ajax/customer_lookup.php` | `\App\Controllers\Ajax::customerLookup` |
| `ajax/customer_search.php` | `\App\Controllers\Ajax::customerSearch` |
| `ajax/product_lookup.php` | `\App\Controllers\Ajax::productLookup` |
| `ajax/supplier_search.php` | `\App\Controllers\Ajax::supplierSearch` |
| `api/api_check_stock.php` | `\App\Controllers\StoreApi::checkStock` |
| `api/api_create_sale.php` | `\App\Controllers\StoreApi::createSale` |
| `api/api_get_invoice.php` | `\App\Controllers\StoreApi::getInvoice` |
| `api/crm_chat.php` | `\App\Controllers\ChatApi::crm` |
| `api/notifications.php` | `\App\Controllers\Api::notifications` |
| `api/qris.php` | `\App\Controllers\QrisApi::index` |
| `api/switch-outlet.php` | `\App\Controllers\Api::switchOutlet` |
| `api/wablas_inbox.php` | `\App\Controllers\WablasWebhook::inbox` |
| `api/wablas_tracking.php` | `\App\Controllers\WablasWebhook::tracking` |
| `api/webhook_jaknot_sync.php` | `\App\Controllers\JaknotWebhook::index` |
| `api/webhook_shopee_order.php` | `\App\Controllers\ShopeeWebhook::index` |
| `api/whatsapp_chat_api.php` | `\App\Controllers\ChatApi::whatsapp` |
| `booking_api.php` | `\App\Controllers\BookingApi::index` |
| `cart.php` | `\App\Controllers\PublicCart::index` |
| `checkout.php` | `\App\Controllers\PublicCheckout::index` |
| `checkout_otp.php` | `\App\Controllers\PublicCheckout::otp` |
| `checkout_rental.php` | `\App\Controllers\PublicRentalCheckout::index` |
| `checkout_rental_otp.php` | `\App\Controllers\PublicRentalCheckout::otp` |
| `checkout_rental_special.php` | `\App\Controllers\RentalSpecial::index` |
| `checkout_rental_success.php` | `\App\Controllers\PublicRentalCheckout::success` |
| `checkout_success.php` | `\App\Controllers\PublicCheckout::success` |
| `crm/chat.php` | `\App\Controllers\CrmChat::index` |
| `cron/cek_status.php` | `\App\Controllers\Cron::run/cek_status` |
| `cron/cek_status_realtime.php` | `\App\Controllers\Cron::run/cek_status_realtime` |
| `cron/charge_daily_saldo.php` | `\App\Controllers\Cron::run/charge_daily_saldo` |
| `cron/process_whatsapp_queue.php` | `\App\Controllers\Cron::run/process_whatsapp_queue` |
| `cron/send_scheduled_blasts.php` | `\App\Controllers\Cron::run/send_scheduled_blasts` |
| `dashboard.php` | `\App\Controllers\Dashboard::index` |
| `deposit/deposit_admin.php` | `\App\Controllers\DepositDepositAdmin::index` |
| `deposit/deposit_topup.php` | `\App\Controllers\DepositDepositTopup::index` |
| `deposit/reseller_deposit.php` | `\App\Controllers\DepositResellerDeposit::index` |
| `deposit/reseller_saldo.php` | `\App\Controllers\DepositResellerSaldo::index` |
| `deposit/reseller_topup.php` | `\App\Controllers\DepositResellerTopup::index` |
| `deposit/reseller_topup_requests.php` | `\App\Controllers\DepositResellerTopupRequests::index` |
| `forgot_password.php` | `\App\Controllers\PublicAccount::forgot` |
| `index.php` | `\App\Controllers\Auth::login` |
| `kasir.php` | `\App\Controllers\Kasir::index` |
| `login.php` | `\App\Controllers\Auth::login` |
| `logout.php` | `\App\Controllers\Auth::logout` |
| `master/affiliate.php` | `\App\Controllers\Affiliate::index` |
| `master/audit_trail.php` | `\App\Controllers\AuditTrail::index` |
| `master/cetak_barcode.php` | `\App\Controllers\CetakBarcode::index` |
| `master/cetak_label_harga.php` | `\App\Controllers\CetakLabelHarga::index` |
| `master/customers.php` | `\App\Controllers\Customers::index` |
| `master/discounts.php` | `\App\Controllers\Discounts::index` |
| `master/harga_khusus.php` | `\App\Controllers\HargaKhusus::index` |
| `master/harga_produk.php` | `\App\Controllers\HargaProduk::index` |
| `master/harga_reseller.php` | `\App\Controllers\HargaReseller::index` |
| `master/kategori.php` | `\App\Controllers\Kategori::index` |
| `master/kurir.php` | `\App\Controllers\Kurir::index` |
| `master/marketplaces.php` | `\App\Controllers\Marketplaces::index` |
| `master/outlets.php` | `\App\Controllers\Outlets::index` |
| `master/packing.php` | `\App\Controllers\Packing::index` |
| `master/product_groups.php` | `\App\Controllers\ProductGroups::index` |
| `master/produk.php` | `\App\Controllers\Produk::index` |
| `master/produk_diskon.php` | `\App\Controllers\ProdukDiskon::index` |
| `master/produk_edit.php` | `\App\Controllers\Produk::editProduct` |
| `master/produk_form.php` | `\App\Controllers\ProdukForm::index` |
| `master/produk_gallery.php` | `\App\Controllers\ProdukGallery::index` |
| `master/produk_pasar.php` | `\App\Controllers\ProdukPasar::index` |
| `master/produk_shopee.php` | `\App\Controllers\ProdukShopee::index` |
| `master/produk_update_massal.php` | `\App\Controllers\ProdukUpdateMassal::index` |
| `master/promo_produk.php` | `\App\Controllers\PromoProduk::index` |
| `master/rental.php` | `\App\Controllers\Rental::index` |
| `master/rental_gallery.php` | `\App\Controllers\RentalGallery::index` |
| `master/resellers.php` | `\App\Controllers\Resellers::index` |
| `master/salesman.php` | `\App\Controllers\Salesman::index` |
| `master/satuan.php` | `\App\Controllers\Satuan::index` |
| `master/sumber_penjualan.php` | `\App\Controllers\SumberPenjualan::index` |
| `master/supplier.php` | `\App\Controllers\Supplier::index` |
| `master/tipe-bayar.php` | `\App\Controllers\TipeBayar::index` |
| `master/tracking_visitors.php` | `\App\Controllers\TrackingVisitors::index` |
| `order_meja.php` | `\App\Controllers\PublicTableOrder::index` |
| `pengaturan/ajax_store_statuses.php` | `\App\Controllers\SettingsAjaxStoreStatuses::index` |
| `pengaturan/api-logs.php` | `\App\Controllers\SettingsApiLogs::index` |
| `pengaturan/coa-akuntansi.php` | `\App\Controllers\SettingsCoaAkuntansi::index` |
| `pengaturan/invoice-template.php` | `\App\Controllers\SettingsInvoiceTemplate::index` |
| `pengaturan/jaknot.php` | `\App\Controllers\SettingsJaknot::index` |
| `pengaturan/konfigurasi-pasar.php` | `\App\Controllers\SettingsKonfigurasiPasar::index` |
| `pengaturan/menus.php` | `\App\Controllers\SettingsMenus::index` |
| `pengaturan/pembayaran.php` | `\App\Controllers\SettingsPembayaran::index` |
| `pengaturan/profil-toko.php` | `\App\Controllers\SettingsProfilToko::index` |
| `pengaturan/restaurant-tables.php` | `\App\Controllers\SettingsRestaurantTables::index` |
| `pengaturan/roles.php` | `\App\Controllers\SettingsRoles::index` |
| `pengaturan/saldo-toko.php` | `\App\Controllers\SettingsSaldoToko::index` |
| `pengaturan/shopee.php` | `\App\Controllers\SettingsShopee::index` |
| `pengaturan/store-statuses.php` | `\App\Controllers\SettingsStoreStatuses::index` |
| `pengaturan/users.php` | `\App\Controllers\SettingsUsers::index` |
| `pengaturan/webhook-marketplace.php` | `\App\Controllers\SettingsWebhookMarketplace::index` |
| `pengaturan/whatsapp-bot.php` | `\App\Controllers\SettingsWhatsappBot::index` |
| `pengaturan/whatsapp-scheduler.php` | `\App\Controllers\SettingsWhatsappScheduler::index` |
| `pengaturan/whatsapp-templates.php` | `\App\Controllers\SettingsWhatsappTemplates::index` |
| `pengaturan/whatsapp.php` | `\App\Controllers\SettingsWhatsapp::index` |
| `pricing.php` | `\App\Controllers\Pricing::index` |
| `register.php` | `\App\Controllers\PublicAccount::register` |
| `reports/affiliate_transactions.php` | `\App\Controllers\ReportAffiliateTransactions::index` |
| `reports/busy_hours_chart.php` | `\App\Controllers\ReportBusyHoursChart::index` |
| `reports/busy_hours_report.php` | `\App\Controllers\ReportBusyHoursReport::index` |
| `reports/cancelled_sales_report.php` | `\App\Controllers\ReportCancelledSalesReport::index` |
| `reports/cash_flow.php` | `\App\Controllers\ReportCashFlow::index` |
| `reports/cash_in_report.php` | `\App\Controllers\ReportCashInReport::index` |
| `reports/cash_out_report.php` | `\App\Controllers\ReportCashOutReport::index` |
| `reports/cash_sessions.php` | `\App\Controllers\ReportCashSessions::index` |
| `reports/category_sales_chart.php` | `\App\Controllers\ReportCategorySalesChart::index` |
| `reports/category_sales_report.php` | `\App\Controllers\ReportCategorySalesReport::index` |
| `reports/comparison_chart.php` | `\App\Controllers\ReportComparisonChart::index` |
| `reports/daily_sales_chart.php` | `\App\Controllers\ReportDailySalesChart::index` |
| `reports/daily_sales_report.php` | `\App\Controllers\ReportDailySalesReport::index` |
| `reports/expiring_batches.php` | `\App\Controllers\ReportExpiringBatches::index` |
| `reports/laba_rugi.php` | `\App\Controllers\ReportLabaRugi::index` |
| `reports/payment_method_sales_report.php` | `\App\Controllers\ReportPaymentMethodSalesReport::index` |
| `reports/payment_type_sales_chart.php` | `\App\Controllers\ReportPaymentTypeSalesChart::index` |
| `reports/penjualan_office.php` | `\App\Controllers\ReportPenjualanOffice::index` |
| `reports/penjualan_packing.php` | `\App\Controllers\ReportPenjualanPacking::index` |
| `reports/penjualan_sales.php` | `\App\Controllers\ReportPenjualanSales::index` |
| `reports/product_sales_chart.php` | `\App\Controllers\ReportProductSalesChart::index` |
| `reports/product_sales_report.php` | `\App\Controllers\ReportProductSalesReport::index` |
| `reports/profit_transaksi.php` | `\App\Controllers\ReportProfitTransaksi::index` |
| `reports/profit_vs_expense_chart.php` | `\App\Controllers\ReportProfitVsExpenseChart::index` |
| `reports/purchases_report.php` | `\App\Controllers\ReportPurchasesReport::index` |
| `reports/restock_planner.php` | `\App\Controllers\ReportRestockPlanner::index` |
| `reports/sales_detailed_report.php` | `\App\Controllers\ReportSalesDetailedReport::index` |
| `reports/sales_report.php` | `\App\Controllers\ReportSalesReport::index` |
| `reports/staff_performance_report.php` | `\App\Controllers\ReportStaffPerformanceReport::index` |
| `stok/cek-stok.php` | `\App\Controllers\CekStok::index` |
| `stok/history-stok.php` | `\App\Controllers\HistoryStok::index` |
| `stok/stock-opname-detail.php` | `\App\Controllers\StockOpnameDetail::index` |
| `stok/stock-opname-excel.php` | `\App\Controllers\StockOpnameExcel::index` |
| `stok/stock-opname-form.php` | `\App\Controllers\StockOpnameForm::index` |
| `stok/stock-opname.php` | `\App\Controllers\StockOpname::index` |
| `store_product.php` | `\App\Controllers\PublicProduct::index` |
| `store_rental.php` | `\App\Controllers\PublicRental::index` |
| `store_rental_schedule.php` | `\App\Controllers\PublicRentalSchedule::index` |
| `stores.php` | `\App\Controllers\PublicStore::index` |
| `tools/audit_marketplace.php` | `\App\Controllers\ToolsAuditMarketplace::index` |
| `tools/blast_chat.php` | `\App\Controllers\ToolsBlastChat::index` |
| `tools/cron_shopee_stock_sync.php` | `\App\Controllers\ToolsCronShopeeStockSync::index` |
| `tools/import_massal_product.php` | `\App\Controllers\ToolsImportMassalProduct::index` |
| `tools/import_shopee_pesanan.php` | `\App\Controllers\ToolsImportShopeePesanan::index` |
| `tools/import_tiktok_pesanan.php` | `\App\Controllers\ToolsImportTiktokPesanan::index` |
| `tools/import_transaksi_pembelian.php` | `\App\Controllers\ToolsImportTransaksiPembelian::index` |
| `tools/import_transaksi_penjualan.php` | `\App\Controllers\ToolsImportTransaksiPenjualan::index` |
| `tools/perbaiki_harga_snapshot.php` | `\App\Controllers\ToolsPerbaikiHargaSnapshot::index` |
| `tools/rekonsiliasi_stok.php` | `\App\Controllers\ToolsRekonsiliasiStok::index` |
| `tools/shopee_pesanan.php` | `\App\Controllers\ToolsShopeePesanan::index` |
| `tools/sync_export.php` | `\App\Controllers\ToolsSyncExport::index` |
| `tools/sync_import.php` | `\App\Controllers\ToolsSyncImport::index` |
| `tools/tiktok_pesanan.php` | `\App\Controllers\ToolsTiktokPesanan::index` |
| `tools/update_massal_product.php` | `\App\Controllers\ToolsUpdateMassalProduct::index` |
| `tools/update_status_product.php` | `\App\Controllers\ToolsUpdateStatusProduct::index` |
| `tools/whatsapp_messages.php` | `\App\Controllers\ToolsWhatsappMessages::index` |
| `tracking.php` | `\App\Controllers\WablasWebhook::tracking` |
| `transactions/cash_categories.php` | `\App\Controllers\CashCategories::index` |
| `transactions/cash_in.php` | `\App\Controllers\CashIn::index` |
| `transactions/cash_out.php` | `\App\Controllers\CashOut::index` |
| `transactions/rental_transactions.php` | `\App\Controllers\RentalTransactions::index` |
| `transaksi/barang_keluar.php` | `\App\Controllers\BarangKeluar::index` |
| `transaksi/barang_keluar_form.php` | `\App\Controllers\BarangKeluar::form` |
| `transaksi/checkpoint.php` | `\App\Controllers\Progres::checkpoint` |
| `transaksi/kasir_resto.php` | `\App\Controllers\KasirResto::index` |
| `transaksi/online_orders.php` | `\App\Controllers\OnlineOrders::index` |
| `transaksi/order-status-history.php` | `\App\Controllers\PenjualanDetail::statusHistory` |
| `transaksi/order_progress.php` | `\App\Controllers\Progres::orderProgress` |
| `transaksi/pembelian-detail.php` | `\App\Controllers\Pembelian::detail` |
| `transaksi/pembelian.php` | `\App\Controllers\Pembelian::index` |
| `transaksi/pembelian2.php` | `\App\Controllers\PembelianCepat::index` |
| `transaksi/pembelian_form.php` | `\App\Controllers\Pembelian::form` |
| `transaksi/pemesanan_restoran.php` | `\App\Controllers\PemesananRestoran::index` |
| `transaksi/penjualan-detail.php` | `\App\Controllers\PenjualanDetail::detail` |
| `transaksi/penjualan-invoice.php` | `\App\Controllers\PenjualanDetail::invoice` |
| `transaksi/penjualan.php` | `\App\Controllers\Penjualan::index` |
| `transaksi/penjualan2.php` | `\App\Controllers\PenjualanCepat::index` |
| `transaksi/penjualan_form.php` | `\App\Controllers\Penjualan::form` |
| `transaksi/pesanan_meja.php` | `\App\Controllers\OnlineOrders::pesananMeja` |
| `transaksi/picking_list.php` | `\App\Controllers\Progres::pickingList` |
| `transaksi/retur_customer.php` | `\App\Controllers\ReturCustomer::index` |
| `transaksi/retur_customer_form.php` | `\App\Controllers\ReturCustomer::form` |
| `transaksi/retur_supplier.php` | `\App\Controllers\ReturSupplier::index` |
| `transaksi/retur_supplier_form.php` | `\App\Controllers\ReturSupplier::form` |
| `upgrade.php` | `\App\Controllers\Upgrade::index` |
| `web1.php` | `\App\Controllers\PublicWeb::index` |

## File pendukung (10)

| Sumber | Implementasi CI4 |
| --- | --- |
| `config/database.php` | `app/Config/Database.php`, `.env`/`env`, `db_helper.php`, `pos_helper.php`, `billing_helper.php`, `sales_helper.php` |
| `includes/header.php`, `includes/sidebar.php`, `includes/footer.php` | `app/Views/layouts/main.php`, `app/Views/layouts/bare.php`, helper navigasi dan view mandiri |
| `includes/product_batches.php` | `pos_helper.php`, `stock_helper.php` |
| `includes/webhook.php` | `stock_helper.php`, `marketplace_helper.php` |
| `includes/barang_keluar_schema.php` | `stock_helper.php` |
| `includes/opname_helpers.php` | `stock_helper.php`, `xlsx_helper.php` |
| `includes/xlsx_writer.php` | `xlsx_helper.php` |
| `includes/sale_logger.php` | `pos_helper.php` (`logSaleSave`, `logTableWrite`) |

Snapshot daftar entry point tersedia di `tests/_support/Fixtures/legacy_entrypoints.json`; tes `FinalPublicPortTest::testEveryLegacyEntryPointResolvesToAControllerMethod` memeriksa seluruh pemetaan.
