Purchasing data · Data engineering
Supplier catalog imports
A CSV import tool for supplier catalogs. Review price and part changes, correct rejected rows, then approve the batch without overwriting a newer catalog version.
Local application and operations rehearsal completed

Implementation
Supplier CSVs are retained with their source digest, parsed with an explicit monetary locale, and staged separately from the current catalog. The review shows added, changed, unchanged, missing and rejected rows.
Approval checks the catalog version and review digest inside the write transaction. Competing reviews become stale; a fault during application rolls back the entire batch. Repeating a successful request returns the original result.
The dark browser interface includes role-based controls, original CSV and JSON report downloads, paginated reviews, and a catalog preview.
Checked online SQLite snapshots, restore into a new directory, and a periodic backup command are included. An executed operations rehearsal covers abrupt process exits, recovery and rejected inputs.
Inputs and assumptions
- Included ACME and EURO supplier records are synthetic. Missing source rows remain in the catalog.
- Item identity is supplier plus normalized part number. USD, EUR and GBP prices use integer cents; EA, BOX, KG and M units are explicit.
- Python 3.12 and local SQLite storage. SQLite serializes writers; the earlier PostgreSQL deployment plan is not included.
Results
| Database and HTTP tests passed | 20 |
|---|---|
| Largest synthetic import | 100,000 rows |
| 100,000-row stage time, recorded host | 9.8779 s |
| 100,000-row commit time, recorded host | 2.4308 s |
| Operational checks passed | 14 / 14 |
Verification
20 database and HTTP tests pass, including concurrent approvals, response retries, rollback after a row write, rejected CSVs and role checks. The sample workflow was also exercised in a browser. A separate operations rehearsal passes 14 expected-outcome checks, including process crashes, checked snapshots, restore and a finite backup schedule.
python tests.py
python evidence.py
python operations_rehearsal.pyDownload the verification record ↓Additional scenarios
14 outcomes checked through executed synthetic operations. The report lists the expected and observed outcomes for each check.
Read the validation report ↗Project files
The ZIP contains the source, inputs, results, and instructions. These files are also available individually.
- Application and transaction rulesapp.py · 21 KB
- SQLite schemaschema.sql · 1 KB
- Sample supplier updatefixtures/price-update.csv · 1 KB
- Rejected-row examplefixtures/rejected.csv · 1 KB
- Applied import evidenceresults/applied-import.json · 3 KB
- Measured CSV size sweepresults/size-sweep.json · 1 KB
- Database and HTTP teststests.py · 10 KB
- Operator guideOPERATOR.md · 3 KB
- Executed operations and recovery reportoperations-report.html · 8 KB
- Expected and observed operational outcomescompletion.json · 7 KB
- Reproducible crash and recovery scenariosoperations_rehearsal.py · 9 KB
- Checked SQLite backup and restore CLIoperations.py · 5 KB
- Periodic snapshot runnerbackup_schedule.py · 1 KB
- Deployment, recovery and capacity assumptionsOPERATIONS.md · 5 KB
Archive checksum
SHA-256
b3a23d60407494c1e54ba0787f17399ab7118b37c4b8bbad4b3117bfae00b178Original project scope
Archived brief PDF ↗Run locally
Python 3.12+ / SQLite via Python standard library
Extract the ZIP and open a terminal in the supplier-catalog-imports folder. The README includes setup and usage details.
python app.py --seed --port 8011
# Open http://127.0.0.1:8011
python tests.py
python evidence.py
python build_report.py
python operations_rehearsal.pyLimits
- Localhost-only reference app with fixed demo accounts and one-hour in-memory sessions. No production identity provider or TLS listener.
- Files are limited to 16 MiB and 100,000 rows. Parsing and diff storage are memory-bound; paginated review still loads the complete stored diff. Timings are measurements of this host, not capacity guarantees.
- No supplier API, automatic deletion, currency conversion or unattended import. Process-crash recovery and corrupted-snapshot rejection were executed; physical disk failure and power-loss behavior remain outside the model.
