Zum Inhalt springen

Mapping: Fachobjekte

Status: Entwurf

Wie werden die Fachobjekte aus 30-domain/ auf entity_type-Einträge der generischen MDM-Spec (docs/spec/30-domain-model/01-entity-type.md) abgebildet?

Konvention

  • entity_type.key ist lowercase, snake_case, eindeutig je Tenant. (Spec-Format: ^[a-z][a-z0-9_]*$.)
  • Strukturelle Felder (code, name, status) bleiben relational; Fachattribute liegen in attributes jsonb, validiert via entity_type_attribute.
  • Datentypen enum / multi_enum referenzieren enum_set (Codelisten), reference / multi_reference referenzieren relation_type.

Mapping-Tabelle

Fachobjektentity_type.keyGehört zuBemerkung
HoldingholdingOrganisationtypisch Singleton in Instanz
TochtergesellschaftsubsidiaryOrganisation
Sub-FirmasubfirmOrganisationoptional, selten
Externer Providerexternal_providerOrganisation
Eigentümer (Mandant)ownerOrganisationextern, Vertragspartner für Mandate. Zwingend für Mandats-Cases.
PersonpersonOrganisationnatürliche Person
ModulmoduleLeistungbuchbares Leistungspaket (verwaltung, mieterstrom, messdienst, abrechnung, energieberatung, versicherung, mieter_access). Eigene Entität, weil Pricing-Konditionen + primäre Tochter modelliert werden müssen. Alternative (Codeliste) siehe Pragmatik unten.
LiegenschaftpropertyLiegenschaftHauptbezugsobjekt
GebäudebuildingLiegenschaft
WohneinheitunitLiegenschaft
ZählermeterLiegenschaft
GewerktradeLeistungStammdatum
BedarfspositiondemandLeistunghängt am Case
DienstleistungserviceLeistungKatalog
MaterialmaterialLeistungKatalog
Vertragsmustercontract_templateLeistung
Vertrag (konkret)contractLeistung
PV-Anlagepv_systemEnergie
Speicherbattery_storageEnergie
Mieterstrom-Vertragtenant_power_contractEnergieSpezialisierung von contract — als eigener entity_type modelliert (eigene Pflichtfelder)
Mieter-Access-Vertragtenant_access_contractKommunikationperspektivisch (Modul mieter_access); analog zu tenant_power_contract
TariftariffEnergie / Kommunikation
CasecaseCase-Welt
Dossiercase_dossierCase-Welt1:1 zu case, oder via Aggregations-Beziehung
SzenarioscenarioCase-Welt
AnnahmeassumptionCase-Weltoptional eigener Typ
SnapshotsnapshotCase-Welt
ModellmodelModellBerechnungslogik-Container
ModellVersionmodel_versionModellmit model über Relation version_of
Parametermodel_parameterModelloptional eigener Typ
Formelmodel_formulaModelloptional eigener Typ
Constraintmodel_constraintModelloptional eigener Typ
Testfallmodel_test_caseModell
Anhang / DokumentattachmentQuerschnittsiehe Spec OP-40

Pragmatische Reduktion für V1

Nicht alle Sub-Typen müssen in V1 eigene entity_types sein. Pragmatik:

V1-StrategieBegründung
model_parameter, model_formula, model_constraint, model_test_case als JSONB-Felder am modelreduziert Komplexität, ausreichend für Editor
assumption als JSONB-Feld am scenarioAnnahmen sind eng am Szenario gebunden
snapshot als JSONB-Blob am caseSnapshots sind unveränderlich, kein eigener Lifecycle
case_dossier als 1:1 mit case mergenerspart sinnlose Joins
module als eigener entity_type (V1-Empfehlung)Pricing pro Modul + Verknüpfung zur primären Tochter + spätere Modul-spezifische Reports rechtfertigen den eigenen Typ. Alternative (module_key rein als enum_set an case.module_selection) ist nur für Prototypen sinnvoll.

Sub-Typen werden erst dann zu eigenen entity_types, wenn:

  • eigene Suchindizes nötig sind
  • eigene Permissions je Datensatz erforderlich
  • eigene Lifecycle-Status existieren
  • der Bestand pro Case > ~50 Datensätze wird

Codelisten (enum_set) — Auszug

enum_set.keyWerte (Beispiele)Verwendet in
subsidiary_categorybau, verwaltung, energie, versicherung, kommunikationsubsidiary.kategorie
trade_kinddach, fassade, heizung, elektrik, pv, speicher, …trade.kategorie
heating_typegas, oel, waermepumpe, fernwaerme, pelletbuilding.heizungstyp
energy_classaplus, a, b, c, d, e, f, g, hbuilding.energieausweis_klasse
roof_formsattel, flach, pult, walm, mansardebuilding.dachform
roof_orientationn, no, o, so, s, sw, w, nwbuilding.dachausrichtung
meter_mediumstrom, waerme, wasser, gasmeter.medium
meter_kindverbrauch, erzeugung, summenmeter.typ
contract_typemietvertrag, mieterstrom, wartung, lieferung, versicherung, dienstleistungcontract.vertragstyp
pricing_modelpauschal, pro_einheit, aufwand, mischpreisservice.preis_modell
pv_remuneration_modeleeg_einspeisung, mieterstrom, eigenverbrauch, mixpv_system.vergütungsmodell
case_typeliegenschafts_bewertung, unit_case, holding_case, sanierungs_planung, mieterstrom_pruefung, mieter_access_pruefung, renditerechner, portfolio_optimierungcase.case_type
module_keyverwaltung, mieterstrom, messdienst, abrechnung, energieberatung, versicherung, mieter_accessmodule.code, case.module_selection_json[], Beziehungs-Attribut case_selects_module.module_key
bestandstypmandat, eigenbestandproperty.bestandstyp
owner_typeprivatperson, weg, wohnungsgesellschaft, institutioneller_investor, sonstige_juristische_personowner.owner_type
eigentumsformvolleigentum, weg, pacht, erbbaurechtproperty.eigentumsform
case_statusdraft, daten, analyse, entscheidung, freigabe, aktiv, archiv, cancelledcase.status
model_statusdraft, review, released, produktiv, deprecated, archivedmodel.status
scenario_kindbest, worst, realistisch, variantescenario.kategorie
provider_kindintern, externüber Relation aufgelöst, ggf. redundantes Feld

Verwandte Dokumente