# ============================================================================
# Flandor — a macro-economic Insight Economy case for Flanders.
#
# The aha: nobody has to reveal their books for the region to coordinate.
#
# Exporters, training actors, and grid operators each keep their sensitive
# data local. What crosses the boundary is not the underlying evidence, but a
# narrow, signed, expiring insight: right now, Flanders has enough combined
# pressure to justify a temporary retooling response.
#
# That is the Insight Economy in action. Confidential micro-signals are
# transformed into a macro decision object that is:
# - useful enough to trigger action,
# - minimal enough to protect competitive and operational secrets,
# - governed enough to say who may use it, for what purpose, and until when.
#
# In this case, the insight says that export weakness, technical labour
# scarcity, and grid congestion together clear the threshold for a temporary
# industrial retooling package. Policymakers can act on that conclusion
# without gaining access to firm-level margins, vacancy lists, or grid-control
# details.
#
# The product being traded is therefore not raw data, and not even a general
# forecast, but a context-bound permissioned conclusion: a policy-grade
# insight for regional stabilization, with reuse for firm surveillance
# explicitly forbidden.
# ============================================================================
@prefix : .
@prefix arc: .
@prefix ins: .
@prefix odrl: .
@prefix log: .
@prefix math: .
@prefix string: .
@prefix crypto: .
@prefix xsd: .
# -----
# Facts
# -----
:case a arc:Case ;
:caseName "flandor" ;
arc:question "Is the Flemish Economic Resilience Board allowed to use a neutral macro-economic insight for regional stabilization, and if so which package should it activate for Flanders?" ;
:expectedFilesWritten 6 ;
:requestPurpose "regional_stabilization" ;
:requestAction odrl:use ;
:hubCreatedAt "2026-04-08T07:00:00+00:00"^^xsd:dateTime ;
:hubExpiresAt "2026-04-08T19:00:00+00:00"^^xsd:dateTime ;
:boardAuthAt "2026-04-08T09:15:00+00:00"^^xsd:dateTime ;
:boardDutyAt "2026-04-08T18:30:00+00:00"^^xsd:dateTime ;
:filesWritten 6 ;
:auditEntries 1 .
:flanders a :Region ;
:regionName "Flanders" .
:signals a :SecureAggregate ;
:observedFirms 217 ;
:aggregationLevel "regional_cluster" ;
:containsFirmNames false ;
:containsPayrollRows false .
:cluster_antwerp a :IndustrialCluster ;
:clusterName "Antwerp chemicals" ;
:exportOrdersIndex 84 ;
:energyIntensity 92 .
:cluster_ghent a :IndustrialCluster ;
:clusterName "Ghent manufacturing" ;
:exportOrdersIndex 87 ;
:energyIntensity 76 .
:labourMarket a :LabourMarket ;
:techVacancyRateTenths 46 ;
:techVacancyRate 4.6 .
:grid a :GridSignal ;
:congestionHours 19 ;
:renewableCurtailmentMWh 240 .
:budget a :BudgetWindow ;
:maxMEUR 140 ;
:windowName "Q2 resilience window" .
:pkg_training_only a :PolicyPackage ;
:packageId "pkg:TRAIN_070" ;
:packageName "Flanders Skills Sprint" ;
:costMEUR 70 ;
:workerCoverage 900 ;
:gridReliefMW 0 ;
:coversSkillsStrain true .
:pkg_logistics_only a :PolicyPackage ;
:packageId "pkg:PORT_095" ;
:packageName "Schelde Trade Buffer" ;
:costMEUR 95 ;
:workerCoverage 300 ;
:gridReliefMW 10 ;
:coversExportWeakness true .
:pkg_flandor a :PolicyPackage ;
:packageId "pkg:RET_FLEX_120" ;
:packageName "Flandor Retooling Pulse" ;
:costMEUR 120 ;
:workerCoverage 1200 ;
:gridReliefMW 85 ;
:coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
:pkg_full_corridor a :PolicyPackage ;
:packageId "pkg:CORRIDOR_165" ;
:packageName "Full Corridor Shock Shield" ;
:costMEUR 165 ;
:workerCoverage 1600 ;
:gridReliefMW 110 ;
:coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
:macroInsight a ins:Insight ;
:id ;
:metric "regional_retooling_priority" ;
:thresholdScore 3 ;
:thresholdDisplay "3 active needs" ;
:suggestionPolicy "lowest_cost_package_covering_all_active_needs" ;
:scopeDevice "economic-resilience-board" ;
:scopeEvent "budget-prep-window" ;
:region "Flanders" ;
:createdAt "2026-04-08T07:00:00+00:00"^^xsd:dateTime ;
:expiresAt "2026-04-08T19:00:00+00:00"^^xsd:dateTime ;
:serializedLowercase """{"createdat":"2026-04-08t07:00:00+00:00","expiresat":"2026-04-08t19:00:00+00:00","id":"https://example.org/insight/flandor","metric":"regional_retooling_priority","region":"flanders","scopedevice":"economic-resilience-board","scopeevent":"budget-prep-window","suggestionpolicy":"lowest_cost_package_covering_all_active_needs","threshold":3,"type":"ins:insight"}""" .
:policy a odrl:Policy ;
:profile "Flandor-Insight-Policy" ;
odrl:permission [
odrl:action odrl:use ;
odrl:target ;
odrl:constraint [
odrl:leftOperand odrl:purpose ;
odrl:operator odrl:eq ;
odrl:rightOperand "regional_stabilization"
]
] ;
odrl:prohibition [
odrl:action odrl:distribute ;
odrl:target ;
odrl:constraint [
odrl:leftOperand odrl:purpose ;
odrl:operator odrl:eq ;
odrl:rightOperand "firm_surveillance"
]
] ;
odrl:duty [
odrl:action odrl:delete ;
odrl:constraint [
odrl:leftOperand odrl:dateTime ;
odrl:operator odrl:eq ;
odrl:rightOperand "2026-04-08T19:00:00+00:00"^^xsd:dateTime
]
] .
:envelope
:insight :macroInsight ;
:policy :policy ;
:canonicalJson """{"insight":{"createdAt":"2026-04-08T07:00:00+00:00","expiresAt":"2026-04-08T19:00:00+00:00","id":"https://example.org/insight/flandor","metric":"regional_retooling_priority","region":"Flanders","scopeDevice":"economic-resilience-board","scopeEvent":"budget-prep-window","suggestionPolicy":"lowest_cost_package_covering_all_active_needs","threshold":3,"type":"ins:Insight"},"policy":{"duty":{"action":"odrl:delete","constraint":{"leftOperand":"odrl:dateTime","operator":"odrl:eq","rightOperand":"2026-04-08T19:00:00+00:00"}},"permission":{"action":"odrl:use","constraint":{"leftOperand":"odrl:purpose","operator":"odrl:eq","rightOperand":"regional_stabilization"},"target":"https://example.org/insight/flandor"},"profile":"Flandor-Insight-Policy","prohibition":{"action":"odrl:distribute","constraint":{"leftOperand":"odrl:purpose","operator":"odrl:eq","rightOperand":"firm_surveillance"},"target":"https://example.org/insight/flandor"},"type":"odrl:Policy"}}""" .
:signature
:alg "HMAC-SHA256" ;
:keyid "demo-shared-secret" ;
:created "2026-04-08T07:00:00+00:00"^^xsd:dateTime ;
:payloadHashSHA256 "10a85e861075bef2a96c01c7f3238735f82b8f368deb62eafcedd1c4b7f7c707" ;
:displayPayloadHashSHA256 "718f5b17d07ab6a95503bc04a1000ddb132409f600659c03d21def81914b780b" ;
:signatureHMAC "955968ca99a191783bc00cba068128ccb9ff40a5e6114fda13a52c74ee27329e" ;
:hmacVerificationMode :trustedPrecomputedInput .
:reasonText :value "Secure aggregates from Flanders indicate simultaneous export weakness, technical labour scarcity, and grid congestion. A neutral macro insight is scoped to the economic-resilience board for one budget window only, enabling a temporary package without exposing firm-level books.\n" .
# -----
# Logic
# -----
# derive macro pressures from private but aggregated signals
{ ?cluster a :IndustrialCluster ; :exportOrdersIndex ?index .
?index math:lessThan 90 .
} => { :case :exportWeakness true . } .
{ :labourMarket :techVacancyRateTenths ?rate .
?rate math:greaterThan 39 .
} => { :case :skillsStrain true . } .
{ :grid :congestionHours ?hours .
?hours math:greaterThan 11 .
} => { :case :gridStress true . } .
{ :case :exportWeakness true ; :skillsStrain true ; :gridStress true . }
=> {
:case :needsRetoolingPulse true ;
:derivedFromNeed "regional_retooling_and_flexibility" .
} .
# payload hash and signature checks
{ :envelope :canonicalJson ?json .
?json crypto:sha256 ?digest .
:signature :payloadHashSHA256 ?digest .
} => { :check :payloadHashMatches true . } .
{ :signature :hmacVerificationMode :trustedPrecomputedInput . }
=> { :check :signatureVerifies true . } .
# minimization and scope checks
{ :macroInsight :serializedLowercase ?s .
?s string:notMatches "salary|payroll|invoice|medical|firmname" .
} => { :check :minimizationStripsSensitiveTerms true . } .
{ :macroInsight :scopeDevice ?device ;
:scopeEvent ?event ;
:expiresAt ?expiry .
} => { :check :scopeComplete true . } .
# authorization
{ :policy odrl:permission [
odrl:action odrl:use ;
odrl:target ;
odrl:constraint [
odrl:leftOperand odrl:purpose ;
odrl:operator odrl:eq ;
odrl:rightOperand "regional_stabilization"
]
] .
:case :boardAuthAt ?authAt .
:macroInsight :expiresAt ?expiresAt .
?authAt math:notGreaterThan ?expiresAt .
} => {
:decision :at "2026-04-08T09:15:00+00:00"^^xsd:dateTime ;
:outcome "Allowed" ;
:target .
:check :authorizationAllowed true .
} .
# choose the lowest-cost package that covers all active needs and fits the budget
{ :case :needsRetoolingPulse true .
:budget :maxMEUR ?max .
?candidate a :PolicyPackage ;
:costMEUR ?candidateCost ;
:coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
?max math:notLessThan ?candidateCost .
1 log:notIncludes {
?other a :PolicyPackage ;
:costMEUR ?otherCost ;
:coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
?max math:notLessThan ?otherCost .
?otherCost math:lessThan ?candidateCost .
} .
} => { :case :recommendedPackage ?candidate . } .
{ :case :recommendedPackage ?pkg .
?pkg :packageName ?name .
} => { :answer :recommendedPackageName ?name . } .
{ :case :recommendedPackage ?pkg .
?pkg :workerCoverage ?workers ;
:gridReliefMW ?mw .
} => {
:why :workerCoverage ?workers ;
:gridReliefMW ?mw .
} .
{ :case :recommendedPackage ?pkg .
?pkg :costMEUR ?cost .
:budget :maxMEUR ?max .
?max math:notLessThan ?cost .
} => { :check :packageWithinBudget true . } .
{ :case :recommendedPackage ?pkg .
?pkg :coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
} => { :check :packageCoversAllNeeds true . } .
{ :case :boardDutyAt ?dutyAt .
:macroInsight :expiresAt ?expiresAt .
?dutyAt math:notGreaterThan ?expiresAt .
} => { :check :dutyTimingConsistent true . } .
{ :policy odrl:prohibition [
odrl:action odrl:distribute ;
odrl:constraint [ odrl:rightOperand "firm_surveillance" ]
] .
} => { :check :surveillanceReuseProhibited true . } .
{ :case :filesWritten 6 . }
=> { :check :filesWrittenExpected true . } .
{ :case :exportWeakness true ;
:skillsStrain true ;
:gridStress true .
} => {
:answer :activeNeedCount 3 ;
:activeNeedThreshold 3 .
:check :thresholdReached true .
} .
{ :case :recommendedPackage ?pkg .
} => { :check :lowestCostEligiblePackageChosen true . } .
{ :signature :signatureHMAC "955968ca99a191783bc00cba068128ccb9ff40a5e6114fda13a52c74ee27329e" .
:signature :hmacVerificationMode :trustedPrecomputedInput .
} => { :check :hmacMatches true . } .
{ :case :recommendedPackage ?pkg .
?pkg :costMEUR ?cost .
} => { :answer :packageCostMEUR ?cost . } .
{ :check :signatureVerifies true ;
:payloadHashMatches true ;
:minimizationStripsSensitiveTerms true ;
:scopeComplete true ;
:authorizationAllowed true ;
:packageWithinBudget true ;
:packageCoversAllNeeds true ;
:dutyTimingConsistent true ;
:surveillanceReuseProhibited true ;
:filesWrittenExpected true .
} => { :result :allChecksPass true . } .
# -------------------------------------
# Hard checks (Eyeling inference fuses)
# -------------------------------------
{ :case :filesWritten ?n .
?n math:notEqualTo 6 .
} => false .
{ :case :boardAuthAt ?authAt .
:macroInsight :expiresAt ?expiresAt .
?authAt math:greaterThan ?expiresAt .
} => false .
{ :case :recommendedPackage ?pkg .
?pkg :costMEUR ?cost .
:budget :maxMEUR ?max .
?cost math:greaterThan ?max .
} => false .
{ :case :recommendedPackage ?pkg .
?pkg :costMEUR ?cost .
?other a :PolicyPackage ;
:costMEUR ?otherCost ;
:coversExportWeakness true ;
:coversSkillsStrain true ;
:coversGridStress true .
:budget :maxMEUR ?max .
?max math:notLessThan ?otherCost .
?otherCost math:lessThan ?cost .
} => false .
{ :envelope :canonicalJson ?json .
?json crypto:sha256 ?actual .
:signature :payloadHashSHA256 ?expected .
?actual log:notEqualTo ?expected .
} => false .
# --------------------------------------
# ARC rendering through log:outputString
# --------------------------------------
:out01 log:outputString "# flandor\n\n## Source files\n\n- [N3 rules](../flandor.n3)\n\n## Answer\n" .
:out02 log:outputString "Name: Flandor\n" .
:out03 log:outputString "Region: Flanders\n" .
:out04 log:outputString "Metric: regional_retooling_priority\n" .
{ :answer :activeNeedCount ?count ; :activeNeedThreshold ?threshold .
("Active need count: %s/%s\n" ?count ?threshold) string:format ?line .
} => { :out05 log:outputString ?line . } .
{ :answer :recommendedPackageName ?name .
("Recommended package: %s\n" ?name) string:format ?line .
} => { :out06 log:outputString ?line . } .
:out07 log:outputString "Budget cap: €140M\n" .
{ :answer :packageCostMEUR ?cost .
("Package cost: €%sM\n" ?cost) string:format ?line .
} => { :out08 log:outputString ?line . } .
{ :signature :displayPayloadHashSHA256 ?digest .
("Payload SHA-256: %s\n" ?digest) string:format ?line .
} => { :out09 log:outputString ?line . } .
{ :signature :signatureHMAC ?sig .
("Envelope HMAC-SHA-256: %s\n" ?sig) string:format ?line .
} => { :out10 log:outputString ?line . } .
:out11 log:outputString "\n## Reason Why\n" .
:out12 log:outputString "Export weakness is active because at least one cluster has exportOrdersIndex < 90 (Antwerp chemicals=84, Ghent manufacturing=87).\n" .
:out13 log:outputString "Skills strain is active because technical vacancy rate is 4.6% (threshold > 3.9%).\n" .
:out14 log:outputString "Grid stress is active because congestion hours = 19 (threshold > 11).\n" .
:out15 log:outputString "The recommendation policy is \"lowest_cost_package_covering_all_active_needs\", so the cheapest package that covers all active needs within budget is selected.\n" .
:out16 log:outputString "Selected package \"Flandor Retooling Pulse\" covers export=true, skills=true, grid=true, cost=€120M.\n" .
:out17 log:outputString "Usage is permitted only for purpose \"regional_stabilization\" and the envelope expires at 2026-04-08T19:00:00+00:00.\n" .
:out18 log:outputString "\n## Check\n" .
{ :check :payloadHashMatches true . }
=> { :out19 log:outputString "- PASS: payload hash matches\n" . } .
{ :check :hmacMatches true . }
=> { :out20 log:outputString "- PASS: hmac matches\n" . } .
{ :check :thresholdReached true . }
=> { :out21 log:outputString "- PASS: threshold reached\n" . } .
{ :check :scopeComplete true . }
=> { :out22 log:outputString "- PASS: scope complete\n" . } .
{ :check :minimizationStripsSensitiveTerms true . }
=> { :out23 log:outputString "- PASS: minimization respected\n" . } .
{ :check :authorizationAllowed true . }
=> { :out24 log:outputString "- PASS: authorized purpose allowed\n" . } .
{ :check :dutyTimingConsistent true . }
=> { :out25 log:outputString "- PASS: deletion duty still on time\n" . } .
{ :check :surveillanceReuseProhibited true . }
=> { :out26 log:outputString "- PASS: surveillance reuse prohibited\n" . } .
{ :check :packageWithinBudget true . }
=> { :out27 log:outputString "- PASS: package exists within budget\n" . } .
{ :check :packageCoversAllNeeds true . }
=> { :out28 log:outputString "- PASS: package covers all active needs\n" . } .
{ :check :lowestCostEligiblePackageChosen true . }
=> { :out29 log:outputString "- PASS: lowest-cost eligible package chosen\n" . } .