entities
Dette dokumentet er auto-synket fra kildefilene i boligassistent-repoet. Endringer her vil overskrives ved neste sync. Rediger kildefilen direkte.
Property
Section titled “Property”Ansvar: Representerer eiendommen som helhet. Toppnivå-entitet som alle andre tilhører.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| name | text | Visningsnavn (f.eks. «Hellebakken 9») |
| address | text | Gateadresse |
| postal_code | text | Postnummer |
| city | text | Poststed |
| property_type | enum | enebolig / rekkehus / leilighet / hytte |
| build_year | integer | Byggeår |
| renovation_periods | jsonb | Liste med ombyggingsperioder |
| plot_area_m2 | decimal | Tomteareal |
| bra_i_m2 | decimal | Internt bruksareal |
| bra_e_m2 | decimal | Eksternt bruksareal |
| bra_total_m2 | decimal | Totalt BRA |
| ownership_type | enum | selveier / sameie / borettslag / aksje |
| created_by | uuid | FK til User |
| created_at | timestamptz | Opprettelsestidspunkt |
Ansvar: Representerer én etasje i bygningen.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Visningsnavn (f.eks. «1. etasje», «Underetasje») |
| level | integer | Etasjenummer (0 = bakkeplan, -1 = underetasje, 1 = 2. etasje) |
| bra_i_m2 | decimal | Internt bruksareal for etasjen |
| description | text | Valgfri beskrivelse |
| sort_order | integer | Rekkefølge for visning |
Ansvar: Representerer ett rom i boligen. Kjerneentiteten i SpatialModel.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| floor_id | uuid | FK til Floor |
| name | text | Visningsnavn (f.eks. «Stue», «Kjøkken») |
| room_type | enum | stue / kjøkken / soverom / bad / vaskerom / gang / kontor / bod / annet |
| function | text | Beskrivelse av rommets funksjon |
| area_m2 | decimal | Areal |
| ceiling_height_m | decimal | Takhøyde |
| description | text | Fritekst beskrivelse |
| condition | enum | god / akseptabel / dårlig / ukjent |
| priority | enum | høy / medium / lav / ingen |
| window_count | integer | Antall vinduer (valgfritt) |
| window_orientation | text[] | Himmelretninger vinduene vender (nord/syd/øst/vest) |
| door_count | integer | Antall dører (valgfritt) |
| natural_light | enum | mye / middels / lite / ukjent |
| created_by | uuid | FK til User |
| created_at | timestamptz | |
| updated_at | timestamptz |
Geometrifelter (window_count, window_orientation, door_count, natural_light) brukes
av AI-assistenten for layoutforslag (B17) og romvisualisering (B18). Ikke obligatoriske i MVP.
OutdoorSpace
Section titled “OutdoorSpace”Ansvar: Representerer uteområder — hage, terrasse, innkjørsel, passasjer.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Visningsnavn (f.eks. «Hage bak», «Terrasse») |
| space_type | enum | hage / terrasse / innkjørsel / balkong / passasje / plen / bed / annet |
| location | text | Plassering relativt til huset (nord/syd/øst/vest) |
| area_m2 | decimal | Areal (valgfritt) |
| is_covered | boolean | Overbygget? |
| materials | text | Dekke og materialer |
| has_water_outlet | boolean | Vannuttak tilgjengelig |
| has_power_outlet | boolean | Strømuttak tilgjengelig |
| upgrade_potential | text | Beskrivelse av oppgraderingspotensial |
| notes | text | Fritekst notater |
| created_by | uuid | FK til User |
SupportSpace
Section titled “SupportSpace”Ansvar: Støtterom og sekundære arealer som krypkjeller, vedskjul, garasje.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Visningsnavn |
| space_type | enum | krypkjeller / kryploft / garasje / vedskjul / avfallsstasjon / innkjørsel / annet |
| area_m2 | decimal | Areal (valgfritt) |
| condition | enum | god / akseptabel / dårlig / ukjent |
| access_description | text | Hvordan man kommer til dette rommet |
| notes | text | Fritekst notater |
| created_by | uuid | FK til User |
BuildingSystem
Section titled “BuildingSystem”Ansvar: Teknisk bygningssystem som kategori. Representerer én type infrastruktur.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| category | enum | heating / ventilation / plumbing / drainage / electrical / envelope / chimney_fireplace / windows_doors / outdoor_utilities |
| name | text | Visningsnavn (f.eks. «Varmepumpe-system») |
| description | text | Beskrivelse av systemet |
| estimated_age_years | integer | Estimert alder |
| install_year | integer | Installasjonår (hvis kjent) |
| location | text | Plassering i boligen |
| status | enum | ok / trenger_tilsyn / kritisk / ukjent |
| source_type | enum | takstrapport / egen_observasjon / fagperson / ukjent |
| confidence | enum | høy / medium / lav |
| created_by | uuid | FK til User |
Equipment
Section titled “Equipment”Ansvar: Konkret teknisk utstyr — én fysisk enhet tilhørende et bygningssystem.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| building_system_id | uuid | FK til BuildingSystem |
| room_id | uuid | FK til Room / OutdoorSpace / SupportSpace (polymorfisk) |
| name | text | Visningsnavn |
| category | text | Type utstyr |
| manufacturer | text | Produsent |
| model | text | Modellnavn/-nummer |
| serial_number | text | Serienummer |
| install_year | integer | Installasjonår |
| warranty_expires | date | Garantiutløp |
| status | enum | ok / trenger_service / defekt / ukjent |
| notes | text | Notater |
| created_by | uuid | FK til User |
Ansvar: Teknisk avvik, problem eller risiko. Skilles tydelig fra forbedringsønsker.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| title | text | Kort tittel |
| category | enum | structural / moisture / electrical / fire / health / drainage / ventilation / safety / annet |
| severity | enum | critical / high / medium / low |
| tg | enum | tg1 / tg2 / tg3 / iu (tilstandsgrader fra takstrapport) |
| description | text | Detaljert beskrivelse |
| location_ref_type | enum | room / outdoor_space / support_space / building_system |
| location_ref_id | uuid | Referanse til det stedet avviket er |
| discovered_at | date | Når avviket ble oppdaget |
| source_type | enum | takstrapport / egen_observasjon / fagperson / måling |
| source_detail | text | F.eks. «Takstrapport 2024-10, side 12» |
| confidence | enum | høy / medium / lav |
| recommended_action | text | Anbefalt tiltak |
| status | enum | open / in_progress / resolved / monitored / wont_fix |
| created_by | uuid | FK til User |
SafetyItem
Section titled “SafetyItem”Ansvar: Sikkerhetsforhold i boligen. Særlig relevant for barnesikkerhet.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| category | enum | fall / fire / drowning / poison / entrapment / electrical / structural / annet |
| location_ref_type | enum | room / outdoor_space / support_space |
| location_ref_id | uuid | Referanse til sted |
| description | text | Beskrivelse av sikkerhetsforholdet |
| risk_level | enum | critical / high / medium / low |
| affects_children | boolean | Særlig relevant for barn? |
| child_age_relevant | text | F.eks. «0–3 år», «3–6 år» |
| recommended_action | text | Anbefalt tiltak |
| status | enum | open / in_progress / mitigated / resolved |
| priority | enum | høy / medium / lav |
| created_by | uuid | FK til User |
Measurement
Section titled “Measurement”Ansvar: Konkret måling med verdi, enhet og tidspunkt.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| measurement_type | enum | radon / moisture / temperature / power_usage / water_usage / humidity / co2 / annet |
| location_ref_type | enum | room / outdoor_space / support_space / building_system / property |
| location_ref_id | uuid | Referanse til sted |
| value | decimal | Målt verdi |
| unit | text | Enhet (f.eks. «Bq/m³», «%», «°C») |
| measured_at | date | Dato for måling |
| measured_by | text | Hvem målte (person eller instrument) |
| method | text | Målemetode |
| notes | text | Notater |
| created_by | uuid | FK til User |
ImprovementIdea
Section titled “ImprovementIdea”Ansvar: Ønsket forbedring som ikke er et teknisk avvik. Lever i en backlog.
Fungerer også som «prosjekt» ved større tiltak — Tasks knyttes til idéen, og
avhengigheter til andre idéer modelleres via ImprovementDependency.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| title | text | Kort tittel |
| category | enum | interior / exterior / garden / technical / comfort / aesthetics / safety / annet |
| description | text | Detaljert beskrivelse og motivasjon |
| location_ref_type | enum | room / outdoor_space / support_space / building_system / property |
| location_ref_id | uuid | Referanse til sted |
| motivation | text | Hvorfor er dette ønsket? |
| priority | enum | høy / medium / lav / uavklart |
| estimated_effort | enum | liten / medium / stor / ukjent |
| estimated_cost_nok | integer | Punktestimat for kostnad (brukes hvis intervall ikke er satt) |
| cost_min_nok | integer | Nedre kostnadsestimat (optimistisk scenario) |
| cost_max_nok | integer | Øvre kostnadsestimat (pessimistisk scenario) |
| status | enum | idea / considering / planned / in_progress / done / dropped |
| created_by | uuid | FK til User |
Avhengigheter modelleres i ImprovementDependency (erstatter det tidligere fritekstfeltet dependencies).
Se ADR-009 for begrunnelse.
ImprovementDependency
Section titled “ImprovementDependency”Ansvar: Strukturert avhengighet mellom to forbedringsidéer. Gjør det mulig for AI-assistenten å resonere om rekkefølge, samkjøring og hva som ikke bør gjøres ennå.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| from_idea_id | uuid | FK til ImprovementIdea (idéen med avhengigheten) |
| to_idea_id | uuid | FK til ImprovementIdea (idéen det avhenger av) |
| dependency_type | enum | must_before / should_group / independent |
| reason | text | Begrunnelse (f.eks. «rør i vegg berører begge rom») |
| created_by | uuid | FK til User |
dependency_type-verdier:
must_before—to_ideamå fullføres førfrom_ideakan starteshould_group— ideelt å gjøre disse samtidig (f.eks. bad + kjøkken pga. rørlegger)independent— ingen reell avhengighet (brukes for å eksplisitt dokumentere at to idéer er uavhengige)
Ansvar: Konkret oppgave som løser et Issue eller implementerer en ImprovementIdea.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Oppgavenavn |
| task_type | enum | repair / maintenance / inspection / seasonal / project |
| description | text | Hva skal gjøres |
| priority | enum | høy / medium / lav |
| frequency | enum | once / weekly / monthly / quarterly / annually / as_needed |
| due_date | date | Frist (valgfritt) |
| estimated_hours | decimal | Estimert tidsbruk |
| estimated_cost_nok | integer | Punktestimat for kostnad (brukes hvis intervall ikke er satt) |
| cost_min_nok | integer | Nedre kostnadsestimat (optimistisk scenario) |
| cost_max_nok | integer | Øvre kostnadsestimat (pessimistisk scenario) |
| execution_type | enum | diy / diy_guided / professional / unknown |
| source_issue_id | uuid | FK til Issue (hvis oppgaven løser et avvik) |
| source_improvement_id | uuid | FK til ImprovementIdea (hvis oppgaven implementerer et ønske) |
| location_ref_type | enum | rom / system / outdoor / property |
| location_ref_id | uuid | Referanse |
| status | enum | todo / in_progress / done / cancelled |
| completed_at | date | Fullføringsdato |
| completed_by | uuid | FK til User |
| created_by | uuid | FK til User |
MaintenancePlan
Section titled “MaintenancePlan”Ansvar: Sesongbasert vedlikeholdsplan med sjekkliste.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Plannavn (f.eks. «Vårsjekk») |
| season | enum | vår / sommer / høst / vinter / helårlig |
| frequency | enum | annually / as_needed |
| checklist | jsonb | Liste med sjekkpunkter |
| related_systems | uuid[] | Relevante bygningssystemer |
| related_rooms | uuid[] | Relevante rom |
| notes | text | Notater |
Observation
Section titled “Observation”Ansvar: En erfaring fra daglig bruk, en sesong eller en hendelse. Ikke en oppgave.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| observed_at | date | Dato for observasjon |
| category | enum | daily_use / seasonal / child_safety / indoor_climate / garden / operations / aesthetics / annet |
| location_ref_type | enum | room / outdoor_space / support_space / building_system / property |
| location_ref_id | uuid | Referanse til sted |
| season | enum | vår / sommer / høst / vinter |
| description | text | Hva ble observert |
| consequence | text | Hvilken konsekvens har dette (hvis kjent) |
| priority | enum | høy / medium / lav / ingen |
| status | enum | open / noted / actioned |
| created_by | uuid | FK til User |
SeasonalNote
Section titled “SeasonalNote”Ansvar: Oppsummering av erfaringer fra én sesong.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| season | enum | vår / sommer / høst / vinter |
| year | integer | Årstall |
| summary | text | Overordnet oppsummering |
| key_findings | jsonb | Liste med viktige funn |
| possible_actions | text | Mulige tiltak som bør vurderes |
| created_by | uuid | FK til User |
DecisionNote
Section titled “DecisionNote”Ansvar: Dokumentert beslutning med vurdering og begrunnelse.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| topic | text | Hva beslutningen gjelder |
| assessment | text | Vurdering av alternativene |
| decision | text | Hva som ble besluttet |
| rationale | text | Begrunnelse |
| decided_at | date | Dato |
| created_by | uuid | FK til User |
DesignDirection
Section titled “DesignDirection”Ansvar: Foreløpig og reviderbar designretning for ett domene (interiør, eksteriør, hage).
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| domain | enum | interior / exterior / garden |
| status | enum | draft / active / revised / archived |
| style_words | text[] | Stilord (f.eks. «nordisk», «naturlig», «varmt») |
| principles | text | Designprinsipper i fritekst |
| materials | text | Foretrukne materialer |
| colors | text | Fargepalett |
| references | text | Referanser (lenker, navn på stiler) |
| avoid | text | Hva som skal unngås |
| updated_at | timestamptz | Sist oppdatert |
| created_by | uuid | FK til User |
InteriorAsset
Section titled “InteriorAsset”Ansvar: Et konkret interiørobjekt — møbel, lampe, dekor, tekstil, kunst eller plante.
Dekker hele livssyklusen fra vurdering til eierskap: status=considering tilsvarer det
som i forslag til utvidelse ble kalt «ProductCandidate» — se ADR-008.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| room_id | uuid | FK til Room (nullable — kan legges inn før rom er bestemt) |
| category | enum | furniture / lamp / decor / textile / art / plant / annet |
| name | text | Navn (f.eks. «Sofabord i eik») |
| brand | text | Merke |
| model | text | Modell |
| location_in_room | text | Plassering i rommet |
| style_tags | text[] | Stiltagger |
| materials | text[] | Materialer |
| colors | text[] | Farger |
| dimensions_cm | jsonb | Mål (bredde, høyde, dybde i cm) |
| function | text | Funksjon |
| mood | text | Stemning / estetisk rolle |
| source_url | text | Produktlenke |
| price_nok | integer | Pris (valgfritt — brukes ved status=considering for vurdering) |
| fits_room | boolean | Passer i rommet? (manuelt vurdert eller AI-utledet) |
| matches_design | boolean | Matcher designretningen? (manuelt vurdert eller AI-utledet) |
| status | enum | owned / planned / considering / removed |
| child_safe | boolean | Barnesikker? |
| notes | text | Notater |
| created_by | uuid | FK til User |
Livssyklus for produktvurdering:
considering → (kjøpt) → owned → (avvist) → removed → (utsatt) → plannedLightingPlan, LayoutOption, DesignScenario og ShoppingTracker er planlagte
post-MVP-entiteter som utvider dette laget. Se domain-model.md for oversikt.
LayoutIntent
Section titled “LayoutIntent”Ansvar: Ønsket rombruk og møbleringsprinsipp for ett rom.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| room_id | uuid | FK til Room (1:1) |
| function_zones | text | Beskrivelse av funksjonssoner |
| key_furniture | text | Viktige møbler og plassering |
| traffic_flow | text | Trafikkflyt og ganglinjer |
| lighting_needs | text | Belysningsbehov |
| storage_needs | text | Oppbevaringsbehov |
| child_safety_notes | text | Barnesikkerhetshensyn |
| plants | text | Planter og plassering |
| comments | text | Andre kommentarer |
| updated_at | timestamptz | Sist oppdatert |
| created_by | uuid | FK til User |
Document
Section titled “Document”Ansvar: Et dokument knyttet til eiendom, rom, utstyr eller avvik.
Dokumenter med doc_type=takstrapport eller salgsoppgave kan prosesseres gjennom
Ingestion Engine — spor status via ingestion_status.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Dokumentnavn |
| doc_type | enum | takstrapport / salgsoppgave / manual / kvittering / garanti / fagrapport / tegning / annet |
| file_url | text | URL til fil i MinIO |
| file_size_bytes | integer | Filstørrelse |
| mime_type | text | MIME-type |
| date | date | Dokumentdato |
| source | text | Kilde (hvem utstedte dokumentet) |
| covers | text | Hva dokumentet dekker |
| ingestion_status | enum | not_started / queued / processing / review_pending / completed / failed / skipped |
| notes | text | Notater |
| created_by | uuid | FK til User |
ExtractionJob
Section titled “ExtractionJob”Ansvar: Representerer én kjøring av AI-ekstraksjon mot et dokument. Sporer tilstand i ingestion-pipelinen og kobler dokumentet til uttrukne fakta.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| document_id | uuid | FK til Document |
| status | enum | queued / processing / review_pending / completed / failed |
| started_at | timestamptz | Starttidspunkt |
| completed_at | timestamptz | Fullføringsstidspunkt (null hvis ikke ferdig) |
| facts_total | integer | Antall fakta hentet ut |
| facts_approved | integer | Antall fakta godkjent av bruker |
| facts_rejected | integer | Antall fakta forkastet |
| error_message | text | Feilmelding hvis status=failed |
| created_by | uuid | FK til User som startet jobben |
ExtractedFact
Section titled “ExtractedFact”Ansvar: Ett enkelt faktum hentet ut av AI fra et dokument.
Koblet til en ExtractionJob og venter på brukergjennomgang (godkjenn / endre / forkast)
før det persisteres som en faktisk entitet i systemet.
Inneholder ReviewItem-funksjonalitet direkte — ingen separat entitet nødvendig.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| job_id | uuid | FK til ExtractionJob |
| entity_type | enum | property / floor / room / outdoor_space / building_system / equipment / issue / safety_item |
| field_path | text | Hvilket felt gjelder dette (f.eks. rooms[0].area_m2, property.build_year) |
| suggested_value | jsonb | Hva AI ekstraherte (kan være tekst, tall, objekt) |
| user_corrected_value | jsonb | Hva bruker endret til (null hvis ikke endret) |
| source_page | integer | Sidenummer i kildedokumentet |
| source_text | text | Tekstutdraget som faktumet er hentet fra |
| confidence | decimal | AI-konfidensgrad 0.0–1.0 |
| user_action | enum | pending / approved / edited / rejected |
| reviewed_at | timestamptz | Når bruker tok stilling (null hvis pending) |
| reviewed_by | uuid | FK til User |
Livssyklus:
pending → approved → [persisteres som entitet] → edited → [user_corrected_value brukes] → [persisteres] → rejected → [forkastes, lagres for audit]Se ADR-010 for begrunnelse for sammenslåing av ExtractedFact og ReviewItem.
Ansvar: Et bilde knyttet til rom, avvik, utstyr eller uteområde.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| location_ref_type | enum | room / outdoor_space / issue / equipment / interior_asset |
| location_ref_id | uuid | Referanse |
| file_url | text | URL til bilde i MinIO |
| thumbnail_url | text | URL til thumbnail |
| taken_at | date | Dato bildet ble tatt |
| description | text | Hva bildet viser |
| tags | text[] | Tagger |
| created_by | uuid | FK til User |
ProductReference
Section titled “ProductReference”Ansvar: Produktlenke som informerer en kjøpsbeslutning.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| name | text | Produktnavn |
| supplier | text | Leverandør |
| url | text | Produktlenke |
| category | text | Produktkategori |
| price_nok | integer | Pris (valgfritt) |
| related_to_type | enum | interior_asset / improvement_idea / task / room |
| related_to_id | uuid | Referanse |
| style_role | text | Hvilken stilrolle produktet spiller |
| notes | text | Notater |
| created_by | uuid | FK til User |
Manual
Section titled “Manual”Ansvar: Manual for konkret utstyr.
| Felt | Type | Beskrivelse |
|---|---|---|
| id | uuid | Primærnøkkel |
| property_id | uuid | FK til Property |
| equipment_id | uuid | FK til Equipment |
| manufacturer | text | Produsent |
| file_url | text | URL til manual i MinIO |
| language | text | Språk |
| maintenance_relevance | text | Hva i manualen er relevant for vedlikehold |
| notes | text | Notater |
| created_by | uuid | FK til User |