Closed edwargl7 closed 1 week ago
Te puedes guiar de lo avanzado en el la Issue #173 que cuenta con el script y la base de la tabla de especificaciones técnicas.
Se realizo proceso de la base de datos teniendo en cuenta la estructura de la issue #173 de la cual, y se incorporo las siguientes tablas faltantes segun el modelo:
DO $$
BEGIN
-- Tabla documento_contrato
IF NOT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'documento_contrato') THEN
CREATE TABLE documento_contrato (
id SERIAL PRIMARY KEY, -- Identificador único del documento de contrato
tipo_documento_id INTEGER NOT NULL, -- Tipo de documento (valor numérico sin relación)
documento_id INTEGER NOT NULL, -- Identificador del documento
activo BOOLEAN NOT NULL, -- Indica si el registro está activo
fecha_creacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Fecha de creación del registro
fecha_modificacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- Fecha de última modificación
);
COMMENT ON TABLE documento_contrato IS 'Tabla que almacena los documentos asociados a contratos';
COMMENT ON COLUMN documento_contrato.id IS 'Identificador único del documento de contrato';
COMMENT ON COLUMN documento_contrato.tipo_documento_id IS 'Tipo de documento (valor numérico sin relación)';
COMMENT ON COLUMN documento_contrato.documento_id IS 'Identificador del documento';
COMMENT ON COLUMN documento_contrato.activo IS 'Indica si el registro está activo';
COMMENT ON COLUMN documento_contrato.fecha_creacion IS 'Fecha de creación del registro';
COMMENT ON COLUMN documento_contrato.fecha_modificacion IS 'Fecha de última modificación';
END IF;
-- Tabla estado_contrato
IF NOT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'estado_contrato') THEN
CREATE TABLE estado_contrato (
id SERIAL PRIMARY KEY, -- Identificador único del estado del contrato
usuario_id INTEGER NOT NULL, -- Identificador del usuario
motivo VARCHAR(250), -- Motivo del estado
fecha_ejecucion_estado TIMESTAMP, -- Fecha de ejecución del estado
contrato_general_id INTEGER NOT NULL, -- Referencia al contrato general
estado_id INTEGER NOT NULL, -- Estado del contrato
activo BOOLEAN NOT NULL, -- Indica si el registro está activo
fecha_creacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Fecha de creación del registro
fecha_modificacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- Fecha de última modificación
);
COMMENT ON TABLE estado_contrato IS 'Tabla que almacena los estados asociados a contratos';
COMMENT ON COLUMN estado_contrato.id IS 'Identificador único del estado del contrato';
COMMENT ON COLUMN estado_contrato.usuario_id IS 'Identificador del usuario';
COMMENT ON COLUMN estado_contrato.motivo IS 'Motivo del estado';
COMMENT ON COLUMN estado_contrato.fecha_ejecucion_estado IS 'Fecha de ejecución del estado';
COMMENT ON COLUMN estado_contrato.contrato_general_id IS 'Referencia al contrato general';
COMMENT ON COLUMN estado_contrato.estado_id IS 'Estado del contrato';
COMMENT ON COLUMN estado_contrato.activo IS 'Indica si el registro está activo';
COMMENT ON COLUMN estado_contrato.fecha_creacion IS 'Fecha de creación del registro';
COMMENT ON COLUMN estado_contrato.fecha_modificacion IS 'Fecha de última modificación';
END IF;
-- Tabla solicitante
IF NOT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'solicitante') THEN
CREATE TABLE solicitante (
id SERIAL PRIMARY KEY, -- Identificador único del solicitante
dependencia_solicitante_id INTEGER NOT NULL, -- Dependencia del solicitante
sede_solicitente_id INTEGER NOT NULL, -- Sede del solicitante
contrato_general_id INTEGER NOT NULL, -- Referencia al contrato general
activo BOOLEAN NOT NULL, -- Indica si el registro está activo
fecha_creacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Fecha de creación del registro
fecha_modificacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- Fecha de última modificación
);
COMMENT ON TABLE solicitante IS 'Tabla que almacena la información de los solicitantes';
COMMENT ON COLUMN solicitante.id IS 'Identificador único del solicitante';
COMMENT ON COLUMN solicitante.dependencia_solicitante_id IS 'Dependencia del solicitante';
COMMENT ON COLUMN solicitante.sede_solicitente_id IS 'Sede del solicitante';
COMMENT ON COLUMN solicitante.contrato_general_id IS 'Referencia al contrato general';
COMMENT ON COLUMN solicitante.activo IS 'Indica si el registro está activo';
COMMENT ON COLUMN solicitante.fecha_creacion IS 'Fecha de creación del registro';
COMMENT ON COLUMN solicitante.fecha_modificacion IS 'Fecha de última modificación';
END IF;
END $$;
-- Añadir claves foráneas (excluyendo tipo_documento_id)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_estado_contrato_general'
) THEN
ALTER TABLE estado_contrato
ADD CONSTRAINT fk_estado_contrato_general
FOREIGN KEY (contrato_general_id)
REFERENCES contrato_general(id);
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_solicitante_contrato_general'
) THEN
ALTER TABLE solicitante
ADD CONSTRAINT fk_solicitante_contrato_general
FOREIGN KEY (contrato_general_id)
REFERENCES contrato_general(id);
END IF;
END $$;
Se corrigio la tabla de "especificaciones técnicas" para que cumpla con el modeo planteado inicialemnte y se ajusto su nombre a singular
-- Eliminar la tabla original
DROP TABLE especificaciones_tecnicas;
CREATE TABLE especificacion_tecnica (
id SERIAL PRIMARY KEY, -- Identificador único
item INTEGER NOT NULL, -- Nuevo atributo en segundo lugar
especificacion VARCHAR NOT NULL, -- Nuevo atributo debajo de item
descripcion VARCHAR NOT NULL, -- Descripción
cantidad INTEGER NOT NULL, -- Cantidad
valor_unitario NUMERIC NOT NULL, -- Valor unitario
valor_total NUMERIC NOT NULL, -- Valor total
contrato_general_id INTEGER NOT NULL, -- ID de contrato general
activo BOOLEAN NOT NULL, -- Activo
fecha_creacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Fecha de creación
fecha_modificacion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- Fecha de última modificación
);
-- Agregar comentarios a la tabla
COMMENT ON TABLE especificacion_tecnica IS 'Tabla que almacena las especificaciones técnicas de los contratos';
-- Agregar comentarios a las columnas
COMMENT ON COLUMN especificacion_tecnica.id IS 'Identificador único de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.item IS 'Número de item de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.especificacion IS 'Especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.descripcion IS 'Descripción detallada de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.cantidad IS 'Cantidad de unidades de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.valor_unitario IS 'Valor unitario de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.valor_total IS 'Valor total calculado de la especificación técnica';
COMMENT ON COLUMN especificacion_tecnica.contrato_general_id IS 'Referencia al contrato general asociado';
COMMENT ON COLUMN especificacion_tecnica.activo IS 'Indica si el registro está activo';
COMMENT ON COLUMN especificacion_tecnica.fecha_creacion IS 'Fecha de creación del registro';
COMMENT ON COLUMN especificacion_tecnica.fecha_modificacion IS 'Fecha de última modificación del registro';
-- Agregar la clave foránea para contrato_general_id
ALTER TABLE especificacion_tecnica
ADD CONSTRAINT fk_especificacion_tecnica_contrato_general
FOREIGN KEY (contrato_general_id)
REFERENCES contrato_general(id);
Ademas se realizo el ajuste incial de la #185 sobre el campo usuario_legado
Revisando con @cjgonzalezp el item no sería almacenado, y se manejaría como el indice según el orden de los registros asociados al contrato
-- ajustes de as tablas para inserción de datos
ALTER TABLE contrato_general
ALTER COLUMN modo_pago TYPE varchar(255),
ALTER COLUMN objeto_contrato TYPE varchar(255),
ALTER COLUMN actividades TYPE varchar(255),
ALTER COLUMN condiciones TYPE varchar(255),
ALTER COLUMN justificacion TYPE varchar(255),
ALTER COLUMN observaciones TYPE varchar(255),
ALTER COLUMN concepto_elaboracion TYPE varchar(255),
ALTER TABLE contrato_general ALTER COLUMN vigencia TYPE varchar(10),
ALTER TABLE contrato_general ALTER COLUMN usuario_legado TYPE varchar(120);
INSERT INTO contrato_general (
tipo_contratacion_id, tipo_contrato_id, fecha_suscripcion_estudios,
aplica_poliza, ordenador_id, modalidad_id, tipologia_especifica_id,
regimen_contratacion_id, procedimiento_id, plazo_ejecucion,
fecha_proyeccion_id, numero_constancia, clase_constancia_id,
valor_acumulados, tipo_smlmv_id, valor_pesos, origen_recursos_id,
origen_presupuesto_id, forma_pago_inversion_id, valor_contrato_me,
valor_tasa_cambio, modelo_pago_id, clausula_registro_presupuestal,
modo_pago, objeto_contrato, actividades, condiciones, justificacion,
observaciones, vigencia, concepto_elaboracion, fecha_inicial,
fecha_final, usuario_legado, activo, fecha_creacion
)
VALUES
(1, 1, '2024-01-10', true, 1, 1, 1,
1, 1, 12, 1, 1001, 1, 5000000.00, 1, 500000.00, 1,
1, 1, 20000.00, 1.0, 1, true,
'Transferencia', 'Estudio de viabilidad', 'Realizar estudios previos', 'Condiciones generales', 'Justificación del contrato',
'Observaciones varias', '2024', 'Concepto de elaboración', '2024-01-15',
'2024-12-31', 'Legado1', true, '2024-01-10'
),
(2, 2, '2024-02-01', true, 2, 2, 2,
2, 2, 24, 2, 1002, 2, 7500000.00, 2, 750000.00, 2,
2, 2, 35000.00, 1.2, 2, true,
'Pago único', 'Consultoría de sistemas', 'Análisis de requerimientos', 'Condiciones específicas', 'Justificación para sistemas',
'Observaciones de sistemas', '2024', 'Concepto consultoría', '2024-02-01',
'2024-08-31', 'Legado2', true, '2024-02-01'
),
(3, 3, '2024-03-05', false, 3, 3, 3,
3, 3, 36, 3, 1003, 3, 12500000.00, 3, 1250000.00, 3,
3, 3, 42000.00, 1.1, 3, false,
'Transferencia', 'Mantenimiento de infraestructura', 'Revisión de instalaciones', 'Condiciones de mantenimiento', 'Justificación mantenimiento',
'Observaciones adicionales', '2024', 'Concepto mantenimiento', '2024-03-01',
'2024-12-31', 'Legado3', true, '2024-03-01'
),
(4, 4, '2024-04-10', true, 4, 4, 4,
4, 4, 48, 4, 1004, 4, 9500000.00, 4, 950000.00, 4,
4, 4, 38000.00, 1.3, 4, true,
'Anticipo', 'Construcción de oficinas', 'Construcción de instalaciones', 'Condiciones de construcción', 'Justificación de construcción',
'Observaciones de construcción', '2024', 'Concepto construcción', '2024-04-10',
'2024-10-10', 'Legado4', true, '2024-04-10'
),
(5, 5, '2024-05-20', false, 5, 5, 5,
5, 5, 60, 5, 1005, 5, 11000000.00, 5, 1100000.00, 5,
5, 5, 50000.00, 1.4, 5, true,
'Pago contra entrega', 'Adquisición de equipos', 'Compra de maquinaria', 'Condiciones de compra', 'Justificación de adquisición',
'Observaciones sobre adquisición', '2024', 'Concepto adquisición', '2024-05-01',
'2024-12-15', 'Legado5', true, '2024-05-01'
);
-- Insertar datos en la tabla cdp con IDs de contrato_general existentes
INSERT INTO cdp (numero_cdp_id, fecha_registro, vigencia_cdp, contrato_general_id, activo, fecha_creacion)
VALUES
(1000001, '2024-01-02', 1, 2, true, '2024-01-02'),
(1000002, '2024-02-02', 2, 3, true, '2024-02-02'),
(1000003, '2024-03-02', 3, 4, true, '2024-03-02'),
(1000004, '2024-04-02', 4, 5, true, '2024-04-02'),
(1000005, '2024-05-02', 5, 6, true, '2024-05-02');
-- Insertar datos en documento_contrato (especificando documento_id manualmente)
INSERT INTO documento_contrato (documento_id, tipo_documento_id, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 1, 2, true, '2024-01-03'),
(2, 2, 3, true, '2024-02-03'),
(3, 3, 4, true, '2024-03-03'),
(4, 4, 5, true, '2024-04-03'),
(5, 5, 6, true, '2024-05-03');
INSERT INTO especificacion_tecnica (item, especificacion, descripcion, cantidad, valor_unitario, valor_total, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 'Especificación A', 'Especificación 1', 10, 100, 1000, 2, true, '2024-01-04'),
(2, 'Especificación B', 'Especificación 2', 20, 200, 4000, 3, true, '2024-02-04'),
(3, 'Especificación C', 'Especificación 3', 15, 150, 2250, 4, true, '2024-03-04'),
(4, 'Especificación D', 'Especificación 4', 30, 300, 9000, 5, true, '2024-04-04'),
(5, 'Especificación E', 'Especificación 5', 25, 250, 6250, 6, true, '2024-05-04');
-- Insertar datos en supervisor_contrato
INSERT INTO supervisor_contrato (supervisor_id, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 2, true, '2024-01-06'),
(2, 3, true, '2024-02-06'),
(3, 4, true, '2024-03-06'),
(4, 5, true, '2024-04-06'),
(5, 6, true, '2024-05-06');
-- Insertar datos en lugar_ejecucion con IDs válidos de contrato_general
INSERT INTO lugar_ejecucion (municipio_id, pais_id, dependencia_id, ciudad_id, sede_id, direccion, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 1, 1, 1, 1, 'Dirección 1', 2, true, '2024-01-07'),
(2, 1, 1, 1, 2, 'Dirección 2', 3, true, '2024-02-07'),
(3, 2, 1, 2, 3, 'Dirección 3', 4, true, '2024-03-07'),
(4, 3, 2, 3, 4, 'Dirección 4', 5, true, '2024-04-07'),
(5, 4, 3, 4, 5, 'Dirección 5', 6, true, '2024-05-07');
-- Insertar datos en solicitante con todas las columnas disponibles
INSERT INTO solicitante (dependencia_solicitante_id, sede_solicitente_id, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 2, 2, true, '2024-01-08'),
(2, 3, 3, true, '2024-02-08'),
(3, 4, 4, true, '2024-03-08'),
(4, 5, 5, true, '2024-04-08'),
(5, 6, 6, true, '2024-05-08');
-- Insertar datos en convenio
INSERT INTO convenio (monto_convenio_id, tipo_convenio_id, contrato_general_id, activo, fecha_creacion)
VALUES
(100000, 1, 2, true, '2024-01-09'),
(200000, 2, 3, true, '2024-02-09'),
(150000, 3, 4, true, '2024-03-09'),
(300000, 4, 5, true, '2024-04-09'),
(250000, 5, 6, true, '2024-05-09');
-- Insertar datos en registro_presupuestal con los valores de cdp_id de la tabla cdp
INSERT INTO registro_presupuestal (numero_disponibilidad, fecha_registro, vigencia_cdp, cdp_id, activo, fecha_creacion)
VALUES
(1001, '2024-01-10', 2024, 6, true, '2024-01-10'),
(1002, '2024-02-10', 2024, 7, true, '2024-02-10'),
(1003, '2024-03-10', 2024, 8, true, '2024-03-10'),
(1004, '2024-04-10', 2024, 9, true, '2024-04-10'),
(1005, '2024-05-10', 2024, 10, true, '2024-05-10');
-- Insertar datos en la tabla acta_inicio
INSERT INTO acta_inicio (usuario_id, usuario_legado, descripcion, fecha_inicio, fecha_fin, contrato_general_id, activo, fecha_creacion)
VALUES
(1, 'Legado1', 'Descripción del acta de inicio 1', '2024-01-15', '2024-12-31', 2, true, '2024-01-15'),
(2, 'Legado2', 'Descripción del acta de inicio 2', '2024-02-01', '2024-08-31', 3, true, '2024-02-01'),
(3, 'Legado3', 'Descripción del acta de inicio 3', '2024-03-01', '2024-12-31', 4, true, '2024-03-01'),
(4, 'Legado4', 'Descripción del acta de inicio 4', '2024-04-10', '2024-10-10', 5, true, '2024-04-10'),
(5, 'Legado5', 'Descripción del acta de inicio 5', '2024-05-01', '2024-12-15', 6, true, '2024-05-01');
-- Insertar datos en la tabla contrato_arrendamiento
INSERT INTO contrato_arrendamiento (plazo_pago_mensual, plazo_administracion, valor_administracion, plazo_entrega, valor_arrendamiento, contrato_general_id, activo, fecha_creacion)
VALUES
(30, 12, 50000, 90, 1500000, 2, true, '2024-01-12'),
(60, 24, 60000, 120, 2000000, 3, true, '2024-02-12'),
(45, 18, 55000, 100, 1800000, 4, true, '2024-03-12'),
(30, 12, 50000, 90, 1700000, 5, true, '2024-04-12'),
(60, 24, 60000, 120, 1600000, 6, true, '2024-05-12');
-- Insertar datos en la tabla contratista
INSERT INTO contratista (numero_documento, tipo_persona, contrato_general_id, activo, fecha_creacion)
VALUES
(10000001, 'Natural', 2, true, '2024-01-13'),
(10000002, 'Jurídica', 3, true, '2024-02-13'),
(10000003, 'Natural', 4, true, '2024-03-13'),
(10000004, 'Jurídica', 5, true, '2024-04-13'),
(10000005, 'Natural', 6, true, '2024-05-13');
-- Insertar datos en la tabla estado_contrato
INSERT INTO estado_contrato (usuario_id, motivo, fecha_ejecucion_estado, contrato_general_id, estado_id, activo, fecha_creacion)
VALUES
(1, 'Motivo A', '2024-01-14', 2, 1, true, '2024-01-14'),
(2, 'Motivo B', '2024-02-14', 3, 2, true, '2024-02-14'),
(3, 'Motivo C', '2024-03-14', 4, 3, true, '2024-03-14'),
(4, 'Motivo D', '2024-04-14', 5, 4, true, '2024-04-14'),
(5, 'Motivo E', '2024-05-14', 6, 5, true, '2024-05-14');
Buena implementación aprobados cambios. Se observan las siguientes lineas de código que deben tenerse presente para el despliegue.
Se requiere realizar el diseño e implementación del CRUD para la gestión de especificaciones técnicas basado en el mockup propuesto. Repositorio gestion_contractual_crud
Sub Tareas
Criterios de aceptación
Requerimientos
No aplica
Lineamientos Generales Lineamientos que se deben cumplir en cualquier desarrollo.
Lineamientos Microservicios
Lineamientos Modelos de datos
Definition of Ready - DoR
Definition of Done - DoD - Desarrollo