@prefix : <https://ontology.inferal.com/modules/advertising-budget/> .
@prefix adm: <https://ontology.inferal.com/modules/advertising-measurement/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mod: <https://w3id.org/mod#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .

<https://ontology.inferal.com/modules/advertising-budget/owl>
    a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    owl:imports : , adm:owl ;
    dcterms:title "Advertising Budget Ontology - OWL Addendum" ;
    dcterms:description "OWL class, property and disjointness axioms layered on the RDFS Advertising Budget Ontology. Configuration qualifiers retain their meaning without universal budget or cap identity keys." ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:source : ;
    vann:preferredNamespacePrefix "abg" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/advertising-budget/" ;
    mod:status "draft" ;
    rdfs:comment "Separates budgets, caps and their qualifiers while preserving configuration records with shared scope and period. Revision or snapshot identity requires independent evidence." ;
    owl:versionInfo "0.4.0" .


# --- Classes -----------------------------------------------------------------

:SpendingSpecification a owl:Class .
:Budget a owl:Class .
:BudgetPeriod a owl:Class .
:DeliveryMethod a owl:Class .
:BudgetScope a owl:Class .
:SpendCap a owl:Class .


# --- Object properties -------------------------------------------------------

:budgetAmount a owl:ObjectProperty , owl:FunctionalProperty .
:budgetPeriod a owl:ObjectProperty , owl:FunctionalProperty .
:budgetDeliveryMethod a owl:ObjectProperty , owl:FunctionalProperty .
:appliesToScope a owl:ObjectProperty , owl:FunctionalProperty .
:capAmount a owl:ObjectProperty , owl:FunctionalProperty .
:capPeriod a owl:ObjectProperty , owl:FunctionalProperty .
:constrainsScope a owl:ObjectProperty , owl:FunctionalProperty .
:effectiveWindow a owl:ObjectProperty , owl:FunctionalProperty .

# Deliberately not functional: a scope covers as many entities as the budget is
# shared across, and that count is the signal a consumer needs.
:coversEntity a owl:ObjectProperty .


# --- Datatype properties -----------------------------------------------------

:sharedAcrossEntities a owl:DatatypeProperty , owl:FunctionalProperty .
:coveredEntityCount a owl:DatatypeProperty , owl:FunctionalProperty .


:configuredSharing a owl:DatatypeProperty .
:memberBasis a owl:ObjectProperty .
:observedFundedEntity a owl:ObjectProperty .
:rebalanceEnabled a owl:DatatypeProperty .
:reportedCountBasis a owl:ObjectProperty .
:reportedEntityCount a owl:DatatypeProperty .
:scopeAccount a owl:ObjectProperty .
:scopeObservedAt a owl:DatatypeProperty .
:scopeOwner a owl:ObjectProperty .
:sharingBasis a owl:ObjectProperty .


# --- Incompatibility ---------------------------------------------------------

# A ceiling is not a target. Pacing spends toward a budget and stops at a cap, so
# a reasoner that conflates them reports a capped account as underspending.
:Budget owl:disjointWith :SpendCap .

# Neither is the scope they apply to, nor the vocabulary values that qualify them.
:BudgetScope owl:disjointWith :Budget , :SpendCap .
:BudgetPeriod owl:disjointWith :DeliveryMethod .
