Files
Autoparts-DB/pos/migrations/v2.2_alerts_warranty.sql
Nexus Dev 9ff3dc4c8b 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
2026-04-27 05:23:30 +00:00

83 lines
4.0 KiB
SQL

-- v2.2_alerts_warranty.sql
-- Mejora #7: Alertas de Reorden mejoradas
-- Mejora #10: Garantías / RMA
-- Mejora #1: Multi-sucursal sync helpers
-- ═══════════════════════════════════════════════════════════════════════════
-- ALERTAS DE REORDER
-- ═══════════════════════════════════════════════════════════════════════════
-- Add reorder columns to inventory
ALTER TABLE inventory
ADD COLUMN IF NOT EXISTS reorder_point INTEGER,
ADD COLUMN IF NOT EXISTS reorder_qty INTEGER;
-- Table to track generated reorder alerts (prevents duplicate notifications)
CREATE TABLE IF NOT EXISTS reorder_alerts (
id SERIAL PRIMARY KEY,
inventory_id INTEGER NOT NULL REFERENCES inventory(id) ON DELETE CASCADE,
branch_id INTEGER REFERENCES branches(id),
alert_type VARCHAR(20) NOT NULL, -- 'zero', 'low', 'over'
stock_at_alert INTEGER NOT NULL,
threshold INTEGER,
status VARCHAR(20) DEFAULT 'open', -- open, acknowledged, resolved
po_id INTEGER REFERENCES purchase_orders(id),
employee_id INTEGER REFERENCES employees(id),
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
resolved_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_reorder_alerts_inventory ON reorder_alerts(inventory_id);
CREATE INDEX IF NOT EXISTS idx_reorder_alerts_status ON reorder_alerts(status);
CREATE INDEX IF NOT EXISTS idx_reorder_alerts_created ON reorder_alerts(created_at DESC);
-- ═══════════════════════════════════════════════════════════════════════════
-- GARANTÍAS / RMA
-- ═══════════════════════════════════════════════════════════════════════════
-- Warranty registry attached to sale_items
CREATE TABLE IF NOT EXISTS warranties (
id SERIAL PRIMARY KEY,
sale_id INTEGER REFERENCES sales(id) ON DELETE SET NULL,
sale_item_id INTEGER REFERENCES sale_items(id) ON DELETE SET NULL,
inventory_id INTEGER REFERENCES inventory(id) ON DELETE SET NULL,
customer_id INTEGER REFERENCES customers(id),
supplier_id INTEGER REFERENCES suppliers(id),
part_number VARCHAR(100),
name VARCHAR(300),
warranty_months INTEGER DEFAULT 0,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
status VARCHAR(20) DEFAULT 'active', -- active, claimed, expired, void
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_warranties_sale ON warranties(sale_id);
CREATE INDEX IF NOT EXISTS idx_warranties_customer ON warranties(customer_id);
CREATE INDEX IF NOT EXISTS idx_warranties_status ON warranties(status);
CREATE INDEX IF NOT EXISTS idx_warranties_end_date ON warranties(end_date);
-- Warranty claims (RMA process)
CREATE TABLE IF NOT EXISTS warranty_claims (
id SERIAL PRIMARY KEY,
warranty_id INTEGER NOT NULL REFERENCES warranties(id) ON DELETE CASCADE,
claim_date DATE NOT NULL DEFAULT CURRENT_DATE,
reason TEXT NOT NULL,
diagnosis TEXT,
resolution VARCHAR(20), -- approved, rejected, repaired, replaced, refunded
replacement_inventory_id INTEGER REFERENCES inventory(id),
refund_amount NUMERIC(12,2),
labor_cost NUMERIC(12,2),
status VARCHAR(20) DEFAULT 'open', -- open, in_review, resolved, closed
employee_id INTEGER REFERENCES employees(id),
supplier_rma_number VARCHAR(100),
notes TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
resolved_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_warranty_claims_warranty ON warranty_claims(warranty_id);
CREATE INDEX IF NOT EXISTS idx_warranty_claims_status ON warranty_claims(status);