-- https://www.phpmyadmin.net/
--
-- Servidor: localhost:3306
-- Temps de generació: 15-04-2026 a les 11:08:06
-- Versió del servidor: 8.0.45-0ubuntu0.22.04.1
-- Versió de PHP: 8.1.2-1ubuntu2.23

START TRANSACTION;



--
-- Base de dades: `phextime`
--

-- --------------------------------------------------------

--
-- Estructura de la taula `auditoria`
--

CREATE TABLE `auditoria` (
  `id` int NOT NULL,
  `tipo` enum('auth','modification','integrity','system','sign') NOT NULL,
  `usuario` varchar(60) NOT NULL,
  `timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `mensaje` text NOT NULL,
  `ip` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Bolcament de dades per a la taula `auditoria`
--

INSERT INTO `auditoria` (`id`, `tipo`, `usuario`, `timestamp`, `mensaje`, `ip`) VALUES
(1, 'modification', 'admin', '2025-06-10 14:32:18', 'Corrección fichaje María García — 2025-06-05. Salida: 17:15 → 17:30. Motivo: Olvido de marcaje.', NULL),
(2, 'auth', 'maria.garcia', '2025-06-10 09:02:11', 'Acceso al sistema. IP: 192.168.1.45. Agente: Chrome/macOS.', NULL),
(3, 'auth', 'carlos.lopez', '2025-06-10 09:00:00', 'Acceso remoto. IP: 85.33.12.201. Modalidad: Teletrabajo.', NULL),
(4, 'modification', 'admin', '2025-06-09 16:45:00', 'Corrección entrada Carlos López — 2025-06-08. Entrada: 10:15 → 09:45. Motivo: Error tipográfico.', NULL),
(5, 'integrity', 'system', '2025-06-08 00:00:00', 'Verificación automática nocturna: cadena de hashes íntegra. Sin anomalías.', NULL),
(6, 'auth', 'admin', '2026-04-01 11:20:37', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(7, 'auth', 'admin', '2026-04-01 11:21:03', '✅ Nuevo empleado — Nombre: Aman · Usuario: aman.aman · Dept: Producción · Jornada: 8h/día · Modalidad: Presencial', '::1'),
(8, 'auth', 'admin', '2026-04-01 11:43:45', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(9, 'auth', 'admin', '2026-04-01 11:44:20', '✅ Nuevo empleado — Nombre: aman · Usuario: aman.aman2 · Dept: Producción · Jornada: 8h/día · Modalidad: Presencial', '::1'),
(10, 'auth', 'admin', '2026-04-01 11:51:50', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(11, 'auth', 'inspector', '2026-04-01 11:52:10', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(12, 'auth', 'admin', '2026-04-01 11:53:36', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(13, 'auth', 'admin', '2026-04-01 11:54:01', '✅ Nuevo empleado — Nombre: Aman · Usuario: aman.aman · Dept: Producción · Jornada: 8h/día · Modalidad: Presencial', '::1'),
(14, 'auth', 'aman.aman', '2026-04-01 11:54:57', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(15, 'auth', 'aman.aman', '2026-04-01 11:55:02', 'Entrada registrada · Empleado: Aman · Fecha: 2026-04-01 · Hora: 11:55 · Modalidad: presencial', '::1'),
(16, 'auth', 'aman.aman', '2026-04-01 11:55:05', 'Salida registrada · Empleado: Aman · Fecha: 2026-04-01 · Hora: 11:55 · Modalidad: —', '::1'),
(17, 'auth', 'inspector', '2026-04-01 11:55:13', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(18, 'auth', 'inspector', '2026-04-01 11:57:04', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(19, 'auth', 'inspector', '2026-04-01 12:02:18', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(20, 'auth', 'aman.aman', '2026-04-01 12:04:17', 'Entrada registrada · Empleado: Aman · Fecha: 2026-04-01 · Hora: 12:04 · Modalidad: presencial', '::1'),
(21, 'auth', 'aman.aman', '2026-04-01 12:04:28', 'Salida registrada · Empleado: Aman · Fecha: 2026-04-01 · Hora: 12:04 · Modalidad: —', '::1'),
(22, 'auth', 'inspector', '2026-04-01 12:04:34', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(23, 'auth', 'inspector', '2026-04-01 12:27:18', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(24, 'auth', 'inspector', '2026-04-01 12:30:35', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(25, 'auth', 'admin', '2026-04-01 12:30:45', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(26, 'auth', 'admin', '2026-04-01 12:49:55', 'Acceso al sistema. IP: ::1. Modalidad: Presencial.', '::1'),
(27, 'auth', 'admin', '2026-04-07 12:10:31', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(28, 'auth', 'inspector', '2026-04-07 12:10:46', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(29, 'auth', 'inspector', '2026-04-07 12:17:24', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(30, 'integrity', 'inspector', '2026-04-07 12:17:26', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1'),
(31, 'integrity', 'inspector', '2026-04-07 12:30:28', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1'),
(32, 'auth', 'admin', '2026-04-07 12:43:43', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(33, 'auth', 'inspector', '2026-04-08 10:02:20', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(34, 'auth', 'inspector', '2026-04-08 10:11:14', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(35, 'integrity', 'inspector', '2026-04-08 10:11:16', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1'),
(36, 'auth', 'inspector', '2026-04-08 10:11:50', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(37, 'integrity', 'inspector', '2026-04-08 10:11:51', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1'),
(38, 'integrity', 'inspector', '2026-04-08 10:12:02', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1'),
(39, 'auth', 'admin', '2026-04-08 10:12:58', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(40, 'auth', 'inspector', '2026-04-14 11:06:23', 'Acceso al sistema. IP: 127.0.0.1. Modalidad: Presencial.', '127.0.0.1'),
(41, 'integrity', 'inspector', '2026-04-14 11:06:35', 'Exportación CSV para Inspección. Período: 2026-01-01 → 2026-12-31. Registros: 1', '127.0.0.1');

-- --------------------------------------------------------

--
-- Estructura de la taula `empleados`
--

CREATE TABLE `empleados` (
  `id` int NOT NULL,
  `username` varchar(60) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `email` varchar(120) DEFAULT '',
  `departamento` varchar(80) NOT NULL DEFAULT 'General',
  `jornada_horas` tinyint NOT NULL DEFAULT '8',
  `modalidad` enum('Presencial','Híbrido','Remoto') NOT NULL DEFAULT 'Presencial',
  `role` enum('employee','admin','inspector') NOT NULL DEFAULT 'employee',
  `color` varchar(10) NOT NULL DEFAULT '#00e5a0',
  `activo` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Bolcament de dades per a la taula `empleados`
--

INSERT INTO `empleados` (`id`, `username`, `password_hash`, `nombre`, `email`, `departamento`, `jornada_horas`, `modalidad`, `role`, `color`, `activo`, `created_at`) VALUES
(1, 'maria.garcia', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4', 'María García', 'maria.garcia@waferexxport.eu', 'Producción', 8, 'Presencial', 'employee', '#00e5a0', 1, '2026-04-01 10:47:38'),
(2, 'carlos.lopez', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4', 'Carlos López', 'carlos.lopez@waferexxport.eu', 'Logística', 8, 'Presencial', 'employee', '#0066ff', 1, '2026-04-01 10:47:38'),
(3, 'ana.martinez', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4', 'Ana Martínez', 'ana.martinez@waferexxport.eu', 'Calidad', 8, 'Híbrido', 'employee', '#ff6b35', 1, '2026-04-01 10:47:38'),
(4, 'pedro.sanchez', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4', 'Pedro Sánchez', 'pedro.sanchez@waferexxport.eu', 'Mantenimiento', 8, 'Presencial', 'employee', '#9b59b6', 1, '2026-04-01 10:47:38'),
(5, 'lucia.torres', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4', 'Lucía Torres', 'lucia.torres@waferexxport.eu', 'Administración', 8, 'Híbrido', 'employee', '#e74c3c', 1, '2026-04-01 10:47:38'),
(6, 'admin', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', 'Administrador', 'admin@waferexxport.eu', 'RRHH', 8, 'Presencial', 'admin', '#ff6b35', 1, '2026-04-01 10:47:38'),
(7, 'inspector', '14a60637758cb026afd2fe447f3648a07965072eeefaa9ee57734959bce8ae2b', 'Inspector ITSS', 'inspector@itss.gob.es', 'Inspección', 8, 'Presencial', 'inspector', '#ff3b5c', 1, '2026-04-01 10:47:38'),
(10, 'aman.aman', '57a1deec4eb4bb86b94e4877c1aa95116d47315d6a25db064ff7ccb47c34bace', 'Aman', 'aman@gmail.com', 'Producción', 8, 'Presencial', 'employee', '#f39c12', 1, '2026-04-01 11:54:01');

-- --------------------------------------------------------

--
-- Estructura de la taula `fichajes`
--

CREATE TABLE `fichajes` (
  `id` int NOT NULL,
  `empleado_id` int NOT NULL,
  `fecha` date NOT NULL,
  `evento` enum('entrada','inicio_pausa','fin_pausa','salida') NOT NULL,
  `hora` time NOT NULL,
  `modalidad` varchar(40) NOT NULL DEFAULT 'presencial',
  `notas` text,
  `hash` varchar(64) NOT NULL,
  `prev_hash` varchar(64) NOT NULL DEFAULT '000000',
  `ip` varchar(45) DEFAULT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Bolcament de dades per a la taula `fichajes`
--

INSERT INTO `fichajes` (`id`, `empleado_id`, `fecha`, `evento`, `hora`, `modalidad`, `notas`, `hash`, `prev_hash`, `ip`, `created_at`) VALUES
(1, 10, '2026-04-01', 'entrada', '11:55:02', 'presencial', '', '5c9c63264023d426d209ba3fe1299475b76068b011dfc48e750e5faf76bae501', '000000', '::1', '2026-04-01 11:55:02'),
(2, 10, '2026-04-01', 'salida', '11:55:05', '—', '', 'fabd4926acaf2643d0e02ab9b4188b888d7ffc26bb19ed40bc5387d753521e22', '5c9c63264023d426d209ba3fe1299475b76068b011dfc48e750e5faf76bae501', '::1', '2026-04-01 11:55:05'),
(3, 10, '2026-04-01', 'entrada', '12:04:17', 'presencial', '', 'ccb01c2a5b6ea37d6448546780203d3d0b099fda471d6d1e2c32baf0fd06bba6', 'fabd4926acaf2643d0e02ab9b4188b888d7ffc26bb19ed40bc5387d753521e22', '::1', '2026-04-01 12:04:17'),
(4, 10, '2026-04-01', 'salida', '12:04:28', '—', '', '36c6febcca515e8059d9ba770400b1b019062e558176f1f1ac076b6519504f91', 'ccb01c2a5b6ea37d6448546780203d3d0b099fda471d6d1e2c32baf0fd06bba6', '::1', '2026-04-01 12:04:28');

-- --------------------------------------------------------

--
-- Estructura de la taula `jornadas`
--

CREATE TABLE `jornadas` (
  `id` int NOT NULL,
  `empleado_id` int NOT NULL,
  `fecha` date NOT NULL,
  `hora_entrada` time DEFAULT NULL,
  `hora_salida` time DEFAULT NULL,
  `minutos_trabajo` int NOT NULL DEFAULT '0',
  `minutos_pausa` int NOT NULL DEFAULT '0',
  `modalidad` varchar(40) NOT NULL DEFAULT 'presencial',
  `firmado` tinyint(1) NOT NULL DEFAULT '0',
  `firmado_at` datetime DEFAULT NULL,
  `valido` tinyint(1) NOT NULL DEFAULT '1',
  `hash` varchar(64) NOT NULL DEFAULT '',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Bolcament de dades per a la taula `jornadas`
--

INSERT INTO `jornadas` (`id`, `empleado_id`, `fecha`, `hora_entrada`, `hora_salida`, `minutos_trabajo`, `minutos_pausa`, `modalidad`, `firmado`, `firmado_at`, `valido`, `hash`, `created_at`) VALUES
(1, 1, '2025-06-10', '08:58:00', '17:03:00', 440, 45, 'presencial', 1, NULL, 1, '8dbaf96d93c988e5f651e3a14a0f52ccd48fe8719c743d2f80b96c1da2460c20', '2026-04-01 10:47:38'),
(2, 1, '2025-06-09', '09:02:00', '18:15:00', 523, 30, 'remoto', 1, NULL, 1, '0d40389f53579978e64eb4b4654a68a04cd8c182214a4c268cbf61e7cfab4f66', '2026-04-01 10:47:38'),
(3, 1, '2025-06-06', '08:55:00', '17:00:00', 425, 60, 'presencial', 0, NULL, 1, '8a96d06459bf504034efa5b400781fd2cac7171884ed06fb3a442e81a4837aad', '2026-04-01 10:47:38'),
(4, 2, '2025-06-10', '09:30:00', '19:00:00', 555, 15, 'remoto', 1, NULL, 1, 'a8e5f607a6e2c2eb823e82875bfeee628cd398dc87de4cdbc8550481e84d5ede', '2026-04-01 10:47:38'),
(5, 3, '2025-06-10', '08:00:00', '16:00:00', 435, 45, 'presencial', 0, NULL, 1, 'c6d991640e9354f5448c74b8f8ae952170f1af4b8f1ad35056fe1229c7b67ea8', '2026-04-01 10:47:38'),
(6, 5, '2025-06-10', '08:45:00', '17:30:00', 495, 30, 'presencial', 1, NULL, 1, 'f039e4e76a74f11595d2b991bab7d17fcc067acd862dc9026ee6c2bfec5317e5', '2026-04-01 10:47:38'),
(7, 10, '2026-04-01', '12:04:17', '12:04:28', 0, 0, 'presencial', 0, NULL, 1, 'e78dfd3dce4eeabfd6cb9084dc5f45a8791b9c4645bb2e69e14ad703c26b8f2e', '2026-04-01 11:55:02');

--
-- Índexs per a les taules bolcades
--

--
-- Índexs per a la taula `auditoria`
--
ALTER TABLE `auditoria`
  ADD PRIMARY KEY (`id`);

--
-- Índexs per a la taula `empleados`
--
ALTER TABLE `empleados`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `username` (`username`);

--
-- Índexs per a la taula `fichajes`
--
ALTER TABLE `fichajes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `empleado_id` (`empleado_id`);

--
-- Índexs per a la taula `jornadas`
--
ALTER TABLE `jornadas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_emp_fecha` (`empleado_id`,`fecha`);

--
-- AUTO_INCREMENT per les taules bolcades
--

--
-- AUTO_INCREMENT per la taula `auditoria`
--
ALTER TABLE `auditoria`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=42;

--
-- AUTO_INCREMENT per la taula `empleados`
--
ALTER TABLE `empleados`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;

--
-- AUTO_INCREMENT per la taula `fichajes`
--
ALTER TABLE `fichajes`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT per la taula `jornadas`
--
ALTER TABLE `jornadas`
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;

--
-- Restriccions per a les taules bolcades
--

--
-- Restriccions per a la taula `fichajes`
--
ALTER TABLE `fichajes`
  ADD CONSTRAINT `fichajes_ibfk_1` FOREIGN KEY (`empleado_id`) REFERENCES `empleados` (`id`) ON DELETE RESTRICT;

--
-- Restriccions per a la taula `jornadas`
--
ALTER TABLE `jornadas`
  ADD CONSTRAINT `jornadas_ibfk_1` FOREIGN KEY (`empleado_id`) REFERENCES `empleados` (`id`) ON DELETE RESTRICT;
COMMIT;

