REPORT BENCH — START HERE

This is a demonstration of a report tool you run yourself. It checks one fixed
CSV format and creates a combined PDF grouped by location. The included records
are fictional. Your own format and business rules need to be agreed and tested
before using this demonstration for a customer workflow.

FILES IN THIS FOLDER

offline-tool.html       The complete tool. Open this file in a desktop browser.
synthetic-demo.csv      Fictional sample with deliberate errors.
sample-report.pdf      The sample's combined, four-page PDF.
sample-run-audit.json   The sample's full validation results and excluded rows.
THIRD-PARTY-NOTICES.txt  Notices for the bundled software and fonts.

No installation, account, subscription or paid API is required. JavaScript must
be enabled in your browser. The tool and its fonts are bundled in the HTML file;
it runs without an internet connection and does not upload files to a server.

TRY THE SAMPLE

1. Open offline-tool.html. If it opens as text, use your browser to open the file.
2. Select "Try the synthetic sample". It checks the sample and prepares a PDF.
3. Expect 20 input records: 15 included and 5 excluded. Included totals are
   17.06 hours and USD 1,488.70 across three locations.
4. Open "Records needing review" to see why records were excluded. Both copies
   of a duplicated ID are excluded, including a valid copy paired with an
   invalid-date copy. Excluded records contribute nothing to the totals.
5. Select "Download PDF" and "Download run audit". Your browser saves the files
   as operations-report.pdf and run-audit.json, or asks where to save them.

USE YOUR OWN AGREED CSV

Select "Download the input template" for the header, then prepare a UTF-8 CSV
with these seven columns in exactly this order:

record_id,report_date,location,job_type,status,hours,amount

Choose your CSV under "Open a CSV file", or use "Paste CSV instead". Set the
report title, then select "Check and build report". Review the included and
excluded counts before downloading. After changing the input or title, build
again. The tool clears old results when the input changes.

You supply the source data and rules. The tool does not guess missing values,
repair dates, choose between duplicate records or determine whether a source
amount is correct. Correct the source CSV and run it again when needed.

INPUT RULES

- At most 1,000 data records, 2,000,000 UTF-8 bytes and 20 distinct nonblank
  location values. These limits include records later excluded. An oversized
  file is refused; it is not silently shortened.
- Required IDs, locations and job types cannot be blank. IDs allow 64 characters;
  locations and job types allow 80 each. IDs remain text. Keep them as text when
  preparing exports so your spreadsheet does not remove leading zeros first.
- Text is kept exactly as entered. Capitalization and spaces matter:
  North and north are different locations, as are North and a space-padded North.
  Duplicate ID matching is also exact and case-sensitive.
- Dates must be real dates written YYYY-MM-DD, such as 2026-09-01.
- Status must be exactly completed, pending or cancelled.
- Hours and amount must be nonnegative ordinary numbers with no currency sign,
  thousands separator or surrounding spaces, and no more than two decimal places.
  Write 0.50 rather than .5. Maximum per record: 9999.99 hours and 999999.99 amount.
- Amounts in this template are explicitly USD. Every accepted status contributes
  to the totals, including pending and cancelled. These are recorded amounts,
  not earned revenue, cash received, profit, an invoice or a tax calculation.
- Hours are decimal hours: 1.25 hours means one hour and 15 minutes.

Commas, quotes and line breaks inside a field require normal CSV quoting. Export
from your source application as UTF-8 CSV where possible. An Excel .xlsx workbook,
scanned document or PDF is not an input file for this tool.

PDF AND AUDIT

The PDF is ONE combined file: an overall summary followed by a section for each
location. The two-page limit applies to EACH SECTION, not to the whole PDF. The
sample has four pages. A larger valid report may have more than two pages overall.
If any section needs more than two readable pages, PDF export stops with an
explanation; it does not silently leave out categories to make them fit.

The PDF uses US Letter pages and the bundled Noto Sans font. Some scripts and
symbols are unsupported. An unsupported character stops PDF export instead of
producing missing text. The source can still be inspected in the run audit. A
different font or layout requires adaptation and another check.

Location and job labels are shown in quotes. Escapes such as \n show a line break
present in the source label and keep otherwise similar labels distinct.

The run audit is a separate JSON text file with every accepted and excluded
record, original excluded field values, reasons and totals. Open it in a text
editor if needed. "sourceRow" counts CSV records including the header, so the
first data record is 2. "lineStart" and "lineEnd" identify physical file lines.
They can differ when a quoted field contains a line break. Numeric fields named
hoursHundredths and amountCents store hundredths: 125 means 1.25, not 125 minutes.

The screen shows at most the first 15 excluded records. The audit contains all
of them. Keep the audit with the PDF, especially when any records were excluded.
A file with no valid records can produce validation feedback but no empty PDF.

LOCAL FILES AND SCOPE

The tool does not automatically save your browser session. Use "Clear this
session" to clear the loaded data, or close the tab when finished. Downloaded
PDFs and audits remain wherever you save them; the audit can contain all of the
original record details. Keep or share those files according to your own rules.

This is a manual, single-format report generator. It does not monitor an inbox,
run on a schedule, email reports, update accounting/CRM systems, interpret scans,
or verify the business meaning of your data. Local checks establish the stated
format and arithmetic; they do not certify a customer's source data or prove
that an untested workflow is ready for production.

Updated demonstration: loads the fictional 20-record example automatically (15 included, 5 excluded, 17.06 hours, USD1488.70). Compare with the ready-to-report example (3 included, no exclusions, 4.50 hours, USD450.00) and download either sample CSV. All demos link opens the public website; processing remains offline.
