of(FilaService::autocompletePaciente()) ->filterColumn('cidadao.data_nascimento', function ($query, $keyword) { $query->whereRaw("DATE_FORMAT(cidadao.data_nascimento, '%d/%m/%Y') like ?", ["%{$keyword}%"]); }) ->filterColumn('paciente.prontuario', function ($query, $keyword) { $query->whereRaw("LPAD(paciente.prontuario, 7, 0) like ?", ["%{$keyword}%"]); }) ->filterColumn('cidadao.cpf', function ($query, $keyword) { $query ->whereRaw("cidadao.cpf like ?", ["%{$keyword}%"]) ->orWhereRaw( "CONCAT( SUBSTR(cidadao.cpf, 1, 3), '.', SUBSTR(cidadao.cpf, 4, 3), '.', SUBSTR(cidadao.cpf, 7, 3), '-', SUBSTR(cidadao.cpf, 10, 2) ) like ?", ["%{$keyword}%"] ); }) ->editColumn('cns', fn ($paciente) => MaskUtil::getCnsMasked($paciente->cns)) ->toJson(); } public function autocompleteCid() { return datatables() ->of(FilaService::autocompleteCid()) ->editColumn('codigo', fn ($cid) => MaskUtil::getCidMasked($cid->codigo)) ->toJson(); } public function autocompleteCiap() { return datatables() ->of(FilaService::autocompleteCiap()) ->toJson(); } public function list() { return response()->json(FilaService::list(), Response::HTTP_OK); } public function datatable() { return datatables() ->of(FilaService::datatable()) ->addColumn('is_oci_vencida', function ($solicitacao) { if (is_null($solicitacao->data_vencimento_oci) || ((bool) $solicitacao->has_alta_oci)) { return false; } return Carbon::now() > Carbon::createFromFormat('d/m/Y', $solicitacao->data_vencimento_oci)->endOfDay(); }) ->editColumn('dias_restantes_oci', fn ($s) => is_null($s->dias_restantes_oci) || ((bool) $s->has_alta_oci) ? null : ($s->dias_restantes_oci < 0 ? 0 : $s->dias_restantes_oci) ) ->editColumn('idade', fn ($s) => is_null($s->paciente_data_nascimento) ? null : AgeService::getFormattedAge(new DateTime($s->paciente_data_nascimento)) ) ->editColumn('cid_descricao', fn ($s) => MaskUtil::getCidMasked($s->cid_codigo) . " - {$s->cid_nome}") ->editColumn('ciap_descricao', fn ($s) => "{$s->ciap_codigo} - {$s->ciap_descricao}") ->editColumn('tempo_espera', function ($solicitacao) { if ($solicitacao->tempo_espera === 0) { return 'MESMO DIA'; } $dataSolicitacao = Carbon::createFromFormat('d/m/Y', $solicitacao->data); $dataAtual = Carbon::now(); $diff = $dataSolicitacao->diff($dataAtual); $anos = $diff->y; $meses = $diff->m; $dias = $diff->d; $anosText = $anos > 0 ? ($anos > 1 ? "{$anos} anos" : "{$anos} ano") : null; $mesesText = $meses > 0 ? ($meses > 1 ? "{$meses} meses" : "{$meses} mês") : null; $diasText = $dias > 0 ? ($dias > 1 ? "{$dias} dias" : "{$dias} dia") : null; return collect([$anosText, $mesesText, $diasText]) ->filter() ->implode(' e '); }) ->editColumn('allow_update', fn ($s) => (bool) $s->allow_update) ->editColumn('allow_update_protocolo_agendamento', fn ($s) => (bool) $s->allow_update_protocolo_agendamento) ->editColumn('has_oci', fn ($s) => (bool) $s->has_oci) ->editColumn('has_alta_oci', fn ($s) => (bool) $s->has_alta_oci) ->editColumn('dentro_validade_inserir_oci', fn ($s) => (bool) $s->dentro_validade_inserir_oci) ->editColumn('itens', fn ($s) => explode('#', $s->itens)) ->editColumn('telefones', fn ($s) => collect(explode('#', $s->telefones)) ->map(fn ($t) => MaskUtil::getPhoneMasked($t))->join(', ')) ->orderColumn('cid_descricao', fn ($q, $order) => $q ->orderByRaw("CONCAT(cid.codigo, ' - ', cid.nome) {$order}") ) ->orderColumn('ciap_descricao', fn ($q, $order) => $q ->orderByRaw("CONCAT(ciap.codigo, ' - ', ciap.descricao) {$order}") ) ->orderColumn('data_movimentacao', fn ($q, $order) => $q ->orderByRaw("movimentacao.movimentado_em {$order}") ) ->removeColumn([ 'cid_codigo', 'cid_nome', 'ciap_codigo', ]) ->skipTotalRecords() ->toJson(); } public function getTentativasContato() { return response()->json(FilaService::getTentativasContato(), Response::HTTP_OK); } public function getImpressoes() { return response()->json(FilaService::getImpressoes(), Response::HTTP_OK); } public function editProtocoloAgendamento($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::editProtocoloAgendamento($solicitacaoId), Response::HTTP_OK); } public function updateProtocoloAgendamento($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::updateProtocoloAgendamento($solicitacaoId), Response::HTTP_OK); } public function editPrioridade($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::editPrioridade($solicitacaoId), Response::HTTP_OK); } public function updatePrioridade($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::updatePrioridade($solicitacaoId), Response::HTTP_OK); } public function createTentativaContato($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::createTentativaContato($solicitacaoId), Response::HTTP_OK); } public function storeTentativaContato() { $this->auth(__FUNCTION__); return response()->json(FilaService::storeTentativaContato(), Response::HTTP_CREATED); } public function createOci($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::createOci($solicitacaoId), Response::HTTP_OK); } public function storeOci($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::storeOci($solicitacaoId), Response::HTTP_CREATED); } public function updatePaciente($pacienteId) { $this->auth(__FUNCTION__); return response()->json(FilaService::updatePaciente($pacienteId), Response::HTTP_OK); } public function editSolicitacao($solicitacaoId) { $this->auth(__FUNCTION__); return response()->json(FilaService::editSolicitacao($solicitacaoId), Response::HTTP_OK); } public function updateSolicitacao($solicitacaoId) { $this->auth(__FUNCTION__); try { return response()->json(FilaService::updateSolicitacao($solicitacaoId), Response::HTTP_OK); } catch (CannotUpdateSolicitacaoException $e) { return response()->json(['message' => $e->getMessage()], Response::HTTP_BAD_REQUEST); } } public function dadosAmbulatorio($solicitacaoId) { return response()->json(FilaService::getDadosAmbulatorio($solicitacaoId), Response::HTTP_OK); } public function getDadosOci($solicitacaoId) { return response()->json(FilaService::getDadosOci($solicitacaoId), Response::HTTP_OK); } public function getAtendimentos() { return response()->json(FilaService::getAtendimentos(), Response::HTTP_OK); } public function updateSolicitacoes() { $this->auth(__FUNCTION__); try { return response()->json(FilaService::updateSolicitacoes(), Response::HTTP_NO_CONTENT); } catch (CannotUpdateSolicitacoesException $e) { return response()->json(['message' => $e->getMessage()], Response::HTTP_BAD_REQUEST); } } }