@prefix duplo: <https://ontology.inferal.com/modules/data-usage-processing-lineage/> .
@prefix dcls: <https://ontology.inferal.com/modules/data-classification/> .
@prefix dpv: <https://w3id.org/dpv#> .
@prefix ex: <https://example.com/duplo/query/materialize-candidate/> .
@prefix pd: <https://w3id.org/dpv/pd#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

pd:EmailAddress rdfs:subClassOf dpv:PersonalData .

ex:context a dcls:ClassificationContext .
ex:input-port
    a duplo:DataInputPort ;
    duplo:hasClassificationConstraint ex:input-constraint .
ex:output-port a duplo:OutputPort .

ex:input-constraint
    a duplo:ClassificationConstraint ;
    duplo:requiresDataCategory dpv:PersonalData ;
    duplo:requiresClassificationStatus dcls:Confirmed ;
    duplo:requiresSensitivityLevel dcls:ModerateSensitivity .

ex:specification
    a duplo:ProcessingSpecification ;
    duplo:declaresProcessing dpv:Pseudonymise ;
    duplo:specificationContext ex:context ;
    duplo:hasInputPort ex:input-port ;
    duplo:hasOutputPort ex:output-port ;
    duplo:hasExpectedClassificationImpact ex:impact .

ex:impact
    a duplo:ExpectedClassificationImpact ;
    duplo:sourcePort ex:input-port ;
    duplo:resultPort ex:output-port ;
    duplo:sourceCategory pd:EmailAddress ;
    duplo:hasImpactKind duplo:CategoryReplacement ;
    duplo:resultCategory dpv:PseudonymisedData .

ex:input-element a duplo:DataElementVersion .
ex:output-element
    a duplo:DataElementVersion ;
    prov:qualifiedGeneration ex:generation .

ex:source-classification
    a dcls:DataClassification ;
    dcls:classifiesElement ex:input-element ;
    dcls:personalDataCategory pd:EmailAddress ;
    dcls:hasClassificationContext ex:context ;
    dcls:hasSensitivityLevel dcls:ModerateSensitivity ;
    dcls:hasClassificationStatus dcls:Confirmed .

ex:run
    a duplo:ProcessingActivity ;
    duplo:performedProcessing dpv:Pseudonymise ;
    duplo:realizesSpecification ex:specification ;
    duplo:processingContext ex:context ;
    duplo:hasLineageCoverage duplo:CompleteLineage ;
    duplo:lineageCoverageScope duplo:ElementDependencyLineageScope ;
    duplo:hasLineageCoverageAssessment ex:coverage-assessment ;
    prov:qualifiedUsage ex:usage .

ex:coverage-review a prov:Activity ; prov:generated ex:coverage-assessment .
ex:coverage-assessment
    a duplo:LineageCoverageAssessment ;
    duplo:assessesResource ex:run ;
    duplo:assessedLineageCoverage duplo:CompleteLineage ;
    duplo:assessedLineageScope duplo:ElementDependencyLineageScope ;
    duplo:coverageBoundary ex:run ;
    prov:wasGeneratedBy ex:coverage-review .

ex:usage
    a prov:Usage ;
    prov:entity ex:input-element ;
    prov:hadRole ex:input-port .

ex:generation
    a prov:Generation ;
    prov:activity ex:run ;
    prov:hadRole ex:output-port .
