-- Abisfact: base limpia para hosting
-- Ejecutar sobre una base que ya tenga corridas todas las migraciones del proyecto.
-- Deja el sistema sin movimientos historicos y con los datos esenciales para iniciar.

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE TABLE auth_refresh_tokens;
TRUNCATE TABLE usuario_pos;
TRUNCATE TABLE usuario_sucursales;
TRUNCATE TABLE sucursal_pos;
TRUNCATE TABLE empresa_sucursales;
TRUNCATE TABLE empresa_certificados_digitales;
TRUNCATE TABLE empresa_cuentas_bancarias;
TRUNCATE TABLE empresa_modulos;
TRUNCATE TABLE empresa_usuarios;
TRUNCATE TABLE permisos;
TRUNCATE TABLE roles;
TRUNCATE TABLE historial;

TRUNCATE TABLE facturacion_comprobante_historial;
TRUNCATE TABLE facturacion_comprobante_eventos;
TRUNCATE TABLE facturacion_comprobante_detracciones;
TRUNCATE TABLE facturacion_comprobante_cuotas;
TRUNCATE TABLE facturacion_comprobante_pagos;
TRUNCATE TABLE facturacion_comprobante_movimientos;
TRUNCATE TABLE facturacion_comprobante_detalles;
TRUNCATE TABLE facturacion_comprobantes;
TRUNCATE TABLE facturacion_resumen_diario_detalles;
TRUNCATE TABLE facturacion_resumen_diarios;
TRUNCATE TABLE facturacion_guia_transporte;
TRUNCATE TABLE facturacion_guia_catalogos;
TRUNCATE TABLE facturacion_transportistas;
TRUNCATE TABLE facturacion_conductores;
TRUNCATE TABLE facturacion_direcciones;
TRUNCATE TABLE facturacion_motivos_nota;
TRUNCATE TABLE facturacion_integracion_endpoints;
TRUNCATE TABLE facturacion_series;

TRUNCATE TABLE facturacion_cotizacion_detalles;
TRUNCATE TABLE facturacion_cotizaciones;

TRUNCATE TABLE inventario_detalle;
TRUNCATE TABLE inventario_saldos;
TRUNCATE TABLE inventario;

TRUNCATE TABLE terceros;
TRUNCATE TABLE catalogo_items;

TRUNCATE TABLE catalogo_medios_pago;
TRUNCATE TABLE catalogo_formas_pago;
TRUNCATE TABLE catalogo_detracciones;
TRUNCATE TABLE catalogo_afectaciones_igv;
TRUNCATE TABLE catalogo_tipo_items;
TRUNCATE TABLE catalogo_tipo_documentos;
TRUNCATE TABLE catalogo_tipo_movimiento;
TRUNCATE TABLE unidades_medida;
TRUNCATE TABLE tipo_operacion;

TRUNCATE TABLE modulos;
TRUNCATE TABLE acciones;
TRUNCATE TABLE giro_negocio;
TRUNCATE TABLE tipo_empresa;
TRUNCATE TABLE empresas;
TRUNCATE TABLE usuarios;

SET FOREIGN_KEY_CHECKS = 1;

-- Catalogos base
INSERT INTO tipo_empresa (id, codigo, nombre, estado, created_at) VALUES
(1, 'GENERAL', 'General', 1, NOW());

INSERT INTO giro_negocio (id, codigo, nombre, descripcion, estado, created_at) VALUES
(1, 'GENERAL', 'General', 'Negocio generico', 1, NOW()),
(2, 'FERRETERIA', 'Ferreteria', 'Venta de articulos de construccion y ferreteria', 1, NOW()),
(3, 'RESTAURANTE', 'Restaurante', 'Atencion de mesas, salon y cocina', 1, NOW()),
(4, 'BODEGA', 'Bodega', 'Tienda de abarrotes y venta rapida', 1, NOW()),
(5, 'SPA', 'Spa', 'Servicios de bienestar y citas', 1, NOW()),
(6, 'SERVICIOS', 'Servicios', 'Prestacion de servicios profesionales', 1, NOW()),
(7, 'POLLERIA', 'Polleria', 'Venta de pollos, combos y delivery', 1, NOW());

INSERT INTO modulos (id, codigo, nombre, categoria, estado, created_at) VALUES
(1, 'usuarios', 'Usuarios', 'CORE', 1, NOW()),
(2, 'empresas', 'Empresas', 'CORE', 1, NOW()),
(3, 'facturacion', 'Facturacion', 'LEGAL', 1, NOW()),
(4, 'auditoria', 'Auditoria', 'CORE', 1, NOW()),
(5, 'catalogos_sunat', 'Catalogos SUNAT', 'LEGAL', 1, NOW()),
(6, 'terceros', 'Terceros', 'CORE', 1, NOW()),
(7, 'productos', 'Productos', 'CORE', 1, NOW()),
(8, 'inventario', 'Inventario', 'CORE', 1, NOW()),
(9, 'caja', 'Caja', 'CORE', 1, NOW()),
(10, 'compras', 'Compras', 'CORE', 1, NOW()),
(11, 'ventas', 'Ventas', 'CORE', 1, NOW()),
(12, 'polleria', 'Polleria', 'VERTICAL', 1, NOW()),
(13, 'restaurante', 'Restaurante', 'VERTICAL', 1, NOW()),
(14, 'bodega', 'Bodega', 'VERTICAL', 1, NOW()),
(15, 'spa', 'Spa', 'VERTICAL', 1, NOW()),
(16, 'servicios', 'Servicios', 'VERTICAL', 1, NOW()),
(17, 'ferreteria', 'Ferreteria', 'VERTICAL', 1, NOW()),
(18, 'cotizaciones', 'Cotizaciones', 'CORE', 1, NOW());

INSERT INTO acciones (id, codigo, nombre, estado, created_at) VALUES
(1, 'ver', 'Ver', 1, NOW()),
(2, 'crear', 'Crear', 1, NOW()),
(3, 'editar', 'Editar', 1, NOW()),
(4, 'eliminar', 'Eliminar', 1, NOW()),
(5, 'anular', 'Anular', 1, NOW());

INSERT INTO catalogo_tipo_documentos (id, codigo_sunat, descripcion, comentario, orden, estado, created_at) VALUES
(1, '6', 'RUC', 'Registro Unico de Contribuyentes', 1, 1, NOW()),
(2, '1', 'DNI', 'Documento Nacional de Identidad', 2, 1, NOW()),
(3, '4', 'CARNET EXTRANJERIA', 'Carnet de Extranjeria', 3, 1, NOW()),
(4, '7', 'PASAPORTE', 'Pasaporte', 4, 1, NOW()),
(5, '0', 'SIN DOCUMENTO', 'Consumidor final u otros', 5, 1, NOW()),
(6, 'A', 'CEDULA DIPLOMATICA', 'Cedula Diplomatica de Identidad', 6, 1, NOW());

INSERT INTO catalogo_tipo_items (id, codigo, descripcion, comentario, estado, created_at) VALUES
(1, 'PRODUCTO', 'Producto', '1 = productos', 1, NOW()),
(2, 'SERVICIO', 'Servicio', '2 = servicios', 1, NOW());

INSERT INTO catalogo_afectaciones_igv
    (id, codigo, descripcion, tipo_afectacion, codigo_tributo, nombre_tributo, abreviatura, porcentaje, afecta_igv, estado, created_at)
VALUES
    (1, '10', 'OP. GRAVADAS', 'S', '1000', 'IGV', 'VAT', 18.00, 1, 1, NOW()),
    (2, '20', 'OP. EXONERADAS', 'E', '9997', 'EXO', 'VAT', 0.00, 0, 1, NOW()),
    (3, '30', 'OP. INAFECTAS', 'O', '9998', 'INA', 'FRE', 0.00, 0, 1, NOW());

INSERT INTO catalogo_detracciones (id, codigo, descripcion, porcentaje, limite_minimo, comentario, estado, created_at) VALUES
(1, '01', 'Intermediacion laboral y tercerizacion', 12.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(2, '02', 'Arrendamiento de bienes', 10.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(3, '03', 'Mantenimiento y reparacion de bienes muebles', 12.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(4, '04', 'Movimiento de carga', 10.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(5, '05', 'Otros servicios empresariales', 12.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(6, '06', 'Comision mercantil', 10.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(7, '07', 'Fabricacion de bienes por encargo', 10.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(8, '08', 'Servicio de transporte de personas', 10.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(9, '09', 'Contratos de construccion', 4.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(10, '10', 'Demas servicios gravados con IGV', 12.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW()),
(11, '11', 'Servicio de beneficio de minerales metalicos gravado con IGV', 12.00, 700.00, 'Servicio sujeto a detraccion segun anexo 3 SUNAT', 1, NOW());

INSERT INTO catalogo_formas_pago (id, codigo, descripcion, comentario, estado, created_at) VALUES
(1, 'CONTADO', 'Contado', 'Pago al momento de la operacion', 1, NOW()),
(2, 'CREDITO', 'Credito', 'Pago diferido o en cuotas', 1, NOW());

INSERT INTO catalogo_medios_pago (id, codigo, descripcion, comentario, es_credito, estado, created_at) VALUES
(1, 'EFECTIVO', 'Efectivo', 'Pago en efectivo', 0, 1, NOW()),
(2, 'CREDITO', 'Credito', 'Pago diferido o en cuotas', 1, 1, NOW()),
(3, 'YAPE', 'Yape', 'Pago por Yape', 0, 1, NOW()),
(4, 'PLIN', 'Plin', 'Pago por Plin', 0, 1, NOW()),
(5, 'TRANSFERENCIA', 'Transferencia', 'Transferencia bancaria', 0, 1, NOW()),
(6, 'CHEQUE', 'Cheque', 'Pago con cheque', 0, 1, NOW()),
(7, 'TARJETA', 'Tarjeta', 'Pago con tarjeta de debito o credito', 0, 1, NOW()),
(8, 'DEPOSITO', 'Deposito', 'Deposito bancario', 0, 1, NOW()),
(9, 'OTRO', 'Otro', 'Otro medio de pago', 0, 1, NOW());

INSERT INTO catalogo_tipo_movimiento (id, codigo, descripcion, estado, created_at) VALUES
(1, 'PAGO', 'Pago', 1, NOW()),
(2, 'CUOTA', 'Cuota', 1, NOW());

INSERT INTO unidades_medida (id, codigo, descripcion, simbolo, estado, created_at) VALUES
(1, 'NIU', 'Unidad', 'NIU', 1, NOW()),
(2, 'ZZ', 'Servicio', 'ZZ', 1, NOW()),
(3, 'KGM', 'Kilogramo', 'KGM', 1, NOW()),
(4, 'LTR', 'Litro', 'LTR', 1, NOW());

INSERT INTO tipo_operacion (id, codigo, descripcion, estado, created_at) VALUES
(1, 'VENTA', 'Venta', 1, NOW()),
(2, 'COMPRA', 'Compra', 1, NOW()),
(3, 'COTIZACION', 'Cotizacion', 1, NOW());

INSERT INTO facturacion_comprobante_eventos
    (id, codigo, descripcion, comentario, estado, created_at)
VALUES
    (1, 'GENERADO', 'Generado', 'Se genero el XML del comprobante', 1, NOW()),
    (2, 'FIRMADO', 'Firmado', 'Se firmo el XML del comprobante', 1, NOW()),
    (3, 'ZIPIADO', 'Zipiado', 'Se comprimio el XML firmado en ZIP', 1, NOW()),
    (4, 'ENVIADO', 'Enviado', 'Se envio el ZIP a SUNAT u otro endpoint', 1, NOW()),
    (5, 'ACEPTADO', 'Aceptado', 'SUNAT acepto el comprobante', 1, NOW()),
    (6, 'RECHAZADO', 'Rechazado', 'SUNAT rechazo el comprobante', 1, NOW()),
    (7, 'ERROR', 'Error', 'Ocurrio un error durante el proceso', 1, NOW()),
    (8, 'VENCIDO', 'Vencido', 'El comprobante supero la fecha maxima de envio automatico', 1, NOW());

INSERT INTO facturacion_motivos_nota
    (id, tipo, codigo, descripcion, estado, created_at)
VALUES
    (1, 'C', '01', 'Anulacion de la operacion', 1, NOW()),
    (2, 'C', '03', 'Descuento global', 1, NOW()),
    (3, 'C', '04', 'Descuento por item', 1, NOW()),
    (4, 'C', '05', 'Devolucion total', 1, NOW()),
    (5, 'C', '06', 'Devolucion por item', 1, NOW()),
    (6, 'C', '07', 'Bonificacion', 1, NOW()),
    (7, 'C', '08', 'Ajustes por diferencia de precio', 1, NOW()),
    (8, 'C', '09', 'Otros conceptos', 1, NOW()),
    (9, 'D', '01', 'Intereses por mora', 1, NOW()),
    (10, 'D', '02', 'Aumento en el valor', 1, NOW()),
    (11, 'D', '03', 'Penalidades', 1, NOW()),
    (12, 'D', '04', 'Ajustes por diferencia de precio', 1, NOW()),
    (13, 'D', '05', 'Otros conceptos', 1, NOW());

INSERT INTO facturacion_guia_catalogos
    (id, categoria, codigo, descripcion, estado, created_at)
VALUES
    (1, 'MODALIDAD_TRANSPORTE', '01', 'Publico', 1, NOW()),
    (2, 'MODALIDAD_TRANSPORTE', '02', 'Privado', 1, NOW()),
    (3, 'MOTIVO_TRASLADO', '01', 'Venta', 1, NOW()),
    (4, 'MOTIVO_TRASLADO', '02', 'Compra', 1, NOW()),
    (5, 'MOTIVO_TRASLADO', '03', 'Venta con entrega a terceros', 1, NOW()),
    (6, 'MOTIVO_TRASLADO', '04', 'Traslado entre establecimientos de la misma empresa', 1, NOW()),
    (7, 'MOTIVO_TRASLADO', '05', 'Consignacion', 1, NOW()),
    (8, 'MOTIVO_TRASLADO', '06', 'Devolucion', 1, NOW()),
    (9, 'MOTIVO_TRASLADO', '07', 'Traslado entre establecimientos de la misma empresa (bienes transformados)', 1, NOW()),
    (10, 'MOTIVO_TRASLADO', '08', 'Importacion', 1, NOW()),
    (11, 'MOTIVO_TRASLADO', '09', 'Exportacion', 1, NOW()),
    (12, 'MOTIVO_TRASLADO', '13', 'Otros', 1, NOW());

INSERT INTO facturacion_integracion_endpoints
    (id, codigo, descripcion, tipo, proveedor, ambiente, metodo, url, estado, created_at)
VALUES
    (1, 'SUNAT_FACTURA', 'Envio de comprobantes a SUNAT', 'EMISION', 'SUNAT', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (2, 'SUNAT_CONSULTA', 'Consulta de CDR / estado', 'CONSULTA', 'SUNAT', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (3, 'SUNAT_GUIA', 'Envio de guia de remision', 'GUIA', 'SUNAT', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (4, 'SUNAT_SUMARIO_BOLETA', 'Resumen diario de boletas', 'RESUMEN_BOLETAS', 'SUNAT', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (5, 'SUNAT_BAJA', 'Comunicacion de baja', 'RESUMEN_BAJA', 'SUNAT', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (6, 'OSE_FACTURA', 'Envio de comprobantes a OSE', 'EMISION', 'OSE', 'PRODUCCION', 'POST', NULL, 1, NOW()),
    (7, 'CUSTOM_FACTURA', 'Endpoint personalizado de emision', 'EMISION', 'CUSTOM', 'PRODUCCION', 'POST', NULL, 1, NOW());

INSERT INTO facturacion_tipo_comprobante (id, codigo, descripcion, afecta_igv, estado, created_at) VALUES
(1, '01', 'Factura', 1, 1, NOW()),
(2, '03', 'Boleta', 1, 1, NOW()),
(3, '07', 'Nota de credito', 1, 1, NOW()),
(4, '08', 'Nota de debito', 1, 1, NOW()),
(5, '09', 'Guia de remision', 0, 1, NOW());

-- Usuario y empresa base
INSERT INTO usuarios (id, nombre, usuario, email, password_hash, es_super_admin, estado, created_at) VALUES
(1, 'Administrador Principal', 'admin', 'admin@abisfact.local', '$2y$10$MXidrwnEzL5YyZTaeLAvwOJ1UYGCVU1pnAuoRZktAv2zONNGLDohC', 1, 1, NOW());

INSERT INTO empresas (id, ruc, razon_social, nombre_comercial, logo, tipo_empresa_id, giro_negocio_id, estado, created_at) VALUES
(1, '00000000000', 'EMPRESA BASE', 'EMPRESA BASE', NULL, 1, 1, 1, NOW());

INSERT INTO roles (id, empresa_id, nombre, descripcion, estado, created_at) VALUES
(1, 1, 'Administrador', 'Acceso total para la empresa base', 1, NOW());

INSERT INTO empresa_usuarios (id, empresa_id, usuario_id, rol_id, estado, created_at) VALUES
(1, 1, 1, 1, 'ACTIVO', NOW());

INSERT INTO empresa_sucursales (id, empresa_id, codigo, nombre, direccion, telefono, logo, es_principal, estado, created_at) VALUES
(1, 1, 'SUC-01', 'Sucursal principal', NULL, NULL, NULL, 1, 1, NOW());

INSERT INTO sucursal_pos (id, sucursal_id, codigo, nombre, descripcion, impresion_formato, es_principal, estado, created_at) VALUES
(1, 1, 'POS-01', 'Caja principal', 'POS principal de la empresa', 'TICKET', 1, 1, NOW());

INSERT INTO empresa_modulos (empresa_id, modulo_id, habilitado, created_at)
SELECT 1, m.id, 1, NOW()
FROM modulos m
WHERE m.codigo IN (
    'usuarios',
    'empresas',
    'facturacion',
    'auditoria',
    'catalogos_sunat',
    'terceros',
    'productos',
    'inventario',
    'caja',
    'compras',
    'ventas',
    'cotizaciones'
);

INSERT INTO facturacion_series
    (id, empresa_id, tipo_comprobante_id, serie, es_electronico, en_modulo, correlativo_actual, estado, created_at)
VALUES
    (1, 1, 1, 'F001', 1, 1, 0, 1, NOW()),
    (2, 1, 2, 'B001', 1, 1, 0, 1, NOW()),
    (3, 1, 3, 'FC01', 1, 1, 0, 1, NOW()),
    (4, 1, 4, 'FD01', 1, 1, 0, 1, NOW()),
    (5, 1, 5, 'T001', 1, 2, 0, 1, NOW());

INSERT INTO usuario_sucursales (id, usuario_id, sucursal_id, estado, created_at) VALUES
(1, 1, 1, 1, NOW());

INSERT INTO usuario_pos (id, usuario_id, pos_id, estado, created_at) VALUES
(1, 1, 1, 1, NOW());

