FASE 4-5-6: Infraestructura, CRM, Service Orders, Notificaciones, Ahorro, Logistica, API Publica
FASE 4: - Redis cache de stock con fallback graceful - Multi-moneda (MXN/USD) con contabilidad en MXN - Proveedores y ordenes de compra completo - Meilisearch 1.5M+ partes indexadas - Metabase KPIs con dashboard auto-generado FASE 5: - CRM mejorado: activities, tags, loyalty program, analytics - Imagenes de partes: upload, resize, thumbnails WebP - Ordenes de servicio Kanban: received->diagnosis->repair->ready->delivered - Garantias/RMA, alertas de reorden, multi-sucursal - Stubs BNPL (APLAZO) y ERP Sync (Aspel/Contpaqi) FASE 6: - Notificaciones automaticas: push/WhatsApp/email/in-app - Reportes de ahorro vs retail_price - Logistica + tracking: DHL, FedEx, Estafeta, 99min, Uber - API Publica: API keys, rate limiting, catalog search Migraciones: v1.9-v3.0 Tests: 93/93 pasando Backup: nexus_backup_20260427_045859.tar.gz
This commit is contained in:
80
pos/migrations/v2.6_bnpl_erp.sql
Normal file
80
pos/migrations/v2.6_bnpl_erp.sql
Normal file
@@ -0,0 +1,80 @@
|
||||
-- v2.6 BNPL (APLAZO) and ERP Sync stubs
|
||||
|
||||
-- BNPL / External credit provider transactions
|
||||
CREATE TABLE IF NOT EXISTS bnpl_transactions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
customer_id INTEGER REFERENCES customers(id),
|
||||
sale_id INTEGER REFERENCES sales(id),
|
||||
provider VARCHAR(50) NOT NULL DEFAULT 'aplazo', -- 'aplazo', 'kueski', 'clip'
|
||||
provider_transaction_id VARCHAR(200),
|
||||
amount NUMERIC(12,2) NOT NULL,
|
||||
status VARCHAR(30) DEFAULT 'pending', -- pending, approved, rejected, funded, cancelled, refunded
|
||||
installment_count INTEGER DEFAULT 1,
|
||||
installment_amount NUMERIC(12,2),
|
||||
customer_fee NUMERIC(12,2) DEFAULT 0,
|
||||
merchant_fee NUMERIC(12,2) DEFAULT 0,
|
||||
provider_response JSONB,
|
||||
webhook_payload JSONB,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_bnpl_sale ON bnpl_transactions(sale_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_bnpl_customer ON bnpl_transactions(customer_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_bnpl_status ON bnpl_transactions(status);
|
||||
|
||||
-- ERP Sync configurations per tenant
|
||||
CREATE TABLE IF NOT EXISTS erp_sync_configs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
erp_type VARCHAR(50) NOT NULL, -- 'aspel_sae', 'contpaqi', 'sap_b1', 'odoo'
|
||||
is_active BOOLEAN DEFAULT FALSE,
|
||||
api_endpoint VARCHAR(500),
|
||||
api_username VARCHAR(200),
|
||||
api_password_encrypted TEXT,
|
||||
database_name VARCHAR(200),
|
||||
company_code VARCHAR(50),
|
||||
sync_direction VARCHAR(20) DEFAULT 'bidirectional', -- 'to_erp', 'from_erp', 'bidirectional'
|
||||
sync_inventory BOOLEAN DEFAULT FALSE,
|
||||
sync_sales BOOLEAN DEFAULT FALSE,
|
||||
sync_customers BOOLEAN DEFAULT FALSE,
|
||||
sync_frequency_minutes INTEGER DEFAULT 60,
|
||||
last_sync_at TIMESTAMPTZ,
|
||||
last_sync_error TEXT,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_erp_config_tenant ON erp_sync_configs(tenant_id, erp_type);
|
||||
|
||||
-- ERP Sync logs (each sync run)
|
||||
CREATE TABLE IF NOT EXISTS erp_sync_logs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
config_id INTEGER REFERENCES erp_sync_configs(id),
|
||||
sync_type VARCHAR(50) NOT NULL, -- 'inventory', 'sales', 'customers', 'full'
|
||||
direction VARCHAR(20) NOT NULL, -- 'to_erp', 'from_erp'
|
||||
status VARCHAR(20) DEFAULT 'running', -- running, success, partial, failed
|
||||
records_processed INTEGER DEFAULT 0,
|
||||
records_failed INTEGER DEFAULT 0,
|
||||
error_message TEXT,
|
||||
details JSONB,
|
||||
started_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
completed_at TIMESTAMPTZ
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_erp_logs_config ON erp_sync_logs(config_id, started_at DESC);
|
||||
|
||||
-- ERP Sync queue (pending items to sync)
|
||||
CREATE TABLE IF NOT EXISTS erp_sync_queue (
|
||||
id SERIAL PRIMARY KEY,
|
||||
config_id INTEGER NOT NULL REFERENCES erp_sync_configs(id),
|
||||
entity_type VARCHAR(50) NOT NULL, -- 'inventory', 'sale', 'customer'
|
||||
entity_id INTEGER NOT NULL,
|
||||
action VARCHAR(20) NOT NULL, -- 'create', 'update', 'delete'
|
||||
priority INTEGER DEFAULT 5, -- 1=urgent, 10=low
|
||||
status VARCHAR(20) DEFAULT 'pending', -- pending, processing, completed, failed
|
||||
retry_count INTEGER DEFAULT 0,
|
||||
last_error TEXT,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
processed_at TIMESTAMPTZ
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_erp_queue_pending ON erp_sync_queue(config_id, status, priority, created_at)
|
||||
WHERE status IN ('pending', 'failed');
|
||||
Reference in New Issue
Block a user