← Open the tool
# Order Delta Desk 1.0.0

An offline daily review desk for people who receive recurring order exports. Match by PO + line, review quantity/date/status changes, isolate duplicates, and save a reusable recipe.

## Start in 60 seconds
1. Extract the entire ZIP into a folder. Keep the HTML, CSS and JavaScript together.
2. Open `index.html` in a current desktop Chrome or Edge browser. No installation, account, subscription or internet is required.
3. Click **Load example orders**. The synthetic demo shows two changed lines, one added, one removed, two unchanged and a duplicate-key group.
4. Choose your earlier and latest UTF-8 CSV/TSV exports. Map the key columns. For purchase orders use BOTH PO and Line; a PO alone normally is not unique.
5. Select fields, then compare. Export changes CSV, issues CSV, or the full JSON report. Save a recipe for tomorrow.

## What the statuses mean
- Changed: a uniquely matched record differs in one or more chosen fields.
- Added/removed: the key appears in only one export. This does not prove an order was created/cancelled: your export scope may have changed.
- Unchanged: the chosen fields match under your explicit rules. Unselected fields are not checked.
- Numeric review: one or more selected numeric fields cannot be parsed. Other valid field differences may still appear.
- Duplicate keys: ALL records sharing a key on either side are quarantined, including their counterpart. Never silently choose the first duplicate. They are not included in status counts.
- Blank keys: reported separately. Whitespace-only key components are invalid.

The issue count counts issues, not distinct records. A record can have several invalid numeric fields. Record numbers count CSV records, including the header, rather than physical lines; a quoted field may span multiple lines.

## Format rules and limits
UTF-8 only, optional BOM; commas, semicolons and tabs auto-detected from the header. Quoted multiline fields and doubled quotes work. Headers must be unique and nonempty. Every nonblank row must have the header's field count. Completely empty records are ignored. Leading zeros in keys are retained. Maximum 25 MB / 100,000 records per file. The table previews 200 matching records; exports include all results. The full JSON includes both original rows, including for added/removed records.

Date values compare as text. Dates in different formats are different. Numeric mode accepts signed plain decimals using your selected decimal separator, no currency symbol, grouping separators, percentages or exponent notation. Empty is not zero. Tolerance is absolute, not percentage; 0 means exact subject to tiny floating-point rounding allowance. This tool is not an accounting decimal engine; compare very long IDs as text and do not use it for financial settlement. Trim/case options affect comparison only; originals remain in JSON. Key normalization is explicit and can reveal duplicates.

## Automation
Optional free Node.js 18+ runtime required ONLY for command-line use:

```
node cli.cjs examples/earlier.csv examples/latest.csv examples/recipe.json output-today
```

Output folder must not exist. Exit codes: 0 = clean comparison, 1 = differences or review issues, 2 = failure. Produces report.json, changes.csv and issues.csv. Run `node --test test.cjs` to reproduce core tests.

## Privacy, export safety and support
Files are processed locally, never uploaded by the app. No analytics, remote fonts or network calls. Closing/reloading clears data. Recipe JSON contains mappings and rules, not source rows. Report JSON and CSV do contain your data. CSV cells with formula-like prefixes are prefixed with an apostrophe for safer spreadsheet opening (including negative numbers); use JSON for exact original values. Formula neutralization does not protect against every possible downstream spreadsheet import setting.

If a file fails: export UTF-8 CSV from the originating program, check quoting and field counts, and remove duplicate/empty headers. XLSX is not accepted; export CSV first. If nothing matches, inspect key mappings, leading zeros and whitespace. If results disappear after changing a setting, compare again; stale exports are intentionally unavailable. For an issue report, share a minimal anonymized pair of files, the recipe, app version, browser and expected result through the marketplace support channel once available. Do not send sensitive order data.

## Editions and compatibility
Free Lite: up to 250 rows per file, composite keys, text comparison, duplicate checks and report exports. Full: 100,000 rows, numeric tolerances, saved recipes, CLI and editable source. Core tested on Node.js on Windows; browser verification is recorded in the portfolio QA report. Other platforms are not claimed tested. No automatic ERP/store connection, fuzzy matching, currency conversion, XLSX import, or date interpretation.

## License and changes
See LICENSE.txt. Version 1.0.0 is the initial release. No promise of future updates, response times or lifetime support is included.