{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://www.moraltrade.org/schemas/moral-trade/protocol-profile.schema.json","title":"Moral Trade Core Protocol Profile","type":"object","required":["version","purpose","requiredProposalFields","statusValues","stateTransitionRules","decisionPipeline","guardrails","factorCodes","evidenceSchemas","provenanceModel","provenanceObjectSchemas","provenancePersistence","qualityMetrics"],"properties":{"version":{"type":"string","minLength":1},"purpose":{"type":"string","minLength":1},"requiredProposalFields":{"type":"array","minItems":7,"items":{"type":"object","required":["key","label"],"properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1}},"additionalProperties":false}},"statusValues":{"type":"array","minItems":5,"items":{"type":"string","minLength":1},"uniqueItems":true},"stateTransitionRules":{"type":"array","minItems":6,"items":{"type":"object","required":["key","from","allowedTo","requires","provenanceActivity"],"properties":{"key":{"type":"string","minLength":1},"from":{"type":"string","minLength":1},"allowedTo":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"uniqueItems":true},"requires":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"uniqueItems":true},"provenanceActivity":{"type":"string","minLength":1}},"additionalProperties":false}},"decisionPipeline":{"type":"array","minItems":8,"items":{"type":"object","required":["key","label","sourceDocumentStep","requiredSignals","passCondition","failureStatus","blocksMatchable"],"properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"sourceDocumentStep":{"type":"string","minLength":1},"requiredSignals":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"uniqueItems":true},"passCondition":{"type":"string","minLength":1},"failureStatus":{"type":"string","minLength":1},"blocksMatchable":{"type":"boolean"}},"additionalProperties":false}},"guardrails":{"type":"array","minItems":4,"items":{"type":"object","required":["code","label","rule"],"properties":{"code":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"rule":{"type":"string","minLength":1}},"additionalProperties":false}},"factorCodes":{"type":"array","minItems":5,"items":{"type":"object","required":["code","label","description"],"properties":{"code":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":"string","minLength":1}},"additionalProperties":false}},"evidenceSchemas":{"type":"array","minItems":3,"items":{"type":"object","required":["key","label","required"],"properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"required":{"type":"array","minItems":3,"items":{"type":"string","minLength":1}}},"additionalProperties":false}},"provenanceModel":{"type":"object","required":["entities","activities","agents"],"properties":{"entities":{"type":"array","minItems":3,"items":{"type":"string"}},"activities":{"type":"array","minItems":3,"items":{"type":"string"}},"agents":{"type":"array","minItems":3,"items":{"type":"string"}}},"additionalProperties":false},"provenanceObjectSchemas":{"type":"array","minItems":4,"items":{"type":"object","required":["key","label","required"],"properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"required":{"type":"array","minItems":3,"items":{"type":"string","minLength":1}}},"additionalProperties":false}},"provenancePersistence":{"type":"object","required":["strategy","tables","accessRules"],"properties":{"strategy":{"type":"string","minLength":1},"tables":{"type":"array","minItems":1,"items":{"type":"object","required":["table","objectSchemaKey","accessModel","requiredColumns"],"properties":{"table":{"type":"string","minLength":1},"objectSchemaKey":{"type":"string","minLength":1},"accessModel":{"type":"string","minLength":1},"requiredColumns":{"type":"array","minItems":4,"items":{"type":"string","minLength":1},"uniqueItems":true}},"additionalProperties":false}},"accessRules":{"type":"array","minItems":2,"items":{"type":"string","minLength":1},"uniqueItems":true}},"additionalProperties":false},"qualityMetrics":{"type":"array","minItems":5,"items":{"type":"string","minLength":1},"uniqueItems":true}},"additionalProperties":false}