@prefix am: <https://ggen.ai/ontology/asset-management#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

# Ontology Definition
am: a owl:Ontology ;
    dcterms:title "Asset Management Ontology" ;
    dcterms:description "Ontology for enterprise asset tracking, depreciation, maintenance, and lifecycle" ;
    dcterms:created "2025-01-08"^^xsd:date ;
    owl:versionInfo "1.0.0" .

# ============================================================================
# CORE CLASSES
# ============================================================================

# Asset Classes
am:Asset a owl:Class ;
    rdfs:label "Asset" ;
    rdfs:comment "Physical or digital asset owned by organization" .

am:FixedAsset a owl:Class ;
    rdfs:subClassOf am:Asset ;
    rdfs:label "Fixed Asset" ;
    rdfs:comment "Long-term tangible asset" .

am:IntangibleAsset a owl:Class ;
    rdfs:subClassOf am:Asset ;
    rdfs:label "Intangible Asset" ;
    rdfs:comment "Non-physical asset (software, patents)" .

am:IT_Asset a owl:Class ;
    rdfs:subClassOf am:Asset ;
    rdfs:label "IT Asset" ;
    rdfs:comment "Information technology asset" .

am:Equipment a owl:Class ;
    rdfs:subClassOf am:FixedAsset ;
    rdfs:label "Equipment" ;
    rdfs:comment "Machinery or equipment" .

am:Vehicle a owl:Class ;
    rdfs:subClassOf am:FixedAsset ;
    rdfs:label "Vehicle" ;
    rdfs:comment "Vehicle asset" .

am:Building a owl:Class ;
    rdfs:subClassOf am:FixedAsset ;
    rdfs:label "Building" ;
    rdfs:comment "Real estate property" .

am:Furniture a owl:Class ;
    rdfs:subClassOf am:FixedAsset ;
    rdfs:label "Furniture" ;
    rdfs:comment "Office furniture" .

# Asset Register
am:AssetRegister a owl:Class ;
    rdfs:label "Asset Register" ;
    rdfs:comment "Comprehensive asset inventory" .

am:AssetCategory a owl:Class ;
    rdfs:label "Asset Category" ;
    rdfs:comment "Category for asset classification" .

am:Location a owl:Class ;
    rdfs:label "Location" ;
    rdfs:comment "Physical location of asset" .

# Tracking
am:AssetTag a owl:Class ;
    rdfs:label "Asset Tag" ;
    rdfs:comment "Physical tag or label on asset" .

am:Barcode a owl:Class ;
    rdfs:subClassOf am:AssetTag ;
    rdfs:label "Barcode" ;
    rdfs:comment "Barcode identifier" .

am:RFID a owl:Class ;
    rdfs:subClassOf am:AssetTag ;
    rdfs:label "RFID" ;
    rdfs:comment "RFID tag for tracking" .

am:QRCode a owl:Class ;
    rdfs:subClassOf am:AssetTag ;
    rdfs:label "QR Code" ;
    rdfs:comment "QR code identifier" .

am:TrackingEvent a owl:Class ;
    rdfs:label "Tracking Event" ;
    rdfs:comment "Asset movement or scan event" .

# Lifecycle Management
am:Acquisition a owl:Class ;
    rdfs:label "Acquisition" ;
    rdfs:comment "Asset acquisition or purchase" .

am:Transfer a owl:Class ;
    rdfs:label "Transfer" ;
    rdfs:comment "Asset transfer between locations or owners" .

am:Disposal a owl:Class ;
    rdfs:label "Disposal" ;
    rdfs:comment "Asset disposal or retirement" .

am:LifecycleStage a owl:Class ;
    rdfs:label "Lifecycle Stage" ;
    rdfs:comment "Stage in asset lifecycle" .

# Depreciation
am:DepreciationSchedule a owl:Class ;
    rdfs:label "Depreciation Schedule" ;
    rdfs:comment "Asset depreciation plan" .

am:DepreciationMethod a owl:Class ;
    rdfs:label "Depreciation Method" ;
    rdfs:comment "Method for calculating depreciation" .

am:StraightLineDepreciation a owl:Class ;
    rdfs:subClassOf am:DepreciationMethod ;
    rdfs:label "Straight-Line Depreciation" ;
    rdfs:comment "Equal depreciation each period" .

am:DecliningBalanceDepreciation a owl:Class ;
    rdfs:subClassOf am:DepreciationMethod ;
    rdfs:label "Declining Balance Depreciation" ;
    rdfs:comment "Accelerated depreciation method" .

am:BookValue a owl:Class ;
    rdfs:label "Book Value" ;
    rdfs:comment "Current accounting value" .

# Maintenance
am:MaintenanceSchedule a owl:Class ;
    rdfs:label "Maintenance Schedule" ;
    rdfs:comment "Planned maintenance schedule" .

am:MaintenanceTask a owl:Class ;
    rdfs:label "Maintenance Task" ;
    rdfs:comment "Maintenance activity" .

am:PreventiveMaintenance a owl:Class ;
    rdfs:subClassOf am:MaintenanceTask ;
    rdfs:label "Preventive Maintenance" ;
    rdfs:comment "Scheduled preventive maintenance" .

am:CorrectiveMaintenance a owl:Class ;
    rdfs:subClassOf am:MaintenanceTask ;
    rdfs:label "Corrective Maintenance" ;
    rdfs:comment "Repair or fix maintenance" .

am:ServiceHistory a owl:Class ;
    rdfs:label "Service History" ;
    rdfs:comment "Record of maintenance and service" .

am:WorkOrder a owl:Class ;
    rdfs:label "Work Order" ;
    rdfs:comment "Maintenance work order" .

# Warranty & Insurance
am:Warranty a owl:Class ;
    rdfs:label "Warranty" ;
    rdfs:comment "Manufacturer or extended warranty" .

am:Insurance a owl:Class ;
    rdfs:label "Insurance" ;
    rdfs:comment "Asset insurance policy" .

am:Claim a owl:Class ;
    rdfs:label "Claim" ;
    rdfs:comment "Insurance or warranty claim" .

# Valuation
am:Valuation a owl:Class ;
    rdfs:label "Valuation" ;
    rdfs:comment "Asset valuation assessment" .

am:Appraisal a owl:Class ;
    rdfs:subClassOf am:Valuation ;
    rdfs:label "Appraisal" ;
    rdfs:comment "Professional appraisal" .

# Custodian
am:Custodian a owl:Class ;
    rdfs:label "Custodian" ;
    rdfs:comment "Person responsible for asset" .

am:Assignment a owl:Class ;
    rdfs:label "Assignment" ;
    rdfs:comment "Asset assignment to person" .

# ============================================================================
# PROPERTIES
# ============================================================================

# Asset Properties
am:assetId a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset ID" .

am:assetName a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset name" .

am:assetDescription a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset description" .

am:serialNumber a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "serial number" .

am:manufacturer a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "manufacturer" .

am:modelNumber a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "model number" .

am:acquisitionDate a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:date ;
    rdfs:label "acquisition date" .

am:acquisitionCost a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "acquisition cost" .

am:currentValue a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "current value" .

am:assetStatus a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset status" .

# Category & Location
am:hasCategory a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:AssetCategory ;
    rdfs:label "has category" .

am:categoryName a owl:DatatypeProperty ;
    rdfs:domain am:AssetCategory ;
    rdfs:range xsd:string ;
    rdfs:label "category name" .

am:locatedAt a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Location ;
    rdfs:label "located at" .

am:locationName a owl:DatatypeProperty ;
    rdfs:domain am:Location ;
    rdfs:range xsd:string ;
    rdfs:label "location name" .

am:address a owl:DatatypeProperty ;
    rdfs:domain am:Location ;
    rdfs:range xsd:string ;
    rdfs:label "address" .

# Tracking Properties
am:hasTag a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:AssetTag ;
    rdfs:label "has tag" .

am:tagId a owl:DatatypeProperty ;
    rdfs:domain am:AssetTag ;
    rdfs:range xsd:string ;
    rdfs:label "tag ID" .

am:barcodeValue a owl:DatatypeProperty ;
    rdfs:domain am:Barcode ;
    rdfs:range xsd:string ;
    rdfs:label "barcode value" .

am:rfidValue a owl:DatatypeProperty ;
    rdfs:domain am:RFID ;
    rdfs:range xsd:string ;
    rdfs:label "RFID value" .

am:hasTrackingEvent a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:TrackingEvent ;
    rdfs:label "has tracking event" .

am:eventType a owl:DatatypeProperty ;
    rdfs:domain am:TrackingEvent ;
    rdfs:range xsd:string ;
    rdfs:label "event type" .

am:eventTimestamp a owl:DatatypeProperty ;
    rdfs:domain am:TrackingEvent ;
    rdfs:range xsd:dateTime ;
    rdfs:label "event timestamp" .

# Lifecycle Properties
am:hasAcquisition a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Acquisition ;
    rdfs:label "has acquisition" .

am:purchaseOrder a owl:DatatypeProperty ;
    rdfs:domain am:Acquisition ;
    rdfs:range xsd:string ;
    rdfs:label "purchase order" .

am:vendor a owl:DatatypeProperty ;
    rdfs:domain am:Acquisition ;
    rdfs:range xsd:string ;
    rdfs:label "vendor" .

am:hasTransfer a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Transfer ;
    rdfs:label "has transfer" .

am:transferDate a owl:DatatypeProperty ;
    rdfs:domain am:Transfer ;
    rdfs:range xsd:date ;
    rdfs:label "transfer date" .

am:fromLocation a owl:ObjectProperty ;
    rdfs:domain am:Transfer ;
    rdfs:range am:Location ;
    rdfs:label "from location" .

am:toLocation a owl:ObjectProperty ;
    rdfs:domain am:Transfer ;
    rdfs:range am:Location ;
    rdfs:label "to location" .

am:hasDisposal a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Disposal ;
    rdfs:label "has disposal" .

am:disposalDate a owl:DatatypeProperty ;
    rdfs:domain am:Disposal ;
    rdfs:range xsd:date ;
    rdfs:label "disposal date" .

am:disposalMethod a owl:DatatypeProperty ;
    rdfs:domain am:Disposal ;
    rdfs:range xsd:string ;
    rdfs:label "disposal method" .

am:disposalValue a owl:DatatypeProperty ;
    rdfs:domain am:Disposal ;
    rdfs:range xsd:decimal ;
    rdfs:label "disposal value" .

# Depreciation Properties
am:hasDepreciationSchedule a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:DepreciationSchedule ;
    rdfs:label "has depreciation schedule" .

am:usefulLife a owl:DatatypeProperty ;
    rdfs:domain am:DepreciationSchedule ;
    rdfs:range xsd:duration ;
    rdfs:label "useful life" .

am:salvageValue a owl:DatatypeProperty ;
    rdfs:domain am:DepreciationSchedule ;
    rdfs:range xsd:decimal ;
    rdfs:label "salvage value" .

am:depreciationRate a owl:DatatypeProperty ;
    rdfs:domain am:DepreciationSchedule ;
    rdfs:range xsd:decimal ;
    rdfs:label "depreciation rate" .

am:accumulatedDepreciation a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "accumulated depreciation" .

am:bookValue a owl:DatatypeProperty ;
    rdfs:domain am:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "book value" .

# Maintenance Properties
am:hasMaintenanceSchedule a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:MaintenanceSchedule ;
    rdfs:label "has maintenance schedule" .

am:maintenanceFrequency a owl:DatatypeProperty ;
    rdfs:domain am:MaintenanceSchedule ;
    rdfs:range xsd:duration ;
    rdfs:label "maintenance frequency" .

am:hasMaintenanceTask a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:MaintenanceTask ;
    rdfs:label "has maintenance task" .

am:taskDescription a owl:DatatypeProperty ;
    rdfs:domain am:MaintenanceTask ;
    rdfs:range xsd:string ;
    rdfs:label "task description" .

am:scheduledDate a owl:DatatypeProperty ;
    rdfs:domain am:MaintenanceTask ;
    rdfs:range xsd:date ;
    rdfs:label "scheduled date" .

am:completedDate a owl:DatatypeProperty ;
    rdfs:domain am:MaintenanceTask ;
    rdfs:range xsd:date ;
    rdfs:label "completed date" .

am:maintenanceCost a owl:DatatypeProperty ;
    rdfs:domain am:MaintenanceTask ;
    rdfs:range xsd:decimal ;
    rdfs:label "maintenance cost" .

am:hasWorkOrder a owl:ObjectProperty ;
    rdfs:domain am:MaintenanceTask ;
    rdfs:range am:WorkOrder ;
    rdfs:label "has work order" .

am:workOrderNumber a owl:DatatypeProperty ;
    rdfs:domain am:WorkOrder ;
    rdfs:range xsd:string ;
    rdfs:label "work order number" .

# Warranty & Insurance Properties
am:hasWarranty a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Warranty ;
    rdfs:label "has warranty" .

am:warrantyStartDate a owl:DatatypeProperty ;
    rdfs:domain am:Warranty ;
    rdfs:range xsd:date ;
    rdfs:label "warranty start date" .

am:warrantyEndDate a owl:DatatypeProperty ;
    rdfs:domain am:Warranty ;
    rdfs:range xsd:date ;
    rdfs:label "warranty end date" .

am:warrantyProvider a owl:DatatypeProperty ;
    rdfs:domain am:Warranty ;
    rdfs:range xsd:string ;
    rdfs:label "warranty provider" .

am:hasInsurance a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Insurance ;
    rdfs:label "has insurance" .

am:policyNumber a owl:DatatypeProperty ;
    rdfs:domain am:Insurance ;
    rdfs:range xsd:string ;
    rdfs:label "policy number" .

am:coverageAmount a owl:DatatypeProperty ;
    rdfs:domain am:Insurance ;
    rdfs:range xsd:decimal ;
    rdfs:label "coverage amount" .

am:premiumAmount a owl:DatatypeProperty ;
    rdfs:domain am:Insurance ;
    rdfs:range xsd:decimal ;
    rdfs:label "premium amount" .

# Custodian Properties
am:assignedTo a owl:ObjectProperty ;
    rdfs:domain am:Asset ;
    rdfs:range am:Custodian ;
    rdfs:label "assigned to" .

am:assignmentDate a owl:DatatypeProperty ;
    rdfs:domain am:Assignment ;
    rdfs:range xsd:date ;
    rdfs:label "assignment date" .

am:custodianName a owl:DatatypeProperty ;
    rdfs:domain am:Custodian ;
    rdfs:range xsd:string ;
    rdfs:label "custodian name" .
