Files
boc/landvex-admin-backend/app/routers/life_standard.py
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

855 lines
39 KiB
Python

"""
LIFE v6 — Reality Intelligence Standard (RIS)
LIFE är inte bara programvara. Det definierar HUR verklighetsintelligens
representeras, valideras, utbyts och används — oberoende av tillämpning.
Sex öppna standarder:
- RIS-001: Reality Object Standard
- RIS-002: Evidence Standard
- RIS-003: Confidence Standard
- RIS-004: Reality Exchange Protocol
- RIS-005: Decision Standard
- RIS-006: Learning Standard
Gemensam ontologi med tre nivåer:
- Core Ontology
- Domain Ontologies
- Customer Extensions
Product Definition:
"LIFE är ett AI-drivet operativsystem och en öppen standard för Reality Intelligence.
Genom att förena en gemensam informationsmodell, spårbar evidens, förklarbara analyser
och kontinuerligt lärande gör LIFE det möjligt att beskriva, förstå och följa
förändringar i den fysiska världen på ett konsekvent sätt över olika domäner
och organisationer."
"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List, Optional, Dict, Any
from datetime import datetime
from enum import Enum
from app.database import get_db
from app.core.security import get_current_user
from app.models import User
router = APIRouter(prefix="/life-standard", tags=["life_standard"])
# ─── RIS-001 — REALITY OBJECT STANDARD ────────────────────────────────────────
@router.get("/public/ris-001-reality-object")
async def get_ris_001_reality_object():
"""
RIS-001 — Reality Object Standard
En gemensam objektsmodell för allt i den fysiska världen.
"""
return {
"standard_id": "RIS-001",
"name": "Reality Object Standard",
"version": "1.0.0",
"description": "En gemensam objektsmodell för allt. En väg, en byggnad, ett biståndsprojekt, en bro, ett träd, en ledning, ett fordon — alla är samma typ av objekt.",
"universal_structure": {
"identity": {
"uuid": "universellt-unikt-id",
"type": "road | building | project | bridge | tree | pipeline | vehicle | ...",
"name": "Mänskligt läsbart namn",
"external_ids": {
"description": "ID:n från externa system",
"examples": {
"osm_id": "OpenStreetMap ID",
"gadm_id": "Administrativt ID",
"custom_id": "Kundspecifikt ID",
},
},
"aliases": ["Alternativa namn", "Lokala namn"],
},
"geometry": {
"type": "point | polygon | polyline | bounding_box | 3d_mesh",
"coordinates": {
"format": "GeoJSON / WKT",
"crs": "EPSG:4326 (default)",
"example": {
"type": "Polygon",
"coordinates": [[[42.36, -71.05], [42.37, -71.05], [42.37, -71.06], [42.36, -71.06], [42.36, -71.05]]],
},
},
"spatial_resolution": "meter-noggrannhet",
"bounding_box": {"min_lat": 0, "max_lat": 0, "min_lon": 0, "max_lon": 0},
},
"time": {
"created_at": "ISO 8601 timestamp",
"updated_at": "ISO 8601 timestamp",
"valid_from": "När objektet började existera",
"valid_until": "När objektet upphörde (null = aktivt)",
"observation_window": {"start": "", "end": ""},
},
"state": {
"current_status": "active | under_construction | damaged | destroyed | abandoned",
"progress_percentage": "0-100 (om tillämpligt)",
"health_score": "0-100",
"last_observation_date": "ISO 8601",
"state_history": [
{"date": "", "status": "", "source": ""},
],
},
"evidence": {
"description": "Alla observationer som stöder nuvarande state",
"observation_count": 0,
"primary_sources": [],
"evidence_lineage": "RIS-002 compliant",
},
"confidence": {
"description": "Sammansatt konfidens för all information om objektet",
"overall_score": "0-100",
"breakdown": "RIS-003 compliant",
},
"relationships": {
"description": "Kopplingar till andra objekt",
"types": [
{"type": "parent_of", "target": "uuid", "strength": 1.0},
{"type": "depends_on", "target": "uuid", "strength": 0.9},
{"type": "connected_to", "target": "uuid", "strength": 1.0},
{"type": "near", "target": "uuid", "distance_meters": 100},
],
"graph_position": "Node i kunskapsgrafen",
},
"history": {
"description": "Alla förändringar över tid",
"events": [
{"date": "", "event": "", "from_state": "", "to_state": "", "source": ""},
],
"snapshots": ["Tidsstämplade tillstånd"],
},
"predictions": {
"description": "Framtida prognoser för objektet",
"active_predictions": [
{"horizon": "30d", "prediction": "", "confidence": 0, "model": ""},
],
"prediction_accuracy_history": "RIS-006 compliant",
},
"actions": {
"description": "Rekommenderade och tillgängliga åtgärder",
"recommended": [{"action": "", "priority": "", "expected_impact": ""}],
"available": [{"action": "", "requirements": ""}],
"taken": [{"action": "", "date": "", "result": ""}],
},
},
"examples": [
{
"type": "road",
"name": "Highway A1",
"identity": {"uuid": "road-001", "osm_id": "12345"},
"geometry": {"type": "polyline", "length_km": 45},
},
{
"type": "building",
"name": "Central Hospital",
"identity": {"uuid": "bld-001", "custom_id": "HOSP-SOM-001"},
"geometry": {"type": "polygon", "area_sqm": 5000},
},
{
"type": "project",
"name": "School Construction Project",
"identity": {"uuid": "proj-001"},
"state": {"progress_percentage": 75, "health_score": 82},
},
],
"compliance": "Alla objekt i LIFE måste följa RIS-001",
"extensibility": "Kunder kan lägga till egna attribut under 'extensions' utan att bryta standarden",
}
# ─── RIS-002 — EVIDENCE STANDARD ──────────────────────────────────────────────
@router.get("/public/ris-002-evidence")
async def get_ris_002_evidence():
"""
RIS-002 — Evidence Standard
All evidens representeras likadant oavsett källa.
"""
return {
"standard_id": "RIS-002",
"name": "Evidence Standard",
"version": "1.0.0",
"description": "All evidens representeras likadant. Varje observation innehåller standardiserade fält för spårbarhet och jämförbarhet.",
"required_fields": {
"evidence_id": {"type": "UUID", "description": "Unikt ID för evidensen"},
"source": {
"type": "string",
"description": "Källan till observationen",
"examples": ["satellite", "quixzoom", "official_report", "news", "sensor", "human"],
},
"source_detail": {
"type": "object",
"description": "Detaljer om källan",
"fields": {
"provider": "ESA / QUIXZOOM / Government / NewsOrg / ...",
"instrument": "Sentinel-2 / iPhone-14 / Drone / ...",
"collection_method": "Automated / Crowdsourced / Manual / ...",
},
},
"timestamp": {
"type": "ISO 8601",
"description": "När observationen gjordes",
},
"geographic_position": {
"type": "GeoJSON Point",
"description": "Var observationen gjordes",
"accuracy_meters": "GPS-noggrannhet",
},
"method": {
"type": "string",
"description": "Hur observationen gjordes",
"examples": ["visual_inspection", "spectral_analysis", "photogrammetry", "interview", "document_review"],
},
"quality": {
"type": "integer",
"range": "0-100",
"description": "Kvalitetsbedömning av observationen",
"factors": ["resolution", "clarity", "completeness", "relevance"],
},
"uncertainty": {
"type": "object",
"description": "Osäkerhet i observationen",
"fields": {
"spatial_meters": "±10m",
"temporal_hours": "±2h",
"attribute_confidence": "0-100",
},
},
"validation_status": {
"type": "enum",
"values": ["unvalidated", "pending", "validated", "disputed", "rejected"],
"description": "Valideringsstatus",
},
"revision_history": {
"type": "array",
"description": "Alla ändringar av evidensen",
"entries": [
{"date": "", "change": "", "by": "", "reason": ""},
],
},
"raw_data_reference": {
"type": "string",
"description": "Pointer till rådata (bild, dokument, etc.)",
},
"metadata": {
"type": "object",
"description": "Ytterligare kontext",
"fields": {
"weather": "Vid observationstillfället",
"lighting": "Dagsljus / Mörker / ...",
"season": "Årstid",
"context_description": "Beskrivande text",
},
},
},
"evidence_types": {
"visual": {"description": "Bilder, video, satellitbilder", "quality_factors": ["resolution", "angle", "occlusion"]},
"documentary": {"description": "Rapporter, dokument, databaser", "quality_factors": ["authority", "recency", "completeness"]},
"sensor": {"description": "IoT-sensorer, väderstationer", "quality_factors": ["calibration", "frequency", "reliability"]},
"human": {"description": "Mänskliga observationer", "quality_factors": ["expertise", "training", "corroboration"]},
"derived": {"description": "AI-genererad eller beräknad evidens", "quality_factors": ["model_version", "training_data", "validation"]},
},
"fusion_rules": {
"description": "Hur evidens från olika källor kombineras",
"rules": [
"Minst 2 oberoende källor för 'validated' status",
"Motsägelsefull evidens flaggas automatiskt",
"Äldre evidens viktas lägre om nyare finns",
"Mänsklig verifiering krävs för 'high-confidence' påståenden",
],
},
}
# ─── RIS-003 — CONFIDENCE STANDARD ────────────────────────────────────────────
@router.get("/public/ris-003-confidence")
async def get_ris_003_confidence():
"""
RIS-003 — Confidence Standard
Alla modeller använder samma definition av säkerhet.
"""
return {
"standard_id": "RIS-003",
"name": "Confidence Standard",
"version": "1.0.0",
"description": "Alla modeller använder samma definition av säkerhet. Olika analyser blir jämförbara.",
"confidence_dimensions": {
"data_confidence": {
"description": "Hur tillförlitlig är rådatan?",
"factors": [
{"factor": "Source reliability", "weight": 0.3},
{"factor": "Data freshness", "weight": 0.2},
{"factor": "Spatial resolution", "weight": 0.15},
{"factor": "Temporal coverage", "weight": 0.15},
{"factor": "Data completeness", "weight": 0.2},
],
"scale": "0-100",
},
"source_confidence": {
"description": "Hur tillförlitlig är källan?",
"factors": [
{"factor": "Historical accuracy", "weight": 0.4},
{"factor": "Authority level", "weight": 0.25},
{"factor": "Independence", "weight": 0.2},
{"factor": "Methodology transparency", "weight": 0.15},
],
"scale": "0-100",
},
"ai_confidence": {
"description": "Hur tillförlitlig är AI-modellen?",
"factors": [
{"factor": "Model accuracy (historical)", "weight": 0.35},
{"factor": "Training data quality", "weight": 0.25},
{"factor": "Validation performance", "weight": 0.25},
{"factor": "Model version maturity", "weight": 0.15},
],
"scale": "0-100",
},
"human_verification": {
"description": "Har människa verifierat?",
"levels": [
{"level": 0, "description": "Ingen mänsklig granskning", "score": 0},
{"level": 1, "description": "En granskare", "score": 60},
{"level": 2, "description": "Oberoende dubbelgranskning", "score": 85},
{"level": 3, "description": "Expertpanel + fältverifiering", "score": 95},
],
},
"temporal_confidence": {
"description": "Hur relevant är informationen i tid?",
"factors": [
{"factor": "Data age", "weight": 0.5},
{"factor": "Update frequency", "weight": 0.3},
{"factor": "Volatility of phenomenon", "weight": 0.2},
],
"scale": "0-100",
},
},
"composite_confidence": {
"description": "Sammansatt konfidens från alla dimensioner",
"formula": "Viktad summa av alla dimensioner",
"example": {
"data_confidence": 85,
"source_confidence": 90,
"ai_confidence": 78,
"human_verification": 60,
"temporal_confidence": 72,
"composite": 80,
"calculation": "(85*0.2 + 90*0.2 + 78*0.25 + 60*0.2 + 72*0.15) = 80.15",
},
"interpretation": {
"90-100": "Very high confidence — suitable for critical decisions",
"75-89": "High confidence — suitable for most decisions",
"60-74": "Moderate confidence — supplementary verification recommended",
"40-59": "Low confidence — significant uncertainty, use with caution",
"0-39": "Very low confidence — insufficient for decision-making",
},
},
"confidence_reporting": {
"required": True,
"format": "Alla insikter måste rapportera composite confidence + breakdown",
"visualization": "Confidence badge med färgkodning",
},
}
# ─── RIS-004 — REALITY EXCHANGE PROTOCOL ──────────────────────────────────────
@router.get("/public/ris-004-reality-exchange")
async def get_ris_004_reality_exchange():
"""
RIS-004 — Reality Exchange Protocol
Ett öppet format för utbyte mellan system.
"""
return {
"standard_id": "RIS-004",
"name": "Reality Exchange Protocol",
"version": "1.0.0",
"description": "Ett öppet format för utbyte mellan system. Kommuner, företag eller andra plattformar kan publicera eller konsumera observationer utan specialanpassningar. Ett slags 'REST för verklighetsobservationer'.",
"protocol_design": {
"paradigm": "RESTful API med semantiska resurser",
"content_type": "application/vnd.life+json",
"versioning": "URL-based (/v1/, /v2/)",
"authentication": "OAuth 2.0 + API Keys",
},
"core_endpoints": {
"/objects": {
"methods": ["GET", "POST", "PUT", "DELETE"],
"description": "CRUD för Reality Objects (RIS-001)",
"query_params": ["type", "location", "bbox", "time_range", "status"],
"response": "RIS-001 compliant object",
},
"/observations": {
"methods": ["GET", "POST"],
"description": "Skicka/ta emot observationer (RIS-002)",
"query_params": ["object_id", "source", "time_range", "quality_min"],
"response": "RIS-002 compliant evidence",
},
"/evidence": {
"methods": ["GET", "POST"],
"description": "Evidens för specifika påståenden",
"query_params": ["claim_id", "object_id", "source_type"],
"response": "Evidence with confidence scores",
},
"/relationships": {
"methods": ["GET", "POST", "DELETE"],
"description": "Grafrelationer mellan objekt",
"query_params": ["from", "to", "type", "depth"],
"response": "Graph edges",
},
"/events": {
"methods": ["GET", "POST"],
"description": "Händelser som påverkar objekt",
"query_params": ["location", "type", "severity", "time_range"],
"response": "Event stream",
},
"/hypotheses": {
"methods": ["GET", "POST"],
"description": "Genererade hypoteser",
"query_params": ["object_id", "confidence_min", "status"],
"response": "Ranked hypotheses",
},
"/predictions": {
"methods": ["GET"],
"description": "Framtida prognoser",
"query_params": ["object_id", "horizon", "type"],
"response": "Predictions with confidence intervals",
},
"/actions": {
"methods": ["GET", "POST"],
"description": "Rekommenderade åtgärder",
"query_params": ["priority", "status", "assignee"],
"response": "Action items",
},
"/missions": {
"methods": ["GET", "POST", "PUT"],
"description": "QUIXZOOM-uppdrag",
"query_params": ["status", "region", "priority"],
"response": "Mission details",
},
},
"exchange_formats": {
"reality_json": {
"description": "Standard JSON-format för LIFE-data",
"schema": "https://standard.life.ai/schemas/reality-json/v1",
"features": ["Self-describing", "Extensible", "Versioned"],
},
"reality_feed": {
"description": "Strömmande format för realtidsdata",
"protocol": "WebSocket / SSE",
"use_case": "Live observations, alerts",
},
"reality_batch": {
"description": "Batch-format för stora datamängder",
"format": "Parquet / GeoParquet",
"compression": "Zstandard",
},
},
"federation": {
"description": "Distribuerade system kan utbyta data",
"capabilities": [
"Cross-platform object resolution",
"Shared evidence validation",
"Federated queries",
"Trust delegation",
],
},
"adoption": {
"open_source": True,
"license": "Apache 2.0",
"reference_implementation": "https://github.com/landvex/life-standard",
"documentation": "https://standard.life.ai",
},
}
# ─── RIS-005 — DECISION STANDARD ──────────────────────────────────────────────
@router.get("/public/ris-005-decision")
async def get_ris_005_decision():
"""
RIS-005 — Decision Standard
Alla rekommendationer följer samma struktur.
"""
return {
"standard_id": "RIS-005",
"name": "Decision Standard",
"version": "1.0.0",
"description": "Alla rekommendationer bör följa samma struktur. Beslutsstödet blir konsekvent över alla domäner.",
"decision_pipeline": {
"steps": [
{
"step": 1,
"name": "Observation",
"description": "Vad har observerats?",
"output": "Rå observation (RIS-002)",
"example": "Satellite imagery shows construction at 75% completion",
},
{
"step": 2,
"name": "Evidence",
"description": "Vilken evidens stöder observationen?",
"output": "Samlad evidens (RIS-002)",
"example": "3 satellite passes, 2 field observations, 1 official report",
},
{
"step": 3,
"name": "Confidence",
"description": "Hur säker är bedömningen?",
"output": "Konfidensbedömning (RIS-003)",
"example": "Composite confidence: 82% (High)",
},
{
"step": 4,
"name": "Hypothesis",
"description": "Vad förklarar observationen?",
"output": "Rankade hypoteser",
"example": "H1: On schedule (75%) | H2: Delayed (20%) | H3: Ahead (5%)",
},
{
"step": 5,
"name": "Recommended Action",
"description": "Vad bör göras?",
"output": "Åtgärdsrekommendation",
"example": "Schedule field verification within 14 days",
},
{
"step": 6,
"name": "Expected Outcome",
"description": "Vad förväntas hända?",
"output": "Prognos för åtgärdens effekt",
"example": "Verification will increase confidence to 90% or identify issues",
},
{
"step": 7,
"name": "Verification Plan",
"description": "Hur verifieras att åtgärden fungerade?",
"output": "Plan för uppföljning",
"example": "Compare next satellite pass with field report. Target: 90% confidence.",
},
],
},
"decision_object": {
"structure": {
"decision_id": "UUID",
"timestamp": "ISO 8601",
"context": {
"domain": "infrastructure | aid | insurance | ...",
"urgency": "low | medium | high | critical",
"stakeholders": ["list"],
},
"observation": "RIS-002 reference",
"evidence": "RIS-002 array",
"confidence": "RIS-003 composite",
"hypotheses": [
{"rank": 1, "description": "", "probability": 0, "supporting_evidence": []},
],
"recommended_action": {
"action": "",
"priority": "",
"rationale": "",
"expected_outcome": "",
"resources_required": [],
"timeline": "",
},
"alternative_actions": [
{"action": "", "pros": [], "cons": []},
],
"verification_plan": {
"method": "",
"success_criteria": "",
"timeline": "",
"responsible": "",
},
"audit_trail": [
{"date": "", "event": "", "by": ""},
],
},
},
"decision_quality_metrics": {
"description": "Hur bra är beslutsstödet?",
"metrics": [
{"metric": "Decision adoption rate", "formula": "Accepted recommendations / Total recommendations"},
{"metric": "Decision accuracy", "formula": "Correct decisions / Total decisions"},
{"metric": "Time to decision", "formula": "Minutes from login to decision"},
{"metric": "Confidence calibration", "formula": "Actual accuracy vs stated confidence"},
],
},
}
# ─── RIS-006 — LEARNING STANDARD ──────────────────────────────────────────────
@router.get("/public/ris-006-learning")
async def get_ris_006_learning():
"""
RIS-006 — Learning Standard
AI-modeller utvärderas mot verkliga utfall.
"""
return {
"standard_id": "RIS-006",
"name": "Learning Standard",
"version": "1.0.0",
"description": "AI-modeller ska inte bara tränas — de ska också utvärderas mot verkliga utfall. Kontinuerlig kvalitetsförbättring.",
"evaluation_dimensions": {
"prediction_accuracy": {
"description": "Hur ofta var prognosen korrekt?",
"metrics": [
{"metric": "Precision", "description": "Korrekta positiva / Alla positiva"},
{"metric": "Recall", "description": "Korrekta positiva / Faktiska positiva"},
{"metric": "F1 Score", "description": "Harmoniskt medelvärde av precision och recall"},
{"metric": "MAE", "description": "Mean Absolute Error för kontinuerliga prediktioner"},
{"metric": "Calibration", "description": "Stämmer konfidens med faktisk accuracy?"},
],
"tracking": "Per model, per domain, per prediction type",
},
"hypothesis_validation": {
"description": "Vilka hypoteser visade sig stämma?",
"metrics": [
{"metric": "Hypothesis accuracy", "description": "Stämda hypoteser / Totala hypoteser"},
{"metric": "Rank quality", "description": "Hur bra var rankningen?"},
{"metric": "Time to validation", "description": "Hur lång tid tog det att verifiera?"},
],
},
"signal_informativeness": {
"description": "Vilka signaler var mest informativa?",
"metrics": [
{"metric": "Feature importance", "description": "Vilka källor bidrog mest?"},
{"metric": "Information gain", "description": "Hur mycket minskade osäkerheten?"},
{"metric": "Cost-effectiveness", "description": "Värde per insamlingskostnad"},
],
},
"temporal_improvement": {
"description": "Hur utvecklades träffsäkerheten över tid?",
"metrics": [
{"metric": "Accuracy trend", "description": "Stiger accuracy över tid?"},
{"metric": "Learning rate", "description": "Hur snabbt förbättras modellen?"},
{"metric": "Concept drift detection", "description": "Upptäcks förändringar i datan?"},
],
},
},
"feedback_loops": {
"description": "Hur verkliga utfall matas tillbaka",
"mechanisms": [
{
"name": "Outcome Reporting",
"description": "Användare rapporterar faktiska utfall",
"frequency": "Continuous",
},
{
"name": "Automated Validation",
"description": "Systemet validerar automatiskt mot nya observationer",
"frequency": "Per observation cycle",
},
{
"name": "Expert Review",
"description": "Experter granskar beslut och utfall",
"frequency": "Monthly",
},
{
"name": "A/B Testing",
"description": "Jämför olika modeller på samma data",
"frequency": "Per model update",
},
],
},
"model_lifecycle": {
"description": "Modellens livscykel med kontinuerligt lärande",
"stages": [
{"stage": "Training", "description": "Initial träning på historisk data"},
{"stage": "Validation", "description": "Validering på hållen testdata"},
{"stage": "Deployment", "description": "Driftsättning med monitoring"},
{"stage": "Monitoring", "description": "Kontinuerlig utvärdering"},
{"stage": "Retraining", "description": "Omträning baserat på nya utfall"},
{"stage": "Deprecation", "description": "Utfasning om bättre modell finns"},
],
},
"quality_gates": {
"description": "Krav för att en modell ska få användas",
"minimum_requirements": {
"accuracy_threshold": 75,
"calibration_threshold": 80,
"bias_check": "Pass",
"explainability_score": 70,
},
},
}
# ─── COMMON ONTOLOGY ──────────────────────────────────────────────────────────
@router.get("/public/ontology")
async def get_ontology():
"""
Gemensam ontologi med tre nivåer
"""
return {
"name": "LIFE Common Ontology",
"version": "1.0.0",
"description": "Tre nivåer av ontologi för att balansera generell kärna med domänspecifika och kundspecifika begrepp.",
"levels": {
"core_ontology": {
"level": 1,
"name": "Core Ontology",
"description": "Universella begrepp som gäller över alla domäner",
"concepts": [
{"concept": "Object", "definition": "Något i den fysiska världen som kan observeras"},
{"concept": "Observation", "definition": "En mätning eller iakttagelse av ett objekt"},
{"concept": "Evidence", "definition": "Data som stöder eller motsäger ett påstående"},
{"concept": "Relation", "definition": "En koppling mellan två objekt"},
{"concept": "Event", "definition": "Något som händer vid en specifik tid och plats"},
{"concept": "Hypothesis", "definition": "En förklaring som kan testas mot evidens"},
{"concept": "Prediction", "definition": "En prognos om framtida tillstånd"},
{"concept": "Action", "definition": "En åtgärd som kan vidtas"},
{"concept": "Confidence", "definition": "Graden av säkerhet i en bedömning"},
{"concept": "Time", "definition": "Temporal dimension för alla observationer"},
{"concept": "Space", "definition": "Geografisk dimension för alla observationer"},
{"concept": "Agent", "definition": "En entitet som kan utföra handlingar (människa, AI, organisation)"},
],
"stability": "FROZEN — Ändringar kräver major version bump",
},
"domain_ontologies": {
"level": 2,
"name": "Domain Ontologies",
"description": "Begrepp som är specifika för en domän",
"domains": [
{
"domain": "infrastructure",
"concepts": [
{"concept": "Road", "parent": "Object"},
{"concept": "Bridge", "parent": "Object"},
{"concept": "Building", "parent": "Object"},
{"concept": "PavementCondition", "parent": "Observation"},
{"concept": "StructuralIntegrity", "parent": "Observation"},
],
},
{
"domain": "aid",
"concepts": [
{"concept": "Project", "parent": "Object"},
{"concept": "Beneficiary", "parent": "Object"},
{"concept": "Milestone", "parent": "Event"},
{"concept": "Disbursement", "parent": "Event"},
{"concept": "ImpactMetric", "parent": "Observation"},
],
},
{
"domain": "insurance",
"concepts": [
{"concept": "Policy", "parent": "Object"},
{"concept": "Claim", "parent": "Event"},
{"concept": "RiskFactor", "parent": "Observation"},
{"concept": "Premium", "parent": "Observation"},
],
},
{
"domain": "environment",
"concepts": [
{"concept": "Ecosystem", "parent": "Object"},
{"concept": "PollutionLevel", "parent": "Observation"},
{"concept": "BiodiversityIndex", "parent": "Observation"},
{"concept": "ClimateRisk", "parent": "Prediction"},
],
},
],
"stability": "STABLE — Ändringar kräver minor version bump",
},
"customer_extensions": {
"level": 3,
"name": "Customer Extensions",
"description": "Möjlighet för varje kund att lägga till egna begrepp",
"rules": [
"Måste ärva från Core eller Domain",
"Får inte ändra befintliga begrepp",
"Måste följa namnkonventioner",
"Bör dokumenteras i kundens ontologi-fil",
],
"example": {
"customer": "Municipality of Stockholm",
"extensions": [
{"concept": "SnowRemovalRoute", "parent": "Road"},
{"concept": "GrittingPriority", "parent": "Observation"},
],
},
"stability": "FLEXIBLE — Kunden kontrollerar sina egna extensions",
},
},
"ontology_management": {
"versioning": "Semantisk versionshantering (MAJOR.MINOR.PATCH)",
"compatibility": "Backward compatible inom major version",
"migration": "Automatiska migreringsverktyg vid major bumps",
"governance": "Ontology Review Board för Core-ändringar",
},
}
# ─── PRODUCT DEFINITION v6 ────────────────────────────────────────────────────
@router.get("/public/product-definition")
async def get_product_definition_v6():
"""
LIFE v6 Product Definition
"""
return {
"product_name": "Landvex Intelligence Fusion Engine (LIFE)",
"version": "6.0.0",
"tagline": "Reality Intelligence Standard",
"definition": "LIFE är ett AI-drivet operativsystem och en öppen standard för Reality Intelligence. Genom att förena en gemensam informationsmodell, spårbar evidens, förklarbara analyser och kontinuerligt lärande gör LIFE det möjligt att beskriva, förstå och följa förändringar i den fysiska världen på ett konsekvent sätt över olika domäner och organisationer.",
"evolution": {
"v1": "Aid Intelligence — Biståndsövervakning",
"v2": "Multi-signal — Evidence Before Opinion",
"v3": "Core Architecture — 9 block, AI-operativsystem",
"v4": "Platform — 4 nivåer, SDK, Object Model",
"v5": "Enterprise — 5 pelare, governance, simulation",
"v6": "Standard — 6 öppna standarder, ontologi, ekosystem",
},
"key_characteristics": [
{
"characteristic": "Open Standard",
"description": "RIS-001 till RIS-006 definierar hur verklighetsintelligens representeras",
"differentiator": True,
},
{
"characteristic": "Reality Intelligence",
"description": "Analyserar den fysiska världen, inte bara text",
"differentiator": True,
},
{
"characteristic": "Evidence Before Opinion",
"description": "Börjar med observationer, inte slutsatser",
"differentiator": True,
},
{
"characteristic": "Multi-source Fusion",
"description": "Kombinerar satellit, fält, öppna data och AI",
"differentiator": True,
},
{
"characteristic": "Traceability",
"description": "Varje insikt spårbar till källor",
"differentiator": True,
},
{
"characteristic": "Explainability",
"description": "Förklarbara analyser",
"differentiator": True,
},
{
"characteristic": "Ecosystem",
"description": "Andra företag kan bygga ovanpå standarden",
"differentiator": True,
},
],
"strategic_positioning": {
"not": "En enskild produkt eller applikation",
"is": "Ett teknologiskt ramverk och öppen standard",
"enables": "Andra att bygga Reality Intelligence-lösningar",
"analogy": "Som HTTP för webben, men för verklighetsdata",
},
"long_term_ambition": "LIFE blir den dominerande standarden för hur organisationer representerar, validerar, utbyter och använder verklighetsintelligens.",
}