From 024b3e1ad63cba8f86f1be9eb301f337c67305c6 Mon Sep 17 00:00:00 2001 From: A R R R Associates Date: Thu, 3 Sep 2026 21:36:57 +0530 Subject: [PATCH] Add cash payment compliance and accounting tools --- .../20260903_cash_payment_rule_settings.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 alembic/versions/20260903_cash_payment_rule_settings.py diff --git a/alembic/versions/20260903_cash_payment_rule_settings.py b/alembic/versions/20260903_cash_payment_rule_settings.py new file mode 100644 index 0000000..3e4e8a2 --- /dev/null +++ b/alembic/versions/20260903_cash_payment_rule_settings.py @@ -0,0 +1,30 @@ +from alembic import op +import sqlalchemy as sa + +revision = "20260903_cash_payment_rules" +down_revision = "20260902_ws_enrollment_secret" +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + "accounting_cash_payment_rule_settings", + sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True), + sa.Column("tenant_id", sa.Integer(), sa.ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False), + sa.Column("cash_limit", sa.Float(), nullable=False, server_default="10000"), + sa.Column("effective_from", sa.Date(), nullable=False, server_default="2017-04-01"), + sa.Column("split_window_days", sa.Integer(), nullable=False, server_default="3"), + sa.Column("near_limit_percent", sa.Float(), nullable=False, server_default="80"), + sa.Column("max_allocation_days", sa.Integer(), nullable=False, server_default="5"), + sa.Column("updated_by_user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="SET NULL"), nullable=True), + sa.Column("created_at_utc", sa.DateTime(), nullable=False, server_default=sa.text("CURRENT_TIMESTAMP")), + sa.Column("updated_at_utc", sa.DateTime(), nullable=False, server_default=sa.text("CURRENT_TIMESTAMP")), + sa.UniqueConstraint("tenant_id", name="uq_cash_payment_rule_settings_tenant"), + ) + op.create_index("ix_cash_payment_rule_settings_tenant", "accounting_cash_payment_rule_settings", ["tenant_id"], unique=False) + + +def downgrade(): + op.drop_index("ix_cash_payment_rule_settings_tenant", table_name="accounting_cash_payment_rule_settings") + op.drop_table("accounting_cash_payment_rule_settings")