-- 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);