Implement financial Fabric vNext read model

This commit is contained in:
2026-05-24 02:52:59 +02:00
parent 52d43304ba
commit f25569d9d4
8 changed files with 1248 additions and 24 deletions

View File

@@ -1,7 +1,7 @@
import uuid
from datetime import datetime
from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint
from sqlalchemy import Boolean, DateTime, Float, ForeignKey, Integer, String, Text, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
@@ -26,8 +26,15 @@ class FabricGraphImport(Base, TimestampMixin):
source_commit: Mapped[str | None] = mapped_column(String(80), nullable=True, index=True)
source_path: Mapped[str | None] = mapped_column(Text, nullable=True)
api_version: Mapped[str | None] = mapped_column(String(100), nullable=True)
schema_version: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
export_kind: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
exported_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
netkingdom_id: Mapped[str | None] = mapped_column(Text, nullable=True)
king_actor_id: Mapped[str | None] = mapped_column(Text, nullable=True)
actor_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0, server_default="0")
fabric_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0, server_default="0")
unresolved_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0, server_default="0")
compatibility: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
content_hash: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
node_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0, server_default="0")
edge_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0, server_default="0")
@@ -72,6 +79,18 @@ class FabricGraphNode(Base):
canon_anchor: Mapped[str | None] = mapped_column(Text, nullable=True)
mapping_fit: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_state: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_review_state: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_confidence: Mapped[float | None] = mapped_column(Float, nullable=True)
netkingdom_id: Mapped[str | None] = mapped_column(Text, nullable=True)
fabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
subfabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
environment: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
deployment_scenario_id: Mapped[str | None] = mapped_column(Text, nullable=True)
owner_actor_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
owner_role: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
ownership_resolution: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
cost_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
profit_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
display_only: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, server_default="false", index=True)
attributes: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
raw_json: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
@@ -103,6 +122,26 @@ class FabricGraphEdge(Base):
canon_anchor: Mapped[str | None] = mapped_column(Text, nullable=True)
mapping_fit: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_state: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_review_state: Mapped[str | None] = mapped_column(String(20), nullable=True, index=True)
evidence_confidence: Mapped[float | None] = mapped_column(Float, nullable=True)
relationship_category: Mapped[str | None] = mapped_column(String(30), nullable=True, index=True)
provider_owner_actor_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
provider_fabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
provider_subfabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
consumer_owner_actor_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
consumer_fabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
consumer_subfabric_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
crosses_fabric_boundary: Mapped[bool | None] = mapped_column(Boolean, nullable=True, index=True)
crosses_subfabric_boundary: Mapped[bool | None] = mapped_column(Boolean, nullable=True, index=True)
utility_type: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
utility_contract_id: Mapped[str | None] = mapped_column(Text, nullable=True)
utility_payment_schema_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
utility_metering_basis: Mapped[str | None] = mapped_column(String(100), nullable=True)
utility_business_model: Mapped[str | None] = mapped_column(String(100), nullable=True, index=True)
cost_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
profit_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
provider_profit_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
consumer_cost_center_id: Mapped[str | None] = mapped_column(Text, nullable=True, index=True)
display_only: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, server_default="false", index=True)
attributes: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
raw_json: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")