§ Overview

CureData, front to back.

A validation workbench in a single page. Upload a file, compose a ruleset, get a report. This page is the reference.

01 · Getting started

Feed it a file.

CSV is the common case. XLSX works (first sheet, row 1 = headers). JSON is supported as an array of objects. You can also start with a blank schema and type headers directly.

Sample input
Email,Amount,StartDate,EndDate,State
alice@example.com,12.50,2024-01-10,2024-01-12,CA
bob@example.com,0,2024-02-01,2024-02-01,WA
,19.99,2024-03-05,2024-03-06,TX
Notes
  • Header row required.
  • Delimiter auto-detects. Quotes + embedded newlines supported.
  • Prefer ISO dates (YYYY-MM-DD).
  • Numbers should be plain decimal — no currency symbols.
  • tipUpload first, then Use detected headers to build a starter schema.
02 · Schemas & columns

Columns carry rules.

A schema is a named collection of columns. Each column carries 0..n rules. Order does not matter — the engine evaluates in an optimized pass.

Column config
{
  name: "StartDate",
  rules: [
    { type: "type", expected: "date" },
    { type: "noFutureDate" }
  ]
}
Cross-field
{
  name: "EndDate",
  rules: [
    { type: "type", expected: "date" },
    { type: "dateOrder", otherField: "StartDate", op: ">=" }
  ]
}
03 · Header matching

How rulesets find your columns.

When you apply a saved ruleset to a new upload, the header_match_strategy controls how strictly names must line up.

StrategyMatch ruleExampleWhen
exactNames match exactlyNPINPIInternal feeds with stable headers.
ciCase-insensitiveNPInpi, NpiVendors who only vary casing.
fuzzyLoose matchProviderNPINPI NumberExternal files with inconsistent naming.
04 · Rule packs

One-click presets.

Email (basic)
contact emails
requiredtype:stringemail
US phone
phone numbers
type:stringphoneUS
US address lite
ship addresses
stateCodeUSzipUS
Money
prices, totals
type:numberrange≥0precision:2
05 · Walkthrough

Sample orders.

  1. 01
    orderIdrequiredtype:stringlength 8–36unique_in_file
  2. 02
    emailrequiredtype:stringemail
  3. 03
    phonetype:stringphoneUS
  4. 04
    amounttype:numberrange ≥ 0precision 2
  5. 05
    order_datetype:datenoFutureDate
  6. 06
    ship_datetype:datedateOrder ≥ order_date
  7. 07
    statusenum: Pending · Processing · Shipped · Delivered · Cancelled
  8. 08
    ifThenIF status=Cancelled THEN ship_date blank
  9. 09
    state / zipstateCodeUSzipUS
06 · Rules reference

The full catalog.

Core rules ship built-in. Add as many as needed per column. regex and enum repeat. Cross-field rules like dateOrder and ifThen reference other columns.

RuleWhat it checksParametersGoodBad
requiredValue is present (not empty, not null)."ORD-123"(empty)
type:stringValue parses as a string.expected = string"hello"42
type:numberValue parses as a number.expected = number19.99"N/A"
type:dateValue parses as a date.expected = date2024-05-01"not-a-date"
type:booleanBoolean-ish (true/false, yes/no).expected = booleantrue"maybe"
lengthText length within bounds.min, maxlength 12length 2
enumValue in the allowed set.values: [Pending, Processing, Shipped, Delivered, Cancelled]"Shipped""Unknown"
regexMatches a regular expression.pattern, flags, name"ORD-202501-0042""ORD-Jan-42"
rangeNumber is ≥ min and ≤ max.min, max, inclusive=true0 ≤ amount ≤ 100k-4
precisionNumber has at most N decimals.scale: 219.9919.9999
dateOrderDate compares correctly to another column.otherField, op: >, ≥, =, ≤, <ship ≥ ordership < order
noFutureDateDate is ≤ today.yesterdaynext week
notExpiredDate is ≥ today.next monthlast year
ifThenConditional rule. IF A THEN B must hold.if:{…} → then:{…}IF Cancelled THEN ship blankCancelled + ship set
emailBasic email shape."user@example.com""name@@example"
phoneUS10-digit US phone, common formats."(415) 555-0123""555-12-1234"
stateCodeUS2-letter US state postal code."CA""California"
zipUS##### or #####-####."94107-1234""9410A"
LuhnPasses Luhn checksum."79927398713""79927398710"
showing 19 / 19 rules
07 · Operators & glossary

Grammar.

Comparison operators
  • === equal
  • != not equal
  • > < dates & numbers
  • exists present
  • blank must be empty
Field types
  • string length, regex, enum
  • number range, precision
  • date ISO recommended (YYYY-MM-DD)
  • boolean true/false, 1/0, yes/no
08 · Context

Validation context.

Phase 1 runs client-only. A minimal ctx object is passed to custom rules.

Context object
const ctx = { now: new Date() }
09 · Exporting

Issues out as CSV.

The workbench exports a CSV of issues. Columns: rowIndex, column, code, message, value.

issues.csv
rowIndex,column,code,message,value
12,Email,required,"Value is required",""
42,Amount,range,"Must be between 0 and 1000","-12"
10 · FAQ

Troubleshooting.

Can I add multiple regex or enums on a column? +

Yes — regex and enum repeat per column.

Does column order matter? +

No. The engine evaluates in an order-independent optimized pass.

What about cross-row validations? +

Today, unique_in_file covers duplicates. More dataset-level rules ship via packs.

My build shows a Vue/SFC token error. +

This page uses pure templates and computeds — no JSX/TSX — so it compiles cleanly under Nuxt 4 + Vite. If you see one, report it via /contact.