194 lines
8.1 KiB
Python
194 lines
8.1 KiB
Python
"""create expediente_archivo table and seed document types digitization catalog
|
|
|
|
Revision ID: f1a2b3c4d5e6
|
|
Revises: f7a8b9c0d1e2
|
|
Create Date: 2026-04-20 00:00:00.000000
|
|
"""
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = "f1a2b3c4d5e6"
|
|
down_revision = "f7a8b9c0d1e2"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Seed data
|
|
# ---------------------------------------------------------------------------
|
|
|
|
DOCUMENT_TYPES = [
|
|
("168", "Calca o fotografía digital del NIV del vehículo."),
|
|
("169", "Aviso."),
|
|
("170", "Factura."),
|
|
("171", "Documento con el que se acredite la propiedad de la mercancía."),
|
|
("172", "Contratos."),
|
|
("176", "Documentación relacionada con la garantía otorgada en términos de los artículos 84."),
|
|
("177", "Identificación Oficial."),
|
|
("179", "Comprobante de domicilio."),
|
|
("184", "Documento que ampara el avaluó de las mercancías."),
|
|
("185", "Documentos de adjudicación judicial de las mercancías."),
|
|
("187", "Solicitud de retiro de mercancías que causaron abandono."),
|
|
("189", "Actas."),
|
|
("192", "Escritos."),
|
|
("420", "Certificado de peso o volumen."),
|
|
("421", "Comprobante de la importación temporal de la embarcación debidamente formalizado."),
|
|
("422", "Comprobante expedido por donataria."),
|
|
("423", "Consulta en la que conste que el vehículo no se encuentra reportado como robado,"),
|
|
("424", "Clave Unica del Registro de Población."),
|
|
("425", "Declaración de internación o extracción de cantidades en efectivo y/o documentos p"),
|
|
("426", "Declaración de operaciones que no confieren origen en países no parte de acuerdo"),
|
|
("427", "Declaración en la que se señalen los motivos por los que efectúa la devolución de m"),
|
|
("428", "Documentación con información que permita la identificación, análisis y control en tér"),
|
|
("429", "Documentación que acredite que acepta y subsana la irregularidad."),
|
|
("430", "Documentación que ampare la importación temporal del vehículo de que se trate."),
|
|
("431", "Documentación que compruebe que la adquisición de las mercancías fue efectuada "),
|
|
("433", "Documento con base en el cual se determine la procedencia y el origen de las merca"),
|
|
("434", "Documento con que se acredite el reintegro del IVA, en caso de que el contribuyente "),
|
|
("435", "Documentos previstos en la regla 8.7., fracciones I a IV de la Resolución del TLCAN."),
|
|
("436", "El Documento que compruebe el cumplimiento de las regulaciones y restricciones no "),
|
|
("438", "Guía aérea, conocimiento de embarque o carta de porte."),
|
|
("439", "Hoja con los datos de la matrícula y nombre del barco, el lugar donde se localiza y se "),
|
|
("440", "Manifiesto de carga."),
|
|
("441", "Oficios emitidos por autoridad."),
|
|
("442", "Pedimentos."),
|
|
("443", "Programa IMMEX."),
|
|
("444", "Relación de candados."),
|
|
("445", "Relación de certificados de origen."),
|
|
]
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Upgrade / Downgrade
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
def upgrade() -> None:
|
|
# -- Table -----------------------------------------------------------------
|
|
op.create_table(
|
|
"expediente_archivo",
|
|
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
sa.Column("e_document", sa.String(length=50), nullable=True),
|
|
sa.Column("num_operacion", sa.String(length=50), nullable=True),
|
|
sa.Column("tipo_documento", sa.String(length=10), nullable=True),
|
|
sa.Column("archivo_digitalizado_en", sa.String(length=500), nullable=True),
|
|
sa.Column("fecha_digitalizacion", sa.Date(), nullable=True),
|
|
sa.Column("agente_aduanal", sa.String(length=50), nullable=True),
|
|
sa.Column("pedimento", sa.String(length=21), nullable=True),
|
|
sa.Column("rfc_consulta", sa.String(length=13), nullable=True),
|
|
sa.Column("nombre_archivo", sa.String(length=255), nullable=True),
|
|
sa.Column("status", sa.String(length=20), nullable=True),
|
|
sa.Column("task_id", sa.String(length=255), nullable=True),
|
|
sa.Column("external_task_id", sa.String(length=255), nullable=True),
|
|
sa.Column("acuse_pdf_path", sa.String(length=500), nullable=True),
|
|
sa.Column("envio_xml_path", sa.String(length=500), nullable=True),
|
|
sa.Column("respuesta_xml_path", sa.String(length=500), nullable=True),
|
|
sa.Column("consulta_envio_xml_path", sa.String(length=500), nullable=True),
|
|
sa.Column("consulta_respuesta_xml_path", sa.String(length=500), nullable=True),
|
|
sa.Column("tenant_id", sa.Integer(), nullable=False),
|
|
sa.Column("company_id", sa.Integer(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), server_default=sa.text("now()"), nullable=False),
|
|
sa.Column("updated_at", sa.DateTime(), server_default=sa.text("now()"), nullable=False),
|
|
sa.Column("deleted_at", sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(["company_id"], ["a76.company.id"]),
|
|
sa.ForeignKeyConstraint(["tenant_id"], ["core.tenants.id"]),
|
|
sa.PrimaryKeyConstraint("id", name="expediente_archivo_pkey"),
|
|
schema="a76",
|
|
)
|
|
op.create_index(
|
|
op.f("ix_a76_expediente_archivo_company_id"),
|
|
"expediente_archivo",
|
|
["company_id"],
|
|
unique=False,
|
|
schema="a76",
|
|
)
|
|
op.create_index(
|
|
op.f("ix_a76_expediente_archivo_tenant_id"),
|
|
"expediente_archivo",
|
|
["tenant_id"],
|
|
unique=False,
|
|
schema="a76",
|
|
)
|
|
op.create_index(
|
|
op.f("ix_a76_expediente_archivo_task_id"),
|
|
"expediente_archivo",
|
|
["task_id"],
|
|
unique=False,
|
|
schema="a76",
|
|
)
|
|
op.create_index(
|
|
op.f("ix_a76_expediente_archivo_external_task_id"),
|
|
"expediente_archivo",
|
|
["external_task_id"],
|
|
unique=False,
|
|
schema="a76",
|
|
)
|
|
|
|
# -- Seeds -----------------------------------------------------------------
|
|
bind = op.get_bind()
|
|
companies = (
|
|
bind.execute(sa.text("SELECT id, tenant_id FROM a76.company ORDER BY id"))
|
|
.mappings()
|
|
.all()
|
|
)
|
|
for company in companies:
|
|
for code, description in DOCUMENT_TYPES:
|
|
bind.execute(
|
|
sa.text(
|
|
"""
|
|
INSERT INTO a76.document_types_digitization
|
|
(tenant_id, company_id, code, description, active)
|
|
VALUES
|
|
(:tenant_id, :company_id, :code, :description, TRUE)
|
|
ON CONFLICT ON CONSTRAINT document_types_digitization_code_key
|
|
DO NOTHING
|
|
"""
|
|
),
|
|
{
|
|
"tenant_id": company["tenant_id"],
|
|
"company_id": company["id"],
|
|
"code": code,
|
|
"description": description,
|
|
},
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
# -- Remove seeds ----------------------------------------------------------
|
|
bind = op.get_bind()
|
|
codes = [code for code, _ in DOCUMENT_TYPES]
|
|
placeholders = ", ".join(f":c{i}" for i in range(len(codes)))
|
|
params = {f"c{i}": code for i, code in enumerate(codes)}
|
|
bind.execute(
|
|
sa.text(
|
|
f"DELETE FROM a76.document_types_digitization WHERE code IN ({placeholders})"
|
|
),
|
|
params,
|
|
)
|
|
|
|
# -- Drop table ------------------------------------------------------------
|
|
op.drop_index(
|
|
op.f("ix_a76_expediente_archivo_external_task_id"),
|
|
table_name="expediente_archivo",
|
|
schema="a76",
|
|
)
|
|
op.drop_index(
|
|
op.f("ix_a76_expediente_archivo_task_id"),
|
|
table_name="expediente_archivo",
|
|
schema="a76",
|
|
)
|
|
op.drop_index(
|
|
op.f("ix_a76_expediente_archivo_tenant_id"),
|
|
table_name="expediente_archivo",
|
|
schema="a76",
|
|
)
|
|
op.drop_index(
|
|
op.f("ix_a76_expediente_archivo_company_id"),
|
|
table_name="expediente_archivo",
|
|
schema="a76",
|
|
)
|
|
op.drop_table("expediente_archivo", schema="a76")
|