@prefix robo: <http://ggen.dev/ontology/robo-advisor#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .

# Ontology Metadata
robo:RoboAdvisorOntology a owl:Ontology ;
    dc:title "Robo-Advisor Ontology" ;
    dc:description "Comprehensive ontology for automated investment advisory systems" ;
    dc:creator "ggen Marketplace" ;
    dc:date "2025-11-08" ;
    owl:versionInfo "1.0.0" .

# ==================== Core Classes ====================

robo:Client a owl:Class ;
    rdfs:label "Client" ;
    rdfs:comment "Investment advisory client" .

robo:Portfolio a owl:Class ;
    rdfs:label "Portfolio" ;
    rdfs:comment "Client investment portfolio" .

robo:Asset a owl:Class ;
    rdfs:label "Asset" ;
    rdfs:comment "Investable asset or security" .

robo:Stock a owl:Class ;
    rdfs:subClassOf robo:Asset ;
    rdfs:label "Stock" ;
    rdfs:comment "Equity security" .

robo:Bond a owl:Class ;
    rdfs:subClassOf robo:Asset ;
    rdfs:label "Bond" ;
    rdfs:comment "Fixed income security" .

robo:ETF a owl:Class ;
    rdfs:subClassOf robo:Asset ;
    rdfs:label "ETF" ;
    rdfs:comment "Exchange-traded fund" .

robo:MutualFund a owl:Class ;
    rdfs:subClassOf robo:Asset ;
    rdfs:label "Mutual Fund" ;
    rdfs:comment "Mutual fund investment" .

# ==================== Goal Planning ====================

robo:Goal a owl:Class ;
    rdfs:label "Goal" ;
    rdfs:comment "Financial planning goal" .

robo:RetirementGoal a owl:Class ;
    rdfs:subClassOf robo:Goal ;
    rdfs:label "Retirement Goal" ;
    rdfs:comment "Retirement savings goal" .

robo:EducationGoal a owl:Class ;
    rdfs:subClassOf robo:Goal ;
    rdfs:label "Education Goal" ;
    rdfs:comment "College savings goal" .

robo:MajorPurchaseGoal a owl:Class ;
    rdfs:subClassOf robo:Goal ;
    rdfs:label "Major Purchase Goal" ;
    rdfs:comment "Large purchase goal" .

robo:WealthAccumulationGoal a owl:Class ;
    rdfs:subClassOf robo:Goal ;
    rdfs:label "Wealth Accumulation Goal" ;
    rdfs:comment "General wealth building" .

# ==================== Risk Assessment ====================

robo:RiskProfile a owl:Class ;
    rdfs:label "Risk Profile" ;
    rdfs:comment "Client risk tolerance profile" .

robo:RiskQuestionnaire a owl:Class ;
    rdfs:label "Risk Questionnaire" ;
    rdfs:comment "Risk assessment questionnaire" .

robo:BehavioralAnalysis a owl:Class ;
    rdfs:label "Behavioral Analysis" ;
    rdfs:comment "Behavioral finance analysis" .

robo:TimeHorizon a owl:Class ;
    rdfs:label "Time Horizon" ;
    rdfs:comment "Investment time frame" .

robo:RiskTolerance a owl:Class ;
    rdfs:label "Risk Tolerance" ;
    rdfs:comment "Client risk tolerance level" .

# ==================== Portfolio Allocation ====================

robo:Allocation a owl:Class ;
    rdfs:label "Allocation" ;
    rdfs:comment "Portfolio asset allocation" .

robo:StrategicAllocation a owl:Class ;
    rdfs:subClassOf robo:Allocation ;
    rdfs:label "Strategic Allocation" ;
    rdfs:comment "Long-term target allocation" .

robo:TacticalAllocation a owl:Class ;
    rdfs:subClassOf robo:Allocation ;
    rdfs:label "Tactical Allocation" ;
    rdfs:comment "Short-term allocation adjustments" .

robo:AllocationModel a owl:Class ;
    rdfs:label "Allocation Model" ;
    rdfs:comment "Portfolio construction model" .

robo:ModernPortfolioTheory a owl:Class ;
    rdfs:subClassOf robo:AllocationModel ;
    rdfs:label "Modern Portfolio Theory" ;
    rdfs:comment "MPT-based allocation" .

robo:BlackLitterman a owl:Class ;
    rdfs:subClassOf robo:AllocationModel ;
    rdfs:label "Black-Litterman" ;
    rdfs:comment "Black-Litterman model" .

robo:RiskParity a owl:Class ;
    rdfs:subClassOf robo:AllocationModel ;
    rdfs:label "Risk Parity" ;
    rdfs:comment "Risk parity allocation" .

# ==================== Rebalancing ====================

robo:Rebalancing a owl:Class ;
    rdfs:label "Rebalancing" ;
    rdfs:comment "Portfolio rebalancing" .

robo:ThresholdRebalancing a owl:Class ;
    rdfs:subClassOf robo:Rebalancing ;
    rdfs:label "Threshold Rebalancing" ;
    rdfs:comment "Threshold-based rebalancing" .

robo:PeriodicRebalancing a owl:Class ;
    rdfs:subClassOf robo:Rebalancing ;
    rdfs:label "Periodic Rebalancing" ;
    rdfs:comment "Calendar-based rebalancing" .

robo:TaxAwareRebalancing a owl:Class ;
    rdfs:subClassOf robo:Rebalancing ;
    rdfs:label "Tax-Aware Rebalancing" ;
    rdfs:comment "Tax-optimized rebalancing" .

# ==================== Tax Optimization ====================

robo:TaxStrategy a owl:Class ;
    rdfs:label "Tax Strategy" ;
    rdfs:comment "Tax optimization strategy" .

robo:TaxLossHarvesting a owl:Class ;
    rdfs:subClassOf robo:TaxStrategy ;
    rdfs:label "Tax-Loss Harvesting" ;
    rdfs:comment "TLH strategy" .

robo:TaxLot a owl:Class ;
    rdfs:label "Tax Lot" ;
    rdfs:comment "Individual tax lot" .

robo:TaxLotOptimization a owl:Class ;
    rdfs:label "Tax Lot Optimization" ;
    rdfs:comment "Tax lot selection optimization" .

robo:MunicipalBondStrategy a owl:Class ;
    rdfs:subClassOf robo:TaxStrategy ;
    rdfs:label "Municipal Bond Strategy" ;
    rdfs:comment "Tax-advantaged municipal bonds" .

robo:AssetLocation a owl:Class ;
    rdfs:label "Asset Location" ;
    rdfs:comment "Tax-efficient asset location" .

# ==================== Transactions ====================

robo:Transaction a owl:Class ;
    rdfs:label "Transaction" ;
    rdfs:comment "Portfolio transaction" .

robo:Buy a owl:Class ;
    rdfs:subClassOf robo:Transaction ;
    rdfs:label "Buy" ;
    rdfs:comment "Purchase transaction" .

robo:Sell a owl:Class ;
    rdfs:subClassOf robo:Transaction ;
    rdfs:label "Sell" ;
    rdfs:comment "Sale transaction" .

robo:Dividend a owl:Class ;
    rdfs:subClassOf robo:Transaction ;
    rdfs:label "Dividend" ;
    rdfs:comment "Dividend payment" .

robo:Contribution a owl:Class ;
    rdfs:subClassOf robo:Transaction ;
    rdfs:label "Contribution" ;
    rdfs:comment "Client contribution" .

robo:Withdrawal a owl:Class ;
    rdfs:subClassOf robo:Transaction ;
    rdfs:label "Withdrawal" ;
    rdfs:comment "Client withdrawal" .

# ==================== Object Properties ====================

robo:hasPortfolio a owl:ObjectProperty ;
    rdfs:domain robo:Client ;
    rdfs:range robo:Portfolio ;
    rdfs:label "has portfolio" .

robo:hasGoal a owl:ObjectProperty ;
    rdfs:domain robo:Client ;
    rdfs:range robo:Goal ;
    rdfs:label "has goal" .

robo:hasRiskProfile a owl:ObjectProperty ;
    rdfs:domain robo:Client ;
    rdfs:range robo:RiskProfile ;
    rdfs:label "has risk profile" .

robo:holdsAsset a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:Asset ;
    rdfs:label "holds asset" .

robo:hasAllocation a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:Allocation ;
    rdfs:label "has allocation" .

robo:usesModel a owl:ObjectProperty ;
    rdfs:domain robo:Allocation ;
    rdfs:range robo:AllocationModel ;
    rdfs:label "uses model" .

robo:rebalancesTo a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:Rebalancing ;
    rdfs:label "rebalances to" .

robo:appliesTaxStrategy a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:TaxStrategy ;
    rdfs:label "applies tax strategy" .

robo:hasTaxLot a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:TaxLot ;
    rdfs:label "has tax lot" .

robo:executesTransaction a owl:ObjectProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range robo:Transaction ;
    rdfs:label "executes transaction" .

robo:harvests a owl:ObjectProperty ;
    rdfs:domain robo:TaxLossHarvesting ;
    rdfs:range robo:TaxLot ;
    rdfs:label "harvests" .

robo:optimizes a owl:ObjectProperty ;
    rdfs:domain robo:TaxLotOptimization ;
    rdfs:range robo:TaxLot ;
    rdfs:label "optimizes" .

# ==================== Data Properties ====================

robo:clientId a owl:DatatypeProperty ;
    rdfs:domain robo:Client ;
    rdfs:range xsd:string ;
    rdfs:label "client ID" .

robo:name a owl:DatatypeProperty ;
    rdfs:domain robo:Client ;
    rdfs:range xsd:string ;
    rdfs:label "name" .

robo:age a owl:DatatypeProperty ;
    rdfs:domain robo:Client ;
    rdfs:range xsd:integer ;
    rdfs:label "age" .

robo:portfolioId a owl:DatatypeProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range xsd:string ;
    rdfs:label "portfolio ID" .

robo:totalValue a owl:DatatypeProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range xsd:decimal ;
    rdfs:label "total value" .

robo:cashBalance a owl:DatatypeProperty ;
    rdfs:domain robo:Portfolio ;
    rdfs:range xsd:decimal ;
    rdfs:label "cash balance" .

robo:assetSymbol a owl:DatatypeProperty ;
    rdfs:domain robo:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset symbol" .

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

robo:assetClass a owl:DatatypeProperty ;
    rdfs:domain robo:Asset ;
    rdfs:range xsd:string ;
    rdfs:label "asset class" .

robo:expectedReturn a owl:DatatypeProperty ;
    rdfs:domain robo:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "expected return" .

robo:volatility a owl:DatatypeProperty ;
    rdfs:domain robo:Asset ;
    rdfs:range xsd:decimal ;
    rdfs:label "volatility" .

robo:goalName a owl:DatatypeProperty ;
    rdfs:domain robo:Goal ;
    rdfs:range xsd:string ;
    rdfs:label "goal name" .

robo:targetAmount a owl:DatatypeProperty ;
    rdfs:domain robo:Goal ;
    rdfs:range xsd:decimal ;
    rdfs:label "target amount" .

robo:targetDate a owl:DatatypeProperty ;
    rdfs:domain robo:Goal ;
    rdfs:range xsd:date ;
    rdfs:label "target date" .

robo:riskScore a owl:DatatypeProperty ;
    rdfs:domain robo:RiskProfile ;
    rdfs:range xsd:decimal ;
    rdfs:label "risk score" .

robo:riskCategory a owl:DatatypeProperty ;
    rdfs:domain robo:RiskProfile ;
    rdfs:range xsd:string ;
    rdfs:label "risk category" .

robo:timeHorizonYears a owl:DatatypeProperty ;
    rdfs:domain robo:TimeHorizon ;
    rdfs:range xsd:integer ;
    rdfs:label "time horizon years" .

robo:allocationPercentage a owl:DatatypeProperty ;
    rdfs:domain robo:Allocation ;
    rdfs:range xsd:decimal ;
    rdfs:label "allocation percentage" .

robo:targetAllocation a owl:DatatypeProperty ;
    rdfs:domain robo:Allocation ;
    rdfs:range xsd:decimal ;
    rdfs:label "target allocation" .

robo:currentAllocation a owl:DatatypeProperty ;
    rdfs:domain robo:Allocation ;
    rdfs:range xsd:decimal ;
    rdfs:label "current allocation" .

robo:rebalanceThreshold a owl:DatatypeProperty ;
    rdfs:domain robo:ThresholdRebalancing ;
    rdfs:range xsd:decimal ;
    rdfs:label "rebalance threshold" .

robo:rebalanceFrequency a owl:DatatypeProperty ;
    rdfs:domain robo:PeriodicRebalancing ;
    rdfs:range xsd:string ;
    rdfs:label "rebalance frequency" .

robo:transactionId a owl:DatatypeProperty ;
    rdfs:domain robo:Transaction ;
    rdfs:range xsd:string ;
    rdfs:label "transaction ID" .

robo:amount a owl:DatatypeProperty ;
    rdfs:domain robo:Transaction ;
    rdfs:range xsd:decimal ;
    rdfs:label "amount" .

robo:price a owl:DatatypeProperty ;
    rdfs:domain robo:Transaction ;
    rdfs:range xsd:decimal ;
    rdfs:label "price" .

robo:quantity a owl:DatatypeProperty ;
    rdfs:domain robo:Transaction ;
    rdfs:range xsd:decimal ;
    rdfs:label "quantity" .

robo:transactionDate a owl:DatatypeProperty ;
    rdfs:domain robo:Transaction ;
    rdfs:range xsd:date ;
    rdfs:label "transaction date" .

robo:taxLotId a owl:DatatypeProperty ;
    rdfs:domain robo:TaxLot ;
    rdfs:range xsd:string ;
    rdfs:label "tax lot ID" .

robo:purchaseDate a owl:DatatypeProperty ;
    rdfs:domain robo:TaxLot ;
    rdfs:range xsd:date ;
    rdfs:label "purchase date" .

robo:costBasis a owl:DatatypeProperty ;
    rdfs:domain robo:TaxLot ;
    rdfs:range xsd:decimal ;
    rdfs:label "cost basis" .

robo:unrealizedGainLoss a owl:DatatypeProperty ;
    rdfs:domain robo:TaxLot ;
    rdfs:range xsd:decimal ;
    rdfs:label "unrealized gain/loss" .

robo:harvestableAmount a owl:DatatypeProperty ;
    rdfs:domain robo:TaxLossHarvesting ;
    rdfs:range xsd:decimal ;
    rdfs:label "harvestable amount" .
