Recipe catalog / disclosure-facets
Label what a property disclosure addresses
Which of these does disclosure address: known defects, prior repairs, environmental hazards, boundary or easement issues, association rules?
You need several independent checks on a seller's or landlord's disclosure text in one call, to see which topics it covers and which it is silent on before a buyer, tenant, or reviewer relies on it.
Explore this recipe interactively ยท Source and implementation guide
Use disclosure-facets in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { disclosureFacets } from 'jev-recipes/disclosure-facets';
const result = await disclosureFacets({
"disclosure": "Seller's Property Disclosure - 27 Birchwood Lane\n\nRoof: Seller is aware of a leak at the chimney flashing that appears during heavy rain; a stain is visible on the upstairs hallway ceiling. Not yet repaired.\nPlumbing: Water heater replaced in March 2024 (receipt available). Kitchen drain line snaked in 2023.\nBasement: Occasional dampness on the north wall after spring thaw; no standing water observed.\nEnvironmental: Radon test in 2022 measured 3.1 pCi/L; no mitigation system installed. House built in 1968; seller has no knowledge of lead-based paint testing.\nHeating: Furnace original to 1998 addition, serviced annually.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| disclosure | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"disclosure": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"disclosure"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"detected": {
"type": "array",
"items": {
"type": "string",
"enum": [
"statesKnownDefects",
"statesPriorRepairs",
"statesEnvironmentalHazards",
"statesBoundaryIssues",
"statesAssociationRules"
]
}
},
"labels": {
"type": "object",
"properties": {
"statesKnownDefects": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"statesPriorRepairs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"statesEnvironmentalHazards": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"statesBoundaryIssues": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
},
"statesAssociationRules": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"verdict": {
"type": "string",
"enum": [
"present",
"absent"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"status",
"verdict",
"probability",
"confidence"
],
"additionalProperties": false
}
},
"required": [
"statesKnownDefects",
"statesPriorRepairs",
"statesEnvironmentalHazards",
"statesBoundaryIssues",
"statesAssociationRules"
],
"additionalProperties": false
}
},
"required": [
"model",
"usage",
"status",
"detected",
"labels"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo disclosure-facets.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"detected": [
"statesKnownDefects",
"statesPriorRepairs",
"statesEnvironmentalHazards"
],
"labels": {
"statesKnownDefects": {
"status": "ready",
"verdict": "present",
"probability": 0.97,
"confidence": 0.97
},
"statesPriorRepairs": {
"status": "ready",
"verdict": "present",
"probability": 0.95,
"confidence": 0.95
},
"statesEnvironmentalHazards": {
"status": "ready",
"verdict": "present",
"probability": 0.94,
"confidence": 0.94
},
"statesBoundaryIssues": {
"status": "ready",
"verdict": "absent",
"probability": 0.05,
"confidence": 0.95
},
"statesAssociationRules": {
"status": "ready",
"verdict": "absent",
"probability": 0.04,
"confidence": 0.96
}
}
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Each label reports whether the disclosure addresses the topic, not whether what it says is true, complete, or sufficient under local disclosure law.
- A statement that the seller knows of no issue counts as addressing the topic. Silence does not.
- Labels are independent, so a disclosure can carry several, all, or none.
Related recipes
- privacy-notice-facets: Use privacy-notice-facets for the same coverage-check pattern over a privacy notice instead of a property disclosure.
- clarify: Use clarify to decide whether a buyer's question about the disclosure is too ambiguous to answer, rather than what the disclosure itself addresses.