0, 'com_inconsistencias' => 0, 'total_envios' => 0, ]; $params = self::getParams(); $parametrizacao = Parametrizacao::first(); $registrosAplicacao = DB::table('integracao_ria_documento_imunologico_rotina') ->select([ 'integracao_ria_documento_imunologico_rotina.id AS documento_imunologico_rotina_id', DB::raw("DATE_FORMAT(integracao_ria_documento_imunologico_rotina.data_hora_envio, '%d/%m/%Y às %H:%i') AS data_hora_envio"), 'integracao_ria_documento_imunologico_rotina.identificador_rnds', 'integracao_ria_documento_imunologico_rotina.identificador_solicitante', 'integracao_ria_documento_imunologico_rotina.cns_solicitante', 'integracao_ria_documento_imunologico_rotina.identificador_documento', 'integracao_ria_documento_imunologico_rotina.identificador_composicao', 'integracao_ria_documento_imunologico_rotina.identificador_imunizacao', 'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia', DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura_nome"), 'cadastro_cidadao_usuario.nome AS usuario_nome', 'cadastro_cidadao_usuario.cns AS usuario_cns', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw("DATE_FORMAT(cadastro_cidadao_paciente.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"), 'cadastro_cidadao_paciente.cns AS paciente_cns', DB::raw('TIMESTAMPDIFF(YEAR, cadastro_cidadao_paciente.data_nascimento, imunizacao_registro_aplicacao.data_aplicacao) AS paciente_idade'), 'cadastro_sexo_paciente.descricao AS paciente_sexo', DB::raw("DATE_FORMAT(imunizacao_registro_aplicacao.data_aplicacao, '%d/%m/%Y') AS data"), 'cadastro_vacina.nome AS vacina_nome', 'cadastro_vacina.abreviacao AS vacina_abreviacao', 'cadastro_vacina.sigla AS vacina_sigla', 'imunizacao_entrada_vacina.lote', DB::raw("DATE_FORMAT(imunizacao_entrada_vacina.data_validade_lote, '%d/%m/%Y') AS data_validade_lote"), 'imunizacao_dose.nome AS dose_nome', 'imunizacao_grupo_atendimento.nome AS grupo_atendimento_nome', 'imunizacao_estrategia.nome AS estrategia_nome', 'imunizacao_produtor.nome AS produtor_nome', 'imunizacao_registro_aplicacao.gestante', 'imunizacao_registro_aplicacao.puerpera', 'integracao_ria_documento_imunologico_rotina.atualizado', DB::raw("IF(integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1, 'Substituição', 'Inicial') as tipo_envio"), 'cidadao_atualizacao.nome as usuario_atualizacao_nome', ]) ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_aplicacao.aplicador_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('cadastro_sexo AS cadastro_sexo_paciente', 'cadastro_sexo_paciente.id', 'cadastro_cidadao_paciente.sexo_id') ->join('cadastro_vacina', 'cadastro_vacina.id', 'imunizacao_entrada_vacina.vacina_id') ->join('imunizacao_dose', 'imunizacao_dose.id', 'imunizacao_registro_aplicacao.dose_id') ->join('imunizacao_estrategia', 'imunizacao_estrategia.id', 'imunizacao_registro_aplicacao.estrategia_id') ->join('imunizacao_produtor', 'imunizacao_produtor.id', 'imunizacao_entrada_vacina.produtor_id') ->join('cadastro_lotacao AS lotacao_atualizacao', 'lotacao_atualizacao.id', 'imunizacao_registro_aplicacao.updated_lotacao_id') ->join('cadastro_usuario AS usuario_atualizacao', 'usuario_atualizacao.id', 'lotacao_atualizacao.usuario_id') ->join('cadastro_cidadao AS cidadao_atualizacao', 'cidadao_atualizacao.id', 'usuario_atualizacao.cidadao_id') ->leftJoin('imunizacao_grupo_atendimento', 'imunizacao_grupo_atendimento.id', 'imunizacao_registro_aplicacao.grupo_atendimento_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_unidade.id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('cadastro_usuario.id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao_paciente.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('cadastro_vacina.id', $vacinaId) ) ->when($params->status, function($query) use ($params) { if ($params->status === 'com_inconsistencia') { $query->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } else if ($params->status === 'sem_inconsistencia') { $query->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } }) ->when($params->tipo_envio === 'inicial', fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', false) ->where('integracao_ria_documento_imunologico_rotina.tentou_substituir', false) ) ->when($params->tipo_envio === 'substituicao', fn ($q) => $q ->where(fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', true) ->orWhere('integracao_ria_documento_imunologico_rotina.tentou_substituir', true) ) ) ->when($params->situacao_envio === 'rejeitado', fn ($q) => $q ->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ) ->when($params->situacao_envio === 'corrigido_e_reenviado', fn ($q) => $q ->where(fn ($q) => $q ->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ->where('integracao_ria_documento_imunologico_rotina.atualizado', true) ) ) ->when($params->situacao_envio === 'enviado', fn ($q) => $q ->where(fn ($q) => $q ->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ->where('integracao_ria_documento_imunologico_rotina.atualizado', false) ) ); $registrosAtualizacao = DB::table('integracao_ria_documento_imunologico_rotina') ->select([ 'integracao_ria_documento_imunologico_rotina.id AS documento_imunologico_rotina_id', DB::raw("DATE_FORMAT(integracao_ria_documento_imunologico_rotina.data_hora_envio, '%d/%m/%Y às %H:%i') AS data_hora_envio"), 'integracao_ria_documento_imunologico_rotina.identificador_rnds', 'integracao_ria_documento_imunologico_rotina.identificador_solicitante', 'integracao_ria_documento_imunologico_rotina.cns_solicitante', 'integracao_ria_documento_imunologico_rotina.identificador_documento', 'integracao_ria_documento_imunologico_rotina.identificador_composicao', 'integracao_ria_documento_imunologico_rotina.identificador_imunizacao', 'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia', DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura_nome"), 'cadastro_cidadao_usuario.nome AS usuario_nome', 'cadastro_cidadao_usuario.cns AS usuario_cns', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw("DATE_FORMAT(cadastro_cidadao_paciente.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"), 'cadastro_cidadao_paciente.cns AS paciente_cns', DB::raw('TIMESTAMPDIFF(YEAR, cadastro_cidadao_paciente.data_nascimento, imunizacao_registro_atualizacao.data_atualizacao) AS paciente_idade'), 'cadastro_sexo_paciente.descricao AS paciente_sexo', DB::raw("DATE_FORMAT(imunizacao_registro_atualizacao.data_atualizacao, '%d/%m/%Y') AS data"), 'cadastro_vacina.nome AS vacina_nome', 'cadastro_vacina.abreviacao AS vacina_abreviacao', 'cadastro_vacina.sigla AS vacina_sigla', DB::raw("NULL AS lote"), DB::raw("NULL AS data_validade_lote"), 'imunizacao_dose.nome AS dose_nome', 'imunizacao_grupo_atendimento.nome AS grupo_atendimento_nome', 'imunizacao_estrategia.nome AS estrategia_nome', DB::raw("NULL AS produtor_nome"), DB::raw("FALSE AS gestante"), DB::raw("FALSE AS puerpera"), 'integracao_ria_documento_imunologico_rotina.atualizado', DB::raw("IF(integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1, 'Substituição', 'Inicial') as tipo_envio"), 'cidadao_atualizacao.nome as usuario_atualizacao_nome', ]) ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_atualizacao.aplicador_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('cadastro_sexo AS cadastro_sexo_paciente', 'cadastro_sexo_paciente.id', 'cadastro_cidadao_paciente.sexo_id') ->join('cadastro_vacina', 'cadastro_vacina.id', 'imunizacao_registro_atualizacao.vacina_id') ->join('imunizacao_dose', 'imunizacao_dose.id', 'imunizacao_registro_atualizacao.dose_id') ->join('imunizacao_estrategia', 'imunizacao_estrategia.id', 'imunizacao_registro_atualizacao.estrategia_id') ->join('cadastro_lotacao AS lotacao_atualizacao', 'lotacao_atualizacao.id', 'imunizacao_registro_atualizacao.updated_lotacao_id') ->join('cadastro_usuario AS usuario_atualizacao', 'usuario_atualizacao.id', 'lotacao_atualizacao.usuario_id') ->join('cadastro_cidadao AS cidadao_atualizacao', 'cidadao_atualizacao.id', 'usuario_atualizacao.cidadao_id') ->leftJoin('imunizacao_grupo_atendimento', 'imunizacao_grupo_atendimento.id', 'imunizacao_registro_atualizacao.grupo_atendimento_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_unidade.id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('cadastro_usuario.id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao_paciente.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('cadastro_vacina.id', $vacinaId) ) ->when($params->status, function($query) use ($params) { if ($params->status === 'com_inconsistencia') { $query->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } else if ($params->status === 'sem_inconsistencia') { $query->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } }) ->when($params->tipo_envio === 'inicial', fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', false) ->where('integracao_ria_documento_imunologico_rotina.tentou_substituir', false) ) ->when($params->tipo_envio === 'substituicao', fn ($q) => $q ->where(fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', true) ->orWhere('integracao_ria_documento_imunologico_rotina.tentou_substituir', true) ) ) ->when($params->situacao_envio === 'rejeitado', fn ($q) => $q ->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ) ->when($params->situacao_envio === 'corrigido_e_reenviado', fn ($q) => $q ->where(fn ($q) => $q ->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ->where('integracao_ria_documento_imunologico_rotina.atualizado', true) ) ) ->when($params->situacao_envio === 'enviado', fn ($q) => $q ->where(fn ($q) => $q ->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ) ->where('integracao_ria_documento_imunologico_rotina.atualizado', false) ) ); $resultado = $registrosAplicacao->union($registrosAtualizacao) ->get() ->map(function($query) use ($parametrizacao, &$totalizadores) { $inconsistencias = []; DB::table('integracao_ria_documento_imunologico_rotina_resposta') ->select(['resposta']) ->where('documento_imunologico_rotina_id', $query->documento_imunologico_rotina_id) ->get() ->each(function($documentoImunologicoRotinaResposta) use (&$inconsistencias) { $resposta = null; if (preg_match("/\(([^)]+)\)\s(.+)/", $documentoImunologicoRotinaResposta->resposta, $matches)) { $resposta = DB::table('integracao_ria_resposta') ->select(['descricao']) ->where('codigo', str_replace('EHR-', '', $matches[1])) ->first()->descricao ?? $documentoImunologicoRotinaResposta->resposta; } else { $resposta = $documentoImunologicoRotinaResposta->resposta; } $inconsistencias[] = ['resposta' => $resposta]; }); $query->inconsistencias = $inconsistencias; $query->usuario_cns = MaskUtil::getCnsMasked($query->usuario_cns); $query->paciente_cns = MaskUtil::getCnsMasked($query->paciente_cns); switch($parametrizacao->parametrizacao_descricao_vacina_id ?? null) { case ParametrizacaoDescricaoVacina::DESCRICAO: $query->vacina = $query->vacina_nome; break; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: $query->vacina = $query->vacina_abreviacao; break; case ParametrizacaoDescricaoVacina::SIGLA: $query->vacina = $query->vacina_sigla; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: $query->vacina = "$query->vacina_sigla - $query->vacina_nome"; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: $query->vacina = "$query->vacina_sigla - $query->vacina_abreviacao"; break; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: $query->vacina = "$query->vacina_abreviacao - $query->vacina_nome"; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: $query->vacina = "$query->vacina_sigla - $query->vacina_abreviacao - $query->vacina_nome"; break; default: $query->vacina = $query->vacina_nome; break; } if (sizeof($inconsistencias) === 0) { $totalizadores['sem_inconsistencias'] = $totalizadores['sem_inconsistencias'] + 1; } else { $totalizadores['com_inconsistencias'] = $totalizadores['com_inconsistencias'] + 1; } $totalizadores['total_envios'] = $totalizadores['total_envios'] + 1; unset($query->vacina_nome); unset($query->vacina_abreviacao); unset($query->vacina_sigla); if (!is_null($query->identificador_rnds)) { $query->identificador_rnds = basename(parse_url($query->identificador_rnds, PHP_URL_PATH)); } $query->situacao_envio = sizeof($inconsistencias) === 0 ? (!!$query->atualizado ? 'Corrigido e reenviado' : 'Enviado') : 'Rejeitado'; return $query; }); return ['resultado' => $resultado, 'totalizadores' => $totalizadores]; } public static function create() { return [ 'form' => [ 'unidades' => [], 'infraestruturas' => [], 'usuarios' => [], 'sexos' => [], 'vacinas' => [], 'status' => [], 'tipos_envio' => [], 'situacoes_envio' => [], ], 'model' => [ 'periodo_envio' => ['start' => null, 'end' => null], 'periodo_aplicacao' => ['start' => null, 'end' => null], 'unidade_id' => null, 'infraestrutura_id' => null, 'usuario_id' => null, 'sexo_id' => null, 'prontuario' => null, 'vacina_id' => null, 'status' => null, 'tipo_envio' => null, 'situacao_envio' => null, ], ]; } public static function list() { $params = self::getParams(); switch (request()->listar) { case 'unidades': { return [ 'unidades' => self::getUnidades($params), 'infraestruturas' => self::getInfraestruturas($params), 'usuarios' => self::getUsuarios($params), 'sexos' => self::getSexos($params), 'vacinas' => self::getVacinas($params), 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'infraestruturas': { return [ 'infraestruturas' => self::getInfraestruturas($params), 'usuarios' => self::getUsuarios($params), 'sexos' => self::getSexos($params), 'vacinas' => self::getVacinas($params), 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'usuarios': { return [ 'usuarios' => self::getUsuarios($params), 'sexos' => self::getSexos($params), 'vacinas' => self::getVacinas($params), 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'sexos': { return [ 'sexos' => self::getSexos($params), 'vacinas' => self::getVacinas($params), 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'vacinas': { return [ 'vacinas' => self::getVacinas($params), 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'status': { return [ 'status' => self::getStatus($params), 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'tipos_envio': { return [ 'tipos_envio' => self::getTiposEnvio($params), 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } case 'situacoes_envio': { return [ 'situacoes_envio' => self::getSituacoesEnvio($params), ]; } } } private static function getParams() { return (object) [ 'periodo_envio' => [ 'start' => request()->get('periodo_envio') && request()->get('periodo_envio')['start'] ? Carbon::createFromFormat('d/m/Y', request()->get('periodo_envio')['start'])->setTime(0, 0, 0) : null, 'end' => request()->get('periodo_envio') && request()->get('periodo_envio')['end'] ? Carbon::createFromFormat('d/m/Y', request()->get('periodo_envio')['end'])->setTime(23, 59, 59) : null, ], 'periodo_aplicacao' => [ 'start' => request()->get('periodo_aplicacao') && request()->get('periodo_aplicacao')['start'] ? Carbon::createFromFormat('d/m/Y', request()->get('periodo_aplicacao')['start'])->setTime(0, 0, 0) : null, 'end' => request()->get('periodo_aplicacao') && request()->get('periodo_aplicacao')['end'] ? Carbon::createFromFormat('d/m/Y', request()->get('periodo_aplicacao')['end'])->setTime(23, 59, 59) : null, ], 'unidade_id' => request()->get('unidade_id'), 'infraestrutura_id' => request()->get('infraestrutura_id'), 'usuario_id' => request()->get('usuario_id'), 'prontuario' => request()->get('prontuario'), 'sexo_id' => request()->get('sexo_id'), 'vacina_id' => request()->get('vacina_id'), 'status' => request()->get('status'), 'tipo_envio' => request()->get('tipo_envio'), 'situacao_envio' => request()->get('situacao_envio'), ]; } private static function getUnidades($params) { return DB::table('cadastro_unidade') ->select([ 'cadastro_unidade.id', 'cadastro_unidade.nome_fantasia', ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ) ) ->orderBy('cadastro_unidade.nome_fantasia') ->get(); } private static function getInfraestruturas($params) { return DB::table('cadastro_infraestrutura') ->select([ 'cadastro_infraestrutura.id', DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome"), ]) ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->where('cadastro_infraestrutura.unidade_id', $params->unidade_id) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->whereColumn('imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_infraestrutura.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->whereColumn('imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_infraestrutura.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ) ) ->orderByRaw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)') ->get(); } private static function getUsuarios($params) { return DB::table('cadastro_usuario') ->select([ 'cadastro_usuario.id', 'cadastro_cidadao.nome', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->whereColumn('imunizacao_registro_aplicacao.aplicador_id', 'cadastro_usuario.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->whereColumn('imunizacao_registro_atualizacao.aplicador_id', 'cadastro_usuario.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ) ) ->orderBy('cadastro_cidadao.nome') ->get(); } private static function getSexos($params) { return DB::table('cadastro_sexo') ->select([ 'cadastro_sexo.id', 'cadastro_sexo.descricao', ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('cadastro_cidadao.sexo_id', 'cadastro_sexo.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('cadastro_cidadao.sexo_id', 'cadastro_sexo.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ) ) ->orderBy('cadastro_sexo.descricao') ->get(); } private static function getVacinas($params) { $parametrizacao = Parametrizacao::first(); return DB::table('cadastro_vacina') ->select([ 'cadastro_vacina.id', 'cadastro_vacina.nome', 'cadastro_vacina.abreviacao', 'cadastro_vacina.sigla', ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_entrada_vacina.vacina_id', 'cadastro_vacina.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina') ->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_atualizacao.vacina_id', 'cadastro_vacina.id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ) ) ->orderBy('cadastro_vacina.nome') ->get() ->map(function($query) use ($parametrizacao) { switch($parametrizacao->parametrizacao_descricao_vacina_id ?? null) { case ParametrizacaoDescricaoVacina::DESCRICAO: $query->vacina = $query->nome; break; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: $query->vacina = $query->abreviacao; break; case ParametrizacaoDescricaoVacina::SIGLA: $query->vacina = $query->sigla; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: $query->vacina = "$query->sigla - $query->nome"; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: $query->vacina = "$query->sigla - $query->abreviacao"; break; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: $query->vacina = "$query->abreviacao - $query->nome"; break; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: $query->vacina = "$query->sigla - $query->abreviacao - $query->nome"; break; default: $query->vacina = $query->nome; break; unset($query->nome); unset($query->abreviacao); unset($query->sigla); } return $query; }); } private static function getStatus($params) { return DB::table('integracao_ria_documento_imunologico_rotina') ->select([ DB::raw(" COALESCE(( SELECT 'com_inconsistencia' FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'sem_inconsistencia') AS value, COALESCE(( SELECT 'Com inconsistência' FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'Sem inconsistência') AS text "), ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_entrada_vacina.vacina_id', $vacinaId) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_atualizacao') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_registro_atualizacao.vacina_id', $vacinaId) ) ) ) ->groupBy([ DB::raw(" COALESCE(( SELECT 'com_inconsistencia' FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'sem_inconsistencia'), COALESCE(( SELECT 'Com inconsistência' FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'Sem inconsistência') "), ]) ->get(); } private static function getTiposEnvio($params) { return DB::table('integracao_ria_documento_imunologico_rotina') ->select([ DB::raw(" ( CASE WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0 THEN 'inicial' WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1 THEN 'substituicao' END ) AS value, ( CASE WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0 THEN 'Inicial' WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1 THEN 'Substituição' END ) AS text "), ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_entrada_vacina.vacina_id', $vacinaId) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_atualizacao') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_registro_atualizacao.vacina_id', $vacinaId) ) ) ) ->when($params->status, function($query) use ($params) { if ($params->status === 'com_inconsistencia') { $query->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } else if ($params->status === 'sem_inconsistencia') { $query->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } }) ->groupBy([ DB::raw(" ( CASE WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0 THEN 'inicial' WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1 THEN 'substituicao' END ), ( CASE WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0 THEN 'Inicial' WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1 THEN 'Substituição' END ) ") ]) ->get(); } private static function getSituacoesEnvio($params) { return DB::table('integracao_ria_documento_imunologico_rotina') ->select([ DB::raw(" IF(( SELECT 1 FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'rejeitado', IF(integracao_ria_documento_imunologico_rotina.atualizado = 1, 'corrigido_e_reenviado', 'enviado')) AS value, IF(( SELECT 1 FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'Rejeitado', IF(integracao_ria_documento_imunologico_rotina.atualizado = 1, 'Corrigido e reenviado', 'Enviado')) AS text "), ]) ->where(fn ($q) => $q ->whereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_aplicacao.data_aplicacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_entrada_vacina.vacina_id', $vacinaId) ) ) ->orWhereExists(fn ($q) => $q ->select(DB::raw(1)) ->from('imunizacao_registro_atualizacao') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereColumn('imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id') ->when($params->periodo_envio['start'] && $params->periodo_envio['end'], fn ($q) => $q ->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo_envio) ) ->when($params->periodo_aplicacao['start'] && $params->periodo_aplicacao['end'], fn ($q) => $q ->whereBetween('imunizacao_registro_atualizacao.data_atualizacao', $params->periodo_aplicacao) ) ->when($params->unidade_id, fn ($q, $unidadeId) => $q ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ) ->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q ->where('cadastro_infraestrutura.id', $infraestruturaId) ) ->when($params->usuario_id, fn ($q, $usuarioId) => $q ->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId) ) ->when($params->prontuario, fn ($q, $prontuario) => $q ->where('cadastro_paciente.prontuario', $prontuario) ) ->when($params->sexo_id, fn ($q, $sexoId) => $q ->where('cadastro_cidadao.sexo_id', $sexoId) ) ->when($params->vacina_id, fn ($q, $vacinaId) => $q ->where('imunizacao_registro_atualizacao.vacina_id', $vacinaId) ) ) ) ->when($params->status, function($query) use ($params) { if ($params->status === 'com_inconsistencia') { $query->whereExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } else if ($params->status === 'sem_inconsistencia') { $query->whereNotExists(fn ($q) => $q->select(DB::raw(1)) ->from('integracao_ria_documento_imunologico_rotina_resposta') ->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id') ); } }) ->when($params->tipo_envio === 'inicial', fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', false) ->where('integracao_ria_documento_imunologico_rotina.tentou_substituir', false) ) ->when($params->tipo_envio === 'substituicao', fn ($q) => $q ->where(fn ($q) => $q ->where('integracao_ria_documento_imunologico_rotina.atualizado', true) ->orWhere('integracao_ria_documento_imunologico_rotina.tentou_substituir', true) ) ) ->groupBy([ DB::raw(" IF(( SELECT 1 FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'rejeitado', IF(integracao_ria_documento_imunologico_rotina.atualizado = 1, 'corrigido_e_reenviado', 'enviado')), IF(( SELECT 1 FROM integracao_ria_documento_imunologico_rotina_resposta WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id LIMIT 1 ), 'Rejeitado', IF(integracao_ria_documento_imunologico_rotina.atualizado = 1, 'Corrigido e reenviado', 'Enviado')) ") ]) ->get(); } public static function getPrintData() { $unidade = Unidade::find(request()->get('unidade_id')); $infraestrutura = Infraestrutura::find(request()->get('infraestrutura_id')); $usuario = Usuario::find(request()->get('usuario_id')); $paciente = request()->get('prontuario') ? Paciente::where('prontuario', request()->get('prontuario'))->first() : null; $sexo = Sexo::find(request()->get('sexo_id')); $vacina = Vacina::find(request()->get('vacina_id')); $status = null; if (request()->get('status')) { if (request()->get('status') === 'com_inconsistencia') { $status = 'Com inconsistência'; } else if (request()->get('status') === 'sem_inconsistencia') { $status = 'Sem inconsistência'; } } else { $status = 'Todos'; } $tipoEnvio = null; if (request()->get('tipo_envio')) { if (request()->get('tipo_envio') === 'inicial') { $tipoEnvio = 'Inicial'; } else if (request()->get('tipo_envio') === 'substituicao') { $tipoEnvio = 'Substituição'; } } else { $tipoEnvio = 'Todos'; } $situacaoEnvio = null; if (request()->get('situacao_envio')) { if (request()->get('situacao_envio') === 'rejeitado') { $situacaoEnvio = 'Rejeitado'; } else if (request()->get('situacao_envio') === 'corrigido_e_reenviado') { $situacaoEnvio = 'Corrigido e reenviado'; } else if (request()->get('situacao_envio') === 'enviado') { $situacaoEnvio = 'Enviado'; } } else { $situacaoEnvio = 'Todas'; } return [ 'periodo_envio' => [ 'inicio' => request()->periodo_envio['start'], 'fim' => request()->periodo_envio['end'], ], 'periodo_aplicacao' => [ 'inicio' => request()->periodo_aplicacao['start'], 'fim' => request()->periodo_aplicacao['end'], ], 'unidade_nome_fantasia' => $unidade->nome_fantasia ?? 'Todas', 'infraestrutura_nome' => $infraestrutura->nome ?? 'Todos', 'usuario_nome' => $usuario->cidadao->nome ?? 'Todos', 'paciente_prontuario' => $paciente->prontuario ?? '-', 'sexo' => $sexo->descricao ?? 'Todos', 'vacina_nome' => $vacina->nome ?? 'Todas', 'status' => $status, 'tipo_envio' => $tipoEnvio, 'situacao_envio' => $situacaoEnvio, 'itens' => self::index(), 'colunas' => collect(request()->selected_cols), ]; } public static function getPrintExportData() { return self::getPrintData(); } }