Corregir Tomas Prolongadas: filtrado de secciones, firmante por toma, detalle en historial
Tres bugs relacionados en el formulario "Control de Tomas de Muestras Prolongadas" (F-LAB-28), detectados en el turno E017: 1. El modal de documentos del historial abría el documento sin &embed=1, por lo que el filtrado de tomas irrelevantes (según examen seleccionado) nunca se aplicaba — se mostraban las 16 secciones posibles en vez de solo las 2-3 que aplicaban, con textos "Pendiente de firma" de más. 2. El guardado de firma en tomas progresivas usa un endpoint distinto (_guardarFirmaMP → guardar_toma.php) que no pasaba por el fix de nombre/cédula del firmante aplicado antes solo a _guardarFirmaPro. Como además una toma progresiva puede pasar por varios profesionales en el transcurso de horas, ahora se guarda identidad por-toma (campoId + '_pro_nombre'/'_pro_cedula'), no solo global. 3. El historial no mostraba quién atendió cada toma. get_consentimientos.php ahora expone tomas_detalle (etiqueta, hora, firmante) por consentimiento de toma progresiva, y el panel de documentos del historial lo renderiza en una tabla debajo del pill del formulario. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ec552136bf
commit
2ba13add34
@@ -87,9 +87,12 @@ foreach ($consentimientos as &$c) {
|
||||
if ($esTomaProg) {
|
||||
|
||||
// Mapear cada firma_profesional a los valores de examen de su sección condicional
|
||||
// (y a su etiqueta + campo hora, para poder mostrar el detalle por toma)
|
||||
$firmaCondMap = [];
|
||||
$curCondCampo = null;
|
||||
$curCondVals = [];
|
||||
$curLabel = null;
|
||||
$curHoraId = null;
|
||||
foreach ($campos as $campo) {
|
||||
$ft = $campo['tipo'] ?? '';
|
||||
if ($ft === 'separador') {
|
||||
@@ -98,8 +101,15 @@ foreach ($consentimientos as &$c) {
|
||||
$curCondVals = $cond
|
||||
? ($cond['valores'] ?? ($cond['valor'] ? [$cond['valor']] : []))
|
||||
: [];
|
||||
$curLabel = $campo['label'] ?? '';
|
||||
$curHoraId = null;
|
||||
} elseif ($ft === 'hora') {
|
||||
$curHoraId = $campo['id'] ?? null;
|
||||
} elseif ($ft === 'firma_profesional' && !empty($campo['id'])) {
|
||||
$firmaCondMap[$campo['id']] = ['campo' => $curCondCampo, 'valores' => $curCondVals];
|
||||
$firmaCondMap[$campo['id']] = [
|
||||
'campo' => $curCondCampo, 'valores' => $curCondVals,
|
||||
'label' => $curLabel, 'hora_id' => $curHoraId,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,9 +143,19 @@ foreach ($consentimientos as &$c) {
|
||||
}
|
||||
|
||||
$tomasTotal = count($relevantIds);
|
||||
$tomasDetalle = [];
|
||||
foreach ($relevantIds as $fid) {
|
||||
if ((!empty($dr[$fid]) && strlen($dr[$fid]) > 10)
|
||||
|| (!empty($dr[$fid.'_svg']) && strlen($dr[$fid.'_svg']) > 10)) $tomasFirm++;
|
||||
$firmado = (!empty($dr[$fid]) && strlen($dr[$fid]) > 10)
|
||||
|| (!empty($dr[$fid.'_svg']) && strlen($dr[$fid.'_svg']) > 10);
|
||||
if ($firmado) $tomasFirm++;
|
||||
$info = $firmaCondMap[$fid] ?? [];
|
||||
$horaId = $info['hora_id'] ?? null;
|
||||
$tomasDetalle[] = [
|
||||
'label' => $info['label'] ?? '',
|
||||
'hora' => $horaId ? ($dr[$horaId] ?? null) : null,
|
||||
'firmado' => $firmado,
|
||||
'firmante' => $firmado ? ($dr[$fid . '_pro_nombre'] ?? $dr['_pro_nombre'] ?? null) : null,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +167,7 @@ foreach ($consentimientos as &$c) {
|
||||
$c['es_toma_progresiva'] = $esTomaProg;
|
||||
$c['tomas_total'] = $tomasTotal;
|
||||
$c['tomas_firmadas'] = $tomasFirm;
|
||||
$c['tomas_detalle'] = $tomasDetalle ?? [];
|
||||
$c['cierre_anticipado'] = $dr['_cierre_anticipado'] ?? null;
|
||||
// Exponer campos firma_profesional (ids) para el frontend
|
||||
$c['campos_firma_pro'] = array_column($camposFirmaPro, 'id');
|
||||
|
||||
Reference in New Issue
Block a user