@empressaio/atom-contract 1.18.0 → 1.19.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.
- package/dist/property/common.d.ts +43 -0
- package/dist/property/common.d.ts.map +1 -1
- package/dist/property/common.js +28 -0
- package/dist/property/common.js.map +1 -1
- package/dist/property/fixtures.d.ts +41 -0
- package/dist/property/fixtures.d.ts.map +1 -1
- package/dist/property/fixtures.js +37 -0
- package/dist/property/fixtures.js.map +1 -1
- package/dist/property/index.d.ts +1 -0
- package/dist/property/index.d.ts.map +1 -1
- package/dist/property/index.js +1 -0
- package/dist/property/index.js.map +1 -1
- package/dist/property/special-district-fact.d.ts +666 -0
- package/dist/property/special-district-fact.d.ts.map +1 -0
- package/dist/property/special-district-fact.js +119 -0
- package/dist/property/special-district-fact.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { REASONING_CHAIN_OBSERVED_SCHEMA } from "../reasoning-chain.js";
|
|
3
|
+
import { PARCEL_NODE_ID_PATTERN, PROPERTY_ACCESS_POLICY_SCHEMA, PROPERTY_ATOM_TIER, PROPERTY_DEFAULT_ACCESS_POLICY, PROPERTY_QUALITY_GATE_FIELDS, PROPERTY_READ_CONTRACT_SCHEMA, SITE_LAYER_PROVENANCE_FIELDS, SITE_LAYER_VERIFIED_ABSENCE_SCHEMA, SPECIAL_DISTRICT_ABSENCE_SCHEMA, SPECIAL_DISTRICT_MEMBERSHIP_BASIS_SCHEMA, SPECIAL_DISTRICT_SOURCE_TIER_SCHEMA, SPECIAL_DISTRICT_TAX_RATE_SCHEMA, } from "./common.js";
|
|
4
|
+
export const SPECIAL_DISTRICT_FACT_SCHEMA = z
|
|
5
|
+
.object({
|
|
6
|
+
entityType: z.literal("special-district-fact"),
|
|
7
|
+
atomDid: z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1)
|
|
10
|
+
.refine((val) => /^sdfact_[0-9a-f]{16}$/.test(val), {
|
|
11
|
+
message: "atomDid must be in format sdfact_<16-hex-chars>",
|
|
12
|
+
}),
|
|
13
|
+
parcelNodeId: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.refine((val) => PARCEL_NODE_ID_PATTERN.test(val), {
|
|
17
|
+
message: "parcelNodeId must match {county_fips}:{prop_id}",
|
|
18
|
+
}),
|
|
19
|
+
reasoningChain: REASONING_CHAIN_OBSERVED_SCHEMA,
|
|
20
|
+
sourceTier: SPECIAL_DISTRICT_SOURCE_TIER_SCHEMA,
|
|
21
|
+
districtName: z.string().min(1).optional(),
|
|
22
|
+
districtId: z.string().min(1).optional(),
|
|
23
|
+
districtType: z.string().min(1).optional(),
|
|
24
|
+
countyFips: z
|
|
25
|
+
.string()
|
|
26
|
+
.min(5)
|
|
27
|
+
.max(5)
|
|
28
|
+
.regex(/^\d{5}$/)
|
|
29
|
+
.optional(),
|
|
30
|
+
membershipBasis: SPECIAL_DISTRICT_MEMBERSHIP_BASIS_SCHEMA.optional(),
|
|
31
|
+
taxRate: SPECIAL_DISTRICT_TAX_RATE_SCHEMA.optional(),
|
|
32
|
+
absence: SPECIAL_DISTRICT_ABSENCE_SCHEMA.optional(),
|
|
33
|
+
verifiedAbsence: SITE_LAYER_VERIFIED_ABSENCE_SCHEMA.optional(),
|
|
34
|
+
accessPolicy: PROPERTY_ACCESS_POLICY_SCHEMA,
|
|
35
|
+
...PROPERTY_QUALITY_GATE_FIELDS,
|
|
36
|
+
...SITE_LAYER_PROVENANCE_FIELDS,
|
|
37
|
+
atomTier: z.literal(PROPERTY_ATOM_TIER),
|
|
38
|
+
readContract: PROPERTY_READ_CONTRACT_SCHEMA.optional(),
|
|
39
|
+
})
|
|
40
|
+
.superRefine((data, ctx) => {
|
|
41
|
+
const hasAbsence = data.absence !== undefined;
|
|
42
|
+
const isAbsentTier = data.sourceTier === "absent";
|
|
43
|
+
const hasDistrictClaim = data.districtName !== undefined ||
|
|
44
|
+
data.districtId !== undefined ||
|
|
45
|
+
data.districtType !== undefined;
|
|
46
|
+
if (data.accessPolicy !== PROPERTY_DEFAULT_ACCESS_POLICY) {
|
|
47
|
+
ctx.addIssue({
|
|
48
|
+
code: z.ZodIssueCode.custom,
|
|
49
|
+
message: "special-district-fact must use accessPolicy public-free",
|
|
50
|
+
path: ["accessPolicy"],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (hasDistrictClaim && hasAbsence) {
|
|
54
|
+
ctx.addIssue({
|
|
55
|
+
code: z.ZodIssueCode.custom,
|
|
56
|
+
message: "district fields and absence are mutually exclusive",
|
|
57
|
+
path: ["absence"],
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (isAbsentTier) {
|
|
61
|
+
if (!data.verifiedAbsence) {
|
|
62
|
+
ctx.addIssue({
|
|
63
|
+
code: z.ZodIssueCode.custom,
|
|
64
|
+
message: "sourceTier absent requires verifiedAbsence (evaluated + provenanceScope)",
|
|
65
|
+
path: ["verifiedAbsence"],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (hasDistrictClaim || data.membershipBasis !== undefined) {
|
|
69
|
+
ctx.addIssue({
|
|
70
|
+
code: z.ZodIssueCode.custom,
|
|
71
|
+
message: "sourceTier absent must not carry district membership fields",
|
|
72
|
+
path: ["sourceTier"],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (hasAbsence) {
|
|
77
|
+
if (hasDistrictClaim || data.membershipBasis !== undefined) {
|
|
78
|
+
ctx.addIssue({
|
|
79
|
+
code: z.ZodIssueCode.custom,
|
|
80
|
+
message: "absence must not coexist with district membership fields",
|
|
81
|
+
path: ["absence"],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (data.taxRate !== undefined) {
|
|
85
|
+
ctx.addIssue({
|
|
86
|
+
code: z.ZodIssueCode.custom,
|
|
87
|
+
message: "absence must not carry taxRate enrichment",
|
|
88
|
+
path: ["taxRate"],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (!data.districtId || !data.districtName || !data.districtType) {
|
|
94
|
+
ctx.addIssue({
|
|
95
|
+
code: z.ZodIssueCode.custom,
|
|
96
|
+
message: "present tier requires districtId, districtName, and districtType",
|
|
97
|
+
path: ["districtId"],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (data.membershipBasis !== "point-in-polygon") {
|
|
101
|
+
ctx.addIssue({
|
|
102
|
+
code: z.ZodIssueCode.custom,
|
|
103
|
+
message: "present tier requires membershipBasis point-in-polygon (binary PIP only — no proximity)",
|
|
104
|
+
path: ["membershipBasis"],
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (!data.countyFips) {
|
|
108
|
+
ctx.addIssue({
|
|
109
|
+
code: z.ZodIssueCode.custom,
|
|
110
|
+
message: "present tier requires countyFips",
|
|
111
|
+
path: ["countyFips"],
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
export function createSpecialDistrictFact(input) {
|
|
117
|
+
return SPECIAL_DISTRICT_FACT_SCHEMA.parse(input);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=special-district-fact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"special-district-fact.js","sourceRoot":"","sources":["../../src/property/special-district-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.
|
|
3
|
+
"version": "1.19.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",
|