Add TDS compliance liability reconciliation and rule master tools
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "20260903_tds_withholding_tools"
|
||||
down_revision = "20260903_cash_payment_rules"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.create_table("accounting_tds_rules",
|
||||
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("rule_code",sa.String(80),nullable=False),sa.Column("name",sa.String(200),nullable=False),sa.Column("statutory_reference",sa.String(160),nullable=False,server_default="Income-tax Act, 2025 - section 393(1)"),sa.Column("legacy_section",sa.String(40)),sa.Column("nature_keywords",sa.Text(),nullable=False,server_default=""),sa.Column("effective_from",sa.Date(),nullable=False),sa.Column("effective_to",sa.Date()),sa.Column("threshold_mode",sa.String(30),nullable=False,server_default="ANNUAL"),sa.Column("single_threshold",sa.Float(),nullable=False,server_default="0"),sa.Column("aggregate_threshold",sa.Float(),nullable=False,server_default="0"),sa.Column("rate_individual_huf",sa.Float(),nullable=False,server_default="0"),sa.Column("rate_other",sa.Float(),nullable=False,server_default="0"),sa.Column("no_pan_rate",sa.Float(),nullable=False,server_default="20"),sa.Column("deduct_on_excess_only",sa.Boolean(),nullable=False,server_default=sa.false()),sa.Column("applies_to_purchases",sa.Boolean(),nullable=False,server_default=sa.false()),sa.Column("applies_to_expenses",sa.Boolean(),nullable=False,server_default=sa.true()),sa.Column("is_active",sa.Boolean(),nullable=False,server_default=sa.true()),sa.Column("is_system_default",sa.Boolean(),nullable=False,server_default=sa.true()),sa.Column("updated_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL")),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","rule_code","effective_from",name="uq_accounting_tds_rule_version"))
|
||||
op.create_index("ix_accounting_tds_rules_tenant","accounting_tds_rules",["tenant_id"])
|
||||
op.create_table("accounting_tds_posting_instructions",
|
||||
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("client_id",sa.Integer(),sa.ForeignKey("clients.id",ondelete="CASCADE"),nullable=False),sa.Column("rule_id",sa.Integer(),sa.ForeignKey("accounting_tds_rules.id",ondelete="SET NULL")),sa.Column("company_guid",sa.String(255)),sa.Column("company_name",sa.String(255)),sa.Column("source_voucher_number",sa.String(120)),sa.Column("source_voucher_date",sa.Date()),sa.Column("party_ledger",sa.String(255),nullable=False),sa.Column("tds_ledger",sa.String(255),nullable=False,server_default="TDS Payable"),sa.Column("taxable_base",sa.Float(),nullable=False,server_default="0"),sa.Column("expected_tds",sa.Float(),nullable=False,server_default="0"),sa.Column("actual_tds",sa.Float(),nullable=False,server_default="0"),sa.Column("liability_amount",sa.Float(),nullable=False,server_default="0"),sa.Column("statutory_reference",sa.String(160)),sa.Column("narration",sa.Text()),sa.Column("erp_reference",sa.String(80),unique=True),sa.Column("status",sa.String(30),nullable=False,server_default="prepared"),sa.Column("tally_voucher_id",sa.String(120)),sa.Column("prepared_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL")),sa.Column("approved_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL")),sa.Column("posted_by_user_id",sa.Integer(),sa.ForeignKey("users.id",ondelete="SET NULL")),sa.Column("prepared_at_utc",sa.DateTime(),nullable=False,server_default=sa.text("CURRENT_TIMESTAMP")),sa.Column("approved_at_utc",sa.DateTime()),sa.Column("posted_at_utc",sa.DateTime()))
|
||||
op.create_index("ix_accounting_tds_posting_tenant","accounting_tds_posting_instructions",["tenant_id"]); op.create_index("ix_accounting_tds_posting_client","accounting_tds_posting_instructions",["client_id"]); op.create_index("ix_accounting_tds_posting_status","accounting_tds_posting_instructions",["status"])
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_index("ix_accounting_tds_posting_status",table_name="accounting_tds_posting_instructions"); op.drop_index("ix_accounting_tds_posting_client",table_name="accounting_tds_posting_instructions"); op.drop_index("ix_accounting_tds_posting_tenant",table_name="accounting_tds_posting_instructions"); op.drop_table("accounting_tds_posting_instructions"); op.drop_index("ix_accounting_tds_rules_tenant",table_name="accounting_tds_rules"); op.drop_table("accounting_tds_rules")
|
||||
Reference in New Issue
Block a user