finishing QDRO section
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
"""
|
||||
QDRO models based on legacy QDRO.SC analysis
|
||||
"""
|
||||
from sqlalchemy import Column, Integer, String, Date, Text, ForeignKey
|
||||
from sqlalchemy import Column, Integer, String, Date, Text, ForeignKey, DateTime
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
@@ -15,8 +16,11 @@ class QDRO(BaseModel):
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
file_no = Column(String(45), ForeignKey("files.file_no"), nullable=False)
|
||||
version = Column(String(10), default="01") # Version of QDRO
|
||||
plan_id = Column(String(45)) # Plan identifier
|
||||
version = Column(String(10), default="01") # Version of QDRO (current working version)
|
||||
plan_id = Column(String(45)) # Plan identifier (links to PlanInfo.plan_id)
|
||||
|
||||
# Timestamps (explicit created_at for sort consistency across APIs)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
# CSV fields from legacy system
|
||||
field1 = Column(String(100)) # ^1 field
|
||||
@@ -55,12 +59,61 @@ class QDRO(BaseModel):
|
||||
form_name = Column(String(200)) # Form/template name
|
||||
|
||||
# Additional fields
|
||||
status = Column(String(45), default="DRAFT") # DRAFT, APPROVED, FILED, etc.
|
||||
status = Column(String(45), default="DRAFT") # DRAFT, APPROVAL_PENDING, APPROVED, FILED, etc.
|
||||
content = Column(Text) # Document content/template
|
||||
notes = Column(Text) # Additional notes
|
||||
|
||||
# Court/cycle tracking (idempotent schema updater will add when missing)
|
||||
approval_status = Column(String(45)) # Workflow status if different granularity is needed
|
||||
approved_date = Column(Date)
|
||||
filed_date = Column(Date)
|
||||
|
||||
# Relationships
|
||||
file = relationship("File", back_populates="qdros")
|
||||
versions = relationship("QDROVersion", back_populates="qdro", cascade="all, delete-orphan")
|
||||
communications = relationship("QDROCommunication", back_populates="qdro", cascade="all, delete-orphan")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<QDRO(file_no='{self.file_no}', version='{self.version}', case_number='{self.case_number}')>"
|
||||
return f"<QDRO(file_no='{self.file_no}', version='{self.version}', case_number='{self.case_number}')>"
|
||||
|
||||
|
||||
class QDROVersion(BaseModel):
|
||||
"""
|
||||
Immutable snapshot of a QDRO at a point in time for version tracking.
|
||||
"""
|
||||
__tablename__ = "qdro_versions"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
qdro_id = Column(Integer, ForeignKey("qdros.id"), nullable=False, index=True)
|
||||
version_label = Column(String(20), nullable=False, default="01")
|
||||
status = Column(String(45), default="DRAFT")
|
||||
content = Column(Text)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
qdro = relationship("QDRO", back_populates="versions")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<QDROVersion(qdro_id={self.qdro_id}, version='{self.version_label}', status='{self.status}')>"
|
||||
|
||||
|
||||
class QDROCommunication(BaseModel):
|
||||
"""
|
||||
Track communications with plan administrators or other parties regarding a QDRO.
|
||||
"""
|
||||
__tablename__ = "qdro_communications"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
qdro_id = Column(Integer, ForeignKey("qdros.id"), nullable=False, index=True)
|
||||
channel = Column(String(20)) # email | phone | letter | fax | portal
|
||||
subject = Column(String(200))
|
||||
message = Column(Text)
|
||||
contact_name = Column(String(100))
|
||||
contact_email = Column(String(200))
|
||||
contact_phone = Column(String(50))
|
||||
status = Column(String(45)) # sent | received | pending | escalated
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
qdro = relationship("QDRO", back_populates="communications")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<QDROCommunication(qdro_id={self.qdro_id}, channel='{self.channel}', subject='{self.subject}')>"
|
||||
Reference in New Issue
Block a user