Duta Mode • CTO Technical Validation

Visual FoxPro 9 DBF → REST API • 100K Stress Proof

Synthetic data in Visual FoxPro table format, real DBF parser & real conversion pipeline. Fokus demo: bagaimana 100.000 row VFP DBF dibaca secara streaming, termasuk tipe native VFP, dinormalisasi, dibatch, divalidasi, di-ingest melalui kontrak API, dicegah duplikasinya, dan dicatat metrik prosesnya.
● READY FOR STRESS TEST
Source Format
0x30
Visual FoxPro
DBF Source Rows
100.000
Real DBF Size
19,17 MB
Batch Size
1.000
Unique Inserted
100.000
Gross Synced
Rp70.181.850.000

Technical Journey

1. Visual FoxPro 9 / DBF 0x30→2. Header + Field Parser→3. Streaming Reader→4. Field Mapping→5. Normalize→6. Batch 1.000→7. REST API Contract→8. Validate + Idempotency→9. Central Store

DBF Structure Inspector

File: POS_VFP9_100K.DBF • Signature 0x30 (Visual FoxPro) • Header 680 bytes • VFP backlink 263 bytes • Record 201 bytes
DBF FieldTypeLengthAPI Field
TRX_IDC20trx_id
STORE_IDC10branch_code
CUST_IDC16customer_id
CUST_NAMEC40customer_name
SKUC16sku
PRODUCTC50product_name
QTYI4qty
TOTALY8gross_amount
TRX_ATT8transaction_at
PAYMENTC12payment_method
CHANNELC12channel
ROW_NOI4—

Raw DBF → Normalized API Payload

Raw record read from DBF
{ "TRX_ID": "DM26000000000001", "STORE_ID": "SOLO", "CUST_ID": "C0000001", "CUST_NAME": "Andi Saputra", "SKU": "DM-TSHIRT-01", "PRODUCT": "Basic T-Shirt", "QTY": 2, "TOTAL": 79137, "TRX_AT": "2026-08-01T08:00:37+07:00", "PAYMENT": "CASH", "CHANNEL": "STORE", "ROW_NO": 1 }
After mapping & normalization
{ "trx_id": "DM26000000000001", "branch_code": "SOLO", "customer_id": "C0000001", "customer_name": "Andi Saputra", "sku": "DM-TSHIRT-01", "product_name": "Basic T-Shirt", "qty": 2, "gross_amount": 79137, "transaction_at": "2026-08-01T08:00:37+07:00", "payment_method": "CASH", "channel": "STORE", "source": "Visual FoxPro DBF", "source_row": 1 }

Visual FoxPro Format Proof SOURCE VERIFICATION

Signature Byte
0x30
Visual FoxPro
VFP Backlink Area
263 bytes
Free-table backlink area included in header.
Native VFP Types
I • Y • T
Integer, Currency, DateTime are decoded from binary VFP storage.

Transparency: bundled 100K file is synthetic and generated to the documented Visual FoxPro table format for safe testing. Package also includes vfp9/generate_100k_vfp9.prg; if executed inside Visual FoxPro 9, it regenerates the same schema natively. Final production validation remains against Duta Mode's actual DBF/template when permitted.

Batch Processing Trace

Belum ada stress run.

REST API Contract

GET /api/health GET /api/dbf-inspect POST /api/transactions POST /api/stress-run POST /api/reset Header: X-Duta-POS-Key: ******** Payload batch: { "batch": 1, "transactions": [ ... max 1000 rows ... ] }

Production Mapping Later

DBF synthetic Visual FoxPro hanya menggantikan data sensitif produksi. Setelah struktur DBF asli tersedia, yang berubah hanya field mapping / normalization adapter.

DBF Duta Asli→Mapping Adapter→API Contract yang Sama→Central DB

PoC store pada demo ini sengaja ringan untuk shared hosting. Pada production, endpoint ingestion yang sama diarahkan ke MySQL/MariaDB central database + queue/retry worker.

Apa yang dibuktikan

Visual FoxPro Format
Signature byte 0x30, VFP header/backlink, field descriptor, dan tipe native I/Y/T diparse langsung. Bukan CSV yang diganti ekstensi.
Streaming
100K row tidak dimuat sekaligus ke RAM. Reader yield per row lalu membentuk batch.
Idempotency
TRX_ID menjadi external id. Dataset yang dikirim ulang terdeteksi sebagai duplicate, bukan transaksi baru.
Observable
Ada batch metrics, failure count, throughput, duration dan memory peak.
One-way first
Sesuai request CTO: DBF → API dibuat one-way dengan trigger manual dulu.
Production-ready contract
Connector cabang nantinya cukup POST JSON ke endpoint yang sama setelah mapping DBF asli.