Menu ▾ ▴

Tree [4870a8] main /
 History

HTTPS access


File Date Author Commit
 LICENSE 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 README.md 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 app.js 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 build.cjs 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 cli.cjs 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 engine.js 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 index.html 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 package.json 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 property.schema.json 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 sample.json 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 style.css 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 template.html 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...
 validator.test.cjs 5 days ago podkopov-hub podkopov-hub [4870a8] Release offline property-data validator with co...

Read Me

Property Schema Validator

Catch property listing data-quality errors before catalogue import: ambiguous currency labels, missing land-area units, duplicate property IDs, invalid review dates and unknown source metadata. An open-source, offline tool by NovAsia Estate for property-data workflows across Cambodia, Thailand and Indonesia, including Bali.

Start without installation

Download the release ZIP, unpack it and open index.html in a modern browser. The single HTML file includes the complete browser application. Paste/import your property JSON, validate it, filter errors versus warnings and export a JSON report or spreadsheet-safe issue CSV. No account, API, server, analytics or network connection is needed. Your records are not uploaded or stored.

sample.json is entirely fictional and deliberately includes bad fields. It is not a market dataset, developer price list or confirmed property inventory.

What is validated?

  • Required non-empty property id, title and market KH, TH or ID.
  • Prices as non-negative decimal strings, paired with explicit uppercase three-letter currency labels.
  • Areas as decimal strings plus sqm, sqft, rai, ngan, sqwah, are or hectare.
  • Unique trimmed IDs; absolute HTTP(S) source URLs without credentials; actual calendar dates (1900–9998).
  • Source/date omissions and synthetic/unconfirmed records as warnings for review.

There is no currency conversion, no inferred unit, no default price and no legal/investment eligibility output. A currency label's syntax is checked, not whether the code is issued. A structurally sound record can be completely false; sources are not fetched or authenticated.

Missing/null price and area are allowed and flagged as unknown. Zero is an explicit zero, never substituted for an unknown value. Extra fields are retained in your input and ignored by validation. Known objects with missing/invalid required fields are errors. ID is a country code, not a claim to cover only Bali.

Input contract

{"schemaVersion":1,"records":[{
  "id":"your-id","title":"Your property title","market":"TH",
  "price":{"amount":"3500000","currency":"THB"},
  "area":{"value":"45.5","unit":"sqm"},
  "sourceUrl":null,"checkedOn":null,"evidenceType":"unconfirmed"
}]}

At most 1000 records; CLI/browser file limit 1 MiB. Decimal strings have at most 8 fractional digits and 32 characters. No thousands separators, exponent notation or negative values. Empty datasets report zero records, not a successful property check. Source/date may be null, omitted or empty (warnings). The editor is for small trusted inputs, not a repository for customer identities or confidential agreements.

property.schema.json is a JSON Schema 2020-12 core shape contract. The application implements additional semantic checks and warning policy, including duplicate identifiers, real dates and source URL protocols; it is not a general-purpose JSON Schema interpreter. JSON Schema validation alone is not equivalent to this complete report.

Reuse and automate

Node 22+, no runtime dependencies:

node cli.cjs sample.json json
node cli.cjs sample.json csv > issues.csv
node --test validator.test.cjs
node build.cjs

Exit codes: 0 no structural errors (warnings may remain), 1 structural errors, 2 file/root/JSON/usage errors. Reads the specified file and writes to stdout, without modifying it. CSV escapes quotes and prefixes formula-like text; raw JSON values are unchanged.

const {validate} = require('./engine.js');
const report = validate(require('./sample.json'));
console.log(report.invalid); // 1 deliberate invalid fixture
console.log(report.needsReview); // 2 fictional/unconfirmed fixtures

Connected tools and publisher

MIT licence. This software checks data consistency, not ownership, live availability, permits, contract enforceability or whether someone should buy a property.