101 lines
4.3 KiB
JSON
101 lines
4.3 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://cdsl.local/schema/cad.generation-spec.v1",
|
|
"title": "CDSL GenerationSpec",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"schema": {"const": "cad.generation-spec.v1"},
|
|
"schema_version": {"const": "1.0"},
|
|
"mode": {"enum": ["create", "revise"]},
|
|
"base_revision_id": {"type": "string"},
|
|
"patch_intent": {"type": "string"},
|
|
"part": {"$ref": "#/$defs/part"},
|
|
"parameters": {"type": "object", "additionalProperties": {"$ref": "#/$defs/parameter"}},
|
|
"features": {"type": "array", "items": {"$ref": "#/$defs/feature"}},
|
|
"constraints": {"type": "array", "items": {"$ref": "#/$defs/constraint"}},
|
|
"acceptance": {"type": "array", "items": {"$ref": "#/$defs/acceptance"}},
|
|
"assumptions": {"type": "array", "items": {"type": "string", "minLength": 1}},
|
|
"approximations": {"type": "array", "items": {"$ref": "#/$defs/approximation"}},
|
|
"references": {"type": "array", "items": {"type": "object"}}
|
|
},
|
|
"required": ["schema", "schema_version", "mode", "base_revision_id", "part", "parameters", "features", "constraints", "acceptance", "assumptions", "approximations", "references"],
|
|
"$defs": {
|
|
"part": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"family": {"type": "string", "minLength": 1},
|
|
"name": {"type": "string", "minLength": 1},
|
|
"units": {"const": "mm"},
|
|
"coordinate_system": {"type": "string", "minLength": 1}
|
|
},
|
|
"required": ["family", "name", "units", "coordinate_system"]
|
|
},
|
|
"parameter": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"value": {},
|
|
"unit": {"enum": ["mm", "deg", "rad", "count", ""]},
|
|
"source": {"enum": ["user", "technical_drawing", "image_estimate", "template_default", "derived_standard", "assumption"]},
|
|
"confidence": {"type": "number", "minimum": 0, "maximum": 1},
|
|
"locked": {"type": "boolean"},
|
|
"assumption": {"type": "string"}
|
|
},
|
|
"required": ["value", "unit", "source", "confidence", "locked", "assumption"]
|
|
},
|
|
"feature": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {"type": "string", "pattern": "^[A-Za-z0-9_-]{1,80}$"},
|
|
"kind": {"type": "string", "minLength": 1},
|
|
"depends_on": {"type": "array", "items": {"type": "string", "pattern": "^[A-Za-z0-9_-]{1,80}$"}},
|
|
"parameters": {"type": "object"},
|
|
"semantic_role": {"type": "string"}
|
|
},
|
|
"required": ["id", "kind", "depends_on", "parameters"]
|
|
},
|
|
"constraint": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": {"enum": ["less_than", "less_equal", "greater_than", "greater_equal", "equal", "inside_boundary", "symmetric", "same_axis", "distance", "count"]},
|
|
"left": {"type": "string"},
|
|
"right": {"type": "string"},
|
|
"value": {},
|
|
"feature": {"type": "string"},
|
|
"margin": {"type": "number"},
|
|
"ratio": {"type": "number"},
|
|
"message": {"type": "string"}
|
|
},
|
|
"required": ["type"]
|
|
},
|
|
"acceptance": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {"type": "string", "pattern": "^[A-Za-z0-9_-]{1,80}$"},
|
|
"type": {"enum": ["bbox", "solid_count", "feature_count", "hole_diameter", "hole_center", "hole_spacing", "wall_thickness", "overall_length", "overall_diameter", "coaxiality", "symmetry", "through_condition", "blind_depth"]},
|
|
"feature": {"type": "string"},
|
|
"expected": {},
|
|
"tolerance": {"type": "number", "minimum": 0},
|
|
"severity": {"enum": ["blocking", "warning", "informational"]}
|
|
},
|
|
"required": ["id", "type", "expected", "tolerance", "severity"]
|
|
},
|
|
"approximation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"request": {"type": "string", "minLength": 1},
|
|
"status": {"enum": ["approximated", "expanded", "omitted", "blocked"]},
|
|
"translation": {"type": "string", "minLength": 1},
|
|
"reason": {"type": "string", "minLength": 1}
|
|
},
|
|
"required": ["request", "status", "translation", "reason"]
|
|
}
|
|
}
|
|
}
|