- F0 blindaje: Redis/Celery, pg_hba sin trust LAN, secretos a env 600, backups, webhook auth, jobs muertos - F1 caja: bugs POS, reembolsos al corte, apartados, CFDI, topes de descuento en cotizacion/apartado - F2/F7 IA de catalogo: autocategorizacion, dedup de SKUs con embeddings, OCR de facturas, descripciones, claves SAT, limpieza de fitment - F3 IA en el flujo: vision Yonke, preguntas MeLi, venta cruzada, anomalias, sinonimos, busqueda semantica (rerank/embeddings) - F4/F8 escala y cartera: /metrics+Prometheus+Grafana, pool, score de credito, churn, metricas multi-tenant - Nexus Yonke (M1-M6): modelo de datos 1-de-1, alta por donador, vitrina publica, MeLi usado, consignacion, garantia por dias, reportes, etiquetas - Marketplace B2B entre yonkes (catalogo + pedidos cross-tenant) - Seguridad: auth en /api/admin/* (35 endpoints), alertas por tenant - Migraciones v4.27/v4.28; timers expire-demos y rollup-metrics
29 lines
1.2 KiB
SQL
29 lines
1.2 KiB
SQL
-- v4.25: transfer documents with in-transit state.
|
|
-- Transfers become documents: draft -> sent -> received (or cancelled).
|
|
-- Actual stock movement happens on 'receive' (origin -, destination +),
|
|
-- so goods in transit are tracked and discrepancies are explicit.
|
|
|
|
CREATE TABLE IF NOT EXISTS inventory_transfers (
|
|
id SERIAL PRIMARY KEY,
|
|
from_branch_id INTEGER NOT NULL REFERENCES branches(id),
|
|
to_branch_id INTEGER NOT NULL REFERENCES branches(id),
|
|
status VARCHAR(20) NOT NULL DEFAULT 'draft', -- draft | sent | received | cancelled
|
|
notes TEXT,
|
|
employee_id INTEGER,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
sent_at TIMESTAMPTZ,
|
|
received_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS inventory_transfer_lines (
|
|
id SERIAL PRIMARY KEY,
|
|
transfer_id INTEGER NOT NULL REFERENCES inventory_transfers(id) ON DELETE CASCADE,
|
|
inventory_id INTEGER NOT NULL REFERENCES inventory(id),
|
|
quantity INTEGER NOT NULL,
|
|
qty_received INTEGER,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_transfers_status ON inventory_transfers(status);
|
|
CREATE INDEX IF NOT EXISTS idx_transfer_lines_transfer ON inventory_transfer_lines(transfer_id);
|