@empressaio/atom-contract 1.14.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-fact.d.ts","sourceRoot":"","sources":["../../src/property/owner-fact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { z } from "zod";
2
+ import { REASONING_CHAIN_OBSERVED_SCHEMA } from "../reasoning-chain.js";
3
+ import { CAD_ROLL_SOURCE_TIER_SCHEMA, OWNER_FACT_ABSENCE_SCHEMA, PARCEL_NODE_ID_PATTERN, PROPERTY_ACCESS_POLICY_SCHEMA, PROPERTY_ATOM_TIER, PROPERTY_PAID_ACCESS_POLICY, PROPERTY_QUALITY_GATE_FIELDS, PROPERTY_READ_CONTRACT_SCHEMA, SITE_LAYER_PROVENANCE_FIELDS, SITE_LAYER_VERIFIED_ABSENCE_SCHEMA, } from "./common.js";
4
+ export const OWNER_EXEMPTION_FLAGS_SCHEMA = z
5
+ .object({
6
+ /** Any homestead exemption present — implies owner-occupied. */
7
+ homestead: z.boolean(),
8
+ /** Over-65 or disability exemption present. */
9
+ seniorOrDisability: z.boolean(),
10
+ /** Agricultural / open-space / timber valuation present. */
11
+ agricultural: z.boolean(),
12
+ /** Veteran exemption present. */
13
+ veteran: z.boolean(),
14
+ })
15
+ .strict();
16
+ export const OWNER_FACT_SCHEMA = z
17
+ .object({
18
+ entityType: z.literal("owner-fact"),
19
+ atomDid: z
20
+ .string()
21
+ .min(1)
22
+ .refine((val) => /^ownfact_[0-9a-f]{16}$/.test(val), {
23
+ message: "atomDid must be in format ownfact_<16-hex-chars>",
24
+ }),
25
+ parcelNodeId: z
26
+ .string()
27
+ .min(1)
28
+ .refine((val) => PARCEL_NODE_ID_PATTERN.test(val), {
29
+ message: "parcelNodeId must match {county_fips}:{prop_id}",
30
+ }),
31
+ taxYear: z.number().int(),
32
+ reasoningChain: REASONING_CHAIN_OBSERVED_SCHEMA,
33
+ sourceTier: CAD_ROLL_SOURCE_TIER_SCHEMA,
34
+ ownerName: z.string().min(1).optional(),
35
+ ownerMailingAddress: z.string().min(1).optional(),
36
+ exemptionFlags: OWNER_EXEMPTION_FLAGS_SCHEMA.optional(),
37
+ absence: OWNER_FACT_ABSENCE_SCHEMA.optional(),
38
+ verifiedAbsence: SITE_LAYER_VERIFIED_ABSENCE_SCHEMA.optional(),
39
+ accessPolicy: PROPERTY_ACCESS_POLICY_SCHEMA,
40
+ ...PROPERTY_QUALITY_GATE_FIELDS,
41
+ ...SITE_LAYER_PROVENANCE_FIELDS,
42
+ atomTier: z.literal(PROPERTY_ATOM_TIER),
43
+ readContract: PROPERTY_READ_CONTRACT_SCHEMA.optional(),
44
+ })
45
+ .superRefine((data, ctx) => {
46
+ const hasAbsence = data.absence !== undefined;
47
+ const isAbsentTier = data.sourceTier === "absent";
48
+ const hasOwnerName = data.ownerName !== undefined;
49
+ const hasMailing = data.ownerMailingAddress !== undefined;
50
+ const hasExemptions = data.exemptionFlags !== undefined;
51
+ const hasClaimField = hasOwnerName || hasMailing || hasExemptions;
52
+ // The load-bearing inversion: owner is paid, every sibling is free.
53
+ if (data.accessPolicy !== PROPERTY_PAID_ACCESS_POLICY) {
54
+ ctx.addIssue({
55
+ code: z.ZodIssueCode.custom,
56
+ message: "owner-fact must use accessPolicy public-paid (owner identity is the paid facet; a public-free owner atom would leak it)",
57
+ path: ["accessPolicy"],
58
+ });
59
+ }
60
+ if (hasClaimField && hasAbsence) {
61
+ ctx.addIssue({
62
+ code: z.ZodIssueCode.custom,
63
+ message: "owner fields and absence are mutually exclusive",
64
+ path: ["absence"],
65
+ });
66
+ }
67
+ // A mailing address with no owner name is a dangling PII fragment: it
68
+ // names a household without naming the claim it supports.
69
+ if (hasMailing && !hasOwnerName) {
70
+ ctx.addIssue({
71
+ code: z.ZodIssueCode.custom,
72
+ message: "ownerMailingAddress requires ownerName (a bare mailing address is a dangling PII fragment)",
73
+ path: ["ownerMailingAddress"],
74
+ });
75
+ }
76
+ if (isAbsentTier) {
77
+ if (!data.verifiedAbsence) {
78
+ ctx.addIssue({
79
+ code: z.ZodIssueCode.custom,
80
+ message: "sourceTier absent requires verifiedAbsence (evaluated + provenanceScope)",
81
+ path: ["verifiedAbsence"],
82
+ });
83
+ }
84
+ if (hasClaimField) {
85
+ ctx.addIssue({
86
+ code: z.ZodIssueCode.custom,
87
+ message: "sourceTier absent must not carry owner claim fields",
88
+ path: ["sourceTier"],
89
+ });
90
+ }
91
+ }
92
+ else if (hasAbsence) {
93
+ if (hasClaimField) {
94
+ ctx.addIssue({
95
+ code: z.ZodIssueCode.custom,
96
+ message: "absence must not coexist with owner claim fields",
97
+ path: ["absence"],
98
+ });
99
+ }
100
+ }
101
+ else if (!hasOwnerName) {
102
+ ctx.addIssue({
103
+ code: z.ZodIssueCode.custom,
104
+ message: "cad-authoritative tier requires ownerName when no absence",
105
+ path: ["ownerName"],
106
+ });
107
+ }
108
+ });
109
+ export function createOwnerFact(input) {
110
+ return OWNER_FACT_SCHEMA.parse(input);
111
+ }
112
+ //# sourceMappingURL=owner-fact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-fact.js","sourceRoot":"","sources":["../../src/property/owner-fact.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empressaio/atom-contract",
3
- "version": "1.14.0",
3
+ "version": "1.16.0",
4
4
  "description": "The typed-data substrate every Empressa atom satisfies: identity, context interface, composition declaration, and history anchoring. Peer to the Hauska SDK (`@hauska-sdk/*`); consumed directly by every product surface and MCP server.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",