Files
GTI_GERENCIADOR_FISCAL/central/alembic/versions/0028_rtc_write_modes.py
T

48 lines
2.7 KiB
Python

"""RTC central write modes per installation, candidate preview/approval table, richer audit + rollback tracking.
Revision ID: 0028_rtc_write_modes
Revises: 0027_rtc_auto_apply
"""
from alembic import op
import sqlalchemy as sa
revision = "0028_rtc_write_modes"
down_revision = "0027_rtc_auto_apply"
branch_labels = None
depends_on = None
def upgrade():
op.add_column("installations", sa.Column("rtc_write_mode", sa.String(24), nullable=False, server_default="DISABLED"))
op.execute("UPDATE installations SET rtc_write_mode = 'ENABLED' WHERE rtc_auto_apply_authorized") # keeps an existing explicit authorization
for name, kind in (("rule_version", sa.String(32)), ("company_crt", sa.String(8)), ("authorization_origin", sa.String(48)), ("description_snapshot", sa.String(255)),
("installation_uuid", sa.String(64)), ("rtc_status", sa.String(24)), ("action", sa.String(16)), ("rollback_state", sa.String(16)), ("rollback_of", sa.Integer()),
("local_catalog_state", sa.String(32))):
op.add_column("rtc_write_audits", sa.Column(name, kind, nullable=True))
op.create_index("ix_rtc_write_audits_rollback_of", "rtc_write_audits", ["rollback_of"])
op.create_table(
"rtc_candidates",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("tenant_id", sa.Integer(), sa.ForeignKey("tenants.id"), nullable=False, index=True),
sa.Column("installation_id", sa.Integer(), sa.ForeignKey("installations.id"), nullable=False, index=True),
sa.Column("product_code", sa.String(64), nullable=False),
sa.Column("description", sa.String(255), nullable=True),
sa.Column("ncm", sa.String(16), nullable=True),
sa.Column("current_value", sa.String(16), nullable=True),
sa.Column("proposed", sa.String(16), nullable=False),
sa.Column("cst_ibscbs", sa.String(8), nullable=True),
sa.Column("rule_id", sa.String(32), nullable=False),
sa.Column("basis", sa.String(255), nullable=True),
sa.Column("status", sa.String(16), nullable=False, server_default="PENDING", index=True),
sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
sa.UniqueConstraint("installation_id", "product_code", name="uq_rtc_candidate_product"),
)
def downgrade():
op.drop_table("rtc_candidates")
op.drop_index("ix_rtc_write_audits_rollback_of", table_name="rtc_write_audits")
for name in ("rule_version", "company_crt", "authorization_origin", "description_snapshot", "installation_uuid", "rtc_status", "action", "rollback_state", "rollback_of", "local_catalog_state"):
op.drop_column("rtc_write_audits", name)
op.drop_column("installations", "rtc_write_mode")