Add Phase 5 historical Tally learning foundation
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""Phase 5 historical Tally learning foundation.
|
||||
|
||||
Revision ID: 20260822_historical_learning_p5
|
||||
Revises: 20260822_accounting_taxonomy_p4
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "20260822_historical_learning_p5"
|
||||
down_revision = "20260822_accounting_taxonomy_p4"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.create_table("accounting_ledger_nature_mappings",
|
||||
sa.Column("id",sa.Integer(),primary_key=True), sa.Column("tenant_id",sa.Integer(),sa.ForeignKey("tenants.id",ondelete="CASCADE"),nullable=False),
|
||||
sa.Column("client_id",sa.Integer(),sa.ForeignKey("clients.id",ondelete="CASCADE"),nullable=False), sa.Column("tally_guid",sa.String(120),nullable=False),
|
||||
sa.Column("company_name",sa.String(240),nullable=False,server_default=""), sa.Column("ledger_name",sa.String(240),nullable=False), sa.Column("parent_group",sa.String(240),nullable=False,server_default=""),
|
||||
sa.Column("nature_id",sa.Integer(),sa.ForeignKey("accounting_natures.id",ondelete="RESTRICT"),nullable=False), sa.Column("source",sa.String(40),nullable=False,server_default="manual"),
|
||||
sa.Column("confidence_percent",sa.Integer(),nullable=False,server_default="100"), sa.Column("confirmed_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL"),nullable=True),
|
||||
sa.Column("confirmed_at_utc",sa.DateTime(timezone=True),nullable=False,server_default=sa.func.now()), sa.Column("created_at_utc",sa.DateTime(timezone=True),nullable=False,server_default=sa.func.now()), sa.Column("updated_at_utc",sa.DateTime(timezone=True),nullable=False,server_default=sa.func.now()),
|
||||
sa.UniqueConstraint("tenant_id","client_id","tally_guid","ledger_name",name="uq_accounting_ledger_nature_mapping"))
|
||||
for c in ["tenant_id","client_id","tally_guid","ledger_name","parent_group","nature_id","source"]: op.create_index(f"ix_accounting_ledger_nature_mappings_{c}","accounting_ledger_nature_mappings",[c])
|
||||
|
||||
op.create_table("accounting_historical_ledger_evidence",
|
||||
sa.Column("id",sa.Integer(),primary_key=True), sa.Column("tenant_id",sa.Integer(),sa.ForeignKey("tenants.id",ondelete="CASCADE"),nullable=False), sa.Column("client_id",sa.Integer(),sa.ForeignKey("clients.id",ondelete="CASCADE"),nullable=False),
|
||||
sa.Column("tally_guid",sa.String(120),nullable=False), sa.Column("company_name",sa.String(240),nullable=False,server_default=""), sa.Column("party_ledger_name",sa.String(240),nullable=False), sa.Column("party_parent_group",sa.String(240),nullable=False,server_default=""),
|
||||
sa.Column("counter_ledger_name",sa.String(240),nullable=False), sa.Column("counter_parent_group",sa.String(240),nullable=False,server_default=""), sa.Column("voucher_type_name",sa.String(160),nullable=False,server_default="Purchase"),
|
||||
sa.Column("voucher_count",sa.Integer(),nullable=False,server_default="0"), sa.Column("absolute_amount_total",sa.Float(),nullable=False,server_default="0"), sa.Column("first_voucher_date",sa.String(20),nullable=True), sa.Column("last_voucher_date",sa.String(20),nullable=True),
|
||||
sa.Column("sample_narration",sa.Text(),nullable=True), sa.Column("refreshed_at_utc",sa.DateTime(timezone=True),nullable=False,server_default=sa.func.now()),
|
||||
sa.UniqueConstraint("tenant_id","client_id","tally_guid","party_ledger_name","counter_ledger_name","voucher_type_name",name="uq_accounting_historical_ledger_evidence"))
|
||||
for c in ["tenant_id","client_id","tally_guid","party_ledger_name","counter_ledger_name","counter_parent_group","voucher_type_name","refreshed_at_utc"]: op.create_index(f"ix_accounting_historical_ledger_evidence_{c}","accounting_historical_ledger_evidence",[c])
|
||||
|
||||
op.create_table("accounting_historical_learning_runs",
|
||||
sa.Column("id",sa.Integer(),primary_key=True), sa.Column("tenant_id",sa.Integer(),sa.ForeignKey("tenants.id",ondelete="CASCADE"),nullable=False), sa.Column("client_id",sa.Integer(),sa.ForeignKey("clients.id",ondelete="CASCADE"),nullable=False),
|
||||
sa.Column("workstation_agent_id",sa.Integer(),sa.ForeignKey("erp_workstation_agents.id",ondelete="SET NULL"),nullable=True), sa.Column("agent_job_id",sa.Integer(),sa.ForeignKey("erp_agent_jobs.id",ondelete="SET NULL"),nullable=True,unique=True),
|
||||
sa.Column("tally_guid",sa.String(120),nullable=False), sa.Column("company_name",sa.String(240),nullable=False,server_default=""), sa.Column("date_from",sa.String(20),nullable=True), sa.Column("date_to",sa.String(20),nullable=True),
|
||||
sa.Column("status",sa.String(30),nullable=False,server_default="queued"), sa.Column("evidence_rows",sa.Integer(),nullable=False,server_default="0"), sa.Column("error_message",sa.Text(),nullable=True), sa.Column("requested_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL"),nullable=True),
|
||||
sa.Column("created_at_utc",sa.DateTime(timezone=True),nullable=False,server_default=sa.func.now()), sa.Column("completed_at_utc",sa.DateTime(timezone=True),nullable=True))
|
||||
for c in ["tenant_id","client_id","workstation_agent_id","agent_job_id","tally_guid","status","created_at_utc"]: op.create_index(f"ix_accounting_historical_learning_runs_{c}","accounting_historical_learning_runs",[c], unique=(c=="agent_job_id"))
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_table("accounting_historical_learning_runs")
|
||||
op.drop_table("accounting_historical_ledger_evidence")
|
||||
op.drop_table("accounting_ledger_nature_mappings")
|
||||
Reference in New Issue
Block a user