-- parametros
CREATE TABLE parametros (
id SERIAL PRIMARY KEY,
clave VARCHAR(255) UNIQUE NOT NULL,
valor TEXT NOT NULL,
descripcion TEXT,
fecha_creacion TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
usuario_ultima_mod VARCHAR(100)
);
-- Trigger para actualizar fecha_actualizacion automáticamente
CREATE OR REPLACE FUNCTION actualizar_fecha_actualizacion()
RETURNS TRIGGER AS $$
BEGIN
NEW.fecha_actualizacion = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_actualizacion_config
BEFORE UPDATE ON parametros
FOR EACH ROW
EXECUTE PROCEDURE actualizar_fecha_actualizacion();
-- para auditar
-- CREATE TABLE parametros_historial (
-- id SERIAL PRIMARY KEY,
-- parametro_id INT REFERENCES config_parametros(id),
-- valor_anterior TEXT,
-- valor_nuevo TEXT,
-- usuario_modifico VARCHAR(100),
-- fecha_cambio TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
-- );
DROP TABLE IF EXISTS registroEmpresa CASCADE;
DROP TABLE IF EXISTS cuis CASCADE;
DROP TABLE IF EXISTS cufd CASCADE;
--Tabla registroEmpresa
--Esta tabla almacena la información básica de cada sucursal:
CREATE TABLE registroEmpresa (
id SERIAL PRIMARY KEY,
codigo_ambiente INTEGER NOT NULL,
codigo_modalidad INTEGER NOT NULL,
codigo_punto_venta INTEGER NOT NULL,
codigo_sistema VARCHAR(100) NOT NULL,
codigo_sucursal INTEGER NOT NULL,
nit VARCHAR(150) NOT NULL,
token_key varchar(50),
token_value TEXT,
nombre_archivo_certificado varchar(100),
nombre_archivo_clave_privada varchar(100),
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Añadir un índice único para la combinación de nit, codigo_sucursal y codigo_punto_venta
CREATE UNIQUE INDEX idx_unique_registro_empresa ON registroEmpresa(nit, codigo_sucursal, codigo_punto_venta);
--Tabla cuis
CREATE TABLE cuis (
id SERIAL PRIMARY KEY,
cuis VARCHAR(50) NOT NULL,
codigo TEXT,
fecha_vigencia TIMESTAMP,
transaccion BOOLEAN,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
registro_empresa_id INTEGER NOT NULL,
CONSTRAINT fk_cuis_registroempresa FOREIGN KEY (registro_empresa_id) REFERENCES registroEmpresa(id) ON UPDATE CASCADE ON DELETE CASCADE
);
-- CUFD
CREATE TABLE cufd (
id SERIAL PRIMARY KEY,
codigo TEXT,
codigo_control TEXT,
direccion TEXT,
fecha_vigencia TIMESTAMP,
transaccion BOOLEAN,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- -- todavia no se creo para cargar la factura
-- CREATE TABLE configuracionFactura (
-- id SERIAL PRIMARY KEY,
-- registro_empresa_id INTEGER NOT NULL,
-- logo BYTEA, -- Para guardar la imagen del logo en formato binario (también puede ser una URL si prefieres)
-- nombre_comercial VARCHAR(255),
-- leyenda_pie_pagina TEXT,
-- telefono_contacto VARCHAR(50),
-- direccion_contacto TEXT,
-- correo_contacto VARCHAR(100),
-- sitio_web VARCHAR(100),
-- fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- -- FOREIGN KEY (registro_empresa_id) REFERENCES registroEmpresa(id) ON UPDATE CASCADE
-- FOREIGN KEY (registro_empresa_id) REFERENCES registroEmpresa(id) ON UPDATE CASCADE ON DELETE CASCADE
-- );
-- Leyendas Factura
DROP TABLE IF EXISTS sincronizar_tipo_punto_venta CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_documento_identidad CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_motivo_anulacion CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_documento_sector CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_metodo_pago CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_moneda CASCADE;
DROP TABLE IF EXISTS sincronizar_leyendas_factura CASCADE;
DROP TABLE IF EXISTS sincronizar_productos_servicios CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_unidad_medida CASCADE;
DROP TABLE IF EXISTS sincronizar_actividades CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_emision CASCADE;
DROP TABLE IF EXISTS sincronizar_tipo_factura CASCADE;
-- sincronizar_tipo_punto_venta
CREATE TABLE sincronizar_tipo_punto_venta (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_actividades
CREATE TABLE sincronizar_mensaje_servicio (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_actividades
CREATE TABLE sincronizar_evento_significativo (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_documento_identidad
CREATE TABLE sincronizar_tipo_documento_identidad (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_motivo_anulacion
CREATE TABLE sincronizar_tipo_motivo_anulacion (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_metodo_pago
CREATE TABLE sincronizar_tipo_metodo_pago (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_moneda
CREATE TABLE sincronizar_tipo_moneda (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_leyendas_factura
CREATE TABLE sincronizar_leyendas_factura (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_documento_sector
CREATE TABLE sincronizar_tipo_documento_sector (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_documento_sector
CREATE TABLE sincronizar_tipo_actividades_documento_sector (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_productos_servicios
CREATE TABLE sincronizar_productos_servicios (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_unidad_medida
CREATE TABLE sincronizar_tipo_unidad_medida (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_fecha_hora
CREATE TABLE sincronizar_fecha_hora (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_actividades
CREATE TABLE sincronizar_actividades (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_emision
CREATE TABLE sincronizar_tipo_emision (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_tipo_factura
CREATE TABLE sincronizar_tipo_factura (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_Pais_Origen
CREATE TABLE sincronizar_Pais_Origen (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
-- sincronizar_Tipo_Habitacion
CREATE TABLE sincronizar_Tipo_Habitacion (
id SERIAL PRIMARY KEY,
codigo VARCHAR(50) NOT NULL,
reqSoap TEXT,
respSoap TEXT,
reqJson TEXT,
respJson TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
cuis_id INTEGER,
FOREIGN KEY (cuis_id) REFERENCES cuis(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(codigo, cuis_id)
);
INSERT INTO public.registroempresa (id, codigo_ambiente, codigo_modalidad, codigo_punto_venta, codigo_sistema, codigo_sucursal, nit, fecha_creacion, fecha_actualizacion) VALUES(2, 1, 1, 0, 'SIS123', 101, '123456789', '2025-04-15 11:37:49.431', '2025-04-15 11:37:49.431');
INSERT INTO public.registroempresa (id, codigo_ambiente, codigo_modalidad, codigo_punto_venta, codigo_sistema, codigo_sucursal, nit, fecha_creacion, fecha_actualizacion) VALUES(3, 1, 1, 1, 'SIS456', 102, '987654321', '2025-04-15 11:37:49.431', '2025-04-15 11:37:49.431');
INSERT INTO public.registroempresa (id, codigo_ambiente, codigo_modalidad, codigo_punto_venta, codigo_sistema, codigo_sucursal, nit, fecha_creacion, fecha_actualizacion) VALUES(4, 1, 2, 2, 'SIS789', 103, '192837465', '2025-04-15 11:37:49.431', '2025-04-15 11:37:49.431');
INSERT INTO public.registroempresa (id, codigo_ambiente, codigo_modalidad, codigo_punto_venta, codigo_sistema, codigo_sucursal, nit, fecha_creacion, fecha_actualizacion) VALUES(1, 2, 0, 0, '8168CCFCFBBA8FFA53DDD9F', 0, '382624027', '2025-04-14 10:03:32.758', '2025-04-14 10:03:32.758');
INSERT INTO public.cuis (id, cuis, codigo, fecha_vigencia, transaccion, fecha_creacion, fecha_actualizacion, registro_empresa_id) VALUES(2, 'CUIS001', '001', '2025-04-30 00:00:00.000', true, '2025-04-15 11:37:57.516', '2025-04-15 11:37:57.516', 1);
INSERT INTO public.cuis (id, cuis, codigo, fecha_vigencia, transaccion, fecha_creacion, fecha_actualizacion, registro_empresa_id) VALUES(3, 'CUIS002', '002', '2025-05-01 00:00:00.000', false, '2025-04-15 11:37:57.516', '2025-04-15 11:37:57.516', 2);
INSERT INTO public.cuis (id, cuis, codigo, fecha_vigencia, transaccion, fecha_creacion, fecha_actualizacion, registro_empresa_id) VALUES(4, 'CUIS003', '003', '2025-05-02 00:00:00.000', true, '2025-04-15 11:37:57.516', '2025-04-15 11:37:57.516', 3);
INSERT INTO public.cuis (id, cuis, codigo, fecha_vigencia, transaccion, fecha_creacion, fecha_actualizacion, registro_empresa_id) VALUES(1, 'E4B4A21', 'COD001', '2025-12-31 23:59:59.000', true, '2025-04-14 10:42:45.353', '2025-04-14 10:42:45.353', 1);
-- También suponiendo que el registro_empresa_id = 1
INSERT INTO configuracionFactura ( registro_empresa_id, logo, nombre_comercial, leyenda_pie_pagina, telefono_contacto, direccion_contacto, correo_contacto, sitio_web)
VALUES (1, NULL, 'Mi Empresa SRL', 'Gracias por su preferencia.', '+591 71234567', 'Av. Siempre Viva 123, La Paz', 'contacto@miempresa.com', 'https://www.miempresa.com');
INSERT INTO registroEmpresa (codigo_ambiente,codigo_modalidad,codigo_punto_venta,codigo_sistema,codigo_sucursal,nit)
VALUES (2,1,0,'8168CCFCFBBA8FFA53DDD9F',1,'382624027');
-- Suponiendo que el registro_empresa_id = 1
INSERT INTO cuis (cuis, codigo, fecha_vigencia, transaccion, registro_empresa_id)
VALUES ('CUIS987654321','COD001','2025-12-31 23:59:59',TRUE,1);
-- INSERT INTO cuis (codigo_sistema, cuis, codigo, transaccion)
-- VALUES ('8168CCFCFBBA8FFA53DDD9F', "E4B4A21", 'E4B4A21', true) RETURNING id;
-- Insertar moneda asociada al CUIS id=1
INSERT INTO cufd (codigo, codigo_control, direccion, fecha_vigencia, transaccion, cuis_id)
VALUES ('BQcKhQ1lhbUFBODEZGQTUzREREOUY=QlU7NXFMTEVaVUFE2OENDRkNGQkJBO', '0ACF8A6504A1F74', 'CALLE AGUSTIN SAAVEDRA NRO. 464 EDIF.: TORRE IMAGINE PISO: 1 DEPTO.: OF3 ZONA/BARRIO: CASCO VIEJO MZA:216', '2025-04-30 23:59:59', true, 1);
UPDATE cufd
SET codigo = 'NEWCODE123456', codigo_control = 'NEWCTRL654321', direccion = 'Calle Nueva 123', fecha_vigencia = '2025-05-15 23:59:59', transaccion = false, fecha_actualizacion = CURRENT_TIMESTAMP
WHERE id = 1;
INSERT INTO tipo_documento_identidad (codigo, reqSoap, respSoap, reqJson, respJson, cuis_id)
VALUES ('CI', '...', '...', '{"request": "data"}', '{"response": "data"}', 1);