feat(backend): add Remittance + CasAdjustment ORM models
This commit is contained in:
@@ -20,11 +20,13 @@ from typing import Optional
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import (
|
||||
Boolean,
|
||||
Date,
|
||||
DateTime,
|
||||
Enum,
|
||||
ForeignKey,
|
||||
Index,
|
||||
Integer,
|
||||
Numeric,
|
||||
String,
|
||||
Text,
|
||||
@@ -223,11 +225,6 @@ class Claim(Base):
|
||||
)
|
||||
|
||||
|
||||
# Minimal stub for forward relationship/FK resolution. The full Remittance
|
||||
# model (with payer_claim_control_number, status_code, total_charge, etc.)
|
||||
# is defined in Task 5 and will replace this stub. The stub declares only
|
||||
# the columns needed for `Batch.remittances` relationship resolution and
|
||||
# `Claim.matched_remittance_id` FK metadata resolution.
|
||||
class Remittance(Base):
|
||||
__tablename__ = "remittances"
|
||||
|
||||
@@ -235,4 +232,48 @@ class Remittance(Base):
|
||||
batch_id: Mapped[str] = mapped_column(
|
||||
String(32), ForeignKey("batches.id", ondelete="CASCADE"), nullable=False
|
||||
)
|
||||
payer_claim_control_number: Mapped[str] = mapped_column(String(64), nullable=False)
|
||||
claim_id: Mapped[Optional[str]] = mapped_column(
|
||||
String(64), ForeignKey("claims.id"), nullable=True
|
||||
)
|
||||
status_code: Mapped[str] = mapped_column(String(4), nullable=False)
|
||||
status_label: Mapped[Optional[str]] = mapped_column(String(32), nullable=True)
|
||||
total_charge: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False, default=Decimal("0"))
|
||||
total_paid: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False, default=Decimal("0"))
|
||||
patient_responsibility: Mapped[Optional[Decimal]] = mapped_column(Numeric(12, 2), nullable=True)
|
||||
adjustment_amount: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False, default=Decimal("0"))
|
||||
received_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
|
||||
service_date: Mapped[Optional[date]] = mapped_column(Date, nullable=True)
|
||||
is_reversal: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
|
||||
raw_json: Mapped[Optional[dict]] = mapped_column(JSONText, nullable=True)
|
||||
|
||||
batch: Mapped["Batch"] = relationship(back_populates="remittances")
|
||||
cas_adjustments: Mapped[list["CasAdjustment"]] = relationship(
|
||||
back_populates="remittance", cascade="all, delete-orphan"
|
||||
)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint("batch_id", "payer_claim_control_number", name="uq_remits_batch_pcn"),
|
||||
Index("ix_remittances_claim_id", "claim_id"),
|
||||
Index("ix_remittances_payer_claim_control_number", "payer_claim_control_number"),
|
||||
Index("ix_remittances_status_code", "status_code"),
|
||||
)
|
||||
|
||||
|
||||
class CasAdjustment(Base):
|
||||
__tablename__ = "cas_adjustments"
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
remittance_id: Mapped[str] = mapped_column(
|
||||
String(64), ForeignKey("remittances.id", ondelete="CASCADE"), nullable=False
|
||||
)
|
||||
group_code: Mapped[str] = mapped_column(String(4), nullable=False)
|
||||
reason_code: Mapped[str] = mapped_column(String(8), nullable=False)
|
||||
amount: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False)
|
||||
quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(10, 2), nullable=True)
|
||||
|
||||
remittance: Mapped["Remittance"] = relationship(back_populates="cas_adjustments")
|
||||
|
||||
__table_args__ = (
|
||||
Index("ix_cas_adjustments_remittance_id", "remittance_id"),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user