TEMPLATE / FILE CONTRACTS
A supplier file spec that actually prevents breakage.
Most "file specifications" are a column list in a PDF nobody can enforce. A spec that works is a contract: precise enough that a machine can check every delivery against it, and owned on both sides. Here are the twelve fields that make the difference, with a skeleton you can copy into your next supplier onboarding.
The twelve fields of an enforceable spec
| Field | What to pin down | The failure it prevents |
|---|---|---|
| 1 · File naming | Exact pattern with date format, e.g. claims_YYYYMMDD.csv; case sensitivity. | Yesterday's file processed twice; files silently skipped. |
| 2 · Delivery & cadence | Channel (SFTP path, email, portal), schedule, timezone, late-file rule. | "Where's the file?" mornings; loads run against stale data. |
| 3 · Encoding | UTF-8 (with or without BOM) or the legacy encoding, stated once. | Names with accents corrupted; invisible BOM breaking the first header. |
| 4 · Delimiter & quoting | Delimiter, quote character, escape rule, whether delimiters may appear inside quoted values. | One free-text comma shifting every downstream column. |
| 5 · Header contract | Exact header row, exact spelling and order; whether extra columns are ever allowed. | Renamed or reordered columns loading into the wrong targets. |
| 6 · Column inventory | Per column: name, type, nullability, max length. | Truncation, type failures, surprise NULLs in required fields. |
| 7 · Keys & uniqueness | Which column(s) identify a row; duplicate policy. | Double-paid claims, double-counted orders. |
| 8 · Value formats | Dates (one format, one timezone), amounts (decimal separator, no symbols), code lists for enums. | 03/04 ambiguity; "1,000" read as one; unknown status codes. |
| 9 · Reconciliation totals | Row count and/or control totals, in a trailer row or sidecar file. | Silently truncated transfers passing as complete. |
| 10 · Change notice | How many days' notice for layout changes, to whom, in writing. | The Monday-morning surprise redesign. |
| 11 · Rejection handling | What the receiver does with a failing file; who is notified; redelivery window. | Bad files half-loaded because nobody owned the failure path. |
| 12 · Version & owners | Spec version number, effective date, one named owner per side. | Arguments about which rules were in force when it broke. |
A skeleton you can copy
FILE SPECIFICATION — [Supplier] → [Receiver] v1.0 · effective 2026-11-01
Owners: [name, supplier] / [name, receiver]
File: claims_YYYYMMDD.csv (lowercase; one file per business day)
Delivery: SFTP /incoming/claims/ by 06:00 America/Chicago; late = notify + skip
Encoding: UTF-8, no BOM Line endings: LF
Delimiter: comma Quote: " Escape: "" (quoted fields may contain commas/newlines)
Header: claim_id,member_id,service_date,amount,status (exact, row 1, always)
Columns: claim_id string required unique max 24
member_id string required max 16
service_date date required format YYYY-MM-DD
amount decimal required format 1234.56 (no symbols/thousands)
status enum required one of: NEW | ADJ | VOID
Totals: trailer row: TOTAL,<row count>,<sum of amount>
Changes: 10 business days' written notice to [owner email]
Rejection: failing file is not loaded; both owners notified same day;
corrected redelivery within 1 business day
Adapt the column block to your file; everything else transfers almost unchanged. The point is not bureaucracy — it's that every line above is checkable by a machine.
Enforce it on every delivery
The free FileSpecGuard checker verifies a file against rules like these in your browser — nothing uploads. Teams with several recurring feeds can have us author the specs as a fixed-price service.
Check a file nowCompanion guide: The CSV validation checklist for recurring partner files · Spec authoring as a service: specification setup.