1197 lines
42 KiB
PHP
1197 lines
42 KiB
PHP
<?php
|
|
|
|
namespace App\Services\ProntoAtendimento;
|
|
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class RelatorioPrescricaoInternaService extends Service
|
|
{
|
|
public static function autocompletePaciente()
|
|
{
|
|
$params = request()->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,
|
|
];
|
|
}
|
|
}
|