Especificación Técnica: trx_pedidos¶
Esquema: pedidos
Base de Datos: erp
Tabla Legacy Origen: c067t_pedido (42 col)
Propósito: Cabecera de órdenes de pedido generadas desde la aplicación móvil de promotores hacia el dominio de pedidos del ERP. Aplica integración desacoplada mediante UUIDs de correlación hacia CRM y Core sin dependencias foráneas físicas entre bases de datos.
1. Justificación y Mejoras de Arquitectura¶
- Integración Desacoplada Cross-Database: Mantiene la autonomía del microservicio ERP utilizando identificadores UUID de correlación para vincular clientes (
cliente_id), locales (local_entrega_id), promotores (promotor_id), visitas (visita_id), canales (canal_id), términos de pago (termino_pago_id) y tipos de envío (tipo_envio_id) haciacrm, y sucursales (sucursal_id) haciacore.identidad, sin claves foráneas físicas inter-base. - Aislamiento Multi-Tenant (RLS): Integra
empresa_id BIGINT NOT NULLcon políticas RLS obligatorias (USINGyWITH CHECK) garantizando aislamiento estricto por organización. - Integridad Referencial Compuesta para Detalle y Planificaciones: Define la restricción
UNIQUE (empresa_id, id)en la cabecera para permitir que las tablas hijas (trx_pedidos_detalleytrx_pedidos_planificaciones) vinculen claves foráneas compuestas garantizando consistencia multi-tenant. - Control de Unicidad de Correlativo: Restricción
UNIQUE (empresa_id, numero_pedido)para evitar colisiones de numeración de pedidos dentro del mismo tenant. - Trazabilidad y Auditoría: Auditoría integral (
created_at,updated_at,deleted_at,created_by,updated_by) con auditoría integral.
2. Definiciones de Implementación¶
Table pedidos.trx_pedidos {
id uuid [pk, default: `gen_random_uuid()`, note: 'Identificador único UUID']
empresa_id bigint [not null, note: 'Identificador BIGINT de la empresa en core.identidad (RLS)']
cliente_id uuid [not null, note: 'Correlación lógica con crm.clientes.mae_clientes (sin FK física)']
local_entrega_id uuid [note: 'Correlación lógica con crm.clientes.mae_locales_cliente (sin FK física)']
promotor_id uuid [not null, note: 'Correlación lógica con crm.fuerza_ventas.mae_promotores (sin FK física)']
sucursal_id uuid [not null, note: 'Correlación lógica con core.identidad.mae_sucursales (sin FK física)']
visita_id uuid [note: 'Correlación lógica con crm.fuerza_ventas.trx_visitas (sin FK física)']
numero_pedido varchar(30) [not null, note: 'Número correlativo comercial del pedido']
fecha_pedido timestamptz [not null, default: `now()`, note: 'Fecha y hora de emisión']
fecha_entrega_estimada date [not null, note: 'Fecha comprometida de despacho']
canal_id uuid [not null, note: 'Correlación lógica con crm.clientes.cat_canales_comerciales']
termino_pago_id uuid [not null, note: 'Correlación lógica con crm.clientes.cat_terminos_pago']
tipo_envio_id uuid [note: 'Correlación lógica con crm.clientes.cat_tipos_envio']
monto_subtotal numeric(12,2) [not null, default: `0.00`, note: 'Subtotal antes de descuentos e impuestos']
monto_descuento numeric(12,2) [not null, default: `0.00`, note: 'Descuento comercial global']
monto_impuestos numeric(12,2) [not null, default: `0.00`, note: 'Total de tributos (IVA)']
monto_total numeric(12,2) [not null, default: `0.00`, note: 'Monto neto final del pedido']
estado_pedido varchar(30) [not null, default: `'BORRADOR'`, note: 'BORRADOR, ENVIADO, APROBADO_CREDITO, FACTURADO, DESPACHADO, ENTREGADO, CANCELADO']
observaciones text [note: 'Instrucciones de entrega o notas comerciales']
// Auditoría General
is_activo boolean [not null, default: `true`, note: 'Estado lógico del registro']
created_at timestamptz [not null, default: `now()`, note: 'Fecha de creación']
updated_at timestamptz [not null, default: `now()`, note: 'Fecha de última actualización']
deleted_at timestamptz [note: 'Fecha de eliminación lógica']
created_by uuid [note: 'Usuario creador']
updated_by uuid [note: 'Usuario modificador']
Indexes {
(empresa_id, id) [unique, name: 'uq_trx_pedidos_empresa_id']
(empresa_id, numero_pedido) [unique, name: 'uq_trx_pedidos_empresa_numero']
(empresa_id, is_activo) [name: 'ix_trx_pedidos_empresa_activo']
(empresa_id, cliente_id, fecha_pedido) [name: 'ix_trx_pedidos_empresa_cliente_fecha']
(empresa_id, promotor_id, fecha_pedido) [name: 'ix_trx_pedidos_empresa_promotor_fecha']
(empresa_id, estado_pedido) [name: 'ix_trx_pedidos_empresa_estado']
}
}
CREATE TABLE IF NOT EXISTS pedidos.trx_pedidos (
id UUID NOT NULL DEFAULT gen_random_uuid(),
empresa_id BIGINT NOT NULL,
cliente_id UUID NOT NULL,
local_entrega_id UUID,
promotor_id UUID NOT NULL,
sucursal_id UUID NOT NULL,
visita_id UUID,
numero_pedido VARCHAR(30) NOT NULL,
fecha_pedido TIMESTAMPTZ NOT NULL DEFAULT now(),
fecha_entrega_estimada DATE NOT NULL,
canal_id UUID NOT NULL,
termino_pago_id UUID NOT NULL,
tipo_envio_id UUID,
monto_subtotal NUMERIC(12,2) NOT NULL DEFAULT 0.00,
monto_descuento NUMERIC(12,2) NOT NULL DEFAULT 0.00,
monto_impuestos NUMERIC(12,2) NOT NULL DEFAULT 0.00,
monto_total NUMERIC(12,2) NOT NULL DEFAULT 0.00,
estado_pedido VARCHAR(30) NOT NULL DEFAULT 'BORRADOR',
observaciones TEXT,
-- Auditoría General
is_activo BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
deleted_at TIMESTAMPTZ,
created_by UUID,
updated_by UUID,
CONSTRAINT pk_trx_pedidos
PRIMARY KEY (id),
CONSTRAINT uq_trx_pedidos_empresa_id
UNIQUE (empresa_id, id),
CONSTRAINT uq_trx_pedidos_empresa_numero
UNIQUE (empresa_id, numero_pedido)
);
CREATE INDEX IF NOT EXISTS ix_trx_pedidos_empresa_activo
ON pedidos.trx_pedidos (empresa_id, is_activo);
CREATE INDEX IF NOT EXISTS ix_trx_pedidos_empresa_cliente_fecha
ON pedidos.trx_pedidos (empresa_id, cliente_id, fecha_pedido);
CREATE INDEX IF NOT EXISTS ix_trx_pedidos_empresa_promotor_fecha
ON pedidos.trx_pedidos (empresa_id, promotor_id, fecha_pedido);
CREATE INDEX IF NOT EXISTS ix_trx_pedidos_empresa_estado
ON pedidos.trx_pedidos (empresa_id, estado_pedido);
COMMENT ON TABLE pedidos.trx_pedidos IS
'Órdenes de Pedido de Ventas (Cabecera ERP): Cabecera de pedidos generados desde la aplicación móvil de promotores hacia el dominio de pedidos del ERP. Aplica integración desacoplada mediante UUIDs de correlación hacia CRM y Core sin dependencias foráneas físicas entre bases.';
COMMENT ON COLUMN pedidos.trx_pedidos.id IS
'Identificador único UUID';
COMMENT ON COLUMN pedidos.trx_pedidos.empresa_id IS
'Identificador UUID de la empresa en core.identidad (RLS)';
COMMENT ON COLUMN pedidos.trx_pedidos.cliente_id IS
'Correlación lógica con crm.clientes.mae_clientes (sin FK física)';
COMMENT ON COLUMN pedidos.trx_pedidos.local_entrega_id IS
'Correlación lógica con crm.clientes.mae_locales_cliente (sin FK física)';
COMMENT ON COLUMN pedidos.trx_pedidos.promotor_id IS
'Correlación lógica con crm.fuerza_ventas.mae_promotores (sin FK física)';
COMMENT ON COLUMN pedidos.trx_pedidos.sucursal_id IS
'Correlación lógica con core.identidad.mae_sucursales (sin FK física)';
COMMENT ON COLUMN pedidos.trx_pedidos.visita_id IS
'Correlación lógica con crm.fuerza_ventas.trx_visitas (sin FK física)';
COMMENT ON COLUMN pedidos.trx_pedidos.numero_pedido IS
'Número correlativo comercial del pedido';
COMMENT ON COLUMN pedidos.trx_pedidos.fecha_pedido IS
'Fecha y hora de emisión';
COMMENT ON COLUMN pedidos.trx_pedidos.fecha_entrega_estimada IS
'Fecha comprometida de despacho';
COMMENT ON COLUMN pedidos.trx_pedidos.canal_id IS
'Correlación lógica con crm.clientes.cat_canales_comerciales';
COMMENT ON COLUMN pedidos.trx_pedidos.termino_pago_id IS
'Correlación lógica con crm.clientes.cat_terminos_pago';
COMMENT ON COLUMN pedidos.trx_pedidos.tipo_envio_id IS
'Correlación lógica con crm.clientes.cat_tipos_envio';
COMMENT ON COLUMN pedidos.trx_pedidos.monto_subtotal IS
'Subtotal antes de descuentos e impuestos';
COMMENT ON COLUMN pedidos.trx_pedidos.monto_descuento IS
'Descuento comercial global';
COMMENT ON COLUMN pedidos.trx_pedidos.monto_impuestos IS
'Total de tributos (IVA)';
COMMENT ON COLUMN pedidos.trx_pedidos.monto_total IS
'Monto neto final del pedido';
COMMENT ON COLUMN pedidos.trx_pedidos.estado_pedido IS
'BORRADOR, ENVIADO, APROBADO_CREDITO, FACTURADO, DESPACHADO, ENTREGADO, CANCELADO';
COMMENT ON COLUMN pedidos.trx_pedidos.observaciones IS
'Instrucciones de entrega o notas comerciales';
COMMENT ON COLUMN pedidos.trx_pedidos.is_activo IS
'Estado lógico del registro';
COMMENT ON COLUMN pedidos.trx_pedidos.created_at IS
'Fecha de creación';
COMMENT ON COLUMN pedidos.trx_pedidos.updated_at IS
'Fecha de última actualización';
COMMENT ON COLUMN pedidos.trx_pedidos.deleted_at IS
'Fecha de eliminación lógica';
COMMENT ON COLUMN pedidos.trx_pedidos.created_by IS
'Usuario creador';
COMMENT ON COLUMN pedidos.trx_pedidos.updated_by IS
'Usuario modificador';
ALTER TABLE pedidos.trx_pedidos
ENABLE ROW LEVEL SECURITY;
CREATE POLICY rls_trx_pedidos_empresa
ON pedidos.trx_pedidos
FOR ALL
USING (
empresa_id = current_setting(
'app.current_empresa_id',
true
)::BIGINT
)
WITH CHECK (
empresa_id = current_setting(
'app.current_empresa_id',
true
)::BIGINT
);
import uuid
from datetime import date, datetime
from decimal import Decimal
from typing import Optional
from sqlalchemy import (
BigInteger,
Boolean,
Date,
Index,
Numeric,
String,
Text,
UniqueConstraint,
text,
)
from sqlalchemy.dialects.postgresql import TIMESTAMPTZ, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.db.base import Base
class TrxPedidos(Base):
"""
Órdenes de Pedido de Ventas (Cabecera ERP).
Cabecera de pedidos generados desde la aplicación móvil de promotores
hacia el dominio de pedidos del ERP. Aplica integración desacoplada
mediante UUIDs de correlación hacia CRM y Core.
Legacy:
c067t_pedido (42 col)
"""
__tablename__ = "trx_pedidos"
__table_args__ = (
UniqueConstraint(
"empresa_id",
"id",
name="uq_trx_pedidos_empresa_id",
),
UniqueConstraint(
"empresa_id",
"numero_pedido",
name="uq_trx_pedidos_empresa_numero",
),
Index(
"ix_trx_pedidos_empresa_activo",
"empresa_id",
"is_activo",
),
Index(
"ix_trx_pedidos_empresa_cliente_fecha",
"empresa_id",
"cliente_id",
"fecha_pedido",
),
Index(
"ix_trx_pedidos_empresa_promotor_fecha",
"empresa_id",
"promotor_id",
"fecha_pedido",
),
Index(
"ix_trx_pedidos_empresa_estado",
"empresa_id",
"estado_pedido",
),
{
"schema": "pedidos",
"comment": "Órdenes de Pedido de Ventas (Cabecera ERP)",
},
)
id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
primary_key=True,
server_default=text("gen_random_uuid()"),
comment="Identificador único UUID",
)
empresa_id: Mapped[int] = mapped_column(
BigInteger,
nullable=False,
comment="Identificador UUID de la empresa en core.identidad (RLS)",
)
cliente_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.mae_clientes (sin FK física)",
)
local_entrega_id: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.clientes.mae_locales_cliente (sin FK física)",
)
promotor_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.fuerza_ventas.mae_promotores (sin FK física)",
)
sucursal_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con core.identidad.mae_sucursales (sin FK física)",
)
visita_id: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.fuerza_ventas.trx_visitas (sin FK física)",
)
numero_pedido: Mapped[str] = mapped_column(
String(30),
nullable=False,
comment="Número correlativo comercial del pedido",
)
fecha_pedido: Mapped[datetime] = mapped_column(
TIMESTAMPTZ,
nullable=False,
server_default=text("now()"),
comment="Fecha y hora de emisión",
)
fecha_entrega_estimada: Mapped[date] = mapped_column(
Date,
nullable=False,
comment="Fecha comprometida de despacho",
)
canal_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.cat_canales_comerciales",
)
termino_pago_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.cat_terminos_pago",
)
tipo_envio_id: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.clientes.cat_tipos_envio",
)
monto_subtotal: Mapped[Decimal] = mapped_column(
Numeric(12, 2),
nullable=False,
server_default=text("0.00"),
comment="Subtotal antes de descuentos e impuestos",
)
monto_descuento: Mapped[Decimal] = mapped_column(
Numeric(12, 2),
nullable=False,
server_default=text("0.00"),
comment="Descuento comercial global",
)
monto_impuestos: Mapped[Decimal] = mapped_column(
Numeric(12, 2),
nullable=False,
server_default=text("0.00"),
comment="Total de tributos (IVA)",
)
monto_total: Mapped[Decimal] = mapped_column(
Numeric(12, 2),
nullable=False,
server_default=text("0.00"),
comment="Monto neto final del pedido",
)
estado_pedido: Mapped[str] = mapped_column(
String(30),
nullable=False,
server_default=text("'BORRADOR'"),
comment="BORRADOR, ENVIADO, APROBADO_CREDITO, FACTURADO, DESPACHADO, ENTREGADO, CANCELADO",
)
observaciones: Mapped[Optional[str]] = mapped_column(
Text,
nullable=True,
comment="Instrucciones de entrega o notas comerciales",
)
is_activo: Mapped[bool] = mapped_column(
Boolean,
nullable=False,
server_default=text("true"),
comment="Estado lógico del registro",
)
created_at: Mapped[datetime] = mapped_column(
TIMESTAMPTZ,
nullable=False,
server_default=text("now()"),
comment="Fecha de creación",
)
updated_at: Mapped[datetime] = mapped_column(
TIMESTAMPTZ,
nullable=False,
server_default=text("now()"),
comment="Fecha de última actualización",
)
deleted_at: Mapped[Optional[datetime]] = mapped_column(
TIMESTAMPTZ,
nullable=True,
comment="Fecha de eliminación lógica",
)
created_by: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
nullable=True,
comment="Usuario creador",
)
updated_by: Mapped[Optional[uuid.UUID]] = mapped_column(
UUID(as_uuid=True),
nullable=True,
comment="Usuario modificador",
)
"""create trx_pedidos
Revision ID: erp_0001
Revises: None
Create Date: 2026-09-10
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision: str = "erp_0001"
down_revision: Union[str, Sequence[str], None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
"trx_pedidos",
sa.Column(
"id",
postgresql.UUID(as_uuid=True),
nullable=False,
server_default=sa.text("gen_random_uuid()"),
comment="Identificador único UUID",
),
sa.Column(
"empresa_id",
sa.BigInteger(),
nullable=False,
comment="Identificador UUID de la empresa en core.identidad (RLS)",
),
sa.Column(
"cliente_id",
postgresql.UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.mae_clientes (sin FK física)",
),
sa.Column(
"local_entrega_id",
postgresql.UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.clientes.mae_locales_cliente (sin FK física)",
),
sa.Column(
"promotor_id",
postgresql.UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.fuerza_ventas.mae_promotores (sin FK física)",
),
sa.Column(
"sucursal_id",
postgresql.UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con core.identidad.mae_sucursales (sin FK física)",
),
sa.Column(
"visita_id",
postgresql.UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.fuerza_ventas.trx_visitas (sin FK física)",
),
sa.Column(
"numero_pedido",
sa.String(length=30),
nullable=False,
comment="Número correlativo comercial del pedido",
),
sa.Column(
"fecha_pedido",
sa.TIMESTAMP(timezone=True),
nullable=False,
server_default=sa.text("now()"),
comment="Fecha y hora de emisión",
),
sa.Column(
"fecha_entrega_estimada",
sa.Date(),
nullable=False,
comment="Fecha comprometida de despacho",
),
sa.Column(
"canal_id",
postgresql.UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.cat_canales_comerciales",
),
sa.Column(
"termino_pago_id",
postgresql.UUID(as_uuid=True),
nullable=False,
comment="Correlación lógica con crm.clientes.cat_terminos_pago",
),
sa.Column(
"tipo_envio_id",
postgresql.UUID(as_uuid=True),
nullable=True,
comment="Correlación lógica con crm.clientes.cat_tipos_envio",
),
sa.Column(
"monto_subtotal",
sa.Numeric(precision=12, scale=2),
nullable=False,
server_default=sa.text("0.00"),
comment="Subtotal antes de descuentos e impuestos",
),
sa.Column(
"monto_descuento",
sa.Numeric(precision=12, scale=2),
nullable=False,
server_default=sa.text("0.00"),
comment="Descuento comercial global",
),
sa.Column(
"monto_impuestos",
sa.Numeric(precision=12, scale=2),
nullable=False,
server_default=sa.text("0.00"),
comment="Total de tributos (IVA)",
),
sa.Column(
"monto_total",
sa.Numeric(precision=12, scale=2),
nullable=False,
server_default=sa.text("0.00"),
comment="Monto neto final del pedido",
),
sa.Column(
"estado_pedido",
sa.String(length=30),
nullable=False,
server_default=sa.text("'BORRADOR'"),
comment="BORRADOR, ENVIADO, APROBADO_CREDITO, FACTURADO, DESPACHADO, ENTREGADO, CANCELADO",
),
sa.Column(
"observaciones",
sa.Text(),
nullable=True,
comment="Instrucciones de entrega o notas comerciales",
),
# Auditoría General
sa.Column(
"is_activo",
sa.Boolean(),
nullable=False,
server_default=sa.text("true"),
comment="Estado lógico del registro",
),
sa.Column(
"created_at",
sa.TIMESTAMP(timezone=True),
nullable=False,
server_default=sa.text("now()"),
comment="Fecha de creación",
),
sa.Column(
"updated_at",
sa.TIMESTAMP(timezone=True),
nullable=False,
server_default=sa.text("now()"),
comment="Fecha de última actualización",
),
sa.Column(
"deleted_at",
sa.TIMESTAMP(timezone=True),
nullable=True,
comment="Fecha de eliminación lógica",
),
sa.Column(
"created_by",
postgresql.UUID(as_uuid=True),
nullable=True,
comment="Usuario creador",
),
sa.Column(
"updated_by",
postgresql.UUID(as_uuid=True),
nullable=True,
comment="Usuario modificador",
),
sa.PrimaryKeyConstraint(
"id",
name="pk_trx_pedidos",
),
sa.UniqueConstraint(
"empresa_id",
"id",
name="uq_trx_pedidos_empresa_id",
),
sa.UniqueConstraint(
"empresa_id",
"numero_pedido",
name="uq_trx_pedidos_empresa_numero",
),
comment="Órdenes de Pedido de Ventas (Cabecera ERP)",
schema="pedidos",
)
op.create_index(
"ix_trx_pedidos_empresa_activo",
"trx_pedidos",
["empresa_id", "is_activo"],
unique=False,
schema="pedidos",
)
op.create_index(
"ix_trx_pedidos_empresa_cliente_fecha",
"trx_pedidos",
["empresa_id", "cliente_id", "fecha_pedido"],
unique=False,
schema="pedidos",
)
op.create_index(
"ix_trx_pedidos_empresa_promotor_fecha",
"trx_pedidos",
["empresa_id", "promotor_id", "fecha_pedido"],
unique=False,
schema="pedidos",
)
op.create_index(
"ix_trx_pedidos_empresa_estado",
"trx_pedidos",
["empresa_id", "estado_pedido"],
unique=False,
schema="pedidos",
)
op.execute(
"""
ALTER TABLE pedidos.trx_pedidos
ENABLE ROW LEVEL SECURITY;
"""
)
op.execute(
"""
CREATE POLICY rls_trx_pedidos_empresa
ON pedidos.trx_pedidos
FOR ALL
USING (
empresa_id = current_setting(
'app.current_empresa_id',
true
)::BIGINT
)
WITH CHECK (
empresa_id = current_setting(
'app.current_empresa_id',
true
)::BIGINT
);
"""
)
def downgrade() -> None:
op.execute(
"""
DROP POLICY IF EXISTS rls_trx_pedidos_empresa
ON pedidos.trx_pedidos;
"""
)
op.execute(
"""
ALTER TABLE pedidos.trx_pedidos
DISABLE ROW LEVEL SECURITY;
"""
)
op.drop_index(
"ix_trx_pedidos_empresa_estado",
table_name="trx_pedidos",
schema="pedidos",
)
op.drop_index(
"ix_trx_pedidos_empresa_promotor_fecha",
table_name="trx_pedidos",
schema="pedidos",
)
op.drop_index(
"ix_trx_pedidos_empresa_cliente_fecha",
table_name="trx_pedidos",
schema="pedidos",
)
op.drop_index(
"ix_trx_pedidos_empresa_activo",
table_name="trx_pedidos",
schema="pedidos",
)
op.drop_table(
"trx_pedidos",
schema="pedidos",
)