DataValidator
Documentation — how intake validation works and how to supply data that passes it. open the validator

Data intake validation

The validator exists so that the person supplying data finds out immediately whether what they supplied is adequate — not days later when an analysis quietly produces nothing, or worse, produces a number built on a column that didn't parse. You drop a file; within the same second you get a verdict, the specific rows and cells behind that verdict, and a list of which analyses the data as supplied can and cannot feed.

Everything runs inside your browser. Files are read locally, parsed locally and judged locally. No upload occurs during validation.

The three verdicts

verdictmeaningwhat to do
READY Every enabled check passed. The file can feed any analysis that wants its type. Nothing. Supply the next document.
ISSUES No fatal problems, but warnings exist — ambiguous type, duplicate rows, unrecognized tier labels, mixed periods. Analyses will run; some members or rows may be skipped or mis-joined. Read the findings table. Fix what matters, or accept the warnings knowingly.
INADEQUATE At least one enabled error-severity check failed — a required field is missing, no rows parsed, dates or amounts are unreadable, or the file's own totals do not tie. The file cannot be used as supplied. Each finding names the row, the column and the value.

A verdict is always relative to the enabled checks. Disable a check and its findings stop counting; the verdict recomputes instantly.

How a file is judged

  1. Parse. The format is detected from the bytes, never from the filename: spreadsheet workbooks by their zip signature, JSON and NDJSON by structure, tab- versus comma-delimited by the header line, fixed-width remittance and payroll registers by their record layout, and statement letters by their prose. Comment banners are stripped and noted.
  2. Identify. The parsed columns and field names are scored against the signature of every known document type. The best match wins; the margin to the runner-up is itself a check, so a file that could be two things tells you so instead of guessing silently. A filename like final_v2 (3).xlsx affects nothing.
  3. Validate. Every enabled check that applies to the identified type runs over every row. Findings carry the row number, the column and the offending value.
  4. Verdict. Errors ⇒ INADEQUATE; warnings only ⇒ ISSUES; neither ⇒ READY.
  5. Cross-file. Once more than one document is present, set-level checks join them: do the invoice's members appear in the census, do child files reference known employees, does the rate sheet cover the plans the census uses.

If the identifier picks the wrong type — or the margin warning asks you to confirm — the type selector on the file card overrides it, and every check re-runs against the corrected type.

Document types

Eleven document types are recognized. Required fields are the fields the type cannot work without — each row below lists the accepted spellings, since every payroll and carrier system names columns differently; any one spelling in a group satisfies it. Optional fields enrich the analyses but their absence never blocks intake.

File formats

formatdetected bynotes
CSVcomma-delimited headerquoted fields and embedded commas handled; leading # comment lines skipped
TSVtabs in the header linesame handling as CSV
XLSXzip signaturefirst worksheet is read; a title or banner row above the header is skipped automatically
JSONobject/array structurerecord arrays (employees, records, remittance) become rows; nested objects are flattened; structured documents without arrays (a rate schedule, a contribution model, an org tree) become one row per section or node
NDJSONone JSON object per lineeach line becomes a row
Fixed-widthHDR/DTL records, or a payroll register title linecarrier remittance extracts and deduction registers; group, period and employer are read from the header record
Statement text"Statement of Account" prosesubscriber lines of the form Name is enrolled at $amount become rows; group and coverage period are read from the letterhead
A banner declaring the file to be sample or synthetic data is detected in any format and surfaced as an informational finding, so demonstration files are never mistaken for a client's production data.

Every check

Each check is one checkbox in the validator. Severity decides what a finding does to the verdict: an error makes the file INADEQUATE, a warning makes it ISSUES, an info finding changes nothing. The how to fix column is addressed to the person who exported the file.

Tuning, and the required-fields filter

Validation strictness is a decision, not a constant. Two controls exist:

Per-check checkboxes

Every check can be switched off individually. The live count next to each checkbox shows how many findings that check is currently producing across all dropped files, so you can see before toggling exactly what you are about to silence or surface. Verdicts recompute the moment a box changes.

Required fields only

The Required fields only switch narrows the value-level checks — blanks, unreadable dates, malformed amounts, unrecognized tiers — to the columns the document type is required to carry. A census with a messy optional location column stops failing on it; a census with a blank tier still fails, because the tier is load-bearing.

Use it when onboarding a new data supplier: first get the required fields clean and the file to READY, then switch it off and work through the optional-column warnings at leisure. The two views are the same engine with a different scope, so nothing is hidden — only deferred.

Cross-file checks

Single files can be individually perfect and still describe different worlds. The set-level checks run automatically once two or more documents are present:

What the data feeds

Each analysis needs specific document types. The validator's analysis strip lights up as adequate files arrive; this is the same table.

Supplying adequate data — a checklist for the data provider

The two files below unlock the core work. Everything else widens it.

Start with these two

Then, as available

Ground rules that prevent round trips

Troubleshooting

symptomcauseremedy
"no data rows parsed"header-only export, an empty worksheet, or a format the detector could not readopen the file yourself; if it has rows, check for a nonstandard layout and send the system's native export instead
type identified wronglycolumns genuinely match another type better, or the file mixes two extractsuse the type selector on the file card; split mixed extracts into one file per document
"content matches X and Y nearly equally"ambiguous column setconfirm the type by hand once; the override sticks for that file
every amount flaggedcurrency symbols with stray characters, or amounts exported as text with trailing spacesre-export with plain number formatting
"ends before it begins"termination or end date earlier than the effective dateusually a swapped column pair in the export mapping
detail does not tie to stated totalrows were filtered or edited after export, or the file mixes original and adjusted runssend the unmodified export
file is READY but an analysis stays darkthe analysis needs a document type not yet supplied, or a companion file is INADEQUATEhover the analysis chip — it names what is missing or blocking

Reference tables on this page are generated at load time from the validation engine itself, so they cannot drift from what the validator actually enforces. Engine: tbv-engine.1794517536.js.