public function generarReporte() { if (is_null($this->idCatEstado)) { $this->error = true; $this->msgError = "El reporte requiere del identificador de estado."; } else { $filtro = ""; switch ($this->filtro) { case 0: $filtro = self::$todos; break; case 1: $filtro = self::$prevCTX; break; case 2: $filtro = self::$prevSTX; break; case 3: $filtro = self::$alta; break; default: $filtro = self::$vigilancia; break; } $sql = "SELECT top 2 p.idPaciente, d.observaciones, d.idDiagnostico, p.nombre, p.apellidoPaterno, p.apellidoMaterno, l.nombre AS localidad, m.nombre AS municipio, ctp.descripcion as tipoPaciente, p.fechaNacimiento, cs.sexo AS sexo, ins.descripcion AS derechohabiencia, ccl.descripcion AS clasificacionLepra, p.fechaInicioPQT, d.discOjoDer, d.discOjoIzq, d.discManoDer, d.discManoIzq, d.discPieDer, d.discPieIzq, cer.descripcion AS estReaAnt, cerr.descripcion AS estReaAct, cep.descipcion as condicion " . "FROM pacientes p, catLocalidad l, diagnostico d, catMunicipio m, catInstituciones ins, catTipoPaciente ctp, catSexo cs, catClasificacionLepra ccl, catEstadoReaccional cer, catEstadoReaccional cerr, catEstadoPaciente cep " . "WHERE p.idCatEstado = " . $this->idCatEstado . " " . "AND d.idPaciente = p.idPaciente " . "AND d.idCatEstadoPaciente IN (" . $filtro . ") " . "AND d.idCatEstadoPaciente = cep.idCatEstadoPaciente " . "AND l.idCatLocalidad = p.idCatLocalidad " . "AND l.idCatEstado = p.idCatEstado " . "AND l.idCatMunicipio = p.idCatMunicipio " . "AND l.idCatMunicipio = m.idCatMunicipio " . "AND l.idCatEstado = m.idCatEstado " . "AND p.idCatInstitucionDerechohabiencia = ins.idCatInstituciones " . "AND p.idCatTipoPaciente = ctp.idCatTipoPaciente " . "AND p.sexo = cs.idSexo " . "AND ccl.idCatClasificacionLepra = d.idCatClasificacionLepra " . "AND d.idCatEstadoReaccionalAnt = cer.idCatEstadoReaccional " . "AND d.idCatEstadoReaccionalAct = cerr.idCatEstadoReaccional;"; if ($this->idCatEstado == 0) { $sql = "SELECT p.idPaciente, d.observaciones, d.idDiagnostico, p.nombre, p.apellidoPaterno, p.apellidoMaterno, l.nombre AS localidad, m.nombre AS municipio, ctp.descripcion as tipoPaciente, p.fechaNacimiento, cs.sexo AS sexo, ins.descripcion AS derechohabiencia, ccl.descripcion AS clasificacionLepra, p.fechaInicioPQT, d.discOjoDer, d.discOjoIzq, d.discManoDer, d.discManoIzq, d.discPieDer, d.discPieIzq, cer.descripcion AS estReaAnt, cerr.descripcion AS estReaAct, cep.descipcion as condicion " . "FROM pacientes p, catLocalidad l, diagnostico d, catMunicipio m, catInstituciones ins, catTipoPaciente ctp, catSexo cs, catClasificacionLepra ccl, catEstadoReaccional cer, catEstadoReaccional cerr, catEstadoPaciente cep " . "WHERE d.idPaciente = p.idPaciente " . "AND d.idCatEstadoPaciente IN (" . $filtro . ") " . "AND d.idCatEstadoPaciente = cep.idCatEstadoPaciente " . "AND l.idCatLocalidad = p.idCatLocalidad " . "AND l.idCatEstado = p.idCatEstado " . "AND l.idCatMunicipio = p.idCatMunicipio " . "AND l.idCatMunicipio = m.idCatMunicipio " . "AND l.idCatEstado = m.idCatEstado " . "AND p.idCatInstitucionDerechohabiencia = ins.idCatInstituciones " . "AND p.idCatTipoPaciente = ctp.idCatTipoPaciente " . "AND p.sexo = cs.idSexo " . "AND ccl.idCatClasificacionLepra = d.idCatClasificacionLepra " . "AND d.idCatEstadoReaccionalAnt = cer.idCatEstadoReaccional " . "AND d.idCatEstadoReaccionalAct = cerr.idCatEstadoReaccional;"; } else { $sql = "SELECT p.idPaciente, d.observaciones, d.idDiagnostico, p.nombre, p.apellidoPaterno, p.apellidoMaterno, l.nombre AS localidad, m.nombre AS municipio, ctp.descripcion as tipoPaciente, p.fechaNacimiento, cs.sexo AS sexo, ins.descripcion AS derechohabiencia, ccl.descripcion AS clasificacionLepra, p.fechaInicioPQT, d.discOjoDer, d.discOjoIzq, d.discManoDer, d.discManoIzq, d.discPieDer, d.discPieIzq, cer.descripcion AS estReaAnt, cerr.descripcion AS estReaAct, cep.descipcion as condicion " . "FROM pacientes p, catLocalidad l, diagnostico d, catMunicipio m, catInstituciones ins, catTipoPaciente ctp, catSexo cs, catClasificacionLepra ccl, catEstadoReaccional cer, catEstadoReaccional cerr, catEstadoPaciente cep " . "WHERE p.idCatEstado = " . $this->idCatEstado . " " . "AND d.idPaciente = p.idPaciente " . "AND d.idCatEstadoPaciente IN (" . $filtro . ") " . "AND d.idCatEstadoPaciente = cep.idCatEstadoPaciente " . "AND l.idCatLocalidad = p.idCatLocalidad " . "AND l.idCatEstado = p.idCatEstado " . "AND l.idCatMunicipio = p.idCatMunicipio " . "AND l.idCatMunicipio = m.idCatMunicipio " . "AND l.idCatEstado = m.idCatEstado " . "AND p.idCatInstitucionDerechohabiencia = ins.idCatInstituciones " . "AND p.idCatTipoPaciente = ctp.idCatTipoPaciente " . "AND p.sexo = cs.idSexo " . "AND ccl.idCatClasificacionLepra = d.idCatClasificacionLepra " . "AND d.idCatEstadoReaccionalAnt = cer.idCatEstadoReaccional " . "AND d.idCatEstadoReaccionalAct = cerr.idCatEstadoReaccional;"; } $consulta = ejecutaQueryClases($sql); //echo "<BR>" . $sql . "<BR>"; if (is_string($consulta)) { $this->error = true; $this->msgError = $consulta . " SQL:" . $sql; } else { while ($tabla = devuelveRowAssoc($consulta)) { //print_r($tabla); //die(); $paciente = new PacientesReporteTrimestral(); $fNac = formatFechaObj($tabla["fechaNacimiento"], 'Y-m-d'); $resClasLepra = strpos($tabla["clasificacionLepra"], "MB"); $paciente->idPaciente = $tabla["idPaciente"]; $paciente->idDiagnostico = $tabla["idDiagnostico"]; $paciente->nombre = $tabla["nombre"] . " " . $tabla["apellidoPaterno"] . " " . $tabla["apellidoMaterno"]; $paciente->localidad = $tabla["localidad"]; $paciente->municipio = $tabla["municipio"]; $paciente->tipoPaciente = $tabla["tipoPaciente"]; $paciente->edad = calEdad($fNac); $paciente->sexo = $tabla["sexo"]; $paciente->derechohabiencia = $tabla["derechohabiencia"]; $paciente->condicion = $tabla["condicion"]; //if ($resClasLepra !== false) $paciente->tipoLepra = "PB"; else $paciente->tipoLepra = "MB"; if ($resClasLepra > 0) { $paciente->tipoLepra = "MB"; } else { $paciente->tipoLepra = "PB"; } $paciente->fechaInicioTx = formatFechaObj($tabla["fechaInicioPQT"], "Y-m-d"); if ($paciente->tipoLepra == "PB") { $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaFinTx = formatFechaObj($dAux->add(new DateInterval(self::$invervaloTxPB)), "Y-m-d"); $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaIVPT = formatFechaObj($dAux->add(new DateInterval(self::$invervaloVigPostTxPB)), "Y-m-d"); $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaFVPT = formatFechaObj($dAux->add(new DateInterval(self::$invervaloFinVigPostTxPB)), "Y-m-d"); } else { $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaFinTx = formatFechaObj($dAux->add(new DateInterval(self::$invervaloTxMB)), "Y-m-d"); $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaIVPT = formatFechaObj($dAux->add(new DateInterval(self::$invervaloVigPostTxMB)), "Y-m-d"); $dAux = new DateTime($paciente->fechaInicioTx); $paciente->fechaFVPT = formatFechaObj($dAux->add(new DateInterval(self::$invervaloFinVigPostTxMB)), "Y-m-d"); } if ($tabla["discOjoDer"] >= $tabla["discOjoIzq"]) { $paciente->gradoDiscapacidadOjos = $tabla["discOjoDer"]; } else { $paciente->gradoDiscapacidadOjos = $tabla["discOjoIzq"]; } if ($tabla["discManoDer"] >= $tabla["discManoIzq"]) { $paciente->gradoDiscapacidadManos = $tabla["discManoDer"]; } else { $paciente->gradoDiscapacidadManos = $tabla["discManoIzq"]; } if ($tabla["discPieDer"] >= $tabla["discPieIzq"]) { $paciente->gradoDiscapacidadPies = $tabla["discPieDer"]; } else { $paciente->gradoDiscapacidadPies = $tabla["discPieIzq"]; } $discGen = $paciente->gradoDiscapacidadOjos; if ($discGen < $paciente->gradoDiscapacidadManos) { $discGen = $paciente->gradoDiscapacidadManos; } if ($discGen < $paciente->gradoDiscapacidadPies) { $discGen = $paciente->gradoDiscapacidadPies; } $paciente->gradoDiscapacidadGeneral = $discGen; $paciente->estadoReaccionalAnterior = $tabla["estReaAnt"]; $paciente->estadoReaccionalActual = $tabla["estReaAct"]; $paciente->observaciones = $tabla["observaciones"]; // #################################################################################################### ESTUDIOS $diagBac = new BaciloscopiaReporteTrimestral(); $diagBac->getExamenDiagnostico($paciente->idDiagnostico); $diagHis = new HistopatologiaReporteTrimestral(); $diagHis->getExamenDiagnostico($paciente->idDiagnostico); $paciente->bacDiagnostico = $diagBac; $paciente->hisDiagnostico = $diagHis; $paciente->clasificacionIntegral = $paciente->hisDiagnostico->resultado; //var_dump($paciente->hisDiagnostico); // ESTUDIOS BACILOSCOPICOS DE CONTROL DURANTE EL PERIODO DE TRATAMIENTO (fechaInicioTx-fechaFinTx) $sql = "SELECT idEstudioBac FROM estudiosBac " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND idCatTipoEstudio = " . self::$idCatTipoEstudioCon . " AND idContacto is null " . " AND fechaResultado BETWEEN '" . formatFechaObj($paciente->fechaInicioTx, "Y-m-d") . "' AND '" . formatFechaObj($paciente->fechaFinTx, "Y-m-d") . "'" . " ORDER BY fechaResultado ASC;"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { $estBac = new BaciloscopiaReporteTrimestral(); $estBac->getExamen($tablaBis["idEstudioBac"]); array_push($paciente->arrControlBacTx, $estBac); // BACILOSCOPIA TX } } // ESTUDIOS BACILOSCOPICOS DE CONTROL DURANTE EL PERIODO DE VIGILANCIA POST TRATAMIENTO (fechaIVPT-fechaFVPT) $sql = "SELECT idEstudioBac FROM estudiosBac " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND idCatTipoEstudio = " . self::$idCatTipoEstudioCon . " AND idContacto is null " . " AND fechaResultado BETWEEN '" . formatFechaObj($paciente->fechaIVPT, "Y-m-d") . "' AND '" . formatFechaObj($paciente->fechaFVPT, "Y-m-d") . "'" . " ORDER BY fechaResultado ASC;"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { $estBac = new BaciloscopiaReporteTrimestral(); $estBac->getExamen($tablaBis["idEstudioBac"]); array_push($paciente->arrControlBacFinTx, $estBac); // BACILOSCOPIA VPTX } } // ESTUDIOS HISTOPATOLOGICOS DE CONTROL DURANTE EL PERIODO DE VIGILANCIA POST TRATAMIENTO (fechaIVPT-fechaFVPT) $sql = "SELECT idEstudioHis FROM estudiosHis " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND idCatTipoEstudio = " . self::$idCatTipoEstudioCon . " AND idContacto is null " . " AND fechaResultado BETWEEN '" . formatFechaObj($paciente->fechaIVPT, "Y-m-d") . "' AND '" . formatFechaObj($paciente->fechaFVPT, "Y-m-d") . "'" . " ORDER BY fechaResultado ASC;"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { $estHis = new HistopatologiaReporteTrimestral(); $estHis->getExamen($tablaBis["idEstudioHis"]); array_push($paciente->arrControlHisFinTx, $estHis); // HISTOPATOLOGIA VPTX } } // ESTUDIOS BACILOSCOPICOS DE CONTROL DESPUES DE LA FECHA DE FIN DE VIGILANCIA POST TRATAMIENTO (fechaFVPT) $sql = "SELECT idEstudioBac FROM estudiosBac " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND idCatTipoEstudio = " . self::$idCatTipoEstudioCon . " AND idContacto is null " . " AND fechaResultado > '" . formatFechaObj($paciente->fechaFVPT, "Y-m-d") . "'" . " ORDER BY fechaResultado ASC;"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { $estBac = new BaciloscopiaReporteTrimestral(); $estBac->getExamen($tablaBis["idEstudioBac"]); array_push($paciente->arrVigilanciaBac, $estBac); // BACILOSCOPIA POST VPTX } } // #################################################################################################### CONTROL $arrControl = array(array()); $fechaIni = strtotime(formatFechaObj($paciente->fechaInicioTx, 'Y-m-d')); $fechaFin = strtotime(formatFechaObj($paciente->fechaFVPT, 'Y-m-d')); $fechaIVPT = strtotime(formatFechaObj($paciente->fechaIVPT, 'Y-m-d')); $mesIni = date("n", $fechaIni); $anoIni = date("Y", $fechaIni); $mesFin = date("n", $fechaFin); $anoFin = date("Y", $fechaFin); $mesIVPT = date("n", $fechaIVPT); $anoIVPT = date("Y", $fechaIVPT); $mesActual = $mesIni; $anoActual = $anoIni; if (!empty($paciente->fechaInicioTx)) { // CONTROL DESDE INICIO TRATAMIENTO HASTA FIN VIGILANCIA POST TRATAMIENTO(fechaInicioTx-fechaFVPT) $sql = "SELECT fecha FROM control " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND fecha BETWEEN '" . formatFechaObj($paciente->fechaInicioTx, "Y-m-d") . "' AND '" . formatFechaObj($paciente->fechaFVPT, "Y-m-d") . "' " . " ORDER BY fecha ASC;"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { $tempFecha = strtotime(formatFechaObj($tablaBis["fecha"], 'Y-m-d')); $mesTemp = date("n", $tempFecha); $anoTemp = date("Y", $tempFecha); $diaTemp = date("j", $tempFecha); $arrControl[$anoTemp][$mesTemp] .= " " . $diaTemp; } } $mesVPT = -1; $yaPasoVPT = false; while ($anoActual < $anoFin) { $controlTx = new ControlTxReporteTrimestral(); $controlTx->ano = $anoActual; $controlTx->mes = $mesActual; if (!$yaPasoVPT) { $controlTx->valor = " No"; } if (!is_null($arrControl[$anoActual][$mesActual])) { $controlTx->valor = $arrControl[$anoActual][$mesActual]; } if ($mesIVPT == $mesActual && $anoIVPT == $anoActual) { $controlTx->valor = " IVPT"; $mesVPT = 0; $yaPasoVPT = true; } if ($mesVPT > -1 && $mesVPT < self::$mesesVPT + 1) { if ($mesVPT > 0) { $controlTx->valor = " IVPT" . $mesVPT; } $mesVPT += 1; } array_push($paciente->arrControlTx, $controlTx); // CONTROL INICIO TRATAMIENTO HASTA FIN VIGILANCIA POST TRATAMIENTO $mesActual += 1; if ($mesActual == 13) { $mesActual = 1; $anoActual += 1; } } if ($anoActual == $anoFin) { for ($mesActual = 1; $mesActual <= $mesFin; $mesActual++) { $controlTx = new ControlTxReporteTrimestral(); $controlTx->ano = $anoActual; $controlTx->mes = $m; //$controlTx->valor = "No"; if (!is_null($arrControl[$anoActual][$mesActual])) { $controlTx->valor = $arrControl[$anoActual][$mesActual]; } if ($mesActual == $mesFin) { $controlTx->valor = " FVPT"; } array_push($paciente->arrControlTx, $controlTx); // CONTROL INICIO TRATAMIENTO HASTA FIN VIGILANCIA POST TRATAMIENTO } } // CONTROL POST FIN VIGILANCIA TRATAMIENTO (> fechaFVPT) $sql = "SELECT c.fecha, cep.descipcion " . " FROM control c, catEstadoPaciente cep " . " WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND fecha > '" . formatFechaObj($paciente->fechaFVPT, "Y-m-d") . "'" . " AND cep.idCatEstadoPaciente = c.idCatEstadoPaciente" . " ORDER BY fecha ASC;"; //echo "<BR>" . $sql . "<BR>"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $paciente->error = true; $paciente->msgError = $consultaBis . " SQL:" . $sql; } else { while ($tablaBis = devuelveRowAssoc($consultaBis)) { //print_r($tablaBis); //die(); $tempFecha = strtotime(formatFechaObj($tablaBis["fecha"], 'Y-m-d')); $controlTx = new ControlTxReporteTrimestral(); $controlTx->ano = date("Y", $tempFecha); $controlTx->mes = date("n", $tempFecha); $controlTx->valor = $tablaBis["descripcion"]; $paciente->situacionTerminoTx = $tablaBis["descripcion"]; array_push($paciente->arrVigilanciaRevision, $controlTx); // CONTROL POST FIN VIGILANCIA TRATAMIENTO } } // #################################################################################################### CONTACTOS $sql = "SELECT COUNT(idContacto) AS cuenta FROM contactos WHERE idDiagnostico = " . $paciente->idDiagnostico . ";"; //echo "<BR>" . $sql . "<BR>"; $consultaBis = ejecutaQueryClases($sql); if (is_string($consultaBis)) { $this->error = true; $this->msgError = $consultaBis . " SQL:" . $sql; } else { $tabla = devuelveRowAssoc($consultaBis); $this->totalContactos += $tabla["cuenta"]; $paciente->totalContactos = $tabla["cuenta"]; for ($y = $anoIni; $y <= $anoFin; $y++) { /*$sql = "SELECT COUNT(idContacto) AS cuenta " . " FROM estudiosBac WHERE idDiagnostico = " . $paciente->idDiagnostico . " AND fechaResultado BETWEEN '" . $y . "/01/01' AND '" . $y . "/12/31';";*/ $sql = "SELECT COUNT( DISTINCT cc.idContacto) AS cuenta " . "FROM diagnostico d, contactos c, controlContacto cc " . "WHERE c.idDiagnostico = d.idDiagnostico " . "AND cc.idContacto = c.idContacto " . "AND cc.fecha BETWEEN '" . $y . "/01/01' AND '" . $y . "/12/31' " . "AND d.idDiagnostico = " . $paciente->idDiagnostico . ";"; //echo "<BR>" . $sql . "<BR>"; $consultaBis = ejecutaQueryClases($sql); $paciente->arrContactosExaminados[$y] = 0; if (is_string($consultaBis)) { $this->error = true; $this->msgError = $consultaBis . " SQL:" . $sql; $paciente->arrContactosExaminados[$y] = "Error"; } else { $tabla = devuelveRowAssoc($consultaBis); $totalContactos = $tabla["cuenta"]; $paciente->arrContactosExaminados[$y] = $tabla["cuenta"]; if ($y == date('Y')) { $paciente->totalContactosRevisados = $tabla["cuenta"]; $this->totalContactosRegistrados += $totalContactos; $this->totalContactosRevisados += $tabla["cuenta"]; } } $paciente->arrContactos[$y] = $paciente->totalContactos; } } // Para establecer la situacion al termino de tratamiento // si la fecha de fin de tratamiento es menor que la fecha actual if (cal_dif_fecha($paciente->fechaFinTx) > 0) { // asignamos el valor de la condicion acttual a la situacion al termino de tratamiento $paciente->situacionTerminoTx = $paciente->condicion; } } //var_dump($paciente); //die(); array_push($this->arrPacientesReporteTrimestral, $paciente); } } } }
function calEdad($fechaNac) { $dias = cal_dif_fecha($fechaNac); return intval($dias / 365); }