feat(provider-contract): define materializable L2 graph blueprints

This commit is contained in:
Codex
2026-07-23 20:22:22 +03:00
parent a5a5644dbf
commit 4cf3a83ef1
7 changed files with 388 additions and 18 deletions
@@ -146,18 +146,23 @@ value.mappingContracts.push({
observedAt: { strategy: "first_non_empty", paths: ["updatedAt"], coerce: "unix_or_iso_timestamp", fallback: "collection_received_at" },
geometry: {
type: "GeoJSON",
strategy: "gelios_geozone_v1",
paths: ["type", "points", "line", "radius"],
strategy: "bounded_zone_geometry_v1",
kindPath: "type",
polygonPointsPath: "points",
corridorPointsPath: "line",
radiusPath: "radius",
coordinateOrder: "latitude_longitude",
circleSegments: 64,
allowedTypes: ["Polygon", "MultiPolygon"],
omitIfInvalid: false,
},
attributes: {
area_square_meters: { strategy: "first_non_empty", paths: ["surfaceArea", "surface_area"], coerce: "number", minimum: 0, omitIfInvalid: true },
area_square_meters: { strategy: "first_non_empty", paths: ["surfaceArea", "surface_area"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
description: { strategy: "first_non_empty", paths: ["description", "descr"], coerce: "string", omitIfMissing: true },
display_name: { strategy: "first_non_empty", paths: ["name"], coerce: "string" },
geometry_kind: { derive: "geometry_kind" },
max_speed_kph: { strategy: "first_non_empty", paths: ["maxPermissibleSpeed", "max_permissible_speed"], coerce: "number", minimum: 0, omitIfInvalid: true },
perimeter_meters: { strategy: "first_non_empty", paths: ["perimeter"], coerce: "number", minimum: 0, omitIfInvalid: true },
max_speed_kph: { strategy: "first_non_empty", paths: ["maxPermissibleSpeed", "max_permissible_speed"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
perimeter_meters: { strategy: "first_non_empty", paths: ["perimeter"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
source_kind: { constant: "live_api" },
source_revision: { constant: "gelios-rest-v1" },
style_color: { strategy: "first_non_empty", paths: ["color"], coerce: "string", omitIfMissing: true },