semantic_governance.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. """SQLAlchemy mappings for generic semantic governance."""
  2. from sqlalchemy.dialects.postgresql import JSONB, UUID
  3. from app import db
  4. from app.core.common.identifiers import new_governance_uid
  5. class SemanticAsset(db.Model):
  6. __tablename__ = "semantic_assets"
  7. __table_args__ = (
  8. db.UniqueConstraint("asset_kind", "code"),
  9. {"schema": "public"},
  10. )
  11. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  12. asset_kind = db.Column(db.String(30), nullable=False)
  13. code = db.Column(db.String(120), nullable=False)
  14. name = db.Column(db.String(300), nullable=False)
  15. owner_uid = db.Column(UUID(as_uuid=False), nullable=False)
  16. business_domain_uid = db.Column(UUID(as_uuid=False), nullable=False)
  17. status = db.Column(db.String(20), nullable=False)
  18. current_version = db.Column(db.Integer, nullable=False)
  19. created_by = db.Column(UUID(as_uuid=False), nullable=False)
  20. class SemanticAssetVersion(db.Model):
  21. __tablename__ = "semantic_asset_versions"
  22. __table_args__ = (
  23. db.UniqueConstraint("asset_uid", "version"),
  24. {"schema": "public"},
  25. )
  26. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  27. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  28. version = db.Column(db.Integer, nullable=False)
  29. status = db.Column(db.String(20), nullable=False)
  30. content_hash = db.Column(db.String(64), nullable=False)
  31. definition = db.Column(JSONB, nullable=False)
  32. change_reason = db.Column(db.String(1000), nullable=False)
  33. created_by = db.Column(UUID(as_uuid=False), nullable=False)
  34. rollback_from_version = db.Column(db.Integer)
  35. class SemanticAssetReview(db.Model):
  36. __tablename__ = "semantic_asset_reviews"
  37. __table_args__ = (
  38. db.UniqueConstraint("asset_uid", "version"),
  39. {"schema": "public"},
  40. )
  41. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  42. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  43. version = db.Column(db.Integer, nullable=False)
  44. decision = db.Column(db.String(20), nullable=False)
  45. reason = db.Column(db.String(1000), nullable=False)
  46. reviewer_uid = db.Column(UUID(as_uuid=False), nullable=False)
  47. class SemanticAssetLink(db.Model):
  48. __tablename__ = "semantic_asset_links"
  49. __table_args__ = {"schema": "public"}
  50. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  51. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  52. version = db.Column(db.Integer, nullable=False)
  53. link_type = db.Column(db.String(30), nullable=False)
  54. target_type = db.Column(db.String(60), nullable=False)
  55. target_uid = db.Column(db.String(200), nullable=False)
  56. target_key = db.Column(db.String(200))
  57. metadata_json = db.Column("metadata", JSONB, nullable=False)
  58. class DataElementFieldMapping(db.Model):
  59. __tablename__ = "data_element_field_mappings"
  60. __table_args__ = (
  61. db.UniqueConstraint("asset_uid", "field_name", "data_element_uid"),
  62. {"schema": "public"},
  63. )
  64. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  65. asset_uid = db.Column(UUID(as_uuid=False), nullable=False)
  66. field_name = db.Column(db.String(200), nullable=False)
  67. data_element_uid = db.Column(UUID(as_uuid=False), nullable=False)
  68. data_element_version = db.Column(db.Integer, nullable=False)
  69. owner_uid = db.Column(UUID(as_uuid=False), nullable=False)
  70. status = db.Column(db.String(20), nullable=False)
  71. evidence = db.Column(JSONB, nullable=False)
  72. created_by = db.Column(UUID(as_uuid=False), nullable=False)
  73. class SemanticPublicationAudit(db.Model):
  74. __tablename__ = "semantic_publication_audits"
  75. __table_args__ = {"schema": "public"}
  76. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  77. target_type = db.Column(db.String(40), nullable=False)
  78. target_uid = db.Column(UUID(as_uuid=False), nullable=False)
  79. target_version = db.Column(db.Integer, nullable=False)
  80. action = db.Column(db.String(40), nullable=False)
  81. actor_uid = db.Column(UUID(as_uuid=False), nullable=False)
  82. detail = db.Column(JSONB, nullable=False)