{"openapi":"3.1.0","components":{"schemas":{"ApiDocs":{"type":"object","properties":{"entity":{"type":"string"},"spec":{"type":"string"},"admin":{"type":"string"}}},"AtomicLong":{"type":"object","properties":{"value":{"type":"integer","format":"int64"},"andIncrement":{"type":"integer","format":"int64"},"andDecrement":{"type":"integer","format":"int64"},"plain":{"type":"integer","format":"int64"},"opaque":{"type":"integer","format":"int64"},"acquire":{"type":"integer","format":"int64"},"release":{"type":"integer","format":"int64"}}},"Charset":{"type":"object","properties":{"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"aliasSet":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"registered":{"type":"boolean"}}},"EngineImpl":{"type":"object","properties":{"sectionHelperFactories":{"type":"object","additionalProperties":{"type":"object","properties":{"defaultAliases":{"type":"array","items":{"type":"string"}},"parameters":{"$ref":"#/components/schemas/ParametersInfo"},"blockLabels":{"type":"array","items":{"type":"string"}}}}},"sectionHelperFunc":{"$ref":"#/components/schemas/FunctionStringSectionHelperFactoryObject"},"valueResolvers":{"type":"array","items":{"$ref":"#/components/schemas/ValueResolver"}},"namespaceResolvers":{"type":"array","items":{"$ref":"#/components/schemas/NamespaceResolver"}},"evaluator":{"$ref":"#/components/schemas/Evaluator"},"templates":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Template"}},"locators":{"type":"array","items":{"$ref":"#/components/schemas/TemplateLocator"}},"resultMappers":{"type":"array","items":{"$ref":"#/components/schemas/ResultMapper"}},"idGenerator":{"$ref":"#/components/schemas/AtomicLong"},"parserHooks":{"type":"array","items":{"$ref":"#/components/schemas/ParserHook"}},"initializers":{"type":"array","items":{"$ref":"#/components/schemas/Initializer"}},"removeStandaloneLines":{"type":"boolean"},"timeout":{"type":"integer","format":"int64"},"useAsyncTimeout":{"type":"boolean"},"traceManager":{"$ref":"#/components/schemas/TraceManagerImpl"},"parserConfigurator":{"$ref":"#/components/schemas/ParserConfigurator"},"templateInstanceInitializers":{"type":"array","items":{"$ref":"#/components/schemas/Initializer"}}}},"Entity":{"type":"object","properties":{"resource":{"type":"string"},"entityApiPath":{"type":"string"},"identifier":{"type":"string"},"keyFields":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"}}}},"Evaluator":{"type":"object"},"Expression":{"type":"object","properties":{"namespace":{"type":"string"},"parts":{"type":"array","items":{"$ref":"#/components/schemas/Part"}},"literal":{"type":"boolean"},"literalValue":{},"origin":{"$ref":"#/components/schemas/Origin"},"generatedId":{"type":"integer","format":"int32"}}},"Field":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"required":{"type":"boolean"},"allowedValues":{"type":"array","items":{"type":"string"}}}},"FunctionStringSectionHelperFactoryObject":{"type":"object"},"Initializer":{"type":"object"},"Links":{"type":"object","properties":{"contractYaml":{"type":"string"},"contractJson":{"type":"string"},"productYaml":{"type":"string"},"productJson":{"type":"string"},"entityApi":{"type":"string"},"swaggerUi":{"type":"string"},"openapi":{"type":"string"},"apiDocs":{"$ref":"#/components/schemas/ApiDocs"},"health":{"type":"string"}}},"Locale":{"type":"object","properties":{"language":{"type":"string"},"script":{"type":"string"},"country":{"type":"string"},"variant":{"type":"string"},"extensionKeys":{"type":"array","uniqueItems":true,"items":{"type":"string","format":"char"}},"unicodeLocaleAttributes":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"unicodeLocaleKeys":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"ISO3Language":{"type":"string"},"ISO3Country":{"type":"string"},"displayLanguage":{"type":"string"},"displayScript":{"type":"string"},"displayCountry":{"type":"string"},"displayVariant":{"type":"string"},"displayName":{"type":"string"}}},"NamespaceResolver":{"type":"object","properties":{"priority":{"type":"integer","format":"int32"},"namespace":{"type":"string"}}},"Origin":{"type":"object","properties":{"line":{"type":"integer","format":"int32"},"lineCharacterStart":{"type":"integer","format":"int32"},"lineCharacterEnd":{"type":"integer","format":"int32"},"templateId":{"type":"string"},"templateGeneratedId":{"type":"string"},"variant":{"anyOf":[{"$ref":"#/components/schemas/Variant"},{"type":"null"}]},"sourceUri":{"type":["string","null"],"format":"uri"},"synthetic":{"type":"boolean"}}},"Parameter":{"type":"object","properties":{"name":{"type":"string"},"defaultValue":{"type":"string"},"optional":{"type":"boolean"},"valuePredicate":{"$ref":"#/components/schemas/PredicateString"}}},"ParameterDeclaration":{"type":"object","properties":{"typeInfo":{"type":"string"},"key":{"type":"string"},"defaultValue":{"$ref":"#/components/schemas/Expression"},"origin":{"$ref":"#/components/schemas/Origin"}}},"ParametersInfo":{"type":"array","items":{"type":"array","items":{"$ref":"#/components/schemas/Parameter"}}},"ParserConfigurator":{"type":"object"},"ParserHook":{"type":"object"},"Part":{"type":"object","properties":{"name":{"type":"string"},"typeInfo":{"type":"string"},"virtualMethod":{"type":"boolean"}}},"PredicateString":{"type":"object"},"ProblemDetails":{"description":"Fehlerobjekt nach RFC 9457 (application/problem+json). Bei Validierungsfehlern (400/422) trägt das Feld violations die Einzelverstöße.","type":"object","properties":{"type":{"type":"string","description":"Kategorie-URI des Fehlertyps (RFC 9457); \"about:blank\" wenn nicht kategorisiert. Feature-spezifische URIs werden feature-seitig dokumentiert.","examples":["about:blank"]},"title":{"type":"string","description":"Kurzer, menschenlesbarer Titel des Fehlers.","examples":["Validierung fehlgeschlagen"]},"status":{"type":"integer","format":"int32","description":"HTTP-Statuscode des Fehlers.","examples":[422]},"detail":{"type":"string","description":"Erläuterung dieses konkreten Vorkommens.","examples":["Der Datensatz verletzt im Contract deklarierte Regeln"]},"violations":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Einzelverstöße. Entity-Schemafehler tragen den Schlüssel field, Fachregel-Verstöße den Schlüssel rule, Dokument-Schemaverstöße (ODCS/ODPS gegen JSON-Schema) den Schlüssel path, jeweils mit message.","examples":[[{"rule":"meldepflicht-konsistenz","message":"Bei kategorie=meldepflichtig muss meldepflichtig=true sein"}]]}}},"ResultMapper":{"type":"object","properties":{"priority":{"type":"integer","format":"int32"}}},"SectionBlock":{"type":"object","properties":{"origin":{"$ref":"#/components/schemas/Origin"},"id":{"type":"string"},"label":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"expressions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Expression"}},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/TemplateNode"}},"positionalParameters":{"type":"array","items":{"type":"string"}},"empty":{"type":"boolean"},"paramDeclarations":{"type":"array","items":{"$ref":"#/components/schemas/ParameterDeclaration"}}}},"SectionHelper":{"type":"object"},"SectionNode":{"type":"object","properties":{"constant":{"type":"boolean"},"section":{"type":"boolean"},"text":{"type":"boolean"},"expression":{"type":"boolean"},"name":{"type":"string"},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/SectionBlock"}},"helper":{"$ref":"#/components/schemas/SectionHelper"},"origin":{"$ref":"#/components/schemas/Origin"},"traceLevel":{"type":"boolean"},"engine":{"$ref":"#/components/schemas/EngineImpl"},"expressions":{"type":"array","items":{"$ref":"#/components/schemas/Expression"}},"parameterDeclarations":{"type":"array","items":{"$ref":"#/components/schemas/ParameterDeclaration"}}}},"ServiceIndex":{"type":"object","properties":{"service":{"type":"string"},"title":{"type":"string"},"version":{"type":"string"},"entity":{"$ref":"#/components/schemas/Entity"},"links":{"$ref":"#/components/schemas/Links"}}},"Template":{"type":"object","properties":{"expressions":{"type":"array","items":{"$ref":"#/components/schemas/Expression"}},"generatedId":{"type":"string"},"id":{"type":"string"},"variant":{"anyOf":[{"$ref":"#/components/schemas/Variant"},{"type":"null"}]},"parameterDeclarations":{"type":"array","items":{"$ref":"#/components/schemas/ParameterDeclaration"}},"fragmentIds":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"fragment":{"type":"boolean"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/TemplateNode"}},"rootNode":{"$ref":"#/components/schemas/SectionNode"},"source":{"type":["string","null"],"format":"uri"}}},"TemplateInstance":{"type":"object","properties":{"timeout":{"type":"integer","format":"int64"},"template":{"$ref":"#/components/schemas/Template"}}},"TemplateLocator":{"type":"object","properties":{"priority":{"type":"integer","format":"int32"}}},"TemplateNode":{"type":"object","properties":{"expressions":{"type":"array","items":{"$ref":"#/components/schemas/Expression"}},"parameterDeclarations":{"type":"array","items":{"$ref":"#/components/schemas/ParameterDeclaration"}},"origin":{"$ref":"#/components/schemas/Origin"},"constant":{"type":"boolean"},"section":{"type":"boolean"},"text":{"type":"boolean"},"expression":{"type":"boolean"}}},"TraceListener":{"type":"object"},"TraceManagerImpl":{"type":"object","properties":{"listeners":{"type":"array","items":{"$ref":"#/components/schemas/TraceListener"}}}},"ValueResolver":{"type":"object","properties":{"priority":{"type":"integer","format":"int32"},"supportedProperties":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"supportedMethods":{"type":"array","uniqueItems":true,"items":{"type":"string"}}}},"Variant":{"type":"object","properties":{"locale":{"$ref":"#/components/schemas/Locale"},"contentType":{"type":"string"},"encoding":{"$ref":"#/components/schemas/Charset"},"hashCode":{"type":"integer","format":"int32"},"mediaType":{"type":"string"},"charset":{"$ref":"#/components/schemas/Charset"}}}},"securitySchemes":{"SecurityScheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Authentication"}}},"tags":[{"name":"Specification API – Data Contracts (ODCS)","description":"Lesezugriff auf den Data Contract (Open Data Contract Standard, ODCS). Antwort als JSON (Default) oder YAML (Accept: application/x-yaml). Schreibende Endpunkte (anlegen, neue Version, fork, rebase, deaktivieren) sind im Walking Skeleton 501-Stubs."},{"name":"Specification API – Data Products (ODPS)","description":"Lesezugriff auf das Data Product (Open Data Product Standard, ODPS) mit seinen Output-Ports und Contract-Referenzen. Antwort als JSON (Default) oder YAML (Accept: application/x-yaml). Schreibende Endpunkte sind im Walking Skeleton 501-Stubs."}],"paths":{"/contracts":{"get":{"summary":"Alle Data Contracts (aktuelle Versionen)","description":"Liefert die aktuellen Data Contracts dieses Dienstes als Liste von Registry-Einträgen (Metadaten + verschachteltes ODCS-Dokument). Optional filterbar nach dataProductId und status. JSON-Array (Default) oder YAML-Sequenz via Accept.","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"description":"Nur Contracts dieses Datenprodukts (Produkt-URN)","name":"dataProductId","in":"query","schema":{"type":"string"}},{"description":"Nur Contracts mit diesem Lifecycle-Status (draft|active|suspended|deprecated|retired)","name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Registry-Einträge der (gefilterten) aktuellen Data Contracts (ODCS).","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"400":{"description":"Ungültiger status-Filter (nicht im Status-Kanon).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/contracts/{id}":{"post":{"summary":"Neue Contract-Version einspielen","description":"Ersetzt den Contract dieser Dienst-Instanz zur Laufzeit durch das übergebene ODCS-Dokument (YAML oder JSON). Das Dokument wird vollständig validiert (parsebar, ODCS v3.1.0 JSON-Schema (KKS-Profil), Fachschlüssel-Set vorhanden, quality.rules[] als JMESPath kompilierbar, passende Contract-ID) und erst dann atomar aktiv. Schlägt die Validierung fehl, bleibt der bisherige Contract unverändert. Bestehende Datensätze werden nicht migriert; ab dem Update gelten die neuen Regeln an den Schreibpunkten (POST/PUT/Import). Ermöglicht Contract-Evolution ohne Dev-Mode-Hot-Reload (Demo/Cluster).","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"description":"Contract-URN; muss der instanzgebundenen ID entsprechen","example":"urn:avs:tierseuche:contract","name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Vollständiges ODCS-Contract-Dokument (YAML oder JSON).","content":{"application/x-yaml":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Contract übernommen; neuer Registry-Eintrag im Body.","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{}}},"400":{"description":"Ungültiges Dokument; ODCS-Schemaverletzung trägt type urn:kks:problem:odcs-schema-violation mit violations[].path.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Pfad-ID passt nicht zur instanzgebundenen Contract-ID.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Contract-ID im Dokument weicht von der instanzgebundenen ID ab.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"summary":"Contract deaktivieren (Stub)","description":"Im Referenz-Datendienst noch nicht implementiert (Walking-Skeleton-Stub).","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"501":{"description":"Nicht implementiert."}}},"get":{"summary":"Einzelner Data Contract nach ID","description":"Liefert den Registry-Eintrag des Data Contracts zur angegebenen Contract-URN.","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"description":"Contract-URN","example":"urn:avs:tierseuche:contract","name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Registry-Eintrag des Data Contracts (ODCS).","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"404":{"description":"Unbekannte Contract-ID.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/contracts/{id}/fork":{"post":{"summary":"Sekundärkontrakt forken (Stub)","description":"Im Referenz-Datendienst noch nicht implementiert (Walking-Skeleton-Stub).","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"501":{"description":"Nicht implementiert."}}}},"/contracts/{id}/rebase":{"post":{"summary":"Sekundärkontrakt rebasen (Stub)","description":"Im Referenz-Datendienst noch nicht implementiert (Walking-Skeleton-Stub).","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"501":{"description":"Nicht implementiert."}}}},"/contracts/{id}/versions":{"get":{"summary":"Alle Versionen eines Data Contracts","description":"Liefert die vollständige Versionshistorie des Contracts als Liste (append-only, aufsteigend nach Versionsnummer). JSON-Array (Default) oder YAML-Sequenz via Accept.","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"description":"Contract-URN","name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contract-Versionen (ODCS) als Liste.","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"404":{"description":"Unbekannte Contract-ID.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/contracts/{id}/versions/{n}":{"get":{"summary":"Data Contract nach ID und Version","description":"Liefert eine konkrete, historische Contract-Version aus der Registry. JSON (Default) oder YAML via Accept-Header.","tags":["Specification API – Data Contracts (ODCS)"],"parameters":[{"description":"Contract-URN","name":"id","in":"path","required":true,"schema":{"type":"string"}},{"description":"1-basierte Versionsnummer","example":1,"name":"n","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Registry-Eintrag der angeforderten Contract-Version (ODCS).","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"404":{"description":"Unbekannte Contract-ID oder Version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/products":{"get":{"summary":"Alle Data Products (aktuelle Versionen)","description":"Liefert die aktuellen Data Products dieses Dienstes als Liste von Registry-Einträgen. Optional filterbar nach status. JSON (Default) oder YAML via Accept-Header.","tags":["Specification API – Data Products (ODPS)"],"parameters":[{"description":"Nur Products mit diesem Lifecycle-Status (draft|active|suspended|deprecated|retired)","name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Registry-Einträge der (gefilterten) aktuellen Data Products (ODPS).","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"400":{"description":"Ungültiger status-Filter (nicht im Status-Kanon).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/products/versions":{"get":{"summary":"Alle Versionen des Data Products","description":"Liefert die vollständige Versionshistorie des Data Products als Liste (append-only, aufsteigend nach Versionsnummer). JSON-Array (Default) oder YAML-Sequenz via Accept.","tags":["Specification API – Data Products (ODPS)"],"responses":{"200":{"description":"Product-Versionen (ODPS) als Liste.","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}}}}},"/products/versions/{n}":{"get":{"summary":"Data Product in bestimmter Version","description":"Liefert eine konkrete, historische Product-Version aus der Registry. JSON (Default) oder YAML via Accept-Header.","tags":["Specification API – Data Products (ODPS)"],"parameters":[{"description":"1-basierte Versionsnummer","example":1,"name":"n","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Registry-Eintrag der angeforderten Product-Version (ODPS).","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{},"*/*":{}}},"404":{"description":"Keine solche Product-Version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/products/{id}":{"post":{"summary":"Neue Product-Version einspielen","description":"Erzeugt eine neue Version des Data Products dieser Instanz. Validierung: parsebar + passende Product-ID + ODPS v1.0.0 JSON-Schema-Konformität.","tags":["Specification API – Data Products (ODPS)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}},"application/x-yaml":{"schema":{"type":"string"}},"application/yaml":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Product übernommen; neuer Registry-Eintrag im Body.","content":{"application/json":{"schema":{}},"application/x-yaml":{},"application/yaml":{}}},"400":{"description":"Dokument nicht parsebar oder ODPS-Schemaverletzung (violations[] mit path/message).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Product-ID (im Pfad oder im Dokument) weicht von der instanzgebundenen ID ab.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"summary":"Product deaktivieren (Stub)","description":"Im Referenz-Datendienst noch nicht implementiert (Walking-Skeleton-Stub).","tags":["Specification API – Data Products (ODPS)"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"501":{"description":"Nicht implementiert."}}}}},"info":{"title":"Krise (Tierseuchenkrise)","version":"1.0.0","description":"Referenzimplementierung eines DP-Blueprint-Datendienstes. Walking Skeleton: implementierter Slice + 501-Stubs."}}