{
  "@context": {
    "dct": "http://purl.org/dc/terms/",
    "donation": "https://skyocean.io/ontology/donation/",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "owl": "http://www.w3.org/2002/07/owl#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "schema": "http://schema.org/",
    "skos": "http://www.w3.org/2004/02/skos/core#",
    "skyocean": "https://skyocean.io/ontology/",
    "trade": "https://skyocean.io/ontology/trade/",
    "vs": "http://www.w3.org/2003/06/sw-vocab-status/ns#",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@graph": [
    {
      "@id": "skyocean:",
      "dct:description": "A specialized vocabulary for agricultural commodities trading in decentralized knowledge graphs",
      "owl:versionInfo": "2.1.3",
      "@type": "owl:Ontology",
      "dct:title": "Skyocean Ontology",
      "dct:modified": "2026-05-04",
      "dct:issued": "2023-10-01",
      "rdfs:comment": "The Skyocean Ontology is designed to facilitate global trade of agricultural commodities and traceable humanitarian donation programs with an emphasis on transparency, traceability, and efficient financing.",
      "dct:creator": "Skyocean Team"
    },
    {
      "@id": "skyocean:incidentLocation",
      "@type": "rdf:Property",
      "rdfs:label": "incidentLocation",
      "rdfs:comment": "Where the incident occurred (UN/LOCODE port code, lat/long for in-transit, or place name).",
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:financierProfitRate",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "rdfs:label": "financierProfitRate",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "Profit rate for the financier"
    },
    {
      "@id": "skyocean:packaging",
      "rdfs:label": "packaging",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Description of how the commodity is packaged",
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:humidityRange",
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "rdfs:comment": "Min–max relative humidity range observed across the voyage (% RH).",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "humidityRange"
    },
    {
      "@id": "skyocean:samplingMethod",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "samplingMethod",
      "vs:term_status": "testing",
      "rdfs:comment": "Sampling method used by the inspection agency (e.g., 'ISO 24333:2009, composite sample of 30 incremental samples per container').",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      }
    },
    {
      "@id": "donation:method",
      "rdfs:label": "method",
      "rdfs:comment": "Payment rail: stablecoin, revolut, sepa, swift, other",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "donation:DonationContribution"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:attestationType",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "@type": "rdf:Property",
      "rdfs:label": "attestationType",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Nature of the observation. Values: VesselCall, CargoHandling, CustomsClearance, QualityInspection, ConditionReading, Departure, PaymentConfirmation, IncidentReport, ClaimDecision, ComplianceVerification.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:beneficialOwnershipKYCRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "beneficialOwnershipKYCRef",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Internal Skyocean reference to the beneficial-ownership KYC dossier for an institutional financier."
    },
    {
      "@id": "skyocean:effectiveDate",
      "rdfs:label": "effectiveDate",
      "rdfs:comment": "Policy inception date.",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      }
    },
    {
      "@id": "skyocean:hsCode",
      "vs:term_status": "testing",
      "rdfs:domain": [
        {
          "@id": "skyocean:Commodity"
        },
        {
          "@id": "skyocean:Document"
        }
      ],
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Harmonized System (HS) commodity classification code, used in customs declarations. Format like '0713.40.00'.",
      "rdfs:label": "hsCode",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:fundReceivingEntity",
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "vs:term_status": "testing",
      "rdfs:label": "fundReceivingEntity",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Skyocean operating entity that receives institutional capital under the trade-finance facility (e.g., Skyocean DOOEL, Skyocean Lithuania UAB).",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:independentAttestorCount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:domain": {
        "@id": "skyocean:ConvergenceRecord"
      },
      "rdfs:label": "independentAttestorCount",
      "@type": "rdf:Property",
      "rdfs:comment": "Number of distinct attesting institutions, used as a proxy for independence of the convergence record.",
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:packingList",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "packingList",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Campaign packing list (kits, quantities, specifications). Functional analog of a trade agreement in the core trading flow.",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "donation:DonationKit"
      }
    },
    {
      "@id": "skyocean:documents",
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Detailed document information",
      "rdfs:label": "documents"
    },
    {
      "@id": "skyocean:corridor",
      "rdfs:label": "corridor",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:comment": "Trade corridor classification (e.g., 'Sudan', 'Ghana', 'EU').",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:signingOfficer",
      "rdfs:comment": "Authorized signing officer for an institutional counterparty (name + role + DID).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:label": "signingOfficer"
    },
    {
      "@id": "skyocean:expiryDate",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      },
      "rdfs:label": "expiryDate",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Policy expiry date.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:participant",
      "rdfs:label": "participant",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:anyURI"
      },
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "DID of the participant in this FinancingRecord — institutional facility DID or retail-holder DID.",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:documentURL",
      "@type": "rdf:Property",
      "rdfs:comment": "Pointer to the original document file in private storage (e.g., S3 signed URL). Always private-tier — never appears in a Document KA's public assertion. Equivalent to schema:url qualified with skyocean:visibility 'private'.",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:label": "documentURL",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:anyURI"
      }
    },
    {
      "@id": "skyocean:plotCentroid",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:ProductionPlot"
      },
      "rdfs:label": "plotCentroid",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Centroid latitude/longitude of the plot, WGS84 — convenience field for indexing.",
      "vs:term_status": "testing",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:attestationCount",
      "rdfs:label": "attestationCount",
      "rdfs:comment": "Total number of institutional attestations linked to the trade.",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:domain": {
        "@id": "skyocean:ConvergenceRecord"
      }
    },
    {
      "@id": "skyocean:transactionTimeline",
      "rdfs:comment": "Timeline information for the transaction",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:label": "transactionTimeline",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:source",
      "vs:term_status": "testing",
      "rdfs:label": "source",
      "rdfs:comment": "Financing-source descriptor on a FinancingRecord. Values: 'institutional-trade-finance-facility', 'retail-skyt-capacity-activation', 'mixed-pool', 'institutional-tfa' (Branch C).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:vesselIMO",
      "vs:term_status": "testing",
      "rdfs:label": "vesselIMO",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "IMO ship identification number (7 digits) under the IMO ship-identification scheme."
    },
    {
      "@id": "skyocean:readingInterval",
      "rdfs:label": "readingInterval",
      "rdfs:comment": "Logger sampling interval as ISO 8601 duration (e.g., 'PT15M' = 15 minutes).",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "rdfs:range": {
        "@id": "xsd:duration"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:financingAmount",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Amount of financing required",
      "vs:term_status": "stable",
      "rdfs:label": "financingAmount",
      "rdfs:domain": {
        "@id": "skyocean:PaymentDetails"
      }
    },
    {
      "@id": "skyocean:confirmationReference",
      "vs:term_status": "testing",
      "rdfs:label": "confirmationReference",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:PaymentSource"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "External reference or transaction ID from the payment source (e.g., MoMo txn ID, SWIFT MT103 reference, LC number).",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:voyage",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "voyage",
      "rdfs:comment": "Voyage reference issued by the carrier.",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:attestationSignature",
      "rdfs:comment": "Cryptographic signature or integrity hash of the attestation payload, used for audit and non-repudiation.",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "attestationSignature",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:containerNumber",
      "vs:term_status": "testing",
      "rdfs:label": "containerNumber",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "ISO 6346 container identifier (e.g., 'MEDU 4471001'). Per-container — distinct from skyocean:containerCount which counts the set. Cross-document join key for graph linkage between BL, Packing List, Phyto, SGS, Customs etc."
    },
    {
      "@id": "donation:targetAmount",
      "rdfs:label": "targetAmount",
      "rdfs:comment": "Funding goal for the campaign",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      }
    },
    {
      "@id": "skyocean:sourceProvider",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:PaymentSource"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Specific provider or network that emitted the confirmation (e.g., 'MTN MoMo', 'GhIPSS', 'PAPSS', 'Deutsche Bank AG').",
      "rdfs:label": "sourceProvider",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "trade:destination",
      "rdfs:label": "destination",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Country of destination of the commodity.",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "donation:consignedTo",
      "rdfs:label": "consignedTo",
      "rdfs:comment": "Skyocean in-region entity that receives the goods on consignment (e.g. Skyocean Sudan for the Sudan pilot)",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:Party"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      }
    },
    {
      "@id": "skyocean:role",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:comment": "Role of an entity in the trade",
      "@type": "rdf:Property",
      "rdfs:label": "role",
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:courseOverGround",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      },
      "rdfs:comment": "Course over ground in degrees (COG, 0–359°).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "courseOverGround",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:grossWeight",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "rdfs:label": "grossWeight",
      "vs:term_status": "testing",
      "rdfs:comment": "Gross weight including packaging and pallets/dunnage, in kilograms. For cargo measurement; for full quantity context use schema:weight with QuantitativeValue."
    },
    {
      "@id": "skyocean:claimNumber",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "rdfs:label": "claimNumber",
      "rdfs:comment": "Insurer-issued claim reference (private layer).",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:confirmedAmount",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:comment": "Monetary amount the source confirms as settled.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:PaymentSource"
      },
      "rdfs:label": "confirmedAmount",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:sanctionsCheckRef",
      "rdfs:label": "sanctionsCheckRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:comment": "Internal reference to the sanctions screening record for a retail or institutional financier.",
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:carrier",
      "rdfs:comment": "Carrier (shipping line) legal name.",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:label": "carrier",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:paymentMethod",
      "rdfs:comment": "Method of payment (e.g., 'CAD' for Cash Against Documents)",
      "@type": "rdf:Property",
      "rdfs:label": "paymentMethod",
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:PaymentDetails"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:familiesServed",
      "rdfs:label": "familiesServed",
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:domain": {
        "@id": "donation:DonationDistribution"
      },
      "rdfs:comment": "Private. Number of families who received kits in a distribution event",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:payoutAmount",
      "rdfs:comment": "Amount paid by the insurer (may differ from claim amount after surveyor adjustment and deductible).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "rdfs:label": "payoutAmount",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:plotGeometry",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "GeoJSON polygon or multipolygon describing the plot boundary.",
      "rdfs:label": "plotGeometry",
      "rdfs:domain": {
        "@id": "skyocean:ProductionPlot"
      }
    },
    {
      "@id": "skyocean:lockedSKYT",
      "rdfs:label": "lockedSKYT",
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "SKYT amount locked by an individual retail holder for this trade.",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:contributorCount",
      "rdfs:domain": [
        {
          "@id": "donation:DonorAggregateReceipt"
        },
        {
          "@id": "donation:DonationCampaign"
        }
      ],
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:comment": [
        "Number of contributors to the campaign",
        "Number of distinct contributors on the rail at the time of receipt issuance. Private-tier — donor identities never surface; counts may."
      ],
      "@type": "rdf:Property",
      "rdfs:label": "contributorCount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:fundingSource",
      "rdfs:label": "fundingSource",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "One or more funding sources attached to the campaign — a wallet, bank account, or rail (Revolut, SEPA, SWIFT, stablecoin). Reuses skyocean:PaymentSource.",
      "rdfs:range": {
        "@id": "skyocean:PaymentSource"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:lockedValue",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:comment": "USD-equivalent value of the SKYT locked by an individual retail holder.",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "vs:term_status": "testing",
      "rdfs:label": "lockedValue"
    },
    {
      "@id": "skyocean:attestorIdentity",
      "rdfs:label": "attestorIdentity",
      "rdfs:comment": "Name or identifier of the specific institution (e.g., 'Port of Tema', 'Ghana Revenue Authority', 'SGS', 'MTN MoMo').",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:contract",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "contract",
      "rdfs:comment": "Smart-contract address that issued the on-chain anchor (e.g., the SkyoceanTradeCore deployment).",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:beneficiaryReference",
      "rdfs:label": "beneficiaryReference",
      "rdfs:comment": "SWIFT MT103 Field 70 — reference for the beneficiary. Typically carries the trade ID + invoice reference.",
      "rdfs:domain": [
        {
          "@id": "skyocean:Document"
        },
        {
          "@id": "skyocean:PaymentSource"
        }
      ],
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:kycRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "kycRef",
      "rdfs:comment": "KYC attestation reference for the donor. Required for every contribution — no anonymous donations.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "donation:DonationContribution"
      }
    },
    {
      "@id": "donation:status",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Campaign status (Active, Funded, Procuring, Shipping, Delivered, Cancelled)",
      "rdfs:label": "status"
    },
    {
      "@id": "donation:currentAmount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:comment": "Current funds received",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "@type": "rdf:Property",
      "rdfs:label": "currentAmount"
    },
    {
      "@id": "skyocean:vessel",
      "@type": "rdf:Property",
      "rdfs:comment": "Vessel name (semantics align with GS1/DCSA vessel reference).",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "vessel"
    },
    {
      "@id": "skyocean:loggerSerial",
      "rdfs:comment": "Serial number of the temperature/humidity logger device (e.g., 'STM-44511-A').",
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:label": "loggerSerial",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:tradeType",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:comment": "Trade-structure classification (e.g., 'self-consignment-CAD', 'EXW-then-CFR-twoLeg').",
      "@type": "rdf:Property",
      "rdfs:label": "tradeType",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:timeline",
      "rdfs:comment": "Trade-level timeline block carrying expected dates (origination, shipment, arrival, settlement). Properties are typically drawn from the trade: sub-namespace.",
      "@type": "rdf:Property",
      "rdfs:label": "timeline",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:campaignRef",
      "rdfs:label": "campaignRef",
      "@type": "rdf:Property",
      "rdfs:domain": [
        {
          "@id": "donation:DonationDistribution"
        },
        {
          "@id": "donation:SupplyChainSignal"
        },
        {
          "@id": "donation:DonationContribution"
        }
      ],
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Reference to the parent campaign by donation:campaignId (and optionally KA UAL). Applies to contributions, distributions and supply-chain signals.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:bookingReference",
      "@type": "rdf:Property",
      "rdfs:comment": "Carrier booking reference (e.g., 'MSCU-BK-2026-00471'). Cross-document join key linking BL to PO and IOM consolidation manifest.",
      "vs:term_status": "testing",
      "rdfs:domain": [
        {
          "@id": "skyocean:Document"
        },
        {
          "@id": "skyocean:LogisticsRecord"
        }
      ],
      "rdfs:label": "bookingReference",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:governmentIdRef",
      "rdfs:comment": "Internal Skyocean reference to the government-ID document record on file (the ID number itself is not stored as a literal).",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:label": "governmentIdRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:lossExtent",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:label": "lossExtent",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Severity of loss. Values: Total, Partial, Constructive, Salvage, Marginal."
    },
    {
      "@id": "skyocean:loadingPort",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Port of loading (UN/LOCODE plus place name).",
      "rdfs:label": "loadingPort",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      }
    },
    {
      "@id": "skyocean:sealNumber",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Tamper-evident seal number affixed to a container at loading. One per container. Cross-document join key.",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "sealNumber",
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:indicativeCycleMargin",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:label": "indicativeCycleMargin",
      "rdfs:comment": "Indicative trade-cycle margin descriptor (string with explicit not-guaranteed framing) — e.g., '~3.8% per ~55-day cycle (Sudan corridor; not guaranteed)'.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:totalContractValue",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:label": "totalContractValue",
      "vs:term_status": "testing",
      "rdfs:comment": "Total contract value (private layer).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:eudrDDSReference",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:label": "eudrDDSReference",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "EU Information System reference number for the submitted EUDR Due Diligence Statement."
    },
    {
      "@id": "skyocean:documentStatus",
      "rdfs:comment": "Status of a trade document",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "documentStatus",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      }
    },
    {
      "@id": "skyocean:cycleDays",
      "rdfs:label": "cycleDays",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:comment": "Total cycle length in days (origination to settlement).",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      }
    },
    {
      "@id": "donation:kitsDistributed",
      "rdfs:label": "kitsDistributed",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:comment": "Private. Number of kits delivered in a distribution event",
      "rdfs:domain": {
        "@id": "donation:DonationDistribution"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      }
    },
    {
      "@id": "skyocean:jurisdictionOfResidence",
      "@type": "rdf:Property",
      "rdfs:label": "jurisdictionOfResidence",
      "rdfs:comment": "ISO 3166 country code of a retail holder's jurisdiction of residence.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:relatedTrade",
      "rdfs:comment": "Reference from a child KA (FinancingRecord, Document, etc.) back to its parent Trade KA.",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "relatedTrade",
      "rdfs:range": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "donation:operationalCostBreakdown",
      "rdfs:label": "operationalCostBreakdown",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Private detailed operational cost breakdown (freight, customs, insurance, last-mile logistics, platform & ops)",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:domain": {
        "@id": "donation:DonationCampaignPrivate"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:surveyorRef",
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:comment": "Reference to the InstitutionalAttestation issued by the independent loss adjuster / surveyor (attestorType: InspectionAgency, attestationType: IncidentReport).",
      "rdfs:label": "surveyorRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:InstitutionalAttestation"
      }
    },
    {
      "@id": "donation:signalType",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:SupplyChainSignal"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Type of supply chain signal (IoT-Temperature, IoT-GPS, PartnerConfirmation, FieldReport, Verification)",
      "rdfs:label": "signalType"
    },
    {
      "@id": "skyocean:paymentTrigger",
      "rdfs:label": "paymentTrigger",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Payment-trigger classification used by the smart contract's _checkPaymentConditions evaluator. Values: 'OnDocumentsVerified', 'OnArrival', 'OnLoading', 'Manual'.",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:insuredValue",
      "vs:term_status": "testing",
      "rdfs:domain": [
        {
          "@id": "skyocean:Document"
        },
        {
          "@id": "skyocean:InsurancePolicy"
        }
      ],
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Insured value declared on the marine cargo / war-risk policy, typically 110% of CIF/CFR per ICC(A) standard. Use schema:price with currency for the JSON-LD value object.",
      "@type": "rdf:Property",
      "rdfs:label": "insuredValue",
      "rdfs:range": {
        "@id": "xsd:decimal"
      }
    },
    {
      "@id": "skyocean:qualityParameters",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:label": "qualityParameters",
      "@type": "rdf:Property",
      "rdfs:comment": "Composite quality test results (parameter, measured value, spec, pass/fail). Free-form string in v2.1.3; future versions may model as a structured assertion.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:Document"
      }
    },
    {
      "@id": "skyocean:onChainAnchor",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:label": "onChainAnchor",
      "vs:term_status": "testing",
      "rdfs:comment": "Composite block on a Trade describing its on-chain anchor — network, contract address, transaction hash. Optional and additive to skyocean:blockchainTransactionId.",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:convergenceRecord",
      "@type": "rdf:Property",
      "rdfs:comment": "Reference from a Trade to its ConvergenceRecord (or records, when multiple convergence events occur in a trade's lifecycle).",
      "rdfs:range": {
        "@id": "skyocean:ConvergenceRecord"
      },
      "vs:term_status": "testing",
      "rdfs:label": "convergenceRecord",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "trade:expectedSettlementDate",
      "rdfs:comment": "Expected settlement (trade-completion) date.",
      "@type": "rdf:Property",
      "rdfs:label": "expectedSettlementDate",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:policyNumber",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Insurer-issued policy reference (private layer — typically PII-adjacent).",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      },
      "rdfs:label": "policyNumber",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:percentageOfTotal",
      "vs:term_status": "testing",
      "rdfs:comment": "Share of total trade financing as a decimal (0.0–1.0).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "rdfs:label": "percentageOfTotal"
    },
    {
      "@id": "skyocean:exactPricing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Wrapper carrying exact contract pricing (unit price + total contract value) on the private trade KA.",
      "rdfs:label": "exactPricing",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      }
    },
    {
      "@id": "skyocean:treatmentMethod",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:comment": "Phytosanitary / disinfestation treatment method applied to the cargo (e.g., 'Methyl bromide fumigation, 48 mg/L for 24 h at 21°C').",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "treatmentMethod",
      "@type": "rdf:Property",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:tier",
      "rdfs:label": "tier",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Retail holder tier classification per Skyocean's tier model.",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:attestationTimestamp",
      "rdfs:range": {
        "@id": "xsd:dateTime"
      },
      "vs:term_status": "testing",
      "rdfs:label": "attestationTimestamp",
      "rdfs:comment": "Time at which the attesting institution recorded the event.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "donation:verifiedBy",
      "rdfs:domain": {
        "@id": "donation:DonationDistribution"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "State official, NGO or partner witness who confirmed distribution",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "skyocean:Party"
      },
      "rdfs:label": "verifiedBy",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:facilityTermsRef",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Reference to the executed Trade Finance Agreement governing an institutional FinancingRecord.",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:label": "facilityTermsRef"
    },
    {
      "@id": "trade:origin",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Country of origin of the commodity (ISO 3166 country name or code).",
      "rdfs:label": "origin",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:onChainTxHash",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "donation:DonationContribution"
      },
      "rdfs:comment": "On-chain transaction hash for stablecoin contributions",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "onChainTxHash"
    },
    {
      "@id": "skyocean:requiredDocumentTypes",
      "rdfs:label": "requiredDocumentTypes",
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:comment": "Types of documents required for the trade",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:deductible",
      "rdfs:label": "deductible",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Self-insured retention before the policy responds.",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      },
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      }
    },
    {
      "@id": "skyocean:containerCount",
      "rdfs:label": "containerCount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Total container count for the shipping leg."
    },
    {
      "@id": "skyocean:paymentTerms",
      "rdfs:label": "paymentTerms",
      "rdfs:domain": {
        "@id": "skyocean:PaymentDetails"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Terms of payment",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:positionPingCount",
      "@type": "rdf:Property",
      "rdfs:label": "positionPingCount",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Total number of AIS position pings captured for a tracked voyage. Used in the AIS feed Document KA to summarize feed density.",
      "rdfs:range": {
        "@id": "xsd:integer"
      }
    },
    {
      "@id": "skyocean:financingRecords",
      "rdfs:range": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "financingRecords",
      "rdfs:comment": "Reference from a Trade to one or more FinancingRecord KAs (institutional + retail per-holder).",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:temperatureExcursion",
      "rdfs:comment": "Number of temperature excursion events outside spec tolerance during the voyage. 0 = within tolerance.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "@type": "rdf:Property",
      "rdfs:label": "temperatureExcursion"
    },
    {
      "@id": "skyocean:claimStatus",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "claimStatus",
      "rdfs:comment": "Status of the claim. Values: Filed, Acknowledged, UnderInvestigation, Approved, PartiallyApproved, Denied, Settled, Withdrawn.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:tradeRef",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "tradeRef",
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "rdfs:comment": "Reference to the Trade KA this attestation contributes to.",
      "rdfs:range": {
        "@id": "xsd:anyURI"
      }
    },
    {
      "@id": "skyocean:incidentDescription",
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "incidentDescription",
      "@type": "rdf:Property",
      "rdfs:comment": "Short descriptor of what happened (the private layer carries the full surveyor report text).",
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:attestationRef",
      "rdfs:comment": "Reference to an independent institutional attestation (customs, inspection, partner NGO) that feeds the convergence evaluator",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "rdfs:label": "attestationRef",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "donation:DonationDistribution"
      }
    },
    {
      "@id": "skyocean:walletAddress",
      "rdfs:comment": "Blockchain wallet address",
      "rdfs:domain": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:label": "walletAddress",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:blockchainStatus",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Status of the trade on the blockchain",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:label": "blockchainStatus"
    },
    {
      "@id": "skyocean:claimAmount",
      "rdfs:label": "claimAmount",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Amount claimed by the policyholder.",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:totalSKYTLocked",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "rdfs:comment": "Aggregate SKYT amount locked in a retail-pool FinancingRecord.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "totalSKYTLocked"
    },
    {
      "@id": "skyocean:treatmentDate",
      "@type": "rdf:Property",
      "rdfs:label": "treatmentDate",
      "rdfs:comment": "Date the phytosanitary / disinfestation treatment was applied.",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:navStatus",
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      },
      "vs:term_status": "testing",
      "rdfs:label": "navStatus",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "AIS navigational status (e.g., 'Underway using engine', 'At anchor', 'Moored').",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:billOfLading",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property",
      "rdfs:label": "billOfLading",
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:comment": "Bill of Lading reference number issued by the carrier.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:incidentType",
      "@type": "rdf:Property",
      "rdfs:comment": "Nature of the incident. Values: Damage, Loss, Theft, Contamination, Delay, Casualty, GeneralAverage, Quarantine.",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "incidentType",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:deliveryStatus",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Public delivery outcome: delivered, partially-delivered, not-delivered, plus recipient category",
      "vs:term_status": "testing",
      "rdfs:label": "deliveryStatus",
      "rdfs:domain": {
        "@id": "donation:DonationDistribution"
      }
    },
    {
      "@id": "skyocean:governmentIdType",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "governmentIdType",
      "@type": "rdf:Property",
      "rdfs:comment": "Type of government ID document on file for a retail holder. Values: 'passport', 'national-id', 'driver-licence'."
    },
    {
      "@id": "skyocean:notifyParty",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "vs:term_status": "stable",
      "rdfs:label": "notifyParty",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Party to be notified",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:commodity",
      "rdfs:range": {
        "@id": "skyocean:Commodity"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "commodity",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "The commodity being traded",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:sumInsured",
      "rdfs:label": "sumInsured",
      "vs:term_status": "testing",
      "rdfs:comment": "Maximum insured value under the policy.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      },
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      }
    },
    {
      "@id": "skyocean:logistics",
      "rdfs:label": "logistics",
      "rdfs:range": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:comment": "Reference from a Trade to its LogisticsRecord.",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "donation:costSummary",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:label": "costSummary",
      "rdfs:comment": "Public top-level cost summary surfaced to donors (e.g. kits vs operations)",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:sourceType",
      "rdfs:label": "sourceType",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Classification of the payment signal source. Values: MobileMoney, NationalSwitch, RegionalSettlement, SWIFT, LetterOfCredit, CashAgainstDocuments, OnChainEscrow, HumanAttested.",
      "rdfs:domain": {
        "@id": "skyocean:PaymentSource"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:imoNumber",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": [
        {
          "@id": "skyocean:LogisticsRecord"
        },
        {
          "@id": "skyocean:Document"
        }
      ],
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "IMO (International Maritime Organization) number — globally-unique 7-digit vessel identifier.",
      "rdfs:label": "imoNumber",
      "vs:term_status": "testing",
      "@type": "rdf:Property"
    },
    {
      "@id": "trade:quantity",
      "vs:term_status": "testing",
      "rdfs:label": "quantity",
      "rdfs:range": {
        "@id": "schema:QuantitativeValue"
      },
      "rdfs:comment": "Quantity of the commodity (with schema:unitCode).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      }
    },
    {
      "@id": "skyocean:cutoffCompliance",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "cutoffCompliance",
      "rdfs:comment": "Verification that a production plot was deforestation-free as of the EUDR cut-off date (31 December 2020) per remote-sensing analysis. Values: 'Verified', 'NotVerified', 'AtRisk'.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:ProductionPlot"
      }
    },
    {
      "@id": "skyocean:productionDetails",
      "@type": "rdf:Property",
      "rdfs:label": "productionDetails",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Production method, origin, and other sensitive details",
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      }
    },
    {
      "@id": "skyocean:capitalProvided",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "schema:MonetaryAmount"
      },
      "rdfs:comment": "Capital amount provided by this participant (or retail-pool aggregate).",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:label": "capitalProvided"
    },
    {
      "@id": "skyocean:consensusStatus",
      "rdfs:domain": {
        "@id": "skyocean:ConvergenceRecord"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:label": "consensusStatus",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Qualitative label derived from verificationStrength. Values: Insufficient, Partial, Strong, Full."
    },
    {
      "@id": "skyocean:lotReference",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "lotReference",
      "rdfs:comment": "Production lot reference (e.g., 'AR-LOT-2026-00471'). Cross-document join key linking supplier invoice, packing list, phytosanitary, and quality cert.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:fundingBranch",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:comment": "Funding-branch classification per full-trade-flow.md. Values: 'A' (retail-only on-chain), 'B' (mixed institutional + retail on-chain), 'C' (institutional-only off-chain, no smart contract).",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "fundingBranch"
    },
    {
      "@id": "skyocean:verificationStatus",
      "rdfs:comment": "Verification status of a document",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:label": "verificationStatus",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:dischargePort",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "vs:term_status": "testing",
      "rdfs:label": "dischargePort",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Port of discharge (UN/LOCODE plus place name)."
    },
    {
      "@id": "donation:sourceOfFunds",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:comment": "Public-tier description of which receiving rails the campaign accepts (e.g., 'Stablecoin receiving wallet (USDC/USDT) · SEPA donation account · SWIFT correspondent'). Reveals channels, not donor identities.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:label": "sourceOfFunds",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:loggerModel",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "loggerModel",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "rdfs:comment": "Model designation of the data logger device (e.g., 'Sensitech TempTale GEO 4').",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:swiftUETR",
      "rdfs:label": "swiftUETR",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": [
        {
          "@id": "skyocean:PaymentSource"
        },
        {
          "@id": "skyocean:Document"
        }
      ],
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Unique End-to-end Transaction Reference (UETR) from a SWIFT MT103 message — UUID format. Cross-document join key linking inbound payment confirmation to invoice and PO.",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:consignee",
      "vs:term_status": "stable",
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "consignee",
      "rdfs:comment": "Consignee information",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      }
    },
    {
      "@id": "skyocean:tradeStatus",
      "@type": "rdf:Property",
      "rdfs:label": "tradeStatus",
      "rdfs:comment": "Current status of the trade transaction",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "trade:expectedArrivalDate",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Expected arrival date at discharge port.",
      "rdfs:label": "expectedArrivalDate",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:txHash",
      "rdfs:label": "txHash",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Transaction hash of the createTrade call that issued the bytes32 tradeId. Distinct from skyocean:blockchainTransactionId, which is the tradeId itself.",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:certifications",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "rdfs:comment": "List of certifications or standards the commodity meets",
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "certifications"
    },
    {
      "@id": "skyocean:containerType",
      "@type": "rdf:Property",
      "rdfs:label": "containerType",
      "vs:term_status": "testing",
      "rdfs:comment": "Container type description (e.g., '40-ft HC', 'flexitank-equipped 20-ft').",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:LogisticsRecord"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:payment",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "rdfs:label": "payment",
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Payment and financing details",
      "rdfs:range": {
        "@id": "skyocean:PaymentDetails"
      }
    },
    {
      "@id": "skyocean:edifactMessageType",
      "rdfs:label": "edifactMessageType",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "EDIFACT message type used in the customs filing (e.g., 'CUSDEC', 'CUSRES', 'CUSCAR', 'IFTSTA', 'COARRI', 'COPRAR', 'CODECO').",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:participantLEI",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "participantLEI",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "ISO 17442 Legal Entity Identifier for an institutional participant (where applicable)."
    },
    {
      "@id": "skyocean:tradeLegs",
      "rdfs:label": "tradeLegs",
      "vs:term_status": "testing",
      "rdfs:comment": "Ordered list of leg identifiers for a multi-leg trade (e.g., ['origin', 'export'] for an EXW-then-CFR cocoa-style structure). Single-leg trades typically omit this property.",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:campaignOperator",
      "rdfs:label": "campaignOperator",
      "vs:term_status": "testing",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:comment": "Skyocean operating entity that operates the donation campaign (e.g., Skyocean DOOEL — campaign operator and fund-receiving entity). Distinct from the consignee that takes title in the destination country.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:grade",
      "rdfs:comment": "Quality grade of the commodity",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "grade"
    },
    {
      "@id": "skyocean:coverageType",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "coverageType",
      "rdfs:comment": "Type of insurance coverage. Values: Cargo, WarRisk, AllRisk, NamedPerils, Strike, ContingencyAndDelay.",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      }
    },
    {
      "@id": "donation:region",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:label": "region",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Target distribution region"
    },
    {
      "@id": "donation:campaignId",
      "rdfs:comment": "Canonical anchor identifier for the campaign, issued by the Skyocean backend (e.g. CMP-2026-SUD-001). Stable across on-chain and off-chain campaigns.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "campaignId",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      }
    },
    {
      "@id": "skyocean:senderReference",
      "rdfs:domain": [
        {
          "@id": "skyocean:Document"
        },
        {
          "@id": "skyocean:PaymentSource"
        }
      ],
      "@type": "rdf:Property",
      "rdfs:comment": "SWIFT MT103 Field 20 — sender's transaction reference. Often carries the buyer's PO number.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "senderReference"
    },
    {
      "@id": "skyocean:temperatureRange",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Min–max temperature range observed across the voyage, in degrees Celsius.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "temperatureRange",
      "rdfs:domain": {
        "@id": "skyocean:ColdChainLog"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing"
    },
    {
      "@id": "trade:expectedShipmentDate",
      "rdfs:label": "expectedShipmentDate",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Expected shipment date."
    },
    {
      "@id": "skyocean:referenceId",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "rdfs:comment": "Reference to the public section URI",
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:label": "referenceId",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:anyURI"
      }
    },
    {
      "@id": "skyocean:buyerDetails",
      "rdfs:comment": "Wrapper carrying full buyer identification.",
      "rdfs:label": "buyerDetails",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "@type": "rdf:Property",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:positionTimestamp",
      "@type": "rdf:Property",
      "rdfs:label": "positionTimestamp",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Timestamp of the AIS position report (ISO 8601 UTC).",
      "rdfs:range": {
        "@id": "xsd:dateTime"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      }
    },
    {
      "@id": "skyocean:edifactStatus",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Outcome reference of the EDIFACT exchange (e.g., the response message ID or 'CUSRES accepted').",
      "@type": "rdf:Property",
      "vs:term_status": "testing",
      "rdfs:label": "edifactStatus"
    },
    {
      "@id": "donation:aggregateAmount",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "donation:DonorAggregateReceipt"
      },
      "rdfs:label": "aggregateAmount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Total contribution amount across the rail at the time of receipt issuance.",
      "rdfs:range": {
        "@id": "xsd:decimal"
      }
    },
    {
      "@id": "skyocean:detailedSpecifications",
      "rdfs:comment": "Detailed technical specifications with thresholds",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "@type": "rdf:Property",
      "rdfs:label": "detailedSpecifications",
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:speedOverGround",
      "@type": "rdf:Property",
      "rdfs:comment": "Speed over ground in knots (SOG).",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      },
      "rdfs:label": "speedOverGround",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:netWeight",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Net weight of the cargo itself, excluding packaging, in kilograms.",
      "@type": "rdf:Property",
      "rdfs:label": "netWeight"
    },
    {
      "@id": "skyocean:blockchainTransactionId",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "Transaction ID on the blockchain",
      "rdfs:label": "blockchainTransactionId",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:affectedQuantity",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Quantity of cargo affected (with unit code).",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "schema:QuantitativeValue"
      },
      "rdfs:label": "affectedQuantity",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      }
    },
    {
      "@id": "skyocean:payoutDate",
      "rdfs:range": {
        "@id": "xsd:date"
      },
      "rdfs:label": "payoutDate",
      "rdfs:comment": "Date funds were credited to the policyholder.",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:bankingDetails",
      "@type": "rdf:Property",
      "rdfs:label": "bankingDetails",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "rdfs:comment": "Wrapper carrying banking detail (schema:bankName, BIC/SWIFT identifier, schema:accountId).",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:specifications",
      "rdfs:domain": {
        "@id": "skyocean:Commodity"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "Technical specifications of the commodity",
      "@type": "rdf:Property",
      "rdfs:label": "specifications",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:mmsiNumber",
      "@type": "rdf:Property",
      "rdfs:comment": "MMSI (Maritime Mobile Service Identity) — 9-digit vessel radio identifier used by AIS feeds.",
      "rdfs:label": "mmsiNumber",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:domain": [
        {
          "@id": "skyocean:LogisticsRecord"
        },
        {
          "@id": "skyocean:Document"
        }
      ],
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:paymentSource",
      "rdfs:comment": "Reference from a Trade to one or more PaymentSource KAs that confirm settlement on this trade.",
      "rdfs:label": "paymentSource",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:PaymentSource"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "trade:originatedAt",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Date the trade was originated in the Skyocean platform.",
      "rdfs:label": "originatedAt"
    },
    {
      "@id": "skyocean:shipper",
      "rdfs:comment": "Skyocean operating entity in the country of origin (Bill of Lading 'From'). Distinct from the legal Seller and from the fund-receiving entity.",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "@type": "rdf:Property",
      "rdfs:label": "shipper"
    },
    {
      "@id": "skyocean:verificationStrength",
      "rdfs:comment": "Computed score (0.0–1.0) summarising how strongly the trade is corroborated by independent institutional attestations.",
      "rdfs:label": "verificationStrength",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:ConvergenceRecord"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:incidentRef",
      "rdfs:label": "incidentRef",
      "rdfs:range": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Reference to the CargoIncident triggering the claim.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:walletProvenance",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:comment": "Internal reference to a verified-wallet KYC linkage record for a retail holder.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "walletProvenance",
      "@type": "rdf:Property",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:policyRef",
      "rdfs:comment": "Reference to the InsurancePolicy under which this claim is filed.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "policyRef",
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:InsuranceClaim"
      },
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:InsurancePolicy"
      }
    },
    {
      "@id": "skyocean:positionLat",
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Latitude in decimal degrees, WGS84.",
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      },
      "rdfs:label": "positionLat",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "xsd:decimal"
      }
    },
    {
      "@id": "skyocean:incidentDate",
      "rdfs:label": "incidentDate",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:dateTime"
      },
      "rdfs:domain": {
        "@id": "skyocean:CargoIncident"
      },
      "rdfs:comment": "Date and time the incident was reported or discovered.",
      "@type": "rdf:Property",
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:targetBeneficiaries",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "vs:term_status": "testing",
      "rdfs:label": "targetBeneficiaries",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Target number of families to be served",
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:integer"
      }
    },
    {
      "@id": "skyocean:eudrOperator",
      "@type": "rdf:Property",
      "rdfs:label": "eudrOperator",
      "rdfs:comment": "Legal entity acting as the EUDR Operator that places the relevant commodity on the EU market and submits the Due Diligence Statement under Regulation (EU) 2023/1115.",
      "vs:term_status": "testing",
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:domain": {
        "@id": "skyocean:Document"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:contributionRail",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:domain": [
        {
          "@id": "donation:DonationContribution"
        },
        {
          "@id": "donation:DonorAggregateReceipt"
        }
      ],
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "The receiving rail used for an aggregate or single contribution: 'stablecoin', 'sepa', 'swift', 'revolut'.",
      "@type": "rdf:Property",
      "rdfs:label": "contributionRail"
    },
    {
      "@id": "donation:campaignWallet",
      "rdfs:comment": "Optional EVM wallet address (e.g. Polygon) when the campaign has an on-chain funding source. Not the anchor identifier — some campaigns are fully off-chain.",
      "rdfs:domain": {
        "@id": "donation:DonationCampaign"
      },
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:label": "campaignWallet",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:participantDetails",
      "rdfs:label": "participantDetails",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Wrapper carrying full participant identification on a private FinancingRecord (institutional or retail).",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:amlCheckRef",
      "rdfs:comment": "Internal reference to the AML clearance record for a retail or institutional financier.",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "@type": "rdf:Property",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "amlCheckRef"
    },
    {
      "@id": "skyocean:supplierDetails",
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "rdfs:comment": "Wrapper carrying full supplier identification (schema:legalName, schema:address, schema:taxID, contact).",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property",
      "rdfs:label": "supplierDetails"
    },
    {
      "@id": "skyocean:positionLon",
      "rdfs:label": "positionLon",
      "rdfs:comment": "Longitude in decimal degrees, WGS84.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:VesselPosition"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:financingRequired",
      "vs:term_status": "stable",
      "rdfs:domain": {
        "@id": "skyocean:PaymentDetails"
      },
      "@type": "rdf:Property",
      "rdfs:comment": "Whether financing is required for the trade",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "financingRequired",
      "rdfs:range": {
        "@id": "xsd:boolean"
      }
    },
    {
      "@id": "skyocean:insurer",
      "rdfs:range": {
        "@id": "skyocean:TradeParty"
      },
      "rdfs:comment": "Insurer or syndicate underwriting the policy (e.g., 'Lloyd's of London correspondent', 'Munich Re').",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property",
      "rdfs:label": "insurer",
      "rdfs:domain": {
        "@id": "skyocean:InsurancePolicy"
      }
    },
    {
      "@id": "skyocean:attestorType",
      "rdfs:label": "attestorType",
      "rdfs:domain": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "@type": "rdf:Property",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Category of institution making the attestation. Values: PortAuthority, CustomsAuthority, InspectionAgency, Carrier, ConditionMonitor, PaymentRail, FinancialInstitution, Human.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:settlementAccount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdf:Property",
      "rdfs:comment": "Wrapper carrying the institutional financier's settlement account detail on the private FinancingRecord.",
      "rdfs:label": "settlementAccount"
    },
    {
      "@id": "skyocean:network",
      "rdfs:comment": "Blockchain network identifier (e.g., 'polygon', 'polygon-mumbai').",
      "rdfs:label": "network",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:premiumAmount",
      "rdfs:label": "premiumAmount",
      "rdfs:comment": "Premium paid to bind the policy. Use schema:price with currency for the JSON-LD value object.",
      "@type": "rdf:Property",
      "rdfs:domain": [
        {
          "@id": "skyocean:Document"
        },
        {
          "@id": "skyocean:InsurancePolicy"
        }
      ],
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:decimal"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:vesselName",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "vesselName",
      "rdfs:domain": [
        {
          "@id": "skyocean:LogisticsRecord"
        },
        {
          "@id": "skyocean:Document"
        }
      ],
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Vessel name (e.g., 'MV BALTIC TRADER'). Use schema:name on a schema:Vehicle subclass when expressing in JSON-LD with schema.org context.",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:documentStatuses",
      "rdfs:label": "documentStatuses",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "Status information for required documents",
      "@type": "rdf:Property"
    },
    {
      "@id": "skyocean:financingStatus",
      "rdfs:range": {
        "@id": "xsd:string"
      },
      "rdfs:label": "financingStatus",
      "rdfs:domain": {
        "@id": "skyocean:Trade"
      },
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "@type": "rdf:Property",
      "rdfs:comment": "Current status of trade financing"
    },
    {
      "@id": "skyocean:participantCount",
      "rdfs:label": "participantCount",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "xsd:integer"
      },
      "@type": "rdf:Property",
      "rdfs:domain": {
        "@id": "skyocean:FinancingRecord"
      },
      "rdfs:comment": "Number of distinct participants (used on retail-pool FinancingRecord roll-ups).",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:accessPermissions",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:domain": {
        "@id": "skyocean:TradePrivateData"
      },
      "vs:term_status": "stable",
      "rdfs:comment": "Access control permissions",
      "@type": "rdf:Property",
      "rdfs:label": "accessPermissions"
    },
    {
      "@id": "donation:paymentSource",
      "vs:term_status": "testing",
      "rdfs:domain": {
        "@id": "donation:DonationContribution"
      },
      "rdfs:comment": "Rail-specific payment record (provider, reference, institutional flag) reused from the core Skyocean payments module",
      "rdfs:label": "paymentSource",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:range": {
        "@id": "skyocean:PaymentSource"
      },
      "@type": "rdf:Property"
    },
    {
      "@id": "donation:DonationContribution",
      "@type": "rdfs:Class",
      "rdfs:comment": "A single donor contribution to a campaign, via stablecoin or bank transfer",
      "vs:term_status": "testing",
      "rdfs:label": "DonationContribution",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:ProductionPlot",
      "rdfs:label": "ProductionPlot",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "A geolocated plot of land where a regulated commodity (e.g., cocoa, coffee, palm oil, soy) was produced. Required under EUDR for parcel-level traceability. Geometry expressed via GeoJSON polygon and centroid.",
      "@type": "rdfs:Class"
    },
    {
      "@id": "skyocean:PaymentSource",
      "rdfs:subClassOf": {
        "@id": "skyocean:InstitutionalAttestation"
      },
      "rdfs:comment": "A record of an external signal confirming that payment has occurred, decoupled from the underlying rail. The same class represents signals from mobile money, national payment switches, regional settlement systems, SWIFT, letters of credit, cash-against-documents arrangements, on-chain escrow, and human-attested confirmations. Subclass of InstitutionalAttestation when the source is an institution.",
      "@type": "rdfs:Class",
      "rdfs:label": "PaymentSource",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:CargoIncident",
      "@type": "rdfs:Class",
      "rdfs:label": "CargoIncident",
      "vs:term_status": "testing",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "An event affecting cargo that may trigger an insurance claim — damage, loss, theft, contamination, delay, casualty. The CargoIncident KA captures what happened, where, when, and to what extent, attested by an independent surveyor and/or the responsible custodian (port, carrier)."
    },
    {
      "@id": "skyocean:PaymentDetails",
      "@type": "rdfs:Class",
      "rdfs:comment": "Details of payment and financing arrangements for a trade",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "rdfs:label": "PaymentDetails"
    },
    {
      "@id": "skyocean:VesselPosition",
      "rdfs:label": "VesselPosition",
      "vs:term_status": "testing",
      "@type": "rdfs:Class",
      "rdfs:comment": "A single AIS position report from a vessel during a tracked voyage. A continuous AIS feed comprises many VesselPosition assertions.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:InsurancePolicy",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:subClassOf": {
        "@id": "skyocean:Document"
      },
      "rdfs:comment": "A cargo or marine insurance policy bound to one or more trades. Subclass of Document — the policy is itself a tradeable instrument with status, parties, and references — but carries dedicated insurance-specific properties.",
      "rdfs:label": "InsurancePolicy",
      "@type": "rdfs:Class"
    },
    {
      "@id": "donation:SupplyChainSignal",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Real-time signals from IoT sensors, partner confirmations, or field reports linked to a campaign",
      "@type": "rdfs:Class",
      "vs:term_status": "testing",
      "rdfs:label": "SupplyChainSignal"
    },
    {
      "@id": "skyocean:BlockchainTransaction",
      "rdfs:label": "BlockchainTransaction",
      "rdfs:comment": "Records of trade events recorded on the blockchain",
      "@type": "rdfs:Class",
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "skyocean:CommodityTrade",
      "rdfs:label": "CommodityTrade",
      "rdfs:comment": "A specialized trade of agricultural commodities",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "stable",
      "@type": "rdfs:Class",
      "rdfs:subClassOf": {
        "@id": "skyocean:Trade"
      }
    },
    {
      "@id": "skyocean:FinancingRecord",
      "vs:term_status": "stable",
      "@type": "rdfs:Class",
      "rdfs:comment": "Details of trade financing arrangements and token positions",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:label": "FinancingRecord"
    },
    {
      "@id": "skyocean:Trade",
      "rdfs:label": "Trade",
      "@type": "rdfs:Class",
      "vs:term_status": "stable",
      "rdfs:comment": "The core class representing a complete trade transaction between parties in the Skyocean ecosystem.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:DonationKit",
      "vs:term_status": "testing",
      "rdfs:comment": "Specification of a kit's contents — food, medicine, prevention items — with quantities and sourcing details",
      "rdfs:label": "DonationKit",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class"
    },
    {
      "@id": "skyocean:TradeParty",
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "rdfs:comment": "Entities involved in a trade transaction (buyer, seller, consignee, etc.)",
      "rdfs:label": "TradeParty"
    },
    {
      "@id": "skyocean:Commodity",
      "rdfs:comment": "Represents physical agricultural goods being traded in the Skyocean ecosystem",
      "vs:term_status": "stable",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "rdfs:label": "Commodity"
    },
    {
      "@id": "skyocean:ColdChainLog",
      "vs:term_status": "testing",
      "rdfs:comment": "Container-level temperature + humidity telemetry log captured by an in-container data logger across a voyage.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "rdfs:label": "ColdChainLog"
    },
    {
      "@id": "skyocean:TradePrivateData",
      "rdfs:label": "TradePrivateData",
      "vs:term_status": "stable",
      "rdfs:comment": "Private data related to a trade transaction",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class"
    },
    {
      "@id": "skyocean:InsuranceClaim",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:label": "InsuranceClaim",
      "rdfs:comment": "A formal claim filed against an InsurancePolicy in respect of a CargoIncident. Carries claim status, claimed amount, surveyor's loss assessment, insurer's decision, and payout details.",
      "@type": "rdfs:Class"
    },
    {
      "@id": "skyocean:LogisticsRecord",
      "rdfs:comment": "A summary of the logistics for a shipping leg of a trade — vessel, voyage, carrier, loading and discharge ports, BL reference, and container details. Attaches to a Trade via skyocean:logistics.",
      "rdfs:label": "LogisticsRecord",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:InstitutionalAttestation",
      "rdfs:comment": "An independent observation by an operational institution (port authority, customs authority, inspection agency, carrier, condition monitor, payment rail, financial institution, or human verifier) about a trade event. Each attestation is recorded as a Knowledge Asset and feeds the convergence record for its trade.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdfs:Class",
      "rdfs:label": "InstitutionalAttestation"
    },
    {
      "@id": "donation:DistributionObservation",
      "rdfs:label": "DistributionObservation",
      "@type": "rdfs:Class",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Independent observation of a donation distribution event by an external NGO or partner agency (e.g., IOM Sudan country office). Distinct from donation:DonationDistribution which is the operational delivery record; this class captures the third-party witness.",
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:DonationDistribution",
      "rdfs:comment": "A delivery event recording kits distributed to beneficiaries, verified by state officials",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "@type": "rdfs:Class",
      "rdfs:label": "DonationDistribution"
    },
    {
      "@id": "skyocean:PublicTradeOverview",
      "@type": "rdfs:Class",
      "rdfs:comment": "A typeable marker class indicating that a Trade KA is intended as a public-overview assertion (paired with a private TradePrivateData KA). Used as a secondary @type alongside skyocean:CommodityTrade.",
      "vs:term_status": "testing",
      "rdfs:label": "PublicTradeOverview",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      }
    },
    {
      "@id": "donation:DonationCampaign",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "A bounded humanitarian-aid campaign with a packing list, target amount, and delivery timeline. Identified by a backend-issued donation:campaignId (e.g. CMP-2026-SUD-001). Funding sources (wallets and/or bank accounts) are attached to the campaign and do not serve as its anchor.",
      "@type": "rdfs:Class",
      "rdfs:label": "DonationCampaign"
    },
    {
      "@id": "skyocean:ConvergenceRecord",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "rdfs:label": "ConvergenceRecord",
      "vs:term_status": "testing",
      "rdfs:comment": "The aggregate cross-validated state of a trade, constructed from the convergence of independent institutional attestations. Used to compute verification strength without a single central validator."
    },
    {
      "@id": "donation:DonorAggregateReceipt",
      "rdfs:comment": "Per-rail aggregate of donor contributions for a campaign (e.g., total stablecoin / SEPA / SWIFT for CMP-2026-SUD-001). Issued continuously as contributions arrive; final aggregate at campaign close. Public-tier shows totals; private-tier links per-contribution detail.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "@type": "rdfs:Class",
      "rdfs:label": "DonorAggregateReceipt",
      "vs:term_status": "testing"
    },
    {
      "@id": "donation:DonationCampaignPrivate",
      "@type": "rdfs:Class",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing",
      "rdfs:comment": "Private assertion data for a campaign: supplier details, distribution plan, bank account, and access permissions",
      "rdfs:label": "DonationCampaignPrivate"
    },
    {
      "@id": "donation:LastMileAcknowledgment",
      "@type": "rdfs:Class",
      "rdfs:label": "LastMileAcknowledgment",
      "rdfs:comment": "Distribution acknowledgment from the in-region last-mile coordinator (e.g., Khartoum State Ministry of Social Welfare). State-authority sign-off on receipt and onward distribution to identified beneficiary households.",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "vs:term_status": "testing"
    },
    {
      "@id": "skyocean:Document",
      "rdfs:isDefinedBy": {
        "@id": "skyocean:"
      },
      "rdfs:comment": "Trade-related documentation including their verification status",
      "@type": "rdfs:Class",
      "rdfs:label": "Document",
      "vs:term_status": "stable"
    }
  ]
}
