turnero: badge tomas por examen seleccionado + fix firma paciente
- get_consentimientos: tomas_total ahora filtra por examen elegido en datos_respuestas (no cuenta todos los 13 campos globales); badge se oculta (total=0) hasta que se seleccione un examen. - ver_formulario_enviado: agrega f.es_toma_progresiva al SELECT y lo usa para forzar _soloFirmaPro=true, evitando que aparezca el canvas de firma del paciente cuando la DB indica toma progresiva. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
1296918c20
commit
c2605fb274
@@ -80,12 +80,45 @@ foreach ($consentimientos as &$c) {
|
||||
// Toma progresiva: override explícito en DB gana; si es NULL, usar heurística (>1 campo firma_profesional)
|
||||
$overrideProg = $c['formulario_es_toma_prog'] ?? null;
|
||||
$esTomaProg = $overrideProg !== null ? (bool)(int)$overrideProg : count($camposFirmaPro) > 1;
|
||||
$tomasTotal = count($camposFirmaPro);
|
||||
$tomasFirm = 0;
|
||||
if ($esTomaProg && $c['datos_respuestas']) {
|
||||
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
||||
foreach ($camposFirmaPro as $fp) {
|
||||
if (!empty($dr[$fp['id']]) && strlen($dr[$fp['id']]) > 10) $tomasFirm++;
|
||||
$tomasTotal = 0;
|
||||
$tomasFirm = 0;
|
||||
if ($esTomaProg) {
|
||||
$dr = $c['datos_respuestas'] ? (json_decode($c['datos_respuestas'], true) ?? []) : [];
|
||||
|
||||
// Mapear cada firma_profesional a los valores de examen de su sección condicional
|
||||
$firmaCondMap = [];
|
||||
$curCondCampo = null;
|
||||
$curCondVals = [];
|
||||
foreach ($campos as $campo) {
|
||||
$ft = $campo['tipo'] ?? '';
|
||||
if ($ft === 'separador') {
|
||||
$cond = $campo['condicion'] ?? null;
|
||||
$curCondCampo = $cond ? ($cond['campo_id'] ?? null) : null;
|
||||
$curCondVals = $cond
|
||||
? ($cond['valores'] ?? ($cond['valor'] ? [$cond['valor']] : []))
|
||||
: [];
|
||||
} elseif ($ft === 'firma_profesional' && !empty($campo['id'])) {
|
||||
$firmaCondMap[$campo['id']] = ['campo' => $curCondCampo, 'valores' => $curCondVals];
|
||||
}
|
||||
}
|
||||
|
||||
// Filtrar por exámenes seleccionados en datos_respuestas
|
||||
$relevantIds = [];
|
||||
foreach ($firmaCondMap as $fid => $info) {
|
||||
if ($info['campo'] === null) {
|
||||
$relevantIds[] = $fid; // sin condición → siempre aplica
|
||||
} else {
|
||||
$ctrlVal = $dr[$info['campo']] ?? null;
|
||||
$ctrlArr = is_array($ctrlVal) ? $ctrlVal : ($ctrlVal !== null ? [$ctrlVal] : []);
|
||||
if (!empty(array_intersect($info['valores'], $ctrlArr))) {
|
||||
$relevantIds[] = $fid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$tomasTotal = count($relevantIds);
|
||||
foreach ($relevantIds as $fid) {
|
||||
if (!empty($dr[$fid]) && strlen($dr[$fid]) > 10) $tomasFirm++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,11 +314,35 @@ if ($incluirSolicitud) {
|
||||
$tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma'));
|
||||
$overrideProg = $c['formulario_es_toma_prog'] ?? null;
|
||||
$esTomaProg = $overrideProg !== null ? (bool)(int)$overrideProg : count($camposFirmaPro) > 1;
|
||||
$tomasFirm = 0;
|
||||
if ($esTomaProg && $c['datos_respuestas']) {
|
||||
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
||||
foreach ($camposFirmaPro as $fp) {
|
||||
if (!empty($dr[$fp['id']]) && strlen($dr[$fp['id']]) > 10) $tomasFirm++;
|
||||
$tomasTotal2 = 0;
|
||||
$tomasFirm = 0;
|
||||
if ($esTomaProg) {
|
||||
$dr2 = $c['datos_respuestas'] ? (json_decode($c['datos_respuestas'], true) ?? []) : [];
|
||||
$firmaCondMap2 = [];
|
||||
$curC2 = null; $curV2 = [];
|
||||
foreach ($campos as $campo2) {
|
||||
$ft2 = $campo2['tipo'] ?? '';
|
||||
if ($ft2 === 'separador') {
|
||||
$cond2 = $campo2['condicion'] ?? null;
|
||||
$curC2 = $cond2 ? ($cond2['campo_id'] ?? null) : null;
|
||||
$curV2 = $cond2 ? ($cond2['valores'] ?? ($cond2['valor'] ? [$cond2['valor']] : [])) : [];
|
||||
} elseif ($ft2 === 'firma_profesional' && !empty($campo2['id'])) {
|
||||
$firmaCondMap2[$campo2['id']] = ['campo' => $curC2, 'valores' => $curV2];
|
||||
}
|
||||
}
|
||||
$relevantIds2 = [];
|
||||
foreach ($firmaCondMap2 as $fid2 => $info2) {
|
||||
if ($info2['campo'] === null) {
|
||||
$relevantIds2[] = $fid2;
|
||||
} else {
|
||||
$cv2 = $dr2[$info2['campo']] ?? null;
|
||||
$ca2 = is_array($cv2) ? $cv2 : ($cv2 !== null ? [$cv2] : []);
|
||||
if (!empty(array_intersect($info2['valores'], $ca2))) $relevantIds2[] = $fid2;
|
||||
}
|
||||
}
|
||||
$tomasTotal2 = count($relevantIds2);
|
||||
foreach ($relevantIds2 as $fid2) {
|
||||
if (!empty($dr2[$fid2]) && strlen($dr2[$fid2]) > 10) $tomasFirm++;
|
||||
}
|
||||
}
|
||||
$c['requiere_firma_profesional'] = $tieneFirmaPro;
|
||||
@@ -293,7 +350,7 @@ if ($incluirSolicitud) {
|
||||
$c['origen_lugar_id'] = in_array((int)$c['formulario_id'], $fidsDeLugar, true)
|
||||
? $lugarDestinoId : null;
|
||||
$c['es_toma_progresiva'] = $esTomaProg;
|
||||
$c['tomas_total'] = count($camposFirmaPro);
|
||||
$c['tomas_total'] = $tomasTotal2;
|
||||
$c['tomas_firmadas'] = $tomasFirm;
|
||||
$c['campos_firma_pro'] = array_column($camposFirmaPro, 'id');
|
||||
unset($c['formulario_esquema'], $c['formulario_es_toma_prog'], $c['datos_respuestas']);
|
||||
|
||||
Reference in New Issue
Block a user