Files
boc/INFRASTRUCTURE_OBJECT_MODEL.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

18 KiB

Infrastructure Object Model (IOM) v1.0

Ett universellt språk för fysisk infrastruktur — från observation till kunskapsgraf. Status: Aktiv utveckling | Senast uppdaterad: 2026-06-26 Produktionspaus: HÄVD 2026-06-25


Sammanfattning

IOM är en tio-lagers modell för att representera, identifiera, observera och analysera fysisk infrastruktur. Modellen är inspirerad av industriella artikelnummeringssystem (Volkswagen-koncernen) och anpassad för den byggda miljön.

Kärnprincip: Objektet förändras aldrig. Endast observationerna förändras.


Lager 1 — Objektshierarkin (Taxonomi)

Struktur

Domän
├── System
│   ├── Delsystem
│   │   ├── Objekt
│   │   │   ├── Komponent
│   │   │   │   └── Detalj

Exempel: Transport

TRN (Transport)
├── BRG (Broar)
│   ├── CBR (Betongbro)
│   │   ├── ABT (Brofäste)
│   │   │   ├── FND (Fundament)
│   │   │   ├── DRN (Dränering)
│   │   │   └── BLT (Bultförband)
│   │   ├── DCK (Brodäck)
│   │   │   ├── SUR (Betongyta)
│   │   │   ├── EXP (Expansionsfog)
│   │   │   └── RAL (Räcke)
│   │   └── PIE (Brobane)
│   │       ├── SUB (Påle)
│   │       └── CAP (Pålhuv)

Exempel: Energi

ENE (Energi)
├── DST (Distribution)
│   ├── TRS (Transformatorstation)
│   │   ├── TRN (Transformator)
│   │   ├── FND (Fundament)
│   │   ├── FNC (Stängsel)
│   │   │   ├── GAT (Grind)
│   │   │   └── SGN (Skyltning)
│   │   └── BSH (Busset)
│   ├── EVC (Laddinfrastruktur)
│   │   ├── CHA (Laddstation)
│   │   │   ├── FND (Fundament)
│   │   │   ├── POL (Stolpe)
│   │   │   ├── DSP (Display)
│   │   │   ├── RFID (RFID-läsare)
│   │   │   ├── TRM (Kortterminal)
│   │   │   ├── CBL (CCS-kabel)
│   │   │   ├── T2C (Type2-kabel)
│   │   │   ├── CAM (Kamera)
│   │   │   ├── LGT (Belysning)
│   │   │   ├── SGN (Skylt)
│   │   │   └── BOL (Skyddspollare)
│   │   └── CAB (Kabelskåp)

Kodstandard

  • 3 bokstäver per nivå
  • Versaler (A-Z)
  • Unika inom förälder
  • Engelska förkortningar (industristandard)

Lager 2 — Global Object ID (GOID)

Format

[DOM]-[SYS]-[SUB]-[OBJ]-[COMP]-[DET]-[SEQ]

Exempel

ID Tolkning
TRN-BRG-ABT-CON-001 Transport → Bro → Brofäste → Betong → Instans 1
ENE-EVC-CHA-AC22-003 Energi → Laddinfra → Laddstation → AC 22kW → Gen 3
TRN-ROD-SGN-WAR-2847 Transport → Väg → Varningsskylt → Vägarbete → Instans 2847

Regler

  • Permanent: ID ändras aldrig efter tilldelning
  • Unikt globalt: Ingen kollision mellan domäner
  • Sekvens: Löpnummer inom lägsta nivå
  • Revision: Hanteras separat (se Lager 6)

Lager 3 — Objektets DNA (Metadata)

Obligatoriska fält

Fält Typ Exempel
goid string "TRN-BRG-ABT-CON-001"
object_type enum "abutment"
material array ["concrete_c35", "reinforcement_b500b"]
dimensions object {length: 12.5, width: 3.2, height: 2.1, unit: "m"}
manufacturer string "Skanska Concrete AB"
manufacturing_year integer 2018
installation_date date "2019-03-15"
design_lifespan integer (år) 50
owner entity-ref "kommun:stockholm"
maintainer entity-ref "entreprenor:ncc"
standard string "Eurocode 2"
certification string "CE-markt, EN 206"

Materialkatalog (urval)

concrete:
  - C20/25
  - C30/37
  - C35/45
  - C40/50

steel:
  - B500B
  - S355
  - galvanised_steel

composite:
  - carbon_fiber
  - glass_fiber
  - aramid

timber:
  - oak
  - pine
  - larch
  - glulam

stone:
  - granite
  - marble
  - sandstone

Lager 4 — Komponentstruktur (BOM)

Koncept: Infrastructure Bill of Materials

Varje objekt har en komplett komponentlista — precis som inom fordonsindustrin.

Exempel: Gatlykta

goid: "TRN-LGT-STR-LED-0001"
name: "Gatlykta Drottningholm"
components:
  - goid: "TRN-LGT-FND-CON-0001"
    name: "Fundament"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-BLT-GAL-0001"
    name: "Förankringsbultar M24"
    quantity: 4
    unit: "st"
    
  - goid: "TRN-LGT-POL-GAL-0001"
    name: "Stolpe 6m"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-COV-ALU-0001"
    name: "Kopplingslucka"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-ELC-COP-0001"
    name: "Elanslutning"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-FUS-STD-0001"
    name: "Säkring"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-ARM-LED-0001"
    name: "Armatur LED"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-DRV-LED-0001"
    name: "Drivdon"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-SNS-PHO-0001"
    name: "Fotocell"
    quantity: 1
    unit: "st"
    
  - goid: "TRN-LGT-SGN-REF-0001"
    name: "Märkskylt"
    quantity: 1
    unit: "st"

Regler

  • Varje komponent är ett eget objekt med eget GOID
  • Komponenter kan ha egna komponenter (nästling)
  • Kvantitet och enhet specificeras alltid
  • Komponentens livslängd kan skilja sig från förälderns

Lager 5 — Standardiserade egenskaper

Grundschema (alla objekt)

Egenskap Typ Beskrivning
material array Materialkomposition
dimension object Längd, bredd, höjd, diameter
color string RAL-kod eller beskrivning
geometry geojson Punkt, linje eller polygon
location object {lat, lng, elevation, accuracy}
orientation float Grader från nord (0-360)
condition integer 1-5 Skickgradering
risk_level integer 1-5 Sammanlagd risk
age_years integer Beräknad ålder
function_status enum "operational", "degraded", "failed", "unknown"
accessibility enum "public", "restricted", "private"

Skickgradering (1-5)

Nivå Beskrivning Åtgärdstid
1 Utmärkt Ingen åtgärd
2 Gott Planerat underhåll
3 Tillfredsställande Underhåll inom 12 mån
4 Dåligt Åtgärd inom 3 mån
5 Kritiskt Omedelbar åtgärd

Lager 6 — Observationer

Kärnprincip

Objektet förändras aldrig. Observationerna förändras.

Struktur

observation:
  id: "OBS-2026-0012847"
  timestamp: "2026-06-26T09:15:00Z"
  observer: "zoomer:anna_k"          # eller sensor, ai, etc.
  object_goid: "TRN-BRG-ABT-CON-001"
  
  # Vad observerades
  findings:
    - type: "crack"
      code: "1300"                    # Se Lager 7
      description: "Spricka i betong"
      measurement: "3 mm"
      location: "northeast_corner"
      confidence: 0.98                # AI-konfidens
      
    - type: "corrosion"
      code: "1100"
      description: "Ytrost på armering"
      measurement: "15% coverage"
      confidence: 0.87
  
  # Media
  media:
    - type: "image"
      url: "https://.../img_2847.jpg"
      timestamp: "2026-06-26T09:15:03Z"
      geotag: {lat: 59.3293, lng: 18.0686}
      
    - type: "depth_map"
      url: "https://.../depth_2847.bin"
  
  # Kontext
  weather:
    temperature: 22
    conditions: "sunny"
    
  # AI-analys
  ai_analysis:
    model: "infrastructure-v3.2"
    overall_condition: 3
    recommended_action: "schedule_inspection"
    next_observation_due: "2026-09-26"

Historikexempel

object: "TRN-BRG-ABT-CON-001"
observations:
  - id: "OBS-2027-004921"
    date: "2027-08-14"
    findings: [{type: "crack", measurement: "3 mm", confidence: 0.98}]
    condition: 3
    
  - id: "OBS-2028-006633"
    date: "2028-03-22"
    findings: 
      - {type: "crack", measurement: "5 mm", confidence: 0.95}
      - {type: "corrosion", measurement: "light", confidence: 0.82}
      - {type: "water_leakage", confidence: 0.91}
    condition: 4
    
  - id: "OBS-2030-009104"
    date: "2030-06-10"
    findings: [{type: "repaired", confidence: 1.0}]
    condition: 2
    notes: "Renoverad: spricka injekterad, armering rengjord och skyddad"

Lager 7 — Felklassificering

Hierarkisk kodstruktur

1000 — Korrosion
├── 1100 — Ytrost
├── 1200 — Genomrost
└── 1250 — Galvanisk korrosion

1300 — Betongspricka
├── 1310 — Plastisk krympning
├── 1320 — Temperaturspricka
└── 1330 — Lastspricka

1400 — Påkörningsskada
├── 1410 — Ytskada
├── 1420 — Deformation
└── 1430 — Genomskjutning

1500 — Saknad komponent
├── 1510 — Stöld
├── 1520 — Ej installerad
└── 1530 — Avlägsnad

1600 — Lutning / Deformation
├── 1610 — Sättning
├── 1620 — Böjning
└── 1630 — Vridning

1700 — Vibration
├── 1710 — Mekanisk
└── 1720 — Aerodynamisk

1800 — Vegetation
├── 1810 — Blockerande
├── 1820 — Rotinträngning
└── 1830 — Fuktbevarande

1900 — Blockering
├── 1910 — Fysisk
├── 1920 — Digital
└── 1930 — Organisk

Användning

  • AI väljer kod, inte beskrivning
  • Mänsklig granskare kan justera
  • Koder är flerspråkiga (samma kod, lokal beskrivning)
  • Historik spåras per kod

Lager 8 — Riskmodell

Riskdimensioner

Dimension Skala Exempel: Livboj saknas
safety 0-10 10 (direkt livsfara)
economic 0-10 2 (låg kostnad)
environmental 0-10 0 (ingen miljöpåverkan)
operational 0-10 1 (minimal driftpåverkan)
legal 0-10 8 (regleringsbrott)
aesthetic 0-10 3 (liten visuell påverkan)

Sammanlagd risk

def calculate_risk(observation, object_context):
    """
    Viktad summa baserad på objektstyp och miljö.
    En brofästes säkerhetsrisk väger tyngre än en gatlyktas.
    """
    weights = object_context.risk_weights  # Definierad per objekttyp
    
    total = sum(
        observation.risk_scores[dim] * weights[dim]
        for dim in RISK_DIMENSIONS
    ) / sum(weights.values())
    
    return min(10, max(0, total))

Riskmatris (exempel)

Objekt Säkerhet Ekonomi Miljö Drift Juridik Estetik Total
Brofäste, spricka 5mm 8 6 2 5 4 1 5.2
Gatlykta, trasig 2 3 1 2 1 4 2.2
Laddstation, kabel skadad 9 5 1 7 6 2 6.3

Lager 9 — Relationer (Kunskapsgraf)

Relationstyper

relations:
  # Fysiska
  connected_to:       "Ansluten till"
  part_of:           "Del av"
  contains:          "Innehåller"
  supports:          "Bär upp"
  crosses:           "Korsar"
  adjacent_to:       "Gränsar till"
  
  # Logiska
  depends_on:        "Beror på"
  replaces:          "Ersätter"
  compatible_with:   "Kompatibel med"
  
  # Organisatoriska
  owned_by:          "Ägs av"
  maintained_by:     "Underhålls av"
  operated_by:       "Driftsätts av"
  insured_by:        "Försäkrad av"
  
  # Temporala
  preceded_by:       "Föregicks av"
  succeeded_by:      "Efterträddes av"

Exempel: Bro som kunskapsgraf

object: "TRN-BRG-ABT-CON-001"
relations:
  - type: "part_of"
    target: "TRN-BRG-CON-001"
    target_name: "Bromöllan bro"
    
  - type: "connected_to"
    target: "TRN-ROD-ASP-001"
    target_name: "Europaväg 6"
    
  - type: "crosses"
    target: "ENV-WAT-RIV-001"
    target_name: "Rönne å"
    
  - type: "owned_by"
    target: "org:trafikverket"
    
  - type: "maintained_by"
    target: "org:skanska"
    
  - type: "contains"
    target: "TRN-BRG-ABT-DRN-001"
    target_name: "Brofäste dränering"

Grafquery (exempel)

// Hitta alla objekt som underhålls av samma entreprenör
// och har risknivå > 7
MATCH (o:Object)-[:maintained_by]->(e:Entity {name: "Skanska"})
MATCH (o)<-[:observed_on]-(obs:Observation)
WHERE obs.risk_level > 7
RETURN o.goid, o.name, obs.risk_level, obs.date
ORDER BY obs.risk_level DESC

Lager 10 — Digital tvilling

Koncept

Varje stad blir en levande graf där:

  • Noder = objekt (Lager 1-5)
  • Kanter = relationer (Lager 9)
  • Tidsdimension = observationer (Lager 6)
  • Egenskaper = tillstånd (Lager 5, 7, 8)

Hierarkisk vy

Stad (Stockholm)
└── Transportnät
    └── Broar (47 st)
        └── Bromöllan bro
            └── Brofäste #1 (TRN-BRG-ABT-CON-001)
                ├── Betong: C35
                ├── Spricka (OBS-2028-006633)
                │   ├── 5 mm
                │   ├── AI confidence: 95%
                │   └── Risk: 5.2
                ├── Renovering (OBS-2030-009104)
                │   └── Status: reparerad
                └── Rekommendation
                    └── Nästa inspektion: 2031-06-10

Frågetyper som möjliggörs

  1. Tillståndsfrågor

    • "Visa alla broar i dåligt skick"
    • "Hitta objekt med korrosionsrisk > 7"
  2. Prediktiva frågor

    • "Vilka objekt kommer troligen behöva åtgärd inom 12 månader?"
    • "Trend för sprickbredd i brofästen byggda 2015-2020"
  3. Kontradiktionsfrågor

    • "Kommunen rapporterar 12 broar i gott skick — visa observationer"
    • "Trafikverket säkerhetsklass 3 — visa objekt med risk > 8"
  4. Geografiska frågor

    • "Alla objekt inom 500m av väg E6 med underhållsbehov"
    • "Värmekarta: korrosionsrisk per kommun"
  5. Ekonomiska frågor

    • "Uppskattad underhållskostnad nästa 5 år"
    • "Avskrivningsvärde för objekt byggda 2000-2010"

Integration med quiXzoom

Dataflöde

Zoomer tar bild
    ↓
AI klassificerar → Felkod (Lager 7)
    ↓
Objekt identifieras → GOID (Lager 2) eller skapas
    ↓
Observation skapas → Lager 6
    ↓
Risk beräknas → Lager 8
    ↓
Relationer uppdateras → Lager 9
    ↓
Digital tvilling uppdateras → Lager 10

Exempel: Mission "Smutsiga skyltfönster"

  1. Före observation

    • Objekt: COM-FAC-WIN-GLA-2847 (existerar eller skapas)
    • Metadata: {material: "glass", dimensions: {w: 4.2, h: 2.1}}
  2. Observation

    • OBS-2026-0012847: {type: "dirt_accumulation", code: "2100", confidence: 0.94}
    • Bilder, GPS, timestamp
  3. Efter observation

    • Objektets tillstånd: condition: 3
    • Risk: aesthetic: 7 (påverkar butikens image)
    • Relation: owned_by → "org:hm_stores"
    • Nästa observation: +30 dagar

Integration med aamos-ledger

Objekt som tillgångar

# IOM → Ledger
asset:
  goid: "TRN-BRG-ABT-CON-001"
  account: "1220"                    # Anläggningstillgångar
  acquisition_value: 4500000         # SEK, men visas som USD i rapporter
  depreciation_rate: 2               # 50 år
  annual_depreciation: 90000
  
  # Kopplat till IOM
  object_type: "abutment"
  installation_date: "2019-03-15"
  design_lifespan: 50
  
  # Bokföring
  transactions:
    - date: "2019-03-15"
      type: "acquisition"
      amount: 4500000
      
    - date: "2026-12-31"
      type: "depreciation"
      amount: 90000
      
    - date: "2030-06-10"
      type: "maintenance"
      amount: 350000
      note: "Sprickreparation"

Observationer som bokföringshändelser

Observation Bokföringshändelse
Renovering Underhållskostnad (konto 6110)
Komponentbyte Nyanskaffning eller underhåll
Skada (försäkringsärende) Försäkringsersättning
Risknivå > 8 Avskrivningsprövning
Objekt avvecklat Avyttring eller skrotning

Bilaga A: Domänkoder (urval)

Kod Domän Beskrivning
TRN Transport Vägar, järnvägar, broar, tunnlar
ENE Energi El, gas, värme, laddinfrastruktur
TEL Telekom Master, kablar, fiber, 5G
VAS Vatten & Avlopp Ledningar, pumpstationer, reningsverk
HAM Hamn & Sjöfart Kajer, farleder, bouyer
TRS Tåg & Spår Räls, kontaktledning, signaler
OFF Offentligt Pumpar, nödtelefoner, toaletter
BEL Belysning Gatubelysning, trafiksignaler
BYG Byggnad Fasader, tak, entréer, fönster
KRI Kritisk infra Försvar, sjukhus, datacenter

Bilaga B: JSON-Schema (observation)

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "IOM Observation",
  "type": "object",
  "required": ["id", "timestamp", "object_goid", "findings"],
  "properties": {
    "id": {"type": "string", "pattern": "^OBS-[0-9]{4}-[0-9]{7}$"},
    "timestamp": {"type": "string", "format": "date-time"},
    "observer": {"type": "string"},
    "object_goid": {"type": "string", "pattern": "^[A-Z]{3}(-[A-Z]{3})+-[0-9]+$"},
    "findings": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["type", "code"],
        "properties": {
          "type": {"type": "string"},
          "code": {"type": "string", "pattern": "^[0-9]{4}$"},
          "description": {"type": "string"},
          "measurement": {"type": "string"},
          "confidence": {"type": "number", "minimum": 0, "maximum": 1}
        }
      }
    },
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {"enum": ["image", "video", "depth_map", "thermal", "lidar"]},
          "url": {"type": "string", "format": "uri"},
          "timestamp": {"type": "string", "format": "date-time"}
        }
      }
    },
    "ai_analysis": {
      "type": "object",
      "properties": {
        "model": {"type": "string"},
        "overall_condition": {"type": "integer", "minimum": 1, "maximum": 5},
        "recommended_action": {"type": "string"},
        "next_observation_due": {"type": "string", "format": "date"}
      }
    }
  }
}

Version

  • Version: 1.0.0
  • Datum: 2026-06-26
  • Författare: Erik Svensson / Landvex
  • Nästa granskning: 2026-07-26