all(); self::adjustPeriod($params); $pacientes = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( 'cadastro_paciente.id', 'cadastro_cidadao.nome', DB::raw("LPAD(cadastro_paciente.prontuario, 7, 0) as prontuario") ) ->distinct() ->join( 'cadastro_medicamento', 'cadastro_medicamento.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.medicamento_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_faa', 'pronto_atendimento_faa.id', 'pronto_atendimento_atendimento.faa_id' ) ->join( 'cadastro_paciente', 'cadastro_paciente.id', 'pronto_atendimento_faa.paciente_id' ) ->join( 'cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id' ) ->join( 'cadastro_cidadao AS cdp2', 'cdp2.id', 'cadastro_usuario.cidadao_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'cadastro_usuario AS cu', 'cu.id', 'cl.usuario_id' ) ->leftJoin( 'cadastro_cidadao AS cdu', 'cdu.id', 'cu.cidadao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna_medicamento.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $pacientes->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'infraestrutura_id')) { $pacientes->where('cadastro_infraestrutura.id', $params['infraestrutura_id']); } if (self::hasParamId($params, 'ocupacao_id')) { $pacientes->whereRaw("COALESCE(o2.codigo, o1.codigo) IN ({$params['ocupacao_id']})"); } if (self::hasParamId($params, 'profissional_id')) { $pacientes->whereRaw("COALESCE(cu.id, cadastro_usuario.id) IN ({$params['profissional_id']})"); } if (self::hasParamId($params, 'medicamento_id')) { $medicamentoIds = $params['medicamento_id']; $pacientes->whereIn('cadastro_medicamento.id', $medicamentoIds); } if (self::hasParamId($params, 'status')) { $pacientes->where('pronto_atendimento_atendimento_prescricao_interna_aplicacao.status_id', $params['status']); } return $pacientes; } public static function index() { $params = request()->all(); self::adjustPeriod($params); $atendimentos = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( 'pronto_atendimento_atendimento_medico.created_at AS data_hora', 'cadastro_medicamento.nome AS nome_medicamento', 'cdu.nome AS nome_medico', 'cdu2.nome AS _nome_aplicador', 'cdp.nome AS nome_paciente', 'pronto_atendimento_faa.numero AS numero_faa', 'cadastro_unidade.nome_fantasia AS nome_unidade', DB::raw(" IF ( cadastro_infraestrutura.nome IS NULL, cadastro_unidade.nome_fantasia, cadastro_infraestrutura.nome ) AS local_atendimento "), DB::raw("CONCAT(o1.codigo, ' - ', o1.nome) AS cbo_medico"), DB::raw("CONCAT(o2.codigo, ' - ', o2.nome) AS cbo_aplicador"), DB::raw(" ( SELECT parametrizacao_exame_status.nome FROM parametrizacao_exame_status WHERE parametrizacao_exame_status.id = pronto_atendimento_atendimento_prescricao_interna_aplicacao.status_id ) AS status "), 'cadastro_paciente.prontuario AS prontuario', ) ->join( 'cadastro_medicamento', 'cadastro_medicamento.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.medicamento_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_faa', 'pronto_atendimento_faa.id', 'pronto_atendimento_atendimento.faa_id' ) ->join( 'cadastro_paciente', 'cadastro_paciente.id', 'pronto_atendimento_faa.paciente_id' ) ->join( 'cadastro_cidadao AS cdp', 'cdp.id', 'cadastro_paciente.cidadao_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id' ) ->join( 'cadastro_cidadao AS cdu', 'cdu.id', 'cadastro_usuario.cidadao_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'cadastro_usuario AS cu', 'cu.id', 'cl.usuario_id' ) ->leftJoin( 'cadastro_cidadao AS cdu2', 'cdu2.id', 'cu.cidadao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ); if (self::hasParamId($params, 'faa') && (int)$params['faa'] > 0 ) { $atendimentos->where('pronto_atendimento_faa.numero', $params['faa']); } else { $atendimentos->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $atendimentos->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'local_atendimento_id')) { $atendimentos->where('cadastro_infraestrutura.id', $params['local_atendimento_id']); } if (self::hasParamId($params, 'ocupacao_id')) { $atendimentos->where(function ($query) use ($params) { $query->where('o1.codigo', $params['ocupacao_id']) ->orWhere(function ($query) use ($params) { $query->where('o2.codigo', $params['ocupacao_id']) ->whereNotNull('o2.codigo'); }); }); } if (self::hasParamId($params, 'profissional_id')) { $atendimentos->whereRaw( "COALESCE(cu.id, cadastro_usuario.id) IN ({$params['profissional_id']})" ); } if (self::hasParamId($params, 'medicamento_id')) { $medicamentoIds = $params['medicamento_id']; $atendimentos->whereIn('cadastro_medicamento.id', $medicamentoIds); } if (isset($params['status'])) { $atendimentos->where('pronto_atendimento_atendimento_prescricao_interna_aplicacao.status_id', $params['status']); } if (self::hasParamId($params, 'paciente_id')) { $atendimentos->where('cadastro_paciente.id', $params['paciente_id']); } if (isset($params['prontuario'])) { $atendimentos->where('cadastro_paciente.prontuario', (int)$params['prontuario']); } } $atendimentos = $atendimentos->orderBy('pronto_atendimento_atendimento_prescricao_interna.created_at') ->get() ->map(function ($atendimento) { return array_merge([ 'atendido_em' => Carbon::parse($atendimento->data_hora)->format('d/m/Y H:i'), 'local_atendimento' => $atendimento->local_atendimento, 'medicamento' => $atendimento->nome_medicamento, 'nome_aplicador' => $atendimento->_nome_aplicador ?? '-', 'nome_medico_prescritor' => $atendimento->nome_medico ?? '-', 'nome_paciente' => $atendimento->nome_paciente, 'nome_unidade' => $atendimento->nome_unidade, 'numero_faa' => $atendimento->numero_faa, 'ocupacao_aplicador' => $atendimento->cbo_aplicador ?? '-', 'ocupacao_medico' => $atendimento->cbo_medico, 'prontuario' => $atendimento->prontuario, 'status_aplicacao' => $atendimento->status, ]); }); return [ 'atendimentos' => $atendimentos, 'total_atendimentos' => $atendimentos->count() ]; } public static function list() { $params = collect(request()->all()); $camposParaCarregar = collect(); if($params->isNotEmpty()){ $camposParaCarregar->push( 'locais_atendimento', 'medicamentos', 'ocupacoes', 'profissionais', 'status', 'unidades', ); } return [ 'form' => self::camposFiltrados($camposParaCarregar), 'model' => self::getModel(), 'additionals' => [ 'data_atual' => Carbon::today()->format('d/m/Y'), ] ]; } public static function filtragemPorUnidade(){ return self::camposFiltrados(collect([ 'locais_atendimento', 'medicamentos', 'ocupacoes', 'profissionais', 'status', ])); } public static function filtragemPorLocalAtendimento(){ return self::camposFiltrados(collect([ 'medicamentos', 'ocupacoes', 'profissionais', 'status', ])); } public static function filtragemPorOcupacao(){ return self::camposFiltrados(collect([ 'medicamentos', 'profissionais', 'status', ])); } public static function filtragemPorProfissional(){ return self::camposFiltrados(collect([ 'medicamentos', 'status' ])); } public static function filtragemPorMedicamento(){ return self::camposFiltrados(collect([ 'status', ])); } private static function camposFiltrados(Collection $campos){ $params = request()->all(); $dados = collect(); self::adjustPeriod($params); if ($campos->contains('unidades')) { $dados->put('unidades', self::getUnidades($params)); } if ($campos->contains('locais_atendimento')) { $dados->put('locais_atendimento', self::getLocaisAtendimento($params)); } if ($campos->contains('ocupacoes')) { $dados->put('ocupacoes', self::getOcupacoes($params)); } if ($campos->contains('profissionais')) { $dados->put('profissionais', self::getProfissionais($params)); } if ($campos->contains('medicamentos')) { $dados->put('medicamentos', self::getMedicamentos($params)); } if ($campos->contains('status')) { $dados->put('status', self::getStatus($params)); } return $dados->all(); } private static function adjustPeriod(&$params) { if (is_null($params['periodo']['date']['start'] ?? null) || is_null($params['periodo']['date']['end'] ?? null)) { return; } $dateStart = $params['periodo']['date']['start']; $dateEnd = $params['periodo']['date']['end']; $timeStart = $params['periodo']['time']['start']; $timeEnd = $params['periodo']['time']['end']; $params['periodo']['date']['start'] = (Carbon::createFromFormat('d/m/Y', "{$dateStart}"))->startOfDay(); $params['periodo']['date']['end'] = (Carbon::createFromFormat('d/m/Y', "{$dateEnd}"))->endOfDay(); if (!is_null($timeStart ?? null)) { $params['periodo']['date']['start'] = Carbon::createFromFormat('d/m/Y H:i:s', "{$dateStart} {$timeStart}"); } if (!is_null($timeEnd)) { $params['periodo']['date']['end'] = Carbon::createFromFormat('d/m/Y H:i:s', "{$dateEnd} {$timeEnd}"); } $params['periodo']['date']['start'] = $params['periodo']['date']['start']->format('Y-m-d H:i'); $params['periodo']['date']['end'] = $params['periodo']['date']['end']->format('Y-m-d H:i'); } private static function getUnidades($params) { $unidades = DB::table('cadastro_unidade') ->select( 'cadastro_unidade.id', 'cadastro_unidade.nome_fantasia', ) ->distinct() ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.infraestrutura_id', 'cadastro_infraestrutura.id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.lotacao_id', 'cadastro_lotacao.id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.plantao_id', 'pronto_atendimento_plantao.id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id', 'pronto_atendimento_atendimento_medico.id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_medicamento', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id', 'pronto_atendimento_atendimento_prescricao_interna.id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); return $unidades ->orderBy('cadastro_unidade.nome_fantasia') ->get(); } private static function getLocaisAtendimento($params) { $infraestruturas = DB::table('cadastro_infraestrutura') ->select( 'cadastro_infraestrutura.id', DB::raw(" CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN cadastro_infraestrutura.nome ELSE cadastro_unidade.nome_fantasia END AS nome "), ) ->distinct() ->join( 'cadastro_lotacao', 'cadastro_lotacao.infraestrutura_id', 'cadastro_infraestrutura.id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.lotacao_id', 'cadastro_lotacao.id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.plantao_id', 'pronto_atendimento_plantao.id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id', 'pronto_atendimento_atendimento_medico.id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_medicamento', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id', 'pronto_atendimento_atendimento_prescricao_interna.id' ) ->leftJoin( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $infraestruturas->where('cadastro_unidade.id', $params['unidade_id']); } return $infraestruturas->orderBy(DB::raw(" CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN cadastro_infraestrutura.nome ELSE cadastro_unidade.nome_fantasia END ")) ->get(); } private static function getOcupacoes($params) { $ocupacoes = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( DB::raw(" COALESCE(o2.codigo, o1.codigo) AS 'id' "), DB::raw(" COALESCE(o2.nome, o1.nome) AS 'nome' "), ) ->distinct() ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->leftJoin( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $ocupacoes->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'infraestrutura_id')) { $ocupacoes->where('cadastro_infraestrutura.id', $params['infraestrutura_id']); } return $ocupacoes ->orderBy('nome') ->get(); } private static function getProfissionais($params) { $profissionais = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( DB::raw(" COALESCE(cu.id, cadastro_usuario.id) AS 'id' "), DB::raw(" COALESCE(cdu.nome, cadastro_cidadao.nome) AS 'nome' "), ) ->distinct() ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id' ) ->join( 'cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'cadastro_usuario AS cu', 'cu.id', 'cl.usuario_id' ) ->leftJoin( 'cadastro_cidadao AS cdu', 'cdu.id', 'cu.cidadao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna_medicamento.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $profissionais->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'infraestrutura_id')) { $profissionais->where('cadastro_infraestrutura.id', $params['infraestrutura_id']); } if (self::hasParamId($params, 'ocupacao_id')) { $profissionais->whereRaw("COALESCE(o2.codigo, o1.codigo) IN ({$params['ocupacao_id']})"); } return $profissionais ->orderBy('nome') ->get(); } private static function getMedicamentos($params) { $profissionais = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( 'cadastro_medicamento.id', 'cadastro_medicamento.nome AS nome' ) ->distinct() ->join( 'cadastro_medicamento', 'cadastro_medicamento.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.medicamento_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id' ) ->join( 'cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'cadastro_usuario AS cu', 'cu.id', 'cl.usuario_id' ) ->leftJoin( 'cadastro_cidadao AS cdu', 'cdu.id', 'cu.cidadao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna_medicamento.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $profissionais->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'infraestrutura_id')) { $profissionais->where('cadastro_infraestrutura.id', $params['infraestrutura_id']); } if (self::hasParamId($params, 'ocupacao_id')) { $profissionais->whereRaw("COALESCE(o2.codigo, o1.codigo) IN ({$params['ocupacao_id']})"); } if (self::hasParamId($params, 'profissional_id')) { $profissionais->whereRaw("COALESCE(cu.id, cadastro_usuario.id) IN ({$params['profissional_id']})"); } return $profissionais ->orderBy('nome') ->get(); } private static function getStatus($params) { $params = request()->all(); self::adjustPeriod($params); $status = DB::table('pronto_atendimento_atendimento_prescricao_interna_medicamento') ->select( 'parametrizacao_exame_status.nome', 'parametrizacao_exame_status.id' ) ->distinct() ->join( 'cadastro_medicamento', 'cadastro_medicamento.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.medicamento_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna', 'pronto_atendimento_atendimento_prescricao_interna.id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.prescricao_interna_id' ) ->join( 'pronto_atendimento_atendimento_medico', 'pronto_atendimento_atendimento_medico.id', 'pronto_atendimento_atendimento_prescricao_interna.atendimento_medico_id' ) ->join( 'pronto_atendimento_atendimento', 'pronto_atendimento_atendimento.id', 'pronto_atendimento_atendimento_medico.atendimento_id' ) ->join( 'pronto_atendimento_faa', 'pronto_atendimento_faa.id', 'pronto_atendimento_atendimento.faa_id' ) ->join( 'cadastro_paciente', 'cadastro_paciente.id', 'pronto_atendimento_faa.paciente_id' ) ->join( 'cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id' ) ->join( 'pronto_atendimento_plantao', 'pronto_atendimento_plantao.id', 'pronto_atendimento_atendimento_medico.plantao_id' ) ->join( 'cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_plantao.lotacao_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id' ) ->join( 'cadastro_cidadao AS cdp2', 'cdp2.id', 'cadastro_usuario.cidadao_id' ) ->join( 'pronto_atendimento_atendimento_prescricao_interna_aplicacao', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.prescricao_interna_medicamento_id', 'pronto_atendimento_atendimento_prescricao_interna_medicamento.id' ) ->leftJoin( 'pronto_atendimento_atendimento_enfermagem', 'pronto_atendimento_atendimento_enfermagem.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.atendimento_enfermagem_id' ) ->leftJoin( 'pronto_atendimento_plantao AS pap', 'pap.id', 'pronto_atendimento_atendimento_enfermagem.plantao_id' ) ->leftJoin( 'cadastro_lotacao AS cl', 'cl.id', 'pap.lotacao_id' ) ->leftJoin( 'cadastro_usuario AS cu', 'cu.id', 'cl.usuario_id' ) ->leftJoin( 'cadastro_cidadao AS cdu', 'cdu.id', 'cu.cidadao_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'sigtap.ocupacao AS o1', 'o1.id', 'cadastro_lotacao.ocupacao_id' ) ->leftJoin( 'sigtap.ocupacao AS o2', 'o2.id', 'cl.ocupacao_id' ) ->join( 'parametrizacao_exame_status', 'parametrizacao_exame_status.id', 'pronto_atendimento_atendimento_prescricao_interna_aplicacao.status_id' ) ->whereBetween( DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_prescricao_interna_medicamento.created_at, '%Y-%m-%d %H:%i')"), [ $params['periodo']['date']['start'] ?? null, $params['periodo']['date']['end'] ?? null ] ); if (self::hasParamId($params, 'unidade_id')) { $status->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']); } if (self::hasParamId($params, 'infraestrutura_id')) { $status->where('cadastro_infraestrutura.id', $params['infraestrutura_id']); } if (self::hasParamId($params, 'ocupacao_id')) { $status->whereRaw("COALESCE(o2.codigo, o1.codigo) IN ({$params['ocupacao_id']})"); } if (self::hasParamId($params, 'profissional_id')) { $status->whereRaw("COALESCE(cu.id, cadastro_usuario.id) IN ({$params['profissional_id']})"); } if (self::hasParamId($params, 'medicamento_id')) { $medicamentoIds = $params['medicamento_id']; $status->whereIn('cadastro_medicamento.id', $medicamentoIds); } return $status ->orderBy('nome') ->get(); } private static function hasParamId($params, $param) { return isset($params[$param]) && $params[$param] > 0; } private static function getModel() { return [ 'periodo' => [ 'date' => [ 'start' => null, 'end' => null, ], 'time' => [ 'start' => null, 'end' => null, ] ], 'unidade_id' => null, 'local_atendimento_id' => null, 'profissional_id' => null, 'status' => null, 'paciente_id' => null, 'paciente' => null, 'prontuario' => null, 'ocupacaoId' => null, 'medicamentoId' => null, 'faa' => null, ]; } }