@empressaio/atom-contract 1.12.0 → 1.14.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +7 -1
  3. package/dist/conformance/common.d.ts +1 -1
  4. package/dist/conformance/common.js +1 -1
  5. package/dist/property/cad-parcel-roll.d.ts +710 -0
  6. package/dist/property/cad-parcel-roll.d.ts.map +1 -0
  7. package/dist/property/cad-parcel-roll.js +147 -0
  8. package/dist/property/cad-parcel-roll.js.map +1 -0
  9. package/dist/property/common.d.ts +131 -0
  10. package/dist/property/common.d.ts.map +1 -1
  11. package/dist/property/common.js +92 -0
  12. package/dist/property/common.js.map +1 -1
  13. package/dist/property/fixtures.d.ts +324 -0
  14. package/dist/property/fixtures.d.ts.map +1 -1
  15. package/dist/property/fixtures.js +621 -0
  16. package/dist/property/fixtures.js.map +1 -1
  17. package/dist/property/flood-hazard-fact.d.ts +610 -0
  18. package/dist/property/flood-hazard-fact.d.ts.map +1 -0
  19. package/dist/property/flood-hazard-fact.js +102 -0
  20. package/dist/property/flood-hazard-fact.js.map +1 -0
  21. package/dist/property/index.d.ts +4 -0
  22. package/dist/property/index.d.ts.map +1 -1
  23. package/dist/property/index.js +4 -0
  24. package/dist/property/index.js.map +1 -1
  25. package/dist/property/land-use-fact.d.ts +602 -0
  26. package/dist/property/land-use-fact.d.ts.map +1 -0
  27. package/dist/property/land-use-fact.js +87 -0
  28. package/dist/property/land-use-fact.js.map +1 -0
  29. package/dist/property/parcel-node.d.ts +710 -0
  30. package/dist/property/parcel-node.d.ts.map +1 -0
  31. package/dist/property/parcel-node.js +156 -0
  32. package/dist/property/parcel-node.js.map +1 -0
  33. package/dist/property/road-node.d.ts +2 -2
  34. package/package.json +1 -1
@@ -0,0 +1,102 @@
1
+ import { z } from "zod";
2
+ import { REASONING_CHAIN_OBSERVED_SCHEMA } from "../reasoning-chain.js";
3
+ import { FLOOD_HAZARD_ABSENCE_SCHEMA, FLOOD_HAZARD_SOURCE_TIER_SCHEMA, 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, } from "./common.js";
4
+ function hasFloodZoneClaim(data) {
5
+ return (data.inSpecialFloodHazardArea !== undefined ||
6
+ data.floodZone !== undefined ||
7
+ data.zoneSubtype !== undefined ||
8
+ data.baseFloodElevation !== undefined);
9
+ }
10
+ export const FLOOD_HAZARD_FACT_SCHEMA = z
11
+ .object({
12
+ entityType: z.literal("flood-hazard-fact"),
13
+ atomDid: z
14
+ .string()
15
+ .min(1)
16
+ .refine((val) => /^fhfact_[0-9a-f]{16}$/.test(val), {
17
+ message: "atomDid must be in format fhfact_<16-hex-chars>",
18
+ }),
19
+ parcelNodeId: z
20
+ .string()
21
+ .min(1)
22
+ .refine((val) => PARCEL_NODE_ID_PATTERN.test(val), {
23
+ message: "parcelNodeId must match {county_fips}:{prop_id}",
24
+ }),
25
+ reasoningChain: REASONING_CHAIN_OBSERVED_SCHEMA,
26
+ sourceTier: FLOOD_HAZARD_SOURCE_TIER_SCHEMA,
27
+ inSpecialFloodHazardArea: z.boolean().optional(),
28
+ floodZone: z.string().nullable().optional(),
29
+ zoneSubtype: z.string().nullable().optional(),
30
+ baseFloodElevation: z.number().nullable().optional(),
31
+ absence: FLOOD_HAZARD_ABSENCE_SCHEMA.optional(),
32
+ verifiedAbsence: SITE_LAYER_VERIFIED_ABSENCE_SCHEMA.optional(),
33
+ accessPolicy: PROPERTY_ACCESS_POLICY_SCHEMA,
34
+ ...PROPERTY_QUALITY_GATE_FIELDS,
35
+ ...SITE_LAYER_PROVENANCE_FIELDS,
36
+ atomTier: z.literal(PROPERTY_ATOM_TIER),
37
+ readContract: PROPERTY_READ_CONTRACT_SCHEMA.optional(),
38
+ })
39
+ .superRefine((data, ctx) => {
40
+ const hasAbsence = data.absence !== undefined;
41
+ const isAbsentTier = data.sourceTier === "absent";
42
+ const hasClaim = hasFloodZoneClaim(data);
43
+ if (data.accessPolicy !== PROPERTY_DEFAULT_ACCESS_POLICY) {
44
+ ctx.addIssue({
45
+ code: z.ZodIssueCode.custom,
46
+ message: "flood-hazard-fact must use accessPolicy public-free",
47
+ path: ["accessPolicy"],
48
+ });
49
+ }
50
+ if (hasClaim && hasAbsence) {
51
+ ctx.addIssue({
52
+ code: z.ZodIssueCode.custom,
53
+ message: "SFHA finding fields and absence are mutually exclusive",
54
+ path: ["absence"],
55
+ });
56
+ }
57
+ if (isAbsentTier) {
58
+ if (!data.verifiedAbsence) {
59
+ ctx.addIssue({
60
+ code: z.ZodIssueCode.custom,
61
+ message: "sourceTier absent requires verifiedAbsence (evaluated + provenanceScope)",
62
+ path: ["verifiedAbsence"],
63
+ });
64
+ }
65
+ if (hasClaim) {
66
+ ctx.addIssue({
67
+ code: z.ZodIssueCode.custom,
68
+ message: "sourceTier absent must not carry flood zone claim fields",
69
+ path: ["sourceTier"],
70
+ });
71
+ }
72
+ if (hasAbsence) {
73
+ ctx.addIssue({
74
+ code: z.ZodIssueCode.custom,
75
+ message: "sourceTier absent uses verifiedAbsence, not per-parcel absence",
76
+ path: ["absence"],
77
+ });
78
+ }
79
+ }
80
+ else if (hasAbsence) {
81
+ if (hasClaim) {
82
+ ctx.addIssue({
83
+ code: z.ZodIssueCode.custom,
84
+ message: "absence must not coexist with SFHA finding fields",
85
+ path: ["absence"],
86
+ });
87
+ }
88
+ }
89
+ else {
90
+ if (data.inSpecialFloodHazardArea === undefined) {
91
+ ctx.addIssue({
92
+ code: z.ZodIssueCode.custom,
93
+ message: "fema-nfhl tier requires inSpecialFloodHazardArea when no absence",
94
+ path: ["inSpecialFloodHazardArea"],
95
+ });
96
+ }
97
+ }
98
+ });
99
+ export function createFloodHazardFact(input) {
100
+ return FLOOD_HAZARD_FACT_SCHEMA.parse(input);
101
+ }
102
+ //# sourceMappingURL=flood-hazard-fact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flood-hazard-fact.js","sourceRoot":"","sources":["../../src/property/flood-hazard-fact.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  * ActorRecord, ObligationAtomInstance.
9
9
  */
10
10
  export * from "./common.js";
11
+ export * from "./parcel-node.js";
11
12
  export * from "./zoning-fact.js";
12
13
  export * from "./setback-rule.js";
13
14
  export * from "./buildable-envelope.js";
@@ -15,6 +16,9 @@ export * from "./parcel-terrain-model.js";
15
16
  export * from "./road-node.js";
16
17
  export * from "./building-footprint.js";
17
18
  export * from "./utility-easement.js";
19
+ export * from "./flood-hazard-fact.js";
20
+ export * from "./cad-parcel-roll.js";
21
+ export * from "./land-use-fact.js";
18
22
  export * from "./fixtures.js";
19
23
  export type { AtomInputRef, AtomInputRefRole, ReasoningChain, } from "../reasoning-chain.js";
20
24
  export { ATOM_INPUT_REF_ROLES, ATOM_INPUT_REF_SCHEMA, REASONING_CHAIN_SCHEMA, createReasoningChain, validateReasoningChain, } from "../reasoning-chain.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/property/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAE9B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAE5C,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,YAAY,EACV,sBAAsB,EACtB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/property/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAE5C,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,YAAY,EACV,sBAAsB,EACtB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -8,6 +8,7 @@
8
8
  * ActorRecord, ObligationAtomInstance.
9
9
  */
10
10
  export * from "./common.js";
11
+ export * from "./parcel-node.js";
11
12
  export * from "./zoning-fact.js";
12
13
  export * from "./setback-rule.js";
13
14
  export * from "./buildable-envelope.js";
@@ -15,6 +16,9 @@ export * from "./parcel-terrain-model.js";
15
16
  export * from "./road-node.js";
16
17
  export * from "./building-footprint.js";
17
18
  export * from "./utility-easement.js";
19
+ export * from "./flood-hazard-fact.js";
20
+ export * from "./cad-parcel-roll.js";
21
+ export * from "./land-use-fact.js";
18
22
  export * from "./fixtures.js";
19
23
  export { ATOM_INPUT_REF_ROLES, ATOM_INPUT_REF_SCHEMA, REASONING_CHAIN_SCHEMA, createReasoningChain, validateReasoningChain, } from "../reasoning-chain.js";
20
24
  export { PROPERTY_CONSEQUENCE_SCHEMA, REASONING_READ_CONTRACT_SCHEMA, REASONING_THREE_AXIS_CONFIDENCE_SCHEMA, createPropertyConsequence, createReasoningReadContract, createReasoningThreeAxisConfidence, validateReasoningReadContract, } from "../read-contract/reasoning-axes.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/property/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAO9B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAMnF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/property/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAO9B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAMnF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}