<?php
require_once __DIR__ . "/../conexion/conexion.php";
// -------------------------------------------------------------------
// 1. FUNCIONES GENERALES Y UTILIDADES
// -------------------------------------------------------------------
function validarRut($rut)
{
$rutLimpio = preg_replace('/[^kK0-9]/', '',$rut);
if (strlen($rutLimpio) < 2) return false;
$dv = strtoupper(substr($rutLimpio, -1));
$numero = substr($rutLimpio, 0, -1);
$i = 2;
$suma = 0;
foreach (array_reverse(str_split($numero)) as $d) {$suma += $d * $i;
$i = ($i === 7) ? 2 :$i + 1;
}
$resto = 11 - ($suma % 11);
$dvEsperado = ($resto === 11) ? '0' : (($resto === 10) ? 'K' : (string)$resto);
return $dv ===$dvEsperado;
}
function getEstados($conn)
{
$sql = "SELECT id_estado_vigencia_afiliado, nombre FROM estado_vigencia_afiliado ORDER BY nombre ASC";
$resultado =$conn->query($sql);$estados = [];
if ($resultado) {
while ($row =$resultado->fetch_assoc()) {
$estados[] =$row;
}
}
return $estados;
}
// -------------------------------------------------------------------
// 2. FUNCIONES PRINCIPALES (CON FECHAS INDIVIDUALES Y ESTADO SECUNDARIO)
// -------------------------------------------------------------------
function getAfiliado($conn, $estadoId = '',$limite = 20, $offset = 0) {$sql = "SELECT
afiliado.id_afiliado,
afiliado.rut,
afiliado.id_plan,
afiliado.nombres AS titular,
afiliado.fecha_fua,
estado_vigencia_afiliado.nombre AS estado_vigencia,
-- ESTADO SECUNDARIO AGREGADO AQUÍ --
nueva_estado.nombre AS estado_secundario,
plan_empresa.nombre_plan,
COALESCE(emp.nombre_legal, 'Individual') AS nombre_empresa,
carga.id_carga,
carga.nombres AS carga,
carga.relacion_parentesco,
parentesco.id_parentesco,
parentesco.nombre AS parentesco,
estado_vigencia_carga.nombre AS estado_carga,
-- Extraemos las fechas de la tabla individual
temp_benef.fecha_ini_contrato,
temp_benef.fecha_fin_contrato,
temp_benef.fecha_creacion
FROM afiliado
LEFT JOIN carga ON afiliado.id_afiliado = carga.id_afiliado
LEFT JOIN parentesco ON carga.relacion_parentesco = parentesco.id_parentesco
LEFT JOIN estado_vigencia_afiliado AS estado_vigencia_carga ON carga.`estado` = estado_vigencia_carga.`id_estado_vigencia_afiliado`
LEFT JOIN estado_vigencia_afiliado ON afiliado.estado_vigencia_afiliado = estado_vigencia_afiliado.id_estado_vigencia_afiliado
-- JOIN CON LA TABLA ESTADO --
LEFT JOIN nueva.estado AS nueva_estado ON afiliado.id_estado = nueva_estado.id_estado
LEFT JOIN nueva.plan AS plan_empresa ON afiliado.id_plan = plan_empresa.id_plan
LEFT JOIN nueva.empresa AS emp ON afiliado.id_empresa = emp.id_empresa
LEFT JOIN plan_individual.temp_benef ON temp_benef.rut = REPLACE(SUBSTRING_INDEX(afiliado.rut, '-', 1), '.', '') ";
if ($estadoId !== '') {$sql .= " WHERE afiliado.estado_vigencia_afiliado = ? ";
}
$sql .= " ORDER BY afiliado.fecha_fua DESC, afiliado.id_afiliado ASC, carga.id_carga ASC LIMIT ? OFFSET ?";
$stmt = $conn->prepare($sql);
if ($estadoId !== '') {
$stmt->bind_param("iii", $estadoId, $limite,$offset);
} else {
$stmt->bind_param("ii", $limite,$offset);
}
$stmt->execute();$resultado = $stmt->get_result();$afiliado = [];
while ($row =$resultado->fetch_assoc()) {
$afiliado[] =$row;
}
$stmt->close();
return $afiliado;
}
function buscarPorRut($conn,$rut, $estadoId = '',$limite = 20, $offset = 0) {$sql = "SELECT
afiliado.id_afiliado,
afiliado.rut,
afiliado.id_plan,
afiliado.nombres AS titular,
afiliado.fecha_fua,
estado_vigencia_afiliado.nombre AS estado_vigencia,
-- ESTADO SECUNDARIO AGREGADO AQUÍ --
nueva_estado.nombre AS estado_secundario,
plan_empresa.nombre_plan,
COALESCE(emp.nombre_legal, 'Individual') AS nombre_empresa,
carga.id_carga,
carga.nombres AS carga,
carga.relacion_parentesco,
parentesco.id_parentesco,
parentesco.nombre AS parentesco,
estado_vigencia_carga.nombre AS estado_carga,
-- Extraemos las fechas de la tabla individual
temp_benef.fecha_ini_contrato,
temp_benef.fecha_fin_contrato,
temp_benef.fecha_creacion
FROM afiliado
LEFT JOIN carga ON afiliado.id_afiliado = carga.id_afiliado
LEFT JOIN parentesco ON carga.relacion_parentesco = parentesco.id_parentesco
LEFT JOIN estado_vigencia_afiliado ON afiliado.estado_vigencia_afiliado = estado_vigencia_afiliado.id_estado_vigencia_afiliado
LEFT JOIN estado_vigencia_afiliado AS estado_vigencia_carga ON carga.`estado` = estado_vigencia_carga.`id_estado_vigencia_afiliado`
-- JOIN CON LA TABLA ESTADO --
LEFT JOIN nueva.estado AS nueva_estado ON afiliado.id_estado = nueva_estado.id_estado
LEFT JOIN nueva.plan AS plan_empresa ON afiliado.id_plan = plan_empresa.id_plan
LEFT JOIN nueva.empresa AS emp ON afiliado.id_empresa = emp.id_empresa
LEFT JOIN plan_individual.temp_benef ON temp_benef.rut = REPLACE(SUBSTRING_INDEX(afiliado.rut, '-', 1), '.', '')
WHERE afiliado.rut = ?";
if ($estadoId !== '') {$sql .= " AND afiliado.estado_vigencia_afiliado = ?";
}
$sql .= " ORDER BY afiliado.fecha_fua DESC, afiliado.id_afiliado ASC, carga.id_carga ASC LIMIT ? OFFSET ?";
$stmt = $conn->prepare($sql);
if ($estadoId !== '') {$stmt->bind_param("siii", $rut,$estadoId, $limite,$offset);
} else {
$stmt->bind_param("sii", $rut, $limite,$offset);
}
$stmt->execute();$resultado = $stmt->get_result();$afiliado = [];
while ($row =$resultado->fetch_assoc()) {
$afiliado[] =$row;
}
$stmt->close();
return $afiliado;
}
function contarAfiliados($conn,$estadoId = '')
{
$sql = "SELECT COUNT(DISTINCT afiliado.id_afiliado) AS total
FROM afiliado
LEFT JOIN carga ON afiliado.id_afiliado = carga.id_afiliado
LEFT JOIN parentesco ON carga.relacion_parentesco = parentesco.id_parentesco";
if ($estadoId !== '') {$sql .= " WHERE afiliado.estado_vigencia_afiliado = ?";
}
$stmt = $conn->prepare($sql);
if ($estadoId !== '') $stmt->bind_param("i", $estadoId);
$stmt->execute();$resultado = $stmt->get_result();$fila = $resultado->fetch_assoc();$stmt->close();
return (int)$fila['total'];
}
function contarPorRut($conn, $rut,$estadoId = '')
{
$sql = "SELECT COUNT(DISTINCT afiliado.id_afiliado) AS total
FROM afiliado
LEFT JOIN carga ON afiliado.id_afiliado = carga.id_afiliado
LEFT JOIN parentesco ON carga.relacion_parentesco = parentesco.id_parentesco
WHERE afiliado.rut = ?";
if ($estadoId !== '') {$sql .= " AND afiliado.estado_vigencia_afiliado = ?";
}
$stmt = $conn->prepare($sql);
if ($estadoId !== '') {$stmt->bind_param("si", $rut,$estadoId);
} else {
$stmt->bind_param("s", $rut);
}
$stmt->execute();$resultado = $stmt->get_result();$fila = $resultado->fetch_assoc();$stmt->close();
return (int)$fila["total"];
}
?>
To embed this project on your website, copy the following code and paste it into your website's HTML: