0, 'pacientes' => 0, 'infraestruturas_solicitantes' => 0, 'prestadores' => 0, 'por_status' => collect(), ]; $params = self::getParams(); $solicitacoesBuilder = DB::table('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join('regulacao_status as status', 'status.id', 'solicitacao.status_id') ->join('regulacao_solicitacao_prioridade as prioridade', 'prioridade.id', 'solicitacao.prioridade_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_unidade as unidade_reguladora', 'unidade_reguladora.id', 'infraestrutura_reguladora.unidade_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->join( 'cadastro_unidade as unidade_solicitante', 'unidade_solicitante.id', 'infraestrutura_solicitante.unidade_id' ) ->join( 'cadastro_usuario as usuario_solicitante', 'usuario_solicitante.id', 'solicitacao.usuario_solicitante_id' ) ->join( 'cadastro_cidadao as usuario_cidadao_solicitante', 'usuario_cidadao_solicitante.id', 'usuario_solicitante.cidadao_id' ) ->join( 'cadastro_lotacao as lotacao_solicitacao', 'lotacao_solicitacao.id', 'solicitacao.created_lotacao_id' ) ->join( 'cadastro_usuario as usuario_solicitacao', 'usuario_solicitacao.id', 'lotacao_solicitacao.usuario_id' ) ->join( 'cadastro_cidadao as usuario_cidadao_solicitacao', 'usuario_cidadao_solicitacao.id', 'usuario_solicitacao.cidadao_id' ) ->join('regulacao_solicitacao_item as item', 'item.solicitacao_id', 'solicitacao.id') ->leftJoin('sigtap.cid as cid', 'cid.id', 'solicitacao.cid_id') ->leftJoin('geral_ciap as ciap', 'ciap.id', 'solicitacao.ciap_id') ->leftJoin('cadastro_sexo as paciente_sexo', 'paciente_sexo.id', 'paciente_cidadao.sexo_id') ->leftJoin( 'regulacao_parametrizacao_prestador_interno as prestador_interno', 'prestador_interno.id', 'solicitacao.prestador_interno_id' ) ->leftJoin( 'cadastro_infraestrutura as prestador_interno_infraestrutura', 'prestador_interno_infraestrutura.id', 'prestador_interno.infraestrutura_id' ) ->leftJoin( 'cadastro_unidade as prestador_interno_unidade', 'prestador_interno_unidade.id', 'prestador_interno_infraestrutura.unidade_id' ) ->leftJoin( 'regulacao_parametrizacao_prestador_externo as prestador_externo', 'prestador_externo.id', 'solicitacao.prestador_externo_id' ) ->leftJoin( 'transporte_paciente_destino as prestador_externo_destino', 'prestador_externo_destino.id', 'prestador_externo.destino_id' ) ->leftJoin('parametrizacao_exame as exame', 'exame.id', 'item.exame_id') ->leftJoin( 'parametrizacao_procedimento_cirurgico as procedimento_cirurgico', 'procedimento_cirurgico.id', 'item.procedimento_cirurgico_id' ) ->leftJoin('cadastro_especialidade as especialidade', 'especialidade.id', 'item.especialidade_id') ->leftJoin('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'especialidade.ocupacao_id') ->leftJoin( 'ambulatorio_acompanhamento_oci as acompanhamento_oci', 'acompanhamento_oci.id', 'solicitacao.acompanhamento_oci_id' ) ->leftJoin( 'cadastro_especialidade as especialidade_solicitante', 'especialidade_solicitante.id', 'solicitacao.usuario_solicitante_especialidade_id' ) ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ->where(fn ($q) => $q ->whereIn('item.exame_id', $params->exames) ->orWhereIn('item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('item.especialidade_id', $params->especialidades) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ->when($params->cid_id, fn ($q, $id) => $q->where('solicitacao.cid_id', $id)) ->when($params->ciap_id, fn ($q, $id) => $q->where('solicitacao.ciap_id', $id)) ->whereIn('paciente_cidadao.sexo_id', $params->sexos) ->when(!empty($params->ocis), fn ($q) => $q ->when($params->todas_ocis_selecionadas, fn ($q) => $q->where(fn ($q) => $q ->whereIn('acompanhamento_oci.oci_id', $params->ocis) ->orWhereNull('acompanhamento_oci.id') ), fn ($q) => $q->whereIn('acompanhamento_oci.oci_id', $params->ocis) ) ) ->when(!empty($params->etapas_clinicas), fn ($q) => $q ->when($params->todas_etapas_clinicas_selecionadas, fn ($q) => $q->where(fn ($q) => $q ->whereIn('acompanhamento_oci.etapa_clinica_atual_id', $params->etapas_clinicas) ->orWhereNull('acompanhamento_oci.id') ), fn ($q) => $q->whereIn('acompanhamento_oci.etapa_clinica_atual_id', $params->etapas_clinicas) ) ) ->selectRaw(" solicitacao.id, " . (count($params->reguladores) === 1 ? "IFNULL(LPAD(solicitacao.posicao_regulador, 6, '0'), '—')" : "IFNULL(LPAD(solicitacao.posicao_municipal, 6, '0'), '—')" ) . " as posicao, solicitacao.data, solicitacao.data_agendada, paciente.id as paciente_id, CONCAT( paciente_cidadao.nome, IF(paciente_cidadao.nome_social IS NULL, '', CONCAT(' (', paciente_cidadao.nome_social, ')') ) ) as paciente_nome, LPAD(paciente.prontuario, 7, 0) AS paciente_prontuario, CONCAT(TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, CURRENT_DATE), ' anos') as paciente_idade, paciente_sexo.descricao as sexo_descricao, paciente_cidadao.cpf as paciente_cpf, paciente_cidadao.cns as paciente_cns, cid.codigo as cid_codigo, cid.nome as cid_nome, ciap.codigo as ciap_codigo, ciap.descricao as ciap_descricao, status.id as status_id, status.nome as status_nome, infraestrutura_solicitante.id as infraestrutura_solicitante_id, COALESCE(infraestrutura_solicitante.nome, unidade_solicitante.nome_fantasia) as infraestrutura_solicitante_nome, COALESCE(infraestrutura_reguladora.nome, unidade_reguladora.nome_fantasia) as regulador_nome, usuario_cidadao_solicitante.nome as usuario_solicitante_nome, solicitacao.prestador_interno_id, solicitacao.prestador_externo_id, ( CASE WHEN solicitacao.prestador_interno_id IS NOT NULL THEN IF (prestador_interno_infraestrutura.nome IS NULL, prestador_interno_unidade.nome_fantasia, CONCAT(prestador_interno_unidade.nome_fantasia, ' (', prestador_interno_infraestrutura.nome, ')') ) WHEN solicitacao.prestador_externo_id IS NOT NULL THEN prestador_externo_destino.descricao_destino ELSE NULL END ) as prestador_nome, usuario_cidadao_solicitacao.nome as usuario_cadastro_nome, TIMESTAMPDIFF( DAY, ( SELECT STR_TO_DATE(CONCAT(solicitacao_historico.data, ' 00:00:00'), '%Y-%m-%d %H:%i:%s') FROM regulacao_solicitacao_historico as solicitacao_historico JOIN regulacao_status solicitacao_historico_status ON solicitacao_historico_status.id = solicitacao_historico.status_id WHERE solicitacao_historico.solicitacao_id = solicitacao.id AND solicitacao_historico_status.tipo_id = " . StatusTipo::SOLICITADO . " ORDER BY solicitacao_historico.created_at LIMIT 1 ), COALESCE(( SELECT solicitacao_historico.created_at FROM regulacao_solicitacao_historico as solicitacao_historico JOIN regulacao_status solicitacao_historico_status ON solicitacao_historico_status.id = solicitacao_historico.status_id WHERE solicitacao_historico.solicitacao_id = solicitacao.id AND solicitacao_historico_status.tipo_id IN ( " . StatusTipo::AGENDADO . ", " . StatusTipo::REAGENDADO . " ) ORDER BY solicitacao_historico.created_at LIMIT 1 ), CURRENT_TIMESTAMP) ) as tempo_espera, prioridade.nome as prioridade_nome, LAST_DAY(DATE_ADD(CAST(acompanhamento_oci.iniciado_em AS DATE), INTERVAL 1 MONTH)) AS data_vencimento_oci, IF(acompanhamento_oci.etapa_clinica_atual_id = " . EtapaClinicaEnum::ALTA . ", NULL, TIMESTAMPDIFF(DAY, CURRENT_DATE, LAST_DAY(DATE_ADD(CAST(acompanhamento_oci.iniciado_em AS DATE), INTERVAL 1 MONTH)) ) ) AS dias_restantes_oci, IF(acompanhamento_oci.etapa_clinica_atual_id = " . EtapaClinicaEnum::ALTA . ", 1, 0) AS has_alta_oci, IF(solicitacao.acompanhamento_oci_id IS NULL, 0, 1) as has_oci, especialidade_solicitante.nome AS especialidade_solicitante_nome, ( SELECT GROUP_CONCAT(cct.numero SEPARATOR '#') FROM cadastro_cidadao_telefone cct WHERE cct.cidadao_id = paciente_cidadao.id AND cct.deleted_at IS NULL ) as telefones, GROUP_CONCAT(DISTINCT ( CASE WHEN item.exame_id IS NOT NULL THEN IF (exame.codigo IS NULL OR exame.codigo = '', exame.nome, CONCAT( CONCAT( SUBSTR(exame.codigo, 1, 2), '.', SUBSTR(exame.codigo, 3, 2), '.', SUBSTR(exame.codigo, 5, 2), '.', SUBSTR(exame.codigo, 7, 3), '-', SUBSTR(exame.codigo, 10, 1) ), ' - ', exame.nome ) ) WHEN item.procedimento_cirurgico_id IS NOT NULL THEN CONCAT( CONCAT( SUBSTR(procedimento_cirurgico.procedimento_codigo, 1, 2), '.', SUBSTR(procedimento_cirurgico.procedimento_codigo, 3, 2), '.', SUBSTR(procedimento_cirurgico.procedimento_codigo, 5, 2), '.', SUBSTR(procedimento_cirurgico.procedimento_codigo, 7, 3), '-', SUBSTR(procedimento_cirurgico.procedimento_codigo, 10, 1) ), ' - ', procedimento_cirurgico.nome ) WHEN item.especialidade_id IS NOT NULL THEN CONCAT(ocupacao.codigo, ' - ', especialidade.nome) END ) SEPARATOR '#') AS itens ") ->groupByRaw(" solicitacao.id, posicao, solicitacao.data, solicitacao.data_agendada, paciente.id, paciente_nome, paciente_prontuario, paciente_idade, paciente_sexo.descricao, paciente_cidadao.cpf, paciente_cidadao.cns, cid.codigo, cid.nome, ciap.codigo, ciap.descricao, status.id, status.nome, infraestrutura_solicitante.id, infraestrutura_solicitante_nome, regulador_nome, usuario_cidadao_solicitante.nome, solicitacao.prestador_interno_id, solicitacao.prestador_externo_id, prestador_nome, usuario_cidadao_solicitacao.nome, tempo_espera, prioridade.nome, data_vencimento_oci, dias_restantes_oci, has_alta_oci, has_oci, especialidade_solicitante.nome, telefones "); self::setOrderBy($solicitacoesBuilder); $solicitacoes = $solicitacoesBuilder->get(); $totalizadores->solicitacoes = $solicitacoes->count(); $totalizadores->pacientes = $solicitacoes->pluck('paciente_id')->unique()->filter()->count(); $totalizadores->infraestruturas_solicitantes = $solicitacoes->pluck('infraestrutura_solicitante_id')->unique()->filter()->count(); $totalizadores->prestadores = $solicitacoes->pluck('prestador_interno_id')->unique()->filter()->count() + $solicitacoes->pluck('prestador_externo_id')->unique()->filter()->count(); $totalizadores->por_status = $solicitacoes ->groupBy('status_id') ->map(fn ($solicitacao) => (object) [ 'nome' => $solicitacao->first()->status_nome, 'quantidade' => $solicitacao->count(), ]) ->sortBy('nome') ->values(); $solicitacoes->each(function ($solicitacao) { $solicitacao->paciente_cpf = MaskUtil::getCpfMasked($solicitacao->paciente_cpf); $solicitacao->paciente_cns = MaskUtil::getCnsMasked($solicitacao->paciente_cns); $solicitacao->cid = is_null($solicitacao->cid_nome) ? null : (MaskUtil::getCidMasked($solicitacao->cid_codigo) . " - {$solicitacao->cid_nome}"); $solicitacao->ciap = is_null($solicitacao->ciap_descricao) ? null : "{$solicitacao->ciap_codigo} - {$solicitacao->ciap_descricao}"; $solicitacao->tempo_espera = self::getTempoEsperaText($solicitacao); $solicitacao->itens = explode('#', $solicitacao->itens); $solicitacao->has_alta_oci = (bool) $solicitacao->has_alta_oci; $solicitacao->has_oci = (bool) $solicitacao->has_oci; $solicitacao->is_oci_vencida = (is_null($solicitacao->data_vencimento_oci) || $solicitacao->has_alta_oci) ? false : (Carbon::now() > Carbon::create($solicitacao->data_vencimento_oci)->endOfDay()); $solicitacao->dias_restantes_oci = is_null($solicitacao->dias_restantes_oci) ? null : ($solicitacao->dias_restantes_oci < 0 ? 0 : $solicitacao->dias_restantes_oci); $solicitacao->telefones = collect(explode('#', $solicitacao->telefones))->map(function ($telefone) { return MaskUtil::getPhoneMasked($telefone); })->join(', '); unset( $solicitacao->cid_codigo, $solicitacao->cid_nome, $solicitacao->ciap_codigo, $solicitacao->ciap_descricao, $solicitacao->paciente_id, $solicitacao->infraestrutura_solicitante_id, $solicitacao->prestador_interno_id, $solicitacao->prestador_externo_id, $solicitacao->status_id ); }); return compact('solicitacoes', 'totalizadores'); } private static function getTempoEsperaText($solicitacao) { if ($solicitacao->tempo_espera === 0) { return 'MESMO DIA'; } $meses = floor($solicitacao->tempo_espera / 30); $dias = $solicitacao->tempo_espera % 30; $mesesText = $meses > 0 ? ($meses > 1 ? "{$meses} meses" : "{$meses} mês") : null; $diasText = $dias > 0 ? ($dias > 1 ? "{$dias} dias" : "{$dias} dia") : null; return is_null($mesesText) ? $diasText : $mesesText . (is_null($diasText) ? '' : " e {$diasText}"); } private static function setOrderBy($builder) { if (is_null(request()->sortBy)) { $builder->orderByRaw('solicitacao.id'); return; } $columns = [ 'data' => 'solicitacao.data', 'posicao' => 'posicao', 'data_agendada' => 'solicitacao.data_agendada', 'paciente_nome' => 'paciente_nome', 'paciente_prontuario' => 'paciente_prontuario', 'paciente_idade' => 'paciente_idade', 'sexo_descricao' => 'paciente_sexo.descricao', 'paciente_cpf' => 'paciente_cidadao.cpf', 'paciente_cns' => 'paciente_cidadao.cns', 'cid' => "CONCAT(cid.codigo, ' - ', cid.nome)", 'ciap' => "CONCAT(ciap.codigo, ' - ', ciap.descricao)", 'status_nome' => 'status.nome', 'infraestrutura_solicitante_nome' => 'infraestrutura_solicitante_nome', 'regulador_nome' => 'regulador_nome', 'usuario_solicitante_nome' => 'usuario_cidadao_solicitante.nome', 'prestador_nome' => 'prestador_nome', 'usuario_cadastro_nome' => 'usuario_cidadao_solicitacao.nome', 'tempo_espera' => 'tempo_espera', 'prioridade_nome' => 'prioridade.nome', 'data_vencimento_oci' => 'data_vencimento_oci', 'dias_restantes_oci' => 'dias_restantes_oci', 'especialidade_solicitante_nome' => 'especialidade_solicitante.nome', ]; $column = $columns[request()->sortBy]; $direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC'; $builder->orderByRaw( "{$column} {$direction}, solicitacao.id" ); } public static function list() { $data = (object) [ 'additionals' => [], 'form' => [], 'model' => [], ]; $params = self::getParams(); $sets = [ 'periodo' => function () use ($data, $params) { $data->model['periodo'] = ['start' => null, 'end' => null]; $params->periodo = $data->model['periodo']; }, 'periodo_movimentacao' => function () use ($data, $params) { $data->model['periodo_movimentacao'] = ['start' => null, 'end' => null]; $params->periodo_movimentacao = $data->model['periodo_movimentacao']; }, 'paciente' => function () use ($data, $params) { $data->model['paciente'] = null; $params->paciente_id = null; }, 'idade_de' => function () use ($data, $params) { $data->model['idade_de'] = null; $params->idade_de = $data->model['idade_de']; }, 'idade_ate' => function () use ($data, $params) { $data->model['idade_ate'] = null; $params->idade_ate = $data->model['idade_ate']; }, 'unidade_reguladora' => function () use ($data, $params) { $unidadeReguladoraData = self::getUnidadesReguladoras($params); $data->form['unidades_reguladoras'] = $unidadeReguladoraData['form']; $data->model['unidades_reguladoras'] = $unidadeReguladoraData['model']; $params->unidades_reguladoras = $data->model['unidades_reguladoras']; }, 'regulador' => function () use ($data, $params) { $reguladorData = self::getReguladores($params); $data->form['reguladores'] = $reguladorData['form']; $data->model['reguladores'] = $reguladorData['model']; $params->reguladores = $data->model['reguladores']; }, 'unidade_solicitante' => function () use ($data, $params) { $unidadeSolicitanteData = self::getUnidadesSolicitantes($params); $data->form['unidades_solicitantes'] = $unidadeSolicitanteData['form']; $data->model['unidades_solicitantes'] = $unidadeSolicitanteData['model']; $params->unidades_solicitantes = $data->model['unidades_solicitantes']; }, 'infraestrutura_solicitante' => function () use ($data, $params) { $infraestruturaSolicitanteData = self::getInfraestruturasSolicitantes($params); $data->form['infraestruturas_solicitantes'] = $infraestruturaSolicitanteData['form']; $data->model['infraestruturas_solicitantes'] = $infraestruturaSolicitanteData['model']; $params->infraestruturas_solicitantes = $data->model['infraestruturas_solicitantes']; }, 'unidade_referencia' => function () use ($data, $params) { $unidadeReferenciaData = self::getUnidadesReferencia($params); $data->form['unidades_referencias'] = $unidadeReferenciaData['form']; $data->model['unidades_referencias'] = $unidadeReferenciaData['model']; $params->unidades_referencias = $data->model['unidades_referencias']; }, 'usuario_solicitante' => function () use ($data, $params) { $usuarioSolicitanteData = self::getUsuariosSolicitantes($params); $data->form['usuarios_solicitantes'] = $usuarioSolicitanteData['form']; $data->model['usuarios_solicitantes'] = $usuarioSolicitanteData['model']; $params->usuarios_solicitantes = $data->model['usuarios_solicitantes']; }, 'prestador' => function () use ($data, $params) { $prestadorData = self::getPrestadores($params); $data->form['prestadores'] = $prestadorData['form']; $data->model['prestadores'] = $prestadorData['model']; $params->prestadores = $data->model['prestadores']; self::setParamsPrestador($params); }, 'status' => function () use ($data, $params) { $statusData = self::getStatus($params); $data->form['status'] = $statusData['form']; $data->model['status'] = $statusData['model']; $params->status = $data->model['status']; }, 'opcao_retirada_protocolo_agendamento' => function () use ($data, $params) { $opcaoData = self::getOpcoesRetiradasProtocoloAgendamento($params); $data->form['opcoes_retirada_protocolo_agendamento'] = $opcaoData['form']; $data->model['opcoes_retirada_protocolo_agendamento'] = $opcaoData['model']; $params->opcoes_retirada_protocolo_agendamento = $data->model['opcoes_retirada_protocolo_agendamento']; }, 'grupo' => function () use ($data, $params) { $grupoData = self::getGrupos($params); $data->form['grupos'] = $grupoData['form']; $data->model['grupos'] = $grupoData['model']; $params->grupos = $data->model['grupos']; }, 'exame' => function () use ($data, $params) { $exameData = self::getExames($params); $data->form['exames'] = $exameData['form']; $data->model['exames'] = $exameData['model']; $params->exames = $data->model['exames']; }, 'procedimento_cirurgico' => function () use ($data, $params) { $procedimentoCirurgicoData = self::getProcedimentosCirurgicos($params); $data->form['procedimentos_cirurgicos'] = $procedimentoCirurgicoData['form']; $data->model['procedimentos_cirurgicos'] = $procedimentoCirurgicoData['model']; $params->procedimentos_cirurgicos = $data->model['procedimentos_cirurgicos']; }, 'especialidade' => function () use ($data, $params) { $especialidadeData = self::getEspecialidades($params); $data->form['especialidades'] = $especialidadeData['form']; $data->model['especialidades'] = $especialidadeData['model']; $params->especialidades = $data->model['especialidades']; }, 'prioridade' => function () use ($data, $params) { $prioridadeData = self::getPrioridades($params); $data->form['prioridades'] = $prioridadeData['form']; $data->model['prioridades'] = $prioridadeData['model']; $params->prioridades = $data->model['prioridades']; }, 'cid' => function () use ($data, $params) { $data->model['cid'] = null; $params->cid_id = $data->model['cid']; }, 'ciap' => function () use ($data, $params) { $data->model['ciap'] = null; $params->ciap_id = $data->model['ciap']; }, 'sexo' => function () use ($data, $params) { $sexoData = self::getSexos($params); $data->form['sexos'] = $sexoData['form']; $data->model['sexos'] = $sexoData['model']; $params->sexos = $data->model['sexos']; }, 'oci' => function () use ($data, $params) { $ociData = self::getOcis($params); $data->form['ocis'] = $ociData['form']; $data->model['ocis'] = $ociData['model']; $params->ocis = $data->model['ocis']; }, 'etapa_clinica' => function () use ($data, $params) { $etapaClinicaData = self::getEtapasClinicas($params); $data->form['etapas_clinicas'] = $etapaClinicaData['form']; $data->model['etapas_clinicas'] = $etapaClinicaData['model']; $params->etapas_clinicas = $data->model['etapas_clinicas']; }, ]; $firstLoad = $load = is_null(request()->load_from); if ($load) { $data->additionals = [ 'data_atual' => Carbon::today()->format('d/m/Y'), ]; } $fieldsItem = collect(['exame', 'procedimento_cirurgico', 'especialidade']); $isLoadFromItens = $fieldsItem->contains(request()->load_from); foreach ($sets as $field => $set) { if ($load) { if (!$firstLoad && ( collect(['periodo_movimentacao'])->contains($field) || ($isLoadFromItens && $fieldsItem->contains($field)) || (request()->load_from === 'grupo' && $field === 'especialidade') || ($field === 'idade_de' || $field === 'idade_ate') || ($field === 'paciente') )) { continue; } $set(); } else if ($field === request()->load_from) { $load = true; } } foreach ($data as $property => $itens) { if (empty($itens)) { unset($data->{$property}); } } return $data; } private static function getParams() { $params = (object) [ 'periodo' => request()->get('periodo', ['start' => null, 'end' => null]), 'periodo_movimentacao' => request()->get('periodo_movimentacao', ['start' => null, 'end' => null]), 'paciente_id' => request()->get('paciente_id'), 'idade_de' => request()->get('idade_de'), 'idade_ate' => request()->get('idade_ate'), 'unidades_reguladoras' => request()->get('unidades_reguladoras', []), 'reguladores' => request()->get('reguladores', []), 'unidades_solicitantes' => request()->get('unidades_solicitantes', []), 'infraestruturas_solicitantes' => request()->get('infraestruturas_solicitantes', []), 'unidades_referencias' => request()->get('unidades_referencias', []), 'usuarios_solicitantes' => request()->get('usuarios_solicitantes', []), 'prestadores' => request()->get('prestadores', []), 'status' => request()->get('status', []), 'opcoes_retirada_protocolo_agendamento' => request()->get('opcoes_retirada_protocolo_agendamento', []), 'grupos' => request()->get('grupos', []), 'exames' => request()->get('exames', []), 'procedimentos_cirurgicos' => request()->get('procedimentos_cirurgicos', []), 'especialidades' => request()->get('especialidades', []), 'prioridades' => request()->get('prioridades', []), 'cid_id' => request()->get('cid_id'), 'ciap_id' => request()->get('ciap_id'), 'sexos' => request()->get('sexos', []), 'ocis' => request()->get('ocis', []), 'etapas_clinicas' => request()->get('etapas_clinicas', []), 'todas_ocis_selecionadas' => DataUtil::getBooleanValueFromStringBoolean(request()->get('todas_ocis_selecionadas')), 'todas_etapas_clinicas_selecionadas' => DataUtil::getBooleanValueFromStringBoolean(request()->get('todas_etapas_clinicas_selecionadas')), ]; $params->periodo = [ 'start' => isset($params->periodo['start']) ? Carbon::createFromFormat('d/m/Y', $params->periodo['start'])->startOfDay() : null, 'end' => isset($params->periodo['end']) ? Carbon::createFromFormat('d/m/Y', $params->periodo['end'])->endOfDay() : null, ]; $params->periodo_movimentacao = [ 'start' => isset($params->periodo_movimentacao['start']) ? Carbon::createFromFormat('d/m/Y', $params->periodo_movimentacao['start'])->startOfDay() : null, 'end' => isset($params->periodo_movimentacao['end']) ? Carbon::createFromFormat('d/m/Y', $params->periodo_movimentacao['end'])->endOfDay() : null, ]; $params->has_periodo = isset($params->periodo['start']) && isset($params->periodo['end']); $params->has_periodo_movimentacao = isset($params->periodo_movimentacao['start']) && isset($params->periodo_movimentacao['end']); self::setParamsPrestador($params); return $params; } private static function setParamsPrestador($params) { $params->nenhum_prestador = empty($params->prestadores); $params->prestadores_internos = []; $params->prestadores_externos = []; $params->semPrestador = false; if (!$params->nenhum_prestador) { foreach ($params->prestadores as $prestador) { if (is_null($prestador)) { $params->semPrestador = true; continue; } $data = explode('#', $prestador); if ($data[0] === 'interno') { $params->prestadores_internos[] = $data[1]; } else if ($data[0] === 'externo') { $params->prestadores_externos[] = $data[1]; } } } unset($params->prestadores); } public static function autocompletePaciente() { return DB::table('cadastro_paciente as paciente') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id') ->whereNull('paciente.deleted_at') ->selectRaw(" paciente.id, cidadao.nome, cidadao.nome_social, cidadao.cns "); } private static function getUnidadesReguladoras($params) { $unidadesReguladoras = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $unidadesReguladoras = DB::table('cadastro_unidade as unidade') ->whereNull('unidade.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('cadastro_infraestrutura as infraestrutura') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.infraestrutura_id', 'infraestrutura.id' ) ->whereColumn('infraestrutura.unidade_id', 'unidade.id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->whereColumn('solicitacao.regulador_id', 'regulador.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ) ) ->selectRaw(" unidade.id, unidade.nome_fantasia ") ->orderBy('unidade.nome_fantasia') ->get(); } $ids = $unidadesReguladoras->pluck('id')->all(); return ['form' => $unidadesReguladoras, 'model' => $ids]; } private static function getReguladores($params) { $reguladores = collect(); if (!empty($params->unidades_reguladoras)) { $reguladores = DB::table('regulacao_parametrizacao_regulador as regulador') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'regulador.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->whereIn('infraestrutura.unidade_id', $params->unidades_reguladoras) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->whereColumn('solicitacao.regulador_id', 'regulador.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ) ->selectRaw(" regulador.id, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as nome ") ->orderByRaw("COALESCE(infraestrutura.nome, unidade.nome_fantasia)") ->get(); } $ids = $reguladores->pluck('id')->all(); return ['form' => $reguladores, 'model' => $ids]; } private static function getUnidadesSolicitantes($params) { $unidadesSolicitantes = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $unidadesSolicitantes = DB::table('cadastro_unidade as unidade') ->whereNull('unidade.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('cadastro_infraestrutura as infraestrutura_solicitante') ->whereColumn('infraestrutura_solicitante.unidade_id', 'unidade.id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->whereColumn('solicitacao.infraestrutura_solicitante_id', 'infraestrutura_solicitante.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ) ) ->selectRaw(" unidade.id, unidade.nome_fantasia ") ->orderBy('unidade.nome_fantasia') ->get(); } $ids = $unidadesSolicitantes->pluck('id')->all(); return ['form' => $unidadesSolicitantes, 'model' => $ids]; } private static function getInfraestruturasSolicitantes($params) { $infraestruturasSolicitantes = collect(); if (!empty($params->unidades_solicitantes)) { $infraestruturasSolicitantes = DB::table('cadastro_infraestrutura as infraestrutura') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->whereNull('infraestrutura.deleted_at') ->whereIn('infraestrutura.unidade_id', $params->unidades_solicitantes) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->whereColumn('solicitacao.infraestrutura_solicitante_id', 'infraestrutura.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ) ->selectRaw(" infraestrutura.id, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as nome ") ->orderByRaw("COALESCE(infraestrutura.nome, unidade.nome_fantasia)") ->get(); } $ids = $infraestruturasSolicitantes->pluck('id')->all(); return ['form' => $infraestruturasSolicitantes, 'model' => $ids]; } private static function getUnidadesReferencia($params) { $unidadesReferencia = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $unidadesReferencia = DB::table('cadastro_unidade as unidade') ->whereNull('unidade.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('cadastro_paciente as paciente') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->whereColumn('paciente.unidade_id', 'unidade.id') ->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.paciente_id', 'paciente.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ) ) ->selectRaw(" unidade.id, unidade.nome_fantasia ") ->orderBy('unidade.nome_fantasia') ->get(); } $ids = $unidadesReferencia->pluck('id')->all(); return ['form' => $unidadesReferencia, 'model' => $ids]; } private static function getUsuariosSolicitantes($params) { $usuariosSolicitantes = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $usuariosSolicitantes = DB::table('cadastro_usuario as usuario') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->whereNull('usuario.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.usuario_solicitante_id', 'usuario.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ) ->selectRaw(" usuario.id, cidadao.nome ") ->orderBy('cidadao.nome') ->get(); } $ids = $usuariosSolicitantes->pluck('id')->all(); return ['form' => $usuariosSolicitantes, 'model' => $ids]; } private static function getPrestadores($params) { $prestadores = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $prestadores = DB::query() ->fromSub(DB::table('regulacao_parametrizacao_prestador_interno as prestador_interno') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'prestador_interno.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.prestador_interno_id', 'prestador_interno.id') ->whereNotNull('solicitacao.prestador_interno_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ) ->selectRaw(" 'interno' as tipo, prestador_interno.id, IF(infraestrutura.principal = 1, unidade.nome_fantasia, CONCAT(unidade.nome_fantasia, ' - ', infraestrutura.nome) ) as nome ") ->unionAll(DB::table('regulacao_parametrizacao_prestador_externo as prestador_externo') ->join('transporte_paciente_destino as destino', 'destino.id', 'prestador_externo.destino_id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.prestador_externo_id', 'prestador_externo.id') ->whereNotNull('solicitacao.prestador_externo_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ) ->selectRaw(" 'externo' as tipo, prestador_externo.id, destino.descricao_destino as nome ") ) , 'prestador') ->selectRaw(" CONCAT(prestador.tipo, '#', prestador.id) as value, prestador.nome ") ->orderBy('prestador.nome') ->get(); } $prestadores->push((object) [ 'value' => null, 'nome' => 'Nenhum', ]); $values = []; return ['form' => $prestadores, 'model' => $values]; } private static function getStatus($params) { $status = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $status = DB::table('regulacao_status as status') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.status_id', 'status.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when($params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ) ->selectRaw(" status.id, status.nome ") ->orderBy('status.nome') ->get(); } $ids = $status->pluck('id')->all(); return ['form' => $status, 'model' => $ids]; } private static function getOpcoesRetiradasProtocoloAgendamento($params) { $opcoes = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $opcoes = DB::table('regulacao_parametrizacao_opcao_retirada_protocolo_agendamento as opcao') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.opcao_retirada_protocolo_agendamento_id', 'opcao.id') ->whereNotNull('solicitacao.opcao_retirada_protocolo_agendamento_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when($params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ) ->selectRaw(" opcao.id, opcao.nome ") ->orderBy('opcao.nome') ->get(); } $opcoes->push((object) [ 'value' => null, 'nome' => 'Nenhum', ]); $ids = []; return ['form' => $opcoes, 'model' => $ids]; } private static function getGrupos($params) { $grupos = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $grupos = DB::table('cadastro_grupo as grupo') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('parametrizacao_exame as exame') ->whereColumn('exame.grupo_tipo_id', 'grupo.id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as item') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.id', 'item.solicitacao_id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('item.exame_id', 'exame.id') ->whereNotNull('item.exame_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ) ) ->orWhereExists(fn ($q) => $q ->selectRaw(1) ->from('parametrizacao_procedimento_cirurgico as procedimento_cirurgico') ->whereColumn('procedimento_cirurgico.grupo_exame_id', 'grupo.id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as item') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.id', 'item.solicitacao_id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('item.procedimento_cirurgico_id', 'procedimento_cirurgico.id') ->whereNotNull('item.procedimento_cirurgico_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ) ) ->selectRaw(" grupo.id, grupo.nome ") ->orderBy('grupo.nome') ->get(); } $ids = $grupos->pluck('id')->all(); return ['form' => $grupos, 'model' => $ids]; } private static function getExames($params) { $exames = collect(); if (!empty($params->grupos)) { $exames = DB::table('parametrizacao_exame as exame') ->whereNull('exame.deleted_at') ->whereIn('exame.grupo_tipo_id', $params->grupos) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as item') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.id', 'item.solicitacao_id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('item.exame_id', 'exame.id') ->whereNotNull('item.exame_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ) ->selectRaw(" exame.id, exame.codigo, exame.nome ") ->orderByRaw("exame.nome") ->get() ->map(fn ($exame) => [ 'id' => $exame->id, 'descricao' => empty($exame->codigo) ? $exame->nome : MaskUtil::getProcedimentoMasked($exame->codigo) . " - {$exame->nome}", ]); } $ids = $exames->pluck('id')->all(); return ['form' => $exames, 'model' => $ids]; } private static function getProcedimentosCirurgicos($params) { $procedimentosCirurgicos = collect(); if (!empty($params->grupos)) { $procedimentosCirurgicos = DB::table('parametrizacao_procedimento_cirurgico as procedimento_cirurgico') ->whereIn('procedimento_cirurgico.grupo_exame_id', $params->grupos) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as item') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.id', 'item.solicitacao_id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('item.procedimento_cirurgico_id', 'procedimento_cirurgico.id') ->whereNotNull('item.procedimento_cirurgico_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ) ->selectRaw(" procedimento_cirurgico.id, procedimento_cirurgico.procedimento_codigo as codigo, procedimento_cirurgico.nome ") ->orderByRaw("procedimento_cirurgico.nome") ->get() ->map(fn ($procedimentoCirurgico) => [ 'id' => $procedimentoCirurgico->id, 'descricao' => MaskUtil::getProcedimentoMasked($procedimentoCirurgico->codigo) . " - {$procedimentoCirurgico->nome}", ]); } $ids = $procedimentosCirurgicos->pluck('id')->all(); return ['form' => $procedimentosCirurgicos, 'model' => $ids]; } private static function getEspecialidades($params) { $especialidades = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $especialidades = DB::table('cadastro_especialidade as especialidade') ->join('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'especialidade.ocupacao_id') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as item') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.id', 'item.solicitacao_id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('item.especialidade_id', 'especialidade.id') ->whereNotNull('item.especialidade_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ) ->selectRaw(" especialidade.id, ocupacao.codigo, especialidade.nome ") ->orderByRaw("especialidade.nome") ->get() ->map(fn ($especialidade) => [ 'id' => $especialidade->id, 'descricao' => "{$especialidade->codigo} - {$especialidade->nome}", ]); } $ids = $especialidades->pluck('id')->all(); return ['form' => $especialidades, 'model' => $ids]; } private static function getPrioridades($params) { $prioridades = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $prioridades = DB::table('regulacao_solicitacao_prioridade as prioridade') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.prioridade_id', 'prioridade.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ) ->selectRaw(" prioridade.id, prioridade.nome ") ->orderBy('prioridade.nome') ->get(); } $ids = $prioridades->pluck('id')->all(); return ['form' => $prioridades, 'model' => $ids]; } public static function autocompleteCid() { $params = self::getParams(); return DB::table('sigtap.cid as cid') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.cid_id', 'cid.id') ->whereNotNull('solicitacao.cid_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), fn ($q) => $q ->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $params->opcoes_retirada_protocolo_agendamento) ) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ) ->selectRaw(" cid.id, cid.codigo, cid.nome "); } public static function autocompleteCiap() { $params = self::getParams(); return DB::table('geral_ciap as ciap') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao as solicitacao') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('solicitacao.ciap_id', 'ciap.id') ->whereNotNull('solicitacao.ciap_id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), fn ($q) => $q ->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $params->opcoes_retirada_protocolo_agendamento) ) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ->when($params->cid_id, fn ($q, $id) => $q->where('solicitacao.cid_id', $id)) ) ->selectRaw(" ciap.id, ciap.codigo, ciap.descricao "); } private static function getSexos($params) { $sexos = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $sexos = DB::table('cadastro_sexo as sexo') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('cadastro_cidadao as paciente_cidadao') ->join('cadastro_paciente as paciente', 'paciente.cidadao_id', 'paciente_cidadao.id') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.paciente_id', 'paciente.id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('paciente_cidadao.sexo_id', 'sexo.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ->when($params->cid_id, fn ($q, $id) => $q->where('solicitacao.cid_id', $id)) ->when($params->ciap_id, fn ($q, $id) => $q->where('solicitacao.ciap_id', $id)) ) ->selectRaw(" sexo.id, sexo.descricao ") ->orderBy('sexo.descricao') ->get(); } $ids = $sexos->pluck('id')->all(); return ['form' => $sexos, 'model' => $ids]; } private static function getOcis($params) { $ocis = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $ocis = DB::table('cadastro_oci AS oci') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('ambulatorio_acompanhamento_oci as acompanhamento_oci') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.acompanhamento_oci_id', 'acompanhamento_oci.id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('acompanhamento_oci.oci_id', 'oci.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ->when($params->cid_id, fn ($q, $id) => $q->where('solicitacao.cid_id', $id)) ->when($params->ciap_id, fn ($q, $id) => $q->where('solicitacao.ciap_id', $id)) ->whereIn('paciente_cidadao.sexo_id', $params->sexos) ) ->select( 'oci.id', 'oci.nome' ) ->orderBy('oci.nome') ->get(); } $ids = $ocis->pluck('id')->all(); return ['form' => $ocis, 'model' => $ids]; } private static function getEtapasClinicas($params) { $etapasClinicas = collect(); if ($params->has_periodo || $params->has_periodo_movimentacao || !is_null($params->paciente_id)) { $etapasClinicas = DB::table('cadastro_etapa_clinica as etapa_clinica') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('ambulatorio_acompanhamento_oci as acompanhamento_oci') ->join('regulacao_solicitacao as solicitacao', 'solicitacao.acompanhamento_oci_id', 'acompanhamento_oci.id') ->join('regulacao_solicitacao_movimentacao as movimentacao', fn ($j) => $j ->on('movimentacao.solicitacao_id', 'solicitacao.id') ->where('movimentacao.id', fn ($q) => $q ->select('movimentacao2.id') ->from('regulacao_solicitacao_movimentacao as movimentacao2') ->whereColumn('movimentacao2.solicitacao_id', 'solicitacao.id') ->orderByDesc('movimentacao2.id') ->limit(1) ) ) ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join( 'regulacao_parametrizacao_regulador as regulador', 'regulador.id', 'solicitacao.regulador_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_reguladora', 'infraestrutura_reguladora.id', 'regulador.infraestrutura_id' ) ->join( 'cadastro_infraestrutura as infraestrutura_solicitante', 'infraestrutura_solicitante.id', 'solicitacao.infraestrutura_solicitante_id' ) ->whereColumn('acompanhamento_oci.etapa_clinica_atual_id', 'etapa_clinica.id') ->whereNotNull('solicitacao.confirmado_em') ->when($params->periodo['start'], fn ($q, $start) => $q->where('solicitacao.data', '>=', $start)) ->when($params->periodo['end'], fn ($q, $end) => $q->where('solicitacao.data', '<=', $end)) ->when($params->periodo_movimentacao['start'], fn ($q, $start) => $q->where('movimentacao.movimentado_em', '>=', $start)) ->when($params->periodo_movimentacao['end'], fn ($q, $end) => $q->where('movimentacao.movimentado_em', '<=', $end)) ->when($params->paciente_id, fn ($q, $id) => $q->where('solicitacao.paciente_id', $id)) ->when($params->idade_de, fn ($q, $idadeDe) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) >= {$idadeDe}") ) ->when($params->idade_ate, fn ($q, $idadeAte) => $q ->whereRaw("TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) <= {$idadeAte}") ) ->whereIn('infraestrutura_reguladora.unidade_id', $params->unidades_reguladoras) ->whereIn('solicitacao.regulador_id', $params->reguladores) ->whereIn('infraestrutura_solicitante.unidade_id', $params->unidades_solicitantes) ->whereIn('solicitacao.infraestrutura_solicitante_id', $params->infraestruturas_solicitantes) ->when(!empty($params->unidades_referencias), fn ($q) => $q ->whereIn('paciente.unidade_id', $params->unidades_referencias) ) ->whereIn('solicitacao.usuario_solicitante_id', $params->usuarios_solicitantes) ->when( $params->nenhum_prestador, fn ($q) => $q ->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'), fn ($q) => $q->where(function ($q) use ($params) { $q->whereIn('solicitacao.prestador_interno_id', $params->prestadores_internos) ->orWhereIn('solicitacao.prestador_externo_id', $params->prestadores_externos); if ($params->semPrestador) { $q->orWhere(function ($q) { $q->whereNull('solicitacao.prestador_interno_id') ->whereNull('solicitacao.prestador_externo_id'); }); } }) ) ->whereIn('solicitacao.status_id', $params->status) ->when(!empty($params->opcoes_retirada_protocolo_agendamento), function ($q) use ($params) { $valores = array_filter($params->opcoes_retirada_protocolo_agendamento, fn ($v) => !is_null($v)); $q->where(function ($q) use ($valores, $params) { if (!empty($valores)) { $q->whereIn('solicitacao.opcao_retirada_protocolo_agendamento_id', $valores); } if (in_array(null, $params->opcoes_retirada_protocolo_agendamento, true)) { $q->orWhereNull('solicitacao.opcao_retirada_protocolo_agendamento_id'); } }); }) ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('regulacao_solicitacao_item as solicitacao_item') ->whereColumn('solicitacao_item.solicitacao_id', 'solicitacao.id') ->where(fn ($q) => $q ->whereIn('solicitacao_item.exame_id', $params->exames) ->orWhereIn('solicitacao_item.procedimento_cirurgico_id', $params->procedimentos_cirurgicos) ->orWhereIn('solicitacao_item.especialidade_id', $params->especialidades) ) ) ->whereIn('solicitacao.prioridade_id', $params->prioridades) ->when($params->cid_id, fn ($q, $id) => $q->where('solicitacao.cid_id', $id)) ->when($params->ciap_id, fn ($q, $id) => $q->where('solicitacao.ciap_id', $id)) ->whereIn('paciente_cidadao.sexo_id', $params->sexos) ->whereIn('acompanhamento_oci.oci_id', $params->ocis) ) ->select( 'etapa_clinica.id', 'etapa_clinica.nome' ) ->orderBy('etapa_clinica.nome') ->get(); } $ids = $etapasClinicas->pluck('id')->all(); return ['form' => $etapasClinicas, 'model' => $ids]; } public static function getPrintExportData() { $exibirAssinatura = Parametrizacao::first()->exibe_assinatura_relatorio_solicitacao ?? false; $resultado = self::index(); $itens = $resultado['solicitacoes']; $itens->each(function ($item) { $item->data = (new Carbon($item->data))->format('d/m/Y'); if (!is_null($item->data_agendada)) { $item->data_agendada = (new Carbon($item->data_agendada))->format('d/m/Y'); } if (!is_null($item->data_vencimento_oci)) { $item->data_vencimento_oci = (new Carbon($item->data_vencimento_oci))->format('d/m/Y'); } }); $paciente = is_null(request()->paciente_id) ? null : Paciente::findOrFail(request()->paciente_id)->cidadao->nome; $quantidadeUnidadesReguladoras = count(request()->unidades_reguladoras); $unidadesReguladorasLabel = null; if ($quantidadeUnidadesReguladoras > 0) { if ($quantidadeUnidadesReguladoras === request()->totais_opcoes['unidades_reguladoras']) { $unidadesReguladorasLabel = 'Todas'; } else if ($quantidadeUnidadesReguladoras > 1) { $unidadesReguladorasLabel = "{$quantidadeUnidadesReguladoras} selecionadas"; } else { $unidadesReguladorasLabel = Unidade::findOrFail(request()->unidades_reguladoras[0])->nome_fantasia; } } $quantidadeReguladores = count(request()->reguladores); $reguladoresLabel = null; if ($quantidadeReguladores > 0) { if ($quantidadeReguladores === request()->totais_opcoes['reguladores']) { $reguladoresLabel = 'Todos'; } else if ($quantidadeReguladores > 1) { $reguladoresLabel = "{$quantidadeReguladores} selecionados"; } else { $reguladoresLabel = ParametrizacaoRegulador::findOrFail(request()->reguladores[0])->infraestrutura->nome; } } $quantidadeUnidadesSolicitantes = count(request()->unidades_solicitantes); $unidadesSolicitantesLabel = null; if ($quantidadeUnidadesSolicitantes > 0) { if ($quantidadeUnidadesSolicitantes === request()->totais_opcoes['unidades_solicitantes']) { $unidadesSolicitantesLabel = 'Todas'; } else if ($quantidadeUnidadesSolicitantes > 1) { $unidadesSolicitantesLabel = "{$quantidadeUnidadesSolicitantes} selecionadas"; } else { $unidadesSolicitantesLabel = Unidade::findOrFail(request()->unidades_reguladoras[0])->nome_fantasia; } } $quantidadeInfraestruturasSolicitantes = count(request()->infraestruturas_solicitantes); $infraestruturasSolicitantesLabel = null; if ($quantidadeInfraestruturasSolicitantes > 0) { if ($quantidadeInfraestruturasSolicitantes === request()->totais_opcoes['infraestruturas_solicitantes']) { $infraestruturasSolicitantesLabel = 'Todos'; } else if ($quantidadeInfraestruturasSolicitantes > 1) { $infraestruturasSolicitantesLabel = "{$quantidadeInfraestruturasSolicitantes} selecionados"; } else { $infraestruturasSolicitantesLabel = Infraestrutura::findOrFail(request()->infraestruturas_solicitantes[0])->nome; } } $quantidadeUnidadesReferencias = count(request()->unidades_referencias); $unidadesReferenciasLabel = null; if ($quantidadeUnidadesReferencias > 0) { if ($quantidadeUnidadesReferencias === request()->totais_opcoes['unidades_referencias']) { $unidadesReferenciasLabel = 'Todas'; } else if ($quantidadeUnidadesReferencias > 1) { $unidadesReferenciasLabel = "{$quantidadeUnidadesReferencias} selecionadas"; } else { $unidadesReferenciasLabel = Unidade::findOrFail(request()->unidades_referencias[0])->nome_fantasia; } } $quantidadeUsuariosSolicitantes = count(request()->usuarios_solicitantes); $usuariosSolicitantesLabel = null; if ($quantidadeUsuariosSolicitantes > 0) { if ($quantidadeUsuariosSolicitantes === request()->totais_opcoes['usuarios_solicitantes']) { $usuariosSolicitantesLabel = 'Todos'; } else if ($quantidadeUsuariosSolicitantes > 1) { $usuariosSolicitantesLabel = "{$quantidadeUsuariosSolicitantes} selecionados"; } else { $usuariosSolicitantesLabel = Usuario::findOrFail(request()->usuarios_solicitantes[0])->cidadao->nome; } } $quantidadePrestadores = count(request()->prestadores); $prestadoresLabel = 'Nenhum'; if ($quantidadePrestadores > 0) { if ($quantidadePrestadores === request()->totais_opcoes['prestadores']) { $prestadoresLabel = 'Todos'; } else if ($quantidadePrestadores > 1) { $prestadoresLabel = "{$quantidadePrestadores} selecionados"; } else { $prestadorData = explode('#', request()->prestadores[0]); if ($prestadorData[0] === 'interno') { $prestadoresLabel = ParametrizacaoPrestadorInterno::findOrFail($prestadorData[1])->infraestrutura->nome; } else if ($prestadorData[0] === 'externo') { $prestadoresLabel = ParametrizacaoPrestadorExterno::findOrFail($prestadorData[1])->destino->descricao_destino; } } } $quantidadeStatus = count(request()->status); $statusLabel = null; if ($quantidadeStatus > 0) { if ($quantidadeStatus === request()->totais_opcoes['status']) { $statusLabel = 'Todos'; } else if ($quantidadeStatus > 1) { $statusLabel = "{$quantidadeStatus} selecionados"; } else { $statusLabel = Status::findOrFail(request()->status[0])->nome; } } $quantidadeOpcoesRetiradasProtocoloAgendamento = count(request()->opcoes_retirada_protocolo_agendamento); $opcoesRetiradasProtocoloAgendamentoLabel = 'Nenhum'; if ($quantidadeOpcoesRetiradasProtocoloAgendamento > 0) { if ($quantidadeOpcoesRetiradasProtocoloAgendamento === request()->totais_opcoes['opcoes_retirada_protocolo_agendamento']) { $opcoesRetiradasProtocoloAgendamentoLabel = 'Todas'; } else if ($quantidadeOpcoesRetiradasProtocoloAgendamento > 1) { $opcoesRetiradasProtocoloAgendamentoLabel = "{$quantidadeOpcoesRetiradasProtocoloAgendamento} selecionadas"; } else { $opcoesRetiradasProtocoloAgendamentoLabel = ParametrizacaoOpcaoRetiradaProtocoloAgendamento::findOrFail( request()->opcoes_retirada_protocolo_agendamento[0])->nome; } } $quantidadeGrupos = count(request()->grupos); $gruposLabel = null; if ($quantidadeGrupos > 0) { if ($quantidadeGrupos === request()->totais_opcoes['grupos']) { $gruposLabel = 'Todos'; } else if ($quantidadeGrupos > 1) { $gruposLabel = "{$quantidadeGrupos} selecionados"; } else { $gruposLabel = Grupo::findOrFail(request()->grupos[0])->nome; } } $quantidadeExames = count(request()->exames); $examesLabel = null; if ($quantidadeExames > 0) { if ($quantidadeExames === request()->totais_opcoes['exames']) { $examesLabel = 'Todos'; } else if ($quantidadeExames > 1) { $examesLabel = "{$quantidadeExames} selecionados"; } else { $exame = Exame::findOrFail(request()->exames[0]); $examesLabel = $exame->codigo ? (MaskUtil::getProcedimentoMasked($exame->codigo) . " - {$exame->nome}") : $exame->nome; } } $quantidadeProcedimentosCirurgicos = count(request()->procedimentos_cirurgicos); $procedimentosCirurgicosLabel = null; if ($quantidadeProcedimentosCirurgicos > 0) { if ($quantidadeProcedimentosCirurgicos === request()->totais_opcoes['procedimentos_cirurgicos']) { $procedimentosCirurgicosLabel = 'Todos'; } else if ($quantidadeProcedimentosCirurgicos > 1) { $procedimentosCirurgicosLabel = "{$quantidadeProcedimentosCirurgicos} selecionados"; } else { $procedimentoCirurgico = ProcedimentoCirurgico::findOrFail(request()->procedimentos_cirurgicos[0]); $procedimentosCirurgicosLabel = $procedimentoCirurgico->procedimento_codigo ? (MaskUtil::getProcedimentoMasked($procedimentoCirurgico->procedimento_codigo) . " - {$procedimentoCirurgico->nome}") : $procedimentoCirurgico->nome; } } $quantidadeEspecialidades = count(request()->especialidades); $especialidadesLabel = null; if ($quantidadeEspecialidades > 0) { if ($quantidadeEspecialidades === request()->totais_opcoes['especialidades']) { $especialidadesLabel = 'Todas'; } else if ($quantidadeEspecialidades > 1) { $especialidadesLabel = "{$quantidadeEspecialidades} selecionadas"; } else { $especialidade = Especialidade::findOrFail(request()->especialidades[0]); $especialidadesLabel = "{$especialidade->ocupacao->codigo} - {$especialidade->nome}"; } } $quantidadePrioridades = count(request()->prioridades); $prioridadesLabel = null; if ($quantidadePrioridades > 0) { if ($quantidadePrioridades === request()->totais_opcoes['prioridades']) { $prioridadesLabel = 'Todas'; } else if ($quantidadePrioridades > 1) { $prioridadesLabel = "{$quantidadePrioridades} selecionadas"; } else { $prioridadesLabel = SolicitacaoPrioridade::findOrFail(request()->prioridades[0])->nome; } } $cid = null; if (!is_null(request()->cid_id)) { $cid = Cid::findOrFail(request()->cid_id); $cid = MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}"; } $ciap = null; if (!is_null(request()->ciap_id)) { $ciap = Ciap::findOrFail(request()->ciap_id); $ciap = "{$ciap->codigo} - {$ciap->descricao}"; } $quantidadeSexos = count(request()->sexos); $sexosLabel = null; if ($quantidadeSexos > 0) { if ($quantidadeSexos === request()->totais_opcoes['sexos']) { $sexosLabel = 'Todos'; } else if ($quantidadeSexos > 1) { $sexosLabel = "{$quantidadeSexos} selecionados"; } else { $sexosLabel = Sexo::findOrFail(request()->sexos[0])->descricao; } } $quantidadeOcis = count(request()->ocis); $ocisLabel = null; if ($quantidadeOcis > 0) { if ($quantidadeOcis === request()->totais_opcoes['ocis']) { $ocisLabel = 'Todos'; } else if ($quantidadeOcis > 1) { $ocisLabel = "{$quantidadeOcis} selecionados"; } else { $ocisLabel = Oci::findOrFail(request()->ocis[0])->nome; } } $quantidadeEtapasClinicas = count(request()->etapas_clinicas); $etapasClinicasLabel = null; if ($quantidadeEtapasClinicas > 0) { if ($quantidadeEtapasClinicas === request()->totais_opcoes['etapas_clinicas']) { $etapasClinicasLabel = 'Todas'; } else if ($quantidadeEtapasClinicas > 1) { $etapasClinicasLabel = "{$quantidadeEtapasClinicas} selecionadas"; } else { $etapasClinicasLabel = EtapaClinica::findOrFail(request()->etapas_clinicas[0])->nome; } } return [ 'exibirAssinatura' => $exibirAssinatura, 'inicio' => request()->periodo['start'], 'fim' => request()->periodo['end'], 'movimentacaoInicio' => request()->periodo_movimentacao['start'], 'movimentacaoFim' => request()->periodo_movimentacao['end'], 'paciente' => $paciente, 'idadeDe' => request()->idade_de, 'idadeAte' => request()->idade_ate, 'unidadesReguladorasLabel' => $unidadesReguladorasLabel, 'reguladoresLabel' => $reguladoresLabel, 'unidadesSolicitantesLabel' => $unidadesSolicitantesLabel, 'infraestruturasSolicitantesLabel' => $infraestruturasSolicitantesLabel, 'unidadesReferenciasLabel' => $unidadesReferenciasLabel, 'usuariosSolicitantesLabel' => $usuariosSolicitantesLabel, 'prestadoresLabel' => $prestadoresLabel, 'statusLabel' => $statusLabel, 'opcoesRetiradasProtocoloAgendamentoLabel' => $opcoesRetiradasProtocoloAgendamentoLabel, 'gruposLabel' => $gruposLabel, 'examesLabel' => $examesLabel, 'procedimentosCirurgicosLabel' => $procedimentosCirurgicosLabel, 'especialidadesLabel' => $especialidadesLabel, 'prioridadesLabel' => $prioridadesLabel, 'cid' => $cid, 'ciap' => $ciap, 'sexosLabel' => $sexosLabel, 'ocisLabel' => $ocisLabel, 'etapasClinicasLabel' => $etapasClinicasLabel, 'colunas' => collect(request()->selected_cols), 'itens' => $itens, 'totalizadores' => $resultado['totalizadores'], ]; } }