{
 "_about": "The one schema every county lands in (White Tape, stone three; 2026-10-27, Jonathan: 'We need a JSON naming convention for variables that works like parcel_id and parcel needing to be condensed arbitrarily which will be referenced for API calls'). Rule: a canonical key is lowercase snake_case, a noun then its qualifier (permit_number, issue_date, owner_name); the API speaks only these keys. A source column is condensed to a key by its slug (lowercase, letters and digits only, the filler words number/no/num/id/code/date/value dropped) and then by the synonyms list; a column that matches nothing is kept under source_extra and flagged, never guessed. Money is a number in dollars; dates are YYYY-MM-DD; every row carries jurisdiction_id (the Census id), source_file, and read_on.",
 "version": 1,
 "fields": [
  {"key": "jurisdiction_id", "type": "string", "required": true, "about": "The Census id of the issuing government (projects/white-tape/jurisdictions.csv)"},
  {"key": "permit_number", "type": "string", "required": true, "synonyms": ["permit", "permit no", "permit #", "permit id", "record id", "record number", "case number", "application number", "app no", "bp number"]},
  {"key": "permit_type", "type": "string", "synonyms": ["type", "permit category", "category", "work class", "work type", "record type", "sub type", "subtype"]},
  {"key": "permit_status", "type": "string", "synonyms": ["status", "record status", "application status"]},
  {"key": "description", "type": "string", "synonyms": ["work description", "description of work", "scope", "scope of work", "project description", "proposed work", "job description", "notes"]},
  {"key": "parcel_id", "type": "string", "synonyms": ["parcel", "parcel number", "parcel no", "pin", "apn", "tax map", "tax id", "tax parcel", "folio", "account number", "property id", "ppn"]},
  {"key": "address", "type": "string", "synonyms": ["site address", "property address", "job address", "location", "street address", "address1", "project address", "situs", "situs address"]},
  {"key": "city", "type": "string", "synonyms": ["site city", "property city", "town", "municipality"]},
  {"key": "state", "type": "string", "synonyms": ["st", "site state"]},
  {"key": "zip", "type": "string", "synonyms": ["zip code", "postal", "postal code", "site zip"]},
  {"key": "owner_name", "type": "string", "synonyms": ["owner", "property owner", "owner name", "applicant owner"]},
  {"key": "applicant_name", "type": "string", "synonyms": ["applicant", "applied by", "requestor", "customer"]},
  {"key": "contractor_name", "type": "string", "synonyms": ["contractor", "builder", "general contractor", "gc", "licensed professional", "company", "business name"]},
  {"key": "contractor_license", "type": "string", "synonyms": ["license", "license number", "lic no", "contractor license", "mhic"]},
  {"key": "contractor_phone", "type": "string", "synonyms": ["contractor phone", "phone", "telephone"]},
  {"key": "value", "type": "number", "synonyms": ["valuation", "job value", "estimated cost", "construction cost", "project cost", "est cost", "declared value", "job cost", "total valuation", "cost"]},
  {"key": "fee", "type": "number", "synonyms": ["permit fee", "fees", "total fee", "fee paid"]},
  {"key": "applied_date", "type": "date", "synonyms": ["application date", "applied", "date applied", "filed", "date filed", "received", "submitted", "open date", "created"]},
  {"key": "issue_date", "type": "date", "synonyms": ["issued", "date issued", "issuance date", "permit date", "approved", "date approved"]},
  {"key": "expire_date", "type": "date", "synonyms": ["expires", "expiration", "expiration date", "expiry"]},
  {"key": "final_date", "type": "date", "synonyms": ["finaled", "final", "closed", "completion date", "co date", "certificate of occupancy"]},
  {"key": "use_type", "type": "string", "synonyms": ["use", "occupancy", "building use", "residential commercial", "property type", "land use"]},
  {"key": "square_feet", "type": "number", "synonyms": ["sq ft", "sqft", "square footage", "area", "gross area"]},
  {"key": "units", "type": "number", "synonyms": ["dwelling units", "unit count", "number of units"]},
  {"key": "latitude", "type": "number", "synonyms": ["lat", "y"]},
  {"key": "longitude", "type": "number", "synonyms": ["lon", "lng", "long", "x"]},
  {"key": "source_file", "type": "string", "required": true, "about": "The file the row came from, kept beside the rows"},
  {"key": "read_on", "type": "date", "required": true, "about": "The day the file was read"},
  {"key": "source_extra", "type": "object", "about": "Every source column that matched nothing, as it came, flagged for an eye"}
 ],
 "filler_words": ["number", "no", "num", "id", "code", "date", "value", "name", "the", "of"],
 "api": {
  "about": "The paid API speaks the keys above and nothing else. GET /permits?jurisdiction_id=&issue_date_from=&issue_date_to=&permit_type=&value_min= returns rows with these keys; a row is one permit; 3 cents a row.",
  "example": {"jurisdiction_id": "100001", "permit_number": "B-2026-01432", "permit_type": "Residential building", "address": "14 Spa Creek Ln", "city": "Annapolis", "state": "MD", "zip": "21401", "parcel_id": "02-000123456", "contractor_name": "Smith Builders LLC", "value": 865000, "issue_date": "2026-10-14", "source_file": "annapolis-2026-10.csv", "read_on": "2026-10-27"}
 }
}
