@prefix aoc: <https://ontology.inferal.com/modules/ads-commerce-outcome-evidence/> .
@prefix adm: <https://ontology.inferal.com/modules/advertising-measurement/> .
@prefix pc: <https://ontology.inferal.com/modules/commerce-purchase-classification/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
aoc:AssessmentShape a sh:NodeShape ; sh:targetClass aoc:OutcomeAssessment ; sh:nodeKind sh:IRI ;
 sh:property [ sh:path aoc:context ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:operation ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:status ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:in (aoc:Known aoc:Unknown) ] ;
 sh:property [ sh:path aoc:reason ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:coverageStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:in (aoc:CompleteSelectedScope aoc:KnownSubsetCoverage aoc:UnknownSelectedScope) ] ;
 sh:property [ sh:path aoc:sourceStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:attributionStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:scopeStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:sourceDigest ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ] ;
 sh:property [ sh:path aoc:contextDigest ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ] ;
 sh:property [ sh:path aoc:interpretationDigest ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ] ;
 sh:property [ sh:path aoc:knownPurchaseCount ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:integer ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:selectedFigureCount ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:integer ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:selectedPurchaseCount ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:integer ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:selectedBindingCount ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:integer ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:figureFieldsStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:reportingWindowStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:attributionApplicabilityStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:retainedRevisionStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:purchaseLinkStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:purchaseClassificationStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:monetaryBasisStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:denominatorStanding ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:numerator ; sh:maxCount 1 ; sh:datatype xsd:decimal ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:denominator ; sh:maxCount 1 ; sh:datatype xsd:decimal ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:knownChargedSubtotal ; sh:maxCount 1 ; sh:datatype xsd:decimal ; sh:minInclusive 0 ] ;
 sh:property [ sh:path aoc:currency ; sh:maxCount 1 ; sh:datatype xsd:string ] ;
 sh:property [ sh:path aoc:knownChargedCurrency ; sh:maxCount 1 ; sh:datatype xsd:string ] ;
 sh:property [ sh:path aoc:classificationBasis ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:policy ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:sparql [ sh:message "Unknown assessments have no ratio operands" ; sh:select "PREFIX aoc: <https://ontology.inferal.com/modules/ads-commerce-outcome-evidence/> SELECT $this WHERE { $this aoc:status aoc:Unknown . { $this aoc:numerator ?v } UNION { $this aoc:denominator ?v } }" ] ;
 sh:sparql [ sh:message "Known charged subtotal retains its source currency" ; sh:select "PREFIX aoc: <https://ontology.inferal.com/modules/ads-commerce-outcome-evidence/> SELECT $this WHERE { $this aoc:knownChargedSubtotal ?value . FILTER NOT EXISTS { $this aoc:knownChargedCurrency ?currency } }" ] .
aoc:DeclaredBindingShape a sh:NodeShape ; sh:targetClass aoc:DeclaredPurchaseBinding ; sh:nodeKind sh:IRI ;
 sh:property [ sh:path aoc:figure ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:classification ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:order ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:merchant ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:policy ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
 sh:property [ sh:path aoc:purchaseKey ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; sh:minLength 1 ] ;
 sh:property [ sh:path aoc:eventKey ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; sh:minLength 1 ] ;
 sh:property [ sh:path aoc:bindingSnapshot ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; sh:minLength 1 ] ;
 sh:class aoc:DeclaredPurchaseBinding .
