Adopt agents-settings kit, ship Product/SKU scan models, harden auth, verify OCR accuracy

Backend (app-pfm-ocr-v2/backend):
- Product/SKU scan feature complete: trained DINOv2 index (118 reference
  photos, 16 SKU classes) and YOLO classifier (83.3% top-1 val accuracy),
  fixed scripts/install-pipeline.sh (was missing ultralytics/torch), fully
  browser-verified end-to-end on /scan-pfm. Mobile m-scan-pfm page cancelled
  (Flutter app handles mobile; web UI is desktop-only for pipeline testing).
- Fixed a real data-loss bug: Save Ground Truth (scan-pfm and the DO-flow's
  manual-label) was silently writing into the pfm-web-app container's
  ephemeral filesystem instead of the host, because /sources wasn't
  bind-mounted in docker-compose.yml. Added the mount, recovered an
  orphaned entry.
- accounts.password is now bcrypt-hashed (bcryptjs, idempotent migration
  in db/init.ts) instead of plaintext; login route compares hashes.
- /api/v1/documents/* (list, PUT, upload) now enforces real 401 auth,
  matching what the Flutter client already sends. The "classic" routes
  deliberately stay open — they're dev-only web UI with no login flow and
  won't exist in production.
- OCR accuracy investigated end-to-end: real baseline is 95.10% overall
  (target met; accuracy_report.md was stale at 75.04%, now flagged). Fixed
  one genuine parser.ts bug (SO/DO field duplication in the global fallback
  regex); remaining gaps are OCR/layout-model limitations, not parser bugs.
- Adopted a standalone copy of the fhanyuh/agents-settings e/n workflow
  scoped to backend/ (AGENTS.md Part A/B split, SKILLS.md, plans/, docs/),
  independent of the root copy which now covers Flutter only.
- next-implementation.md deleted; content folded into
  backend/plans/next-enhancements.md for traceability.

Root:
- Adopted fhanyuh/agents-settings kit (AGENTS.md, SKILLS.md, plans/,
  docs/feature-list.md), scoped to the Flutter app only.
- Pending documents queue now persists to Hive (lib/core/storage) instead
  of memory-only, surviving an app kill mid-upload.

Removed backend_backup/ (stale Express/Prisma prototype, superseded by
pfm-web-app) and the completed plans/next-enhancement-plan.md checklist.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Rafhan Mazaya FathurrahmanandClaude Sonnet 5 committed 2026-07-08 11:56:32 +07:00
1 parent 3df9f6ec5d
commit e60ab63154
129 files changed
+8520 -6684

No files matched your search

+85 -79
View File
@@ -49,8 +49,8 @@
"noDO": "1659932080",
"tanggal": "15 May 2026",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "AYAM HITZ HO ANCOL",
"alamat": "JL. ANCOL BARAT VIII/1 KEL. ANCOL, KEC. PADEMANGAN JAKARTA UTARA, DKI JAKARTA",
"store": "PM TAKTAKAN SERANG",
"alamat": "JL. RAYA TAKTAKAN NO. 1 G, KEL. LONTAR BARU, KEC. SERANG, SERANG",
"plat": "B 9723 CXS",
"items": [
{
@@ -94,7 +94,7 @@
{
"kodeBarang": "21002601",
"namaBarang": null,
"banyak": "1",
"banyak": "1 BOX",
"jumlah": "6 PAC"
}
]
@@ -235,8 +235,8 @@
"noDO": "1659943004",
"tanggal": "25 May 2026",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1 KEL. ANCOL, KEC. PADEMANGAN JAKARTA UTARA, DKI JAKARTA",
"store": "PM MUSTIKA MEDIA",
"alamat": "RUKO GRAHA MUSTIKA MEDIA, JL. KP LUBANG BUAYA, RT.001, RW.003, KEL. LUBANG BUAYA, KEC. SETU, BEKASI 17320",
"plat": "B 9536 UCO",
"items": [
{
@@ -421,9 +421,9 @@
"noSO": "1691879196",
"noDO": "1659905109",
"tanggal": "23 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM PANDU RAYA",
"alamat": "JL. PANDU RAYA/ H. ACHMAD ADNAWIJAYA NO. 68, RT. 001, RW. 015, KEL. TEGALGUNDIL, KEC. BOGOR UTARA, BOGOR",
"plat": "B 9948 VCC",
"items": [
{
@@ -440,9 +440,9 @@
"noSO": "1691871022",
"noDO": "1659897809",
"tanggal": "17 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM NEW BINTARO SEKTOR 5",
"alamat": "JL. BINTARO UTAMA RAYA 5 BLOK EA NO 17, RT.001, RW.011, KEL. JURANGMANGGU TIMUR, KEC. PONDOK AREN, KOTA TANGERANG SELATAN 15222",
"plat": "B 9599 CXS",
"items": [
{
@@ -465,9 +465,9 @@
"noSO": "1691870689",
"noDO": "1659897396",
"tanggal": "17 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM TAMAN DUTA CIBODAS",
"alamat": "PERUM TAMAN CIBODAS, JL. DUTA RAYA BLOK K1 NO. 20, RT. 007, RW. 006, KEL. SANGIANG JAYA, KEC. PERIUK, TANGERANG",
"plat": "B 9254 SCG",
"items": [
{
@@ -490,9 +490,9 @@
"noSO": "1691865548",
"noDO": "1659892421",
"tanggal": "14 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM SASMITA",
"alamat": "JL. KENAIBAN RT. 002, RW. 002, KEL. PABUARAN, KEC. KARAWACI, TANGERANG",
"plat": "B 9053 VCF",
"items": [
{
@@ -521,10 +521,10 @@
"noSO": "1691859106",
"noDO": "1659886692",
"tanggal": "09 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"plat": "B 9053 VCF",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM SALAM RAYA",
"alamat": "JL.SALAM RAYA, RT.005, RW.003, KEL. SUKABUMI UTARA, KEC. KEBON JERUK, JAKARTA BARAT 11540",
"plat": "B 9260 BXT",
"items": [
{
"kodeBarang": "12010112",
@@ -582,9 +582,9 @@
"noSO": "1691868563",
"noDO": "1659895333",
"tanggal": "16 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM REMPOA",
"alamat": "JL. REMPOA RAYA NO. 08, RT. 004, RW. 013, KEL. BINTARO, KEC. PESANGGRAHAN, JAKARTA SELATAN",
"plat": "B 9365 AI",
"items": [
{
@@ -619,9 +619,9 @@
"noSO": "1691869400",
"noDO": "1659896184",
"tanggal": "16 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "MOTHER STORE - PM WARUNG JATI TIMUR RAYA",
"alamat": "JL. WARUNG JATI TIMUR NO.26, RT.007, RW.004, KEL. KALIBATA, KEC. PANCORAN, JAKARTA SELATAN 12740",
"plat": "B 9310 BXT",
"items": [
{
@@ -680,9 +680,9 @@
"noSO": "1691903313",
"noDO": "1659927197",
"tanggal": "11 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM RAWA BUNTU",
"alamat": "JL. RAWA BUNTU UTARA BLOK UA NO. 16, RT. 002, RW. 006, KEL. RAWA BUNTU, KEC. SERPONG, TANGERANG SELATAN",
"plat": "B 9683 VCF",
"items": [
{
@@ -711,9 +711,9 @@
"noSO": "1691895167",
"noDO": "1659919748",
"tanggal": "05 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "MOTHER STORE - PM WARUNG JATI TIMUR RAYA",
"alamat": "JL. WARUNG JATI TIMUR NO.26, RT.007, RW.004, KEL. KALIBATA, KEC. PANCORAN, JAKARTA SELATAN 12740",
"plat": "B 9042 VCC",
"items": [
{
@@ -754,9 +754,9 @@
"noSO": "1691895765",
"noDO": "1659920402",
"tanggal": "06 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM PASAR PARUNG BOGOR",
"alamat": "JL. TULANG KUNING - PASAR PARUNG DESA WANO, RT.001, RW.005, KEL. WARU, KEC. PARUNG, BOGOR 16330",
"plat": "B 9260 VCF",
"items": [
{
@@ -791,9 +791,9 @@
"noSO": "1691896671",
"noDO": "1659921089",
"tanggal": "06 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM KELAPA DUA KARAWACI",
"alamat": "RUKO SENTRA NIAGA KELAPA II / R 9, KEL. KELAPA DUA, KEC. KELAPA DUA, TANGERANG",
"plat": "B 9899 CXR",
"items": [
{
@@ -846,16 +846,16 @@
"noSO": "1691895813",
"noDO": "1659920441",
"tanggal": "06 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM PANORAMA BALI RESIDENCE BGR",
"alamat": "PANORAMA BALI RESIDENCE B NO 16, KEL. PUTAT NUTUG, KEC. CISEENG, KAB. BOGOR 16120",
"plat": "B 9417 VCC",
"items": [
{
"kodeBarang": "11140062",
"namaBarang": "AMPELA 1 KG FROZEN (20 PAC/KARUNG)(*)",
"banyak": "1 KRG",
"jumlah": "2 PAC"
"jumlah": "20 PAC"
},
{
"kodeBarang": "11310014",
@@ -883,9 +883,9 @@
"noSO": "1691898090",
"noDO": "1659922449",
"tanggal": "07 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM KARANG BOLONG SERANG",
"alamat": "JL. RAYA KARANG BOLONG BANDULU (KP SEMPUR) NO.22, RT.004, RW.001, KEL. BANDULU, KEC. ANYAR, KAB. SERANG 42166",
"plat": "B 9259 BCU",
"items": [
{
@@ -944,9 +944,9 @@
"noSO": "1691853079",
"noDO": "1659881372",
"tanggal": "06 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM HAJI MUHI",
"alamat": "JL. H. MUHI NO. 14, RT. 001, RW. 004, KEL. PONDOK PINANG, KEC. KEBAYORAN LAMA, JAKARTA SELATAN",
"plat": "B 9260 BXT",
"items": [
{
@@ -981,10 +981,10 @@
"noSO": "1691848409",
"noDO": "1659876922",
"tanggal": "02 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"plat": "B 9260 VCF",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM TANAH KUSIR",
"alamat": "JL. RC VETERAN NO. 17, RT. 04, RW. 012, KEL. BINTARO, KEC. PESANGGRAHAN, JAKARTA SELATAN",
"plat": "B 9260 BXT",
"items": [
{
"kodeBarang": "11110074",
@@ -1012,9 +1012,9 @@
"noSO": "1691850584",
"noDO": "1659878594",
"tanggal": "03 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI ARE",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM KAMPUNG TENGAH",
"alamat": "JL. RAYA TENGAH RT. 004, RW. 009, KEL. TENGAH, KEC. KRAMAT JATI, JAKARTA TIMUR 13540",
"plat": "B 9308 BXT",
"items": [
{
@@ -1037,9 +1037,9 @@
"noSO": "1691848878",
"noDO": "1659877509",
"tanggal": "02 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM CIPETE RAYA",
"alamat": "JL. CIPETE RAYA NO. 15 F, RT. 006, RW. 003, KEL. CIPETE SELATAN, KEC. CILANDAK, JAKARTA SELATAN",
"plat": "B 9767 NCD",
"items": [
{
@@ -1062,9 +1062,9 @@
"noSO": "1691872559",
"noDO": "1659898844",
"tanggal": "18 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "KU - DANAU SINGKARAK DEPOK",
"alamat": "JL. DANAU SINGKARAK, RT.001, RW.008, KEL. SUKAMAJU, KEC. CILODONG, DEPOK 16415",
"plat": "B 9255 JXR",
"items": [
{
@@ -1105,9 +1105,9 @@
"noSO": "1691852095",
"noDO": "1659880471",
"tanggal": "04 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM KAMPUNG SAWAH 2",
"alamat": "JL. KI HAJAR DEWANTARA KAV. 12 A, RT. 001, RW. 004, KEL. SAWAH, KEC. CIPUTAT, TANGERANG SELATAN 15413",
"plat": "B 9402 SCH",
"items": [
{
@@ -1122,6 +1122,12 @@
"banyak": "1 KRG",
"jumlah": "20 PAC"
},
{
"kodeBarang": "11310024",
"namaBarang": "AYAM SIZE A FROZEN (0.9-1)KG/PC(*)",
"banyak": "2 KRG",
"jumlah": "40 PC"
},
{
"kodeBarang": "11660050",
"namaBarang": "PAHA BAWAH (1 KG)(*)",
@@ -1136,16 +1142,16 @@
"noSO": "1691863154",
"noDO": "1659889989",
"tanggal": "11 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM GRAND CIKARANG CITY 2",
"alamat": "JL. BOULEVARD CINITY BLOK D12R -26, KEL. KARANG RAHARJA, KEC. CIKARANG UTARA, KAB. BEKASI 17534",
"plat": "B 9372 BXT",
"items": [
{
"kodeBarang": "11310013",
"namaBarang": "AYAM SIZE1 FROZEN (0.75-0.8) KG(*)",
"banyak": "1 KRG",
"jumlah": "30 PC"
"banyak": "2 KRG",
"jumlah": "60 PC"
}
]
},
@@ -1155,9 +1161,9 @@
"noSO": "1691848523",
"noDO": "1659877015",
"tanggal": "02 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM TIMBUL",
"alamat": "JL. TIMBUL NO. 01, RT. 007, RW. 004, KEL. CIPEDAK, KEC. JAGAKARSA, JAKARTA SELATAN",
"plat": "B 9726 UCT",
"items": [
{
@@ -1186,9 +1192,9 @@
"noSO": "1691869400",
"noDO": "1659896184",
"tanggal": "16 April 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "DKI AREA",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "MOTHER STORE - PM WARUNG JATI TIMUR RAYA",
"alamat": "JL. WARUNG JATI TIMUR NO.26, RT.007, RW.004, KEL. KALIBATA, KEC. PANCORAN, JAKARTA SELATAN 12740",
"plat": "B 9310 BXT",
"items": [
{
@@ -1217,9 +1223,9 @@
"noSO": "1691898090",
"noDO": "1659922449",
"tanggal": "07 May 2026",
"customer": "PT.PRIMAFOOD INTERNATIONAL",
"store": "PFM-KU",
"alamat": "JL. ANCOL BARAT VIII/1, ANCOL, PADEMANGAN, JAKARTA UTARA, 14430 JAKARTA UTARA",
"customer": "PT. PRIMAFOOD INTERNATIONAL",
"store": "PM KARANG BOLONG SERANG",
"alamat": "JL. RAYA KARANG BOLONG BANDULU (KP SEMPUR) NO.22, RT.004, RW.001, KEL. BANDULU, KEC. ANYAR, KAB. SERANG 42166",
"plat": "B 9259 BCU",
"items": [
{