Esquema SQL para Gestión de Nómina

Tabla: Departamentos

CREATE TABLE Departamentos (
    CodDepartamento INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    fecha_creacion DATE NOT NULL
);

-- Insertar datos en Departamentos
INSERT INTO Departamentos (nombre, descripcion, fecha_creacion) VALUES
('Recursos Humanos', 'Departamento encargado de la gestión del personal.', '2024-01-15'),
('Tecnología', 'Departamento encargado de la infraestructura tecnológica.', '2024-01-16'),
('Finanzas', 'Departamento encargado de la gestión financiera.', '2024-01-17'),
('Marketing', 'Departamento encargado de las estrategias de marketing.', '2024-01-18'),
('Ventas', 'Departamento encargado de las ventas y relaciones con clientes.', '2024-01-19'),
('Producción', 'Departamento encargado de la producción de bienes.', '2024-01-20'),
('Logística', 'Departamento encargado de la gestión de la cadena de suministro.', '2024-01-21'),
('Atención al Cliente', 'Departamento encargado del soporte al cliente.', '2024-01-22'),
('Desarrollo de Producto', 'Departamento encargado de la innovación de productos.', '2024-01-23'),
('Legal', 'Departamento encargado de los asuntos legales y cumplimiento.', '2024-01-24');
            

Tabla: Deducciones

CREATE TABLE Deducciones (
    CodDeduccion INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    tipo VARCHAR(50),
    descripcion TEXT
    FOREIGN KEY (CodDeduccionNomina) REFERENCES DeduccionNomina(CodDeduccionNomina)
);
    
);

-- Insertar datos en Deducciones
INSERT INTO Deducciones (nombre, tipo, descripcion) VALUES
('Préstamo Personal', 'Monetario', 'Deducción por préstamo personal solicitado.'),
('Aportación a Fondo de Pensiones', 'Monetario', 'Aportación adicional al fondo de pensiones.'),
('Seguro de Salud', 'Salud', 'Deducción para seguro de salud adicional.'),
('Préstamo para Vivienda', 'Monetario', 'Deducción por préstamo para compra de vivienda.'),
('Multa por Incumplimiento', 'Monetario', 'Deducción por multas relacionadas con el trabajo.'),
('Fondo de Emergencia', 'Monetario', 'Aportación al fondo de emergencia.'),
('Aportación Voluntaria a ONG', 'Monetario', 'Deducción por donación a organizaciones no gubernamentales.');
            

Tabla: Cargos

CREATE TABLE Cargos (
    CodCargo INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    salario_base DECIMAL(10, 2) NOT NULL,
    CodDepartamento INT,
    FOREIGN KEY (CodDepartamento) REFERENCES Departamentos(CodDepartamento)
);

-- Insertar datos en Cargos
INSERT INTO Cargos (nombre, descripcion, salario_base, CodDepartamento) VALUES
('Gerente de Recursos Humanos', 'Responsable de la gestión del personal.', 5000.00, 1),
('Desarrollador Senior', 'Encargado del desarrollo de software y aplicaciones.', 6000.00, 2),
('Contador', 'Encargado de la contabilidad y reportes financieros.', 5500.00, 3),
('Especialista en Marketing Digital', 'Encargado de las campañas de marketing digital.', 5200.00, 4),
('Ejecutivo de Ventas', 'Responsable de la venta de productos y servicios.', 4800.00, 5),
('Supervisor de Producción', 'Responsable de la supervisión de la producción.', 5300.00, 6),
('Coordinador de Logística', 'Encargado de la coordinación logística.', 5100.00, 7),
('Agente de Atención al Cliente', 'Encargado de la atención y soporte a clientes.', 4600.00, 8),
('Ingeniero de Desarrollo de Producto', 'Responsable del desarrollo de nuevos productos.', 5700.00, 9),
('Abogado Corporativo', 'Encargado de los asuntos legales de la empresa.', 6000.00, 10);
            

Tabla: Empleados

CREATE TABLE Empleados (
    CodEmpleado INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    apellido VARCHAR(100),
    fecha_nacimiento DATE,
    fecha_ingreso DATE NOT NULL,
    direccion TEXT,
    telefono VARCHAR(20),
    email VARCHAR(100),
    estado VARCHAR(20)
);

-- Insertar datos en Empleados
INSERT INTO Empleados (nombre, apellido, fecha_nacimiento, fecha_ingreso, direccion, telefono, email, estado) VALUES
('Juan', 'Pérez', '1985-07-12', '2023-02-01', 'Calle Falsa 123', '555-1234', 'juan.perez@example.com', 'Soltero'),
('Ana', 'García', '1990-03-25', '2022-11-01', 'Avenida Siempre Viva 742', '555-5678', 'ana.garcia@example.com', 'Casada'),
('Carlos', 'López', '1988-05-17', '2023-04-01', 'Calle Luna 321', '555-8765', 'carlos.lopez@example.com', 'Soltero'),
('Marta', 'Rodríguez', '1992-08-30', '2022-06-15', 'Avenida del Sol 456', '555-4321', 'marta.rodriguez@example.com', 'Casada'),
('Luis', 'Martínez', '1987-10-22', '2023-01-10', 'Calle Mar 789', '555-6543', 'luis.martinez@example.com', 'Soltero'),
('Laura', 'Fernández', '1991-12-05', '2022-09-01', 'Calle Tierra 654', '555-3456', 'laura.fernandez@example.com', 'Casada'),
('Jorge', 'Gómez', '1983-04-14', '2023-03-20', 'Calle Bosque 987', '555-7890', 'jorge.gomez@example.com', 'Soltero'),
('Claudia', 'Vásquez', '1989-11-11', '2022-10-10', 'Calle Ríos 321', '555-2109', 'claudia.vasquez@example.com', 'Casada'),
('Pedro', 'Castro', '1994-06-20', '2022-12-15', 'Avenida Verano 852', '555-4321', 'pedro.castro@example.com', 'Soltero'),
('Sandra', 'Mendoza', '1986-09-27', '2023-07-01', 'Calle Otoño 753', '555-6789', 'sandra.mendoza@example.com', 'Casada');
            

Tabla: EmpleadoCargo

CREATE TABLE EmpleadoCargo (
    CodEmpleadoCargo INT PRIMARY KEY AUTO_INCREMENT,
    CodEmpleado INT,
    CodCargo INT,
    fecha_asignacion DATE NOT NULL,
    fecha_termino DATE,
    activo BOOLEAN NOT NULL,
    FOREIGN KEY (CodEmpleado) REFERENCES Empleados(CodEmpleado),
    FOREIGN KEY (CodCargo) REFERENCES Cargos(CodCargo)
);

-- Insertar datos en EmpleadoCargo
INSERT INTO EmpleadoCargo (CodEmpleado, CodCargo, fecha_asignacion, fecha_termino, activo) VALUES
(1, 1, '2023-02-01', NULL, TRUE),
(2, 2, '2022-11-01', NULL, TRUE),
(3, 3, '2023-04-01', NULL, TRUE),
(4, 4, '2022-06-15', NULL, TRUE),
(5, 5, '2023-01-10', NULL, TRUE),
(6, 6, '2022-09-01', NULL, TRUE),
(7, 7, '2023-03-20', NULL, TRUE),
(8, 8, '2022-10-10', NULL, TRUE),
(9, 9, '2022-12-15', NULL, TRUE),
(10, 10, '2023-07-01', NULL, TRUE);
            

Tabla: Nómina

CREATE TABLE Nominas (
    CodNomina INT PRIMARY KEY AUTO_INCREMENT,
    fecha DATE NOT NULL,
    periodo_inicio DATE NOT NULL,
    periodo_fin DATE NOT NULL,
    descripcion TEXT
);

-- Insertar datos en Nominas
INSERT INTO Nominas (fecha, periodo_inicio, periodo_fin, descripcion) VALUES
('2024-07-31', '2024-07-01', '2024-07-31', 'Nómina de julio 2024'),
('2024-08-31', '2024-08-01', '2024-08-31', 'Nómina de agosto 2024'),
('2024-09-30', '2024-09-01', '2024-09-30', 'Nómina de septiembre 2024'),
('2024-10-31', '2024-10-01', '2024-10-31', 'Nómina de octubre 2024'),
('2024-11-30', '2024-11-01', '2024-11-30', 'Nómina de noviembre 2024'),
('2024-12-31', '2024-12-01', '2024-12-31', 'Nómina de diciembre 2024'),
('2025-01-31', '2025-01-01', '2025-01-31', 'Nómina de enero 2025'),
('2025-02-28', '2025-02-01', '2025-02-28', 'Nómina de febrero 2025'),
('2025-03-31', '2025-03-01', '2025-03-31', 'Nómina de marzo 2025'),
('2025-04-30', '2025-04-01', '2025-04-30', 'Nómina de abril 2025');
            

Tabla: Beneficios

CREATE TABLE Beneficios (
    CodBeneficio INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    tipo VARCHAR(50),
    descripcion TEXT
);

-- Insertar datos en Beneficios
INSERT INTO Beneficios (nombre, tipo, descripcion) VALUES
('Seguro de Salud', 'Salud', 'Beneficio para el seguro de salud del empleado.'),
('Bonificación Anual', 'Monetario', 'Bonificación anual por desempeño.'),
('Vales de Despensa', 'Monetario', 'Vale para compras en supermercados.'),
('Fondo de Ahorro', 'Monetario', 'Ahorro adicional para empleados.'),
('Seguro de Vida', 'Salud', 'Seguro de vida para empleados.'),
('Programa de Capacitación', 'Educativo', 'Capacitación y desarrollo profesional.'),
('Transporte', 'Beneficio', 'Apoyo para transporte diario.'),
('Horas Extras', 'Monetario', 'Pago adicional por horas extras trabajadas.'),
('Comedor', 'Beneficio', 'Alimentación en el lugar de trabajo.'),
('Aguinaldo', 'Monetario', 'Pago anual adicional por Navidad.');
            

Tabla: DeduccionNomina

CREATE TABLE DeduccionNomina (
    CodDeduccionNomina INT PRIMARY KEY AUTO_INCREMENT,
    CodNomina INT,
    CodEmpleado INT,
    tipo_deduccion VARCHAR(100),
    monto DECIMAL(10, 2) NOT NULL,
    descripcion TEXT,
    FOREIGN KEY (CodNomina) REFERENCES Nominas(CodNomina),
    FOREIGN KEY (CodEmpleado) REFERENCES Empleados(CodEmpleado)
);

-- Insertar datos en DeduccionNomina
INSERT INTO DeduccionNomina (CodNomina, CodEmpleado, tipo_deduccion, monto, descripcion) VALUES
(1, 1, 'Impuesto sobre la renta', 300.00, 'Deducción por impuestos.'),
(1, 2, 'Impuesto sobre la renta', 350.00, 'Deducción por impuestos.'),
(2, 3, 'Impuesto sobre la renta', 320.00, 'Deducción por impuestos.'),
(2, 4, 'Impuesto sobre la renta', 330.00, 'Deducción por impuestos.'),
(3, 5, 'Impuesto sobre la renta', 310.00, 'Deducción por impuestos.'),
(3, 6, 'Impuesto sobre la renta', 340.00, 'Deducción por impuestos.'),
(4, 7, 'Impuesto sobre la renta', 325.00, 'Deducción por impuestos.'),
(4, 8, 'Impuesto sobre la renta', 345.00, 'Deducción por impuestos.'),
(5, 9, 'Impuesto sobre la renta', 315.00, 'Deducción por impuestos.'),
(5, 10, 'Impuesto sobre la renta', 355.00, 'Deducción por impuestos.');
            

Tabla: BeneficioNomina

CREATE TABLE BeneficioNomina (
    CodBeneficioNomina INT PRIMARY KEY AUTO_INCREMENT,
    CodNomina INT,
    CodEmpleado INT,
    CodBeneficio INT,
    monto DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (CodNomina) REFERENCES Nominas(CodNomina),
    FOREIGN KEY (CodEmpleado) REFERENCES Empleados(CodEmpleado),
    FOREIGN KEY (CodBeneficio) REFERENCES Beneficios(CodBeneficio)
);

-- Insertar datos en BeneficioNomina
INSERT INTO BeneficioNomina (CodNomina, CodEmpleado, CodBeneficio, monto) VALUES
(1, 1, 1, 150.00),
(1, 2, 2, 500.00),
(2, 3, 3, 200.00),
(2, 4, 4, 600.00),
(3, 5, 5, 250.00),
(3, 6, 6, 650.00),
(4, 7, 7, 300.00),
(4, 8, 8, 700.00),
(5, 9, 9, 350.00),
(5, 10, 10, 750.00);
            

Tabla: Pagos

CREATE TABLE Pagos (
    CodPago INT PRIMARY KEY AUTO_INCREMENT,
    CodNomina INT,
    monto DECIMAL(10, 2) NOT NULL,
    fecha DATE NOT NULL,
    metodo_pago VARCHAR(50),
    FOREIGN KEY (CodNomina) REFERENCES Nominas(CodNomina)
);

-- Insertar datos en Pagos
INSERT INTO Pagos (CodNomina, monto, fecha, metodo_pago) VALUES
(1, 4700.00, '2024-07-31', 'Transferencia Bancaria'),
(2, 5650.00, '2024-08-31', 'Transferencia Bancaria'),
(3, 6200.00, '2024-09-30', 'Transferencia Bancaria'),
(4, 6350.00, '2024-10-31', 'Transferencia Bancaria'),
(5, 6000.00, '2024-11-30', 'Transferencia Bancaria'),
(6, 6500.00, '2024-12-31', 'Transferencia Bancaria'),
(7, 6700.00, '2025-01-31', 'Transferencia Bancaria'),
(8, 6900.00, '2025-02-28', 'Transferencia Bancaria'),
(9, 7100.00, '2025-03-31', 'Transferencia Bancaria'),
(10, 7300.00, '2025-04-30', 'Transferencia Bancaria');