Files
rkm-conectasus-ci-sandbox/api/app/Services/ProntoAtendimento/RelatorioExameImagemService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

2429 lines
107 KiB
PHP

<?php
namespace App\Services\ProntoAtendimento;
use App\Enums\Parametrizacao\Exame\Status;
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class RelatorioExameImagemService extends Service
{
public static function index()
{
$params = request()->all();
self::adjustPeriod($params);
if (!request()->status_id || request()->status_id == Status::REALIZADO) {
$procedimentos = DB::table('pronto_atendimento_atendimento_procedimento')
->select(
DB::raw('"REALIZADO" AS status_nome'),
DB::raw('COALESCE(
(SELECT e.nome
FROM parametrizacao_exame e
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
AND e.codigo = sigtap_procedimento.codigo
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
"-") AS exame_nome'
),
'pronto_atendimento_atendimento_procedimento.id as procedimento_id',
'pronto_atendimento_atendimento.id as atendimento_id',
'pronto_atendimento_atendimento_procedimento.quantidade as quantidade',
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, '%d/%m/%Y %H:%i') AS atendido_em"),
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_procedimento.created_at, '%d/%m/%Y %H:%i') AS data_atendimento"),
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
'cadastro_cidadao.nome as paciente_nome',
DB::raw("CONCAT(
SUBSTR(cadastro_cidadao.cpf, 1, 3),
'.',
SUBSTR(cadastro_cidadao.cpf, 4, 3),
'.',
SUBSTR(cadastro_cidadao.cpf, 7, 3),
'-',
SUBSTR(cadastro_cidadao.cpf, 10, 2)
) as paciente_cpf"),
DB::raw("CONCAT(cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome,', ', cadastro_endereco.numero, ' - ', cadastro_bairro.nome, ', ', cadastro_endereco.complemento, ' - ', cadastro_municipio.nome, ' - ', intranet.cadastro_estado.nome) AS paciente_endereco_completo"),
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as paciente_prontuario'),
DB::raw("
IF(
COALESCE(
pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id,
pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id
) IS NOT NULL,
'SIM',
'NÃO'
) AS encaminhado
"),
'medico_solicitante.nome as profissional_solicitante_nome',
DB::raw("CONCAT(ocupacao_medico_solicitante.codigo, ' - ', ocupacao_medico_solicitante.nome) AS ocupacao_solicitante"),
DB::raw('COALESCE(CONCAT(sigtap_procedimento.codigo, " - ", sigtap_procedimento.nome), "-") AS procedimento'),
DB::raw('COALESCE(CONCAT(sigtap_ocupacao.codigo, " - ", sigtap_ocupacao.nome), "-") AS ocupacao_executante'),
DB::raw('COALESCE(cidadao_profissional_executante.nome, "-") AS profissional_executante_nome'),
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM)
->when(!is_null(request()->exame_id), function ($query) {
$query->where('exame.id', request()->exame_id);
});
});
})
->join(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->join(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->leftJoin(
'cadastro_lotacao as lotacao_profissional_executante',
'lotacao_profissional_executante.id',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'lotacao_profissional_executante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'lotacao_profissional_executante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as cidadao_profissional_executante',
'cidadao_profissional_executante.id',
'cadastro_usuario.cidadao_id'
)
->join(
'pronto_atendimento_faa',
'pronto_atendimento_faa.id',
'pronto_atendimento_atendimento.faa_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_paciente',
'cadastro_paciente.id',
'pronto_atendimento_faa.paciente_id'
)
->leftJoin(
'cadastro_cidadao',
'cadastro_cidadao.id',
'cadastro_paciente.cidadao_id'
)
->leftJoin(
'cadastro_domicilio',
'cadastro_domicilio.id',
'cadastro_cidadao.domicilio_id'
)
->leftJoin(
'cadastro_endereco',
'cadastro_endereco.id',
'cadastro_domicilio.endereco_id'
)
->leftJoin(
'cadastro_logradouro',
'cadastro_logradouro.id',
'cadastro_endereco.logradouro_id'
)
->leftJoin(
'cadastro_logradouro_tipo',
'cadastro_logradouro_tipo.id',
'cadastro_logradouro.tipo_id'
)
->leftJoin(
'cadastro_bairro',
'cadastro_bairro.id',
'cadastro_logradouro.bairro_id'
)
->leftJoin(
'intranet.cadastro_municipio',
'cadastro_municipio.id',
'cadastro_logradouro.municipio_id'
)
->leftJoin(
'intranet.cadastro_estado',
'cadastro_estado.id',
'cadastro_municipio.estado_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
);
$procedimentos
->when(!is_null(request()->unidade_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('lotacao_profissional_executante.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('cidadao_profissional_executante.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null($params['paciente_id'] ?? null), function ($query) use ($params) {
return $query->where('cadastro_cidadao.id', $params['paciente_id']);
})
->when(!is_null($params['prontuario'] ?? null), function ($query) use ($params) {
return $query->where('cadastro_paciente.prontuario', (int)$params['prontuario']);
})
->when(!is_null(request()->encaminhado), function ($query) {
return $query->where(function ($query) {
if (request()->encaminhado === 'true') {
$query->whereNotNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
->orWhereNotNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
} else {
$query->whereNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
->whereNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
}
});
});
$procedimentos = $procedimentos
->orderBy('pronto_atendimento_atendimento_recepcao.atendido_em')
->get()
->toArray();
} else {
$procedimentos = [];
}
if (!request()->status_id || request()->status_id !== Status::REALIZADO) {
$exames = DB::table('pronto_atendimento_pedido_exame')
->select(
'pronto_atendimento_faa.id as faa_id',
DB::raw('COALESCE(parametrizacao_exame_status.nome, "REALIZADO") AS status_nome'),
'parametrizacao_exame.nome as exame_nome',
DB::raw('1 AS quantidade'),
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, '%d/%m/%Y %H:%i') AS atendido_em"),
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento.created_at, '%d/%m/%Y %H:%i') AS data_atendimento"),
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
'cadastro_cidadao.nome as paciente_nome',
DB::raw("CONCAT(
SUBSTR(cadastro_cidadao.cpf, 1, 3),
'.',
SUBSTR(cadastro_cidadao.cpf, 4, 3),
'.',
SUBSTR(cadastro_cidadao.cpf, 7, 3),
'-',
SUBSTR(cadastro_cidadao.cpf, 10, 2)
) as paciente_cpf"),
DB::raw("CONCAT(cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome,', ', cadastro_endereco.numero, ' - ', cadastro_bairro.nome, ' - ', cadastro_municipio.nome, ' - ', intranet.cadastro_estado.nome) AS paciente_endereco_completo"),
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as paciente_prontuario'),
DB::raw("
IF(
COALESCE(
pronto_atendimento_pedido_exame.unidade_encaminhamento_id,
pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id
) IS NOT NULL,
'SIM',
'NÃO'
) AS encaminhado
"),
DB::raw("CONCAT(ocupacao_medico_solicitante.codigo, ' - ', ocupacao_medico_solicitante.nome) AS ocupacao_solicitante"),
DB::raw('COALESCE(CONCAT(sigtap_procedimento.codigo, " - ", sigtap_procedimento.nome), "-") AS procedimento'),
DB::raw('COALESCE(CONCAT(sigtap_ocupacao.codigo, " - ", sigtap_ocupacao.nome), "-") AS ocupacao_executante'),
DB::raw('COALESCE(profissional.nome, "-") AS profissional_executante_nome'),
'medico_solicitante.nome as profissional_solicitante_nome'
)
->join(
'pronto_atendimento_pedido_exame_item',
'pronto_atendimento_pedido_exame_item.pedido_exame_id',
'pronto_atendimento_pedido_exame.id'
)
->join(
'parametrizacao_exame',
'parametrizacao_exame.id',
'pronto_atendimento_pedido_exame_item.exame_id'
)
->leftJoin('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.codigo', '=', DB::raw('parametrizacao_exame.codigo'))
->where('sigtap_procedimento.competencia_id', '=', function ($query) {
$query->select('sigtap.competencia.id')
->from('sigtap.competencia')
->orderByDesc('sigtap.competencia.valor')
->limit(1);
});
})
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'parametrizacao_exame_status',
'parametrizacao_exame_status.id',
'pronto_atendimento_pedido_exame_item.status_id'
)
->join(
'pronto_atendimento_faa',
'pronto_atendimento_faa.id',
'pronto_atendimento_atendimento.faa_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_paciente',
'cadastro_paciente.id',
'pronto_atendimento_faa.paciente_id'
)
->leftJoin(
'cadastro_cidadao',
'cadastro_cidadao.id',
'cadastro_paciente.cidadao_id'
)
->leftJoin(
'cadastro_domicilio',
'cadastro_domicilio.id',
'cadastro_cidadao.domicilio_id'
)
->leftJoin(
'cadastro_endereco',
'cadastro_endereco.id',
'cadastro_domicilio.endereco_id'
)
->leftJoin(
'cadastro_logradouro',
'cadastro_logradouro.id',
'cadastro_endereco.logradouro_id'
)
->leftJoin(
'cadastro_logradouro_tipo',
'cadastro_logradouro_tipo.id',
'cadastro_logradouro.tipo_id'
)
->leftJoin(
'cadastro_bairro',
'cadastro_bairro.id',
'cadastro_logradouro.bairro_id'
)
->leftJoin(
'intranet.cadastro_municipio',
'cadastro_municipio.id',
'cadastro_logradouro.municipio_id'
)
->leftJoin(
'intranet.cadastro_estado',
'cadastro_estado.id',
'cadastro_municipio.estado_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
);
$exames->where('parametrizacao_exame.tipo_id', Tipo::IMAGEM)
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->when(!is_null(request()->unidade_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null(request()->exame_id ?? null), function ($query) {
return $query->where('parametrizacao_exame.id', request()->exame_id);
})
->when(!is_null($params['paciente_id'] ?? null), function ($query) use ($params) {
return $query->where('cadastro_cidadao.id', $params['paciente_id']);
})
->when(!is_null($params['prontuario'] ?? null), function ($query) use ($params) {
return $query->where('cadastro_paciente.prontuario', (int)$params['prontuario']);
})
->when(!is_null(request()->status_id ?? null), function ($query) {
return $query->where(function ($query) {
if (request()->status_id == Status::REALIZADO) {
$query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id)
->orWhereNull('pronto_atendimento_pedido_exame_item.status_id');
} else {
$query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
}
});
})
->when(!is_null(request()->encaminhado), function ($query) {
return $query->where(function ($query) {
if (request()->encaminhado === 'true') {
$query->whereNotNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
->orWhereNotNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
} else {
$query->whereNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
->whereNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
}
});
});
$exames = $exames
->orderBy('pronto_atendimento_atendimento_recepcao.atendido_em')
->get()
->toArray();
} else {
$exames = [];
}
$atendimentos = array_merge($procedimentos, $exames);
$totalizadores = [
'total' => array_sum(array_column($atendimentos, 'quantidade'))
];
return ['atendimentos' => $atendimentos, 'totalizadores' => $totalizadores];
}
public static function list()
{
return [
'form' => self::getForm(),
'model' => self::getModel(),
'additionals' => [
'data_atual' => Carbon::today()->format('d/m/Y'),
]
];
}
private static function getForm()
{
$data = (object) [
'additionals' => [],
'form' => [],
'model' => [],
];
$params = request()->only(['data_inicial', 'data_final', 'horario_inicial', 'horario_final']);
self::adjustPeriod($params);
$sets = [
'unidades' => function () use ($data, $params) {
$data->form['unidades'] = self::getUnidades($params);
},
'infraestruturas' => function () use ($data, $params) {
$data->form['infraestruturas'] = self::getInfraestrutura($params);
},
'ocupacoesSolicitante' => function () use ($data, $params) {
$data->form['ocupacoesSolicitante'] = self::getOcupacoesSolicitante($params);
},
'usuariosSolicitante' => function () use ($data, $params) {
$data->form['usuariosSolicitante'] = self::getUsuariosSolicitante($params);
},
'ocupacoesExecutante' => function () use ($data, $params) {
$data->form['ocupacoesExecutante'] = self::getOcupacoesExecutante($params);
},
'usuariosExecutante' => function () use ($data, $params) {
$data->form['usuariosExecutante'] = self::getUsuariosExecutante($params);
},
'exames' => function () use ($data, $params) {
$data->form['exames'] = self::getExames($params);
},
'status' => function () use ($data, $params) {
$data->form['status'] = self::getStatus($params);
},
'encaminhado' => function () use ($data, $params) {
$data->form['encaminhado'] = self::getEncaminhados($params);
},
'pacientes' => function () use ($data, $params) {
$data->form['pacientes'] = self::getPacientes($params);
},
];
$load = is_null(request()->load_from);
foreach ($sets as $field => $set) {
if ($load) {
$set();
}
else if ($field === request()->load_from) {
$load = true;
}
}
foreach ($data as $property => $itens) {
if (empty($itens)) {
unset($data->{$property});
}
}
return $data->form;
}
private static function adjustPeriod(&$params)
{
$currentDate = Carbon::now()->format('d/m/Y');
$dataInicial = $params['data_inicial'] ?? $currentDate;
$dataFinal = $params['data_final'] ?? $currentDate;
$horarioInicial = $params['horario_inicial'] ?? null;
$horarioFinal = $params['horario_final'] ?? null;
if ($horarioInicial && $horarioFinal) {
$dataInicial = $horarioInicial ? "$dataInicial $horarioInicial" : $dataInicial;
$dataFinal = $horarioFinal ? "$dataFinal $horarioFinal" : $dataFinal;
$params['data_inicial'] = Carbon::createFromFormat('d/m/Y H:i:s', $dataInicial);
$params['data_final'] = Carbon::createFromFormat('d/m/Y H:i:s', $dataFinal);
} else {
if ($dataInicial) {
$params['data_inicial'] = Carbon::createFromFormat('d/m/Y', $dataInicial)->startOfDay();
}
if ($dataFinal) {
$params['data_final'] = Carbon::createFromFormat('d/m/Y', $dataFinal)->endOfDay();
}
}
}
private static function getUnidades($params)
{
return DB::table('cadastro_unidade')
->select(
'cadastro_unidade.id as id',
'cadastro_unidade.nome_fantasia as nome',
)
->join(
'cadastro_infraestrutura',
'cadastro_infraestrutura.unidade_id',
'cadastro_unidade.id'
)
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.infraestrutura_id',
'cadastro_infraestrutura.id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.created_centro_custo_id',
'cadastro_centro_custo.id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.atendimento_id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->union(DB::table('cadastro_unidade')
->select(
'cadastro_unidade.id as id',
'cadastro_unidade.nome_fantasia as nome',
)
->join(
'cadastro_infraestrutura',
'cadastro_infraestrutura.unidade_id',
'cadastro_unidade.id'
)
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.infraestrutura_id',
'cadastro_infraestrutura.id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.created_centro_custo_id',
'cadastro_centro_custo.id'
)
->join(
'pronto_atendimento_pedido_exame',
'pronto_atendimento_pedido_exame.atendimento_id',
'pronto_atendimento_atendimento.id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
)
->get();
}
private static function getInfraestrutura($params)
{
return DB::table('cadastro_infraestrutura')
->select(
'cadastro_infraestrutura.id as id',
'cadastro_infraestrutura.principal as principal',
DB::raw(
"CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN
cadastro_infraestrutura.nome
ELSE
cadastro_unidade.nome_fantasia
END AS nome"
),
)
->join(
'cadastro_unidade',
'cadastro_unidade.id',
'cadastro_infraestrutura.unidade_id'
)
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.infraestrutura_id',
'cadastro_infraestrutura.id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.created_centro_custo_id',
'cadastro_centro_custo.id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.atendimento_id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->union(DB::table('cadastro_infraestrutura')
->select(
'cadastro_infraestrutura.id as id',
'cadastro_infraestrutura.principal as principal',
DB::raw(
"CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN
cadastro_infraestrutura.nome
ELSE
cadastro_unidade.nome_fantasia
END AS nome"
),
)
->join(
'cadastro_unidade',
'cadastro_unidade.id',
'cadastro_infraestrutura.unidade_id'
)
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.infraestrutura_id',
'cadastro_infraestrutura.id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.created_centro_custo_id',
'cadastro_centro_custo.id'
)
->join(
'pronto_atendimento_pedido_exame',
'pronto_atendimento_pedido_exame.atendimento_id',
'pronto_atendimento_atendimento.id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
)
->get();
}
private static function getOcupacoesSolicitante($params)
{
return DB::table('sigtap.ocupacao as ocupacao_medico_solicitante')
->select(
'ocupacao_medico_solicitante.id as id',
'ocupacao_medico_solicitante.nome as nome',
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.ocupacao_id',
'ocupacao_medico_solicitante.id'
)
->leftJoin(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.lotacao_id',
'lotacao_medico_solicitante.id',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento_procedimento.created_centro_custo_id'
)
->join(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->union(DB::table('sigtap.ocupacao as ocupacao_medico_solicitante')
->select(
'ocupacao_medico_solicitante.id as id',
'ocupacao_medico_solicitante.nome as nome',
)
->join(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.ocupacao_id',
'ocupacao_medico_solicitante.id'
)
->join(
'pronto_atendimento_pedido_exame',
'pronto_atendimento_pedido_exame.created_lotacao_id',
'lotacao_medico_solicitante.id'
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->join(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_pedido_exame.created_centro_custo_id'
)
->join(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
)
->get();
}
private static function getUsuariosSolicitante($params)
{
return DB::table('cadastro_usuario as usuario_medico_solicitante')
->select(
'medico_solicitante.id as id',
'medico_solicitante.nome as nome',
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id',
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.usuario_id',
'usuario_medico_solicitante.id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.lotacao_id',
'lotacao_medico_solicitante.id',
)
->leftJoin(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento_procedimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->union(DB::table('pronto_atendimento_pedido_exame')
->select(
'medico_solicitante.id as id',
'medico_solicitante.nome as nome',
)
->leftJoin(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->leftJoin(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_pedido_exame.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
)
->get();
}
private static function getOcupacoesExecutante($params)
{
return DB::table('sigtap.ocupacao as sigtap_ocupacao')
->select(
'sigtap_ocupacao.id as id',
'sigtap_ocupacao.nome as nome',
)
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.ocupacao_id',
'sigtap_ocupacao.id'
)
->leftJoin(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id',
'cadastro_lotacao.id',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_executante',
'lotacao_medico_executante.id',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_executante',
'ocupacao_medico_executante.id',
'lotacao_medico_executante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_executante',
'usuario_medico_executante.id',
'lotacao_medico_executante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_executante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('lotacao_medico_executante.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('medico_executante.id', request()->usuario_executante_id);
})
->groupBy('id')
->orderBy('nome')
->get();
}
private static function getUsuariosExecutante($params)
{
return DB::table('cadastro_usuario')
->select(
'profissional.id as id',
'profissional.nome as nome',
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.usuario_id',
'cadastro_usuario.id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'pronto_atendimento_atendimento_procedimento',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id',
'cadastro_lotacao.id',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_executante',
'lotacao_medico_executante.id',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_executante',
'ocupacao_medico_executante.id',
'lotacao_medico_executante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_executante',
'usuario_medico_executante.id',
'lotacao_medico_executante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_executante',
'medico_executante.id',
'usuario_medico_executante.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('lotacao_medico_executante.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('medico_executante.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->groupBy('id')
->orderBy('nome')
->get();
}
private static function getExames($params)
{
return DB::table('pronto_atendimento_atendimento_procedimento')
->select(
DB::raw('COALESCE(
(SELECT UPPER(e.nome)
FROM parametrizacao_exame e
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
AND e.codigo = sigtap_procedimento.codigo
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
NULL) AS nome'
),
DB::raw('COALESCE(
(SELECT e.id
FROM parametrizacao_exame e
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
AND e.codigo = sigtap_procedimento.codigo
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
NULL) AS id'
),
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->leftJoin(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->leftJoin(
'cadastro_lotacao as lotacao_profissional_executante',
'lotacao_profissional_executante.id',
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'lotacao_profissional_executante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'lotacao_profissional_executante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as cidadao_profissional_executante',
'cidadao_profissional_executante.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('lotacao_profissional_executante.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('cidadao_profissional_executante.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->havingRaw('nome IS NOT NULL')
->union(DB::table('pronto_atendimento_pedido_exame')
->select(
DB::raw('COALESCE(
(SELECT UPPER(e.nome)
FROM parametrizacao_exame e
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
NULL) AS nome'
),
DB::raw('COALESCE(
(SELECT e.id
FROM parametrizacao_exame e
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
NULL) AS id'
),
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame_item.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->havingRaw('nome IS NOT NULL')
)
->get();
}
private static function getStatus($params)
{
return DB::table('pronto_atendimento_atendimento_procedimento')
->select(
DB::raw('' . Status::REALIZADO . ' as id'),
DB::raw('"REALIZADO" AS nome'),
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM)
->when(!is_null(request()->exame_id), function ($query) {
$query->where('exame.id', request()->exame_id);
});
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->union( DB::table('pronto_atendimento_pedido_exame')
->select(
'parametrizacao_exame_status.id as id',
'parametrizacao_exame_status.nome as nome',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->leftJoin(
'parametrizacao_exame_status',
'parametrizacao_exame_status.id',
'pronto_atendimento_pedido_exame_item.status_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null(request()->exame_id), function ($query) {
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
})
)
->get();
}
private static function getEncaminhados($params)
{
return DB::table('pronto_atendimento_atendimento_procedimento')
->select(
DB::raw('
CASE
WHEN pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id IS NOT NULL
OR pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id IS NOT NULL
THEN true
ELSE false
END as value'),
DB::raw('
CASE
WHEN pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id IS NOT NULL
OR pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id IS NOT NULL
THEN "SIM"
ELSE "NÃO"
END as text')
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM)
->when(!is_null(request()->exame_id), function ($query) {
$query->where('exame.id', request()->exame_id);
});
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->union(DB::table('pronto_atendimento_pedido_exame')
->select(
DB::raw('
CASE
WHEN pronto_atendimento_pedido_exame.unidade_encaminhamento_id IS NOT NULL
OR pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id IS NOT NULL
THEN true
ELSE false
END as value'),
DB::raw('
CASE
WHEN pronto_atendimento_pedido_exame.unidade_encaminhamento_id IS NOT NULL
OR pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id IS NOT NULL
THEN "SIM"
ELSE "NÃO"
END as text')
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null(request()->status_id ?? null), function ($query) {
return $query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
})
->when(!is_null(request()->exame_id), function ($query) {
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
})
)
->get();
}
private static function getPacientes($params)
{
return DB::table('pronto_atendimento_atendimento_procedimento')
->select(
'cadastro_cidadao.id as id',
'cadastro_cidadao.nome as nome',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_atendimento_procedimento.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
->where('exame.tipo_id', Tipo::IMAGEM)
->when(!is_null(request()->exame_id), function ($query) {
$query->where('exame.id', request()->exame_id);
});
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_atendimento_procedimento.lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->leftJoin(
'pronto_atendimento_faa',
'pronto_atendimento_faa.id',
'pronto_atendimento_atendimento.faa_id'
)
->leftJoin(
'cadastro_paciente',
'cadastro_paciente.id',
'pronto_atendimento_faa.paciente_id'
)
->leftJoin(
'cadastro_cidadao',
'cadastro_cidadao.id',
'cadastro_paciente.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null(request()->encaminhado), function ($query) {
return $query->where(function ($query) {
if (request()->encaminhado === 'true') {
$query->whereNotNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
->orWhereNotNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
} else {
$query->whereNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
->whereNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
}
});
})
->union(DB::table('pronto_atendimento_pedido_exame')
->select(
'cadastro_cidadao.id as id',
'cadastro_cidadao.nome as nome',
)
->join(
'pronto_atendimento_atendimento',
'pronto_atendimento_atendimento.id',
'pronto_atendimento_pedido_exame.atendimento_id'
)
->join(
'pronto_atendimento_atendimento_recepcao',
'pronto_atendimento_atendimento_recepcao.id',
'pronto_atendimento_atendimento.id'
)
->join('pronto_atendimento_pedido_exame_item', function ($join) {
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
Status::SOLICITADO,
Status::AGUARDANDO_RESULTADO,
Status::NAO_REALIZADO
])
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('parametrizacao_exame as exame')
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
->where('exame.tipo_id', Tipo::IMAGEM);
});
})
->leftJoin(
'cadastro_lotacao',
'cadastro_lotacao.id',
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
)
->leftJoin(
'sigtap.ocupacao as sigtap_ocupacao',
'sigtap_ocupacao.id',
'cadastro_lotacao.ocupacao_id'
)
->leftJoin(
'cadastro_centro_custo',
'cadastro_centro_custo.id',
'pronto_atendimento_atendimento.created_centro_custo_id'
)
->leftJoin(
'cadastro_infraestrutura',
'cadastro_infraestrutura.id',
'cadastro_centro_custo.infraestrutura_id'
)
->leftJoin(
'cadastro_usuario',
'cadastro_usuario.id',
'cadastro_lotacao.usuario_id'
)
->leftJoin(
'cadastro_cidadao as profissional',
'profissional.id',
'cadastro_usuario.cidadao_id'
)
->leftJoin(
'cadastro_lotacao as lotacao_medico_solicitante',
'lotacao_medico_solicitante.id',
'pronto_atendimento_pedido_exame_item.created_lotacao_id'
)
->leftJoin(
'sigtap.ocupacao as ocupacao_medico_solicitante',
'ocupacao_medico_solicitante.id',
'lotacao_medico_solicitante.ocupacao_id'
)
->leftJoin(
'cadastro_usuario as usuario_medico_solicitante',
'usuario_medico_solicitante.id',
'lotacao_medico_solicitante.usuario_id'
)
->leftJoin(
'cadastro_cidadao as medico_solicitante',
'medico_solicitante.id',
'usuario_medico_solicitante.cidadao_id'
)
->leftJoin(
'pronto_atendimento_faa',
'pronto_atendimento_faa.id',
'pronto_atendimento_atendimento.faa_id'
)
->leftJoin(
'cadastro_paciente',
'cadastro_paciente.id',
'pronto_atendimento_faa.paciente_id'
)
->leftJoin(
'cadastro_cidadao',
'cadastro_cidadao.id',
'cadastro_paciente.cidadao_id'
)
->whereBetween(
'pronto_atendimento_atendimento_recepcao.atendido_em',
[
$params['data_inicial'] ?? null,
$params['data_final'] ?? null
]
)
->when(!is_null(request()->unidade_id), function ($query) {
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
})
->when(!is_null(request()->infraestrutura_id), function ($query) {
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
})
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
})
->when(!is_null(request()->usuario_executante_id), function ($query) {
return $query->where('profissional.id', request()->usuario_executante_id);
})
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
})
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
})
->when(!is_null(request()->exame_id), function ($query) {
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
})
->when(!is_null(request()->status_id ?? null), function ($query) {
return $query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
})
->when(!is_null(request()->encaminhado), function ($query) {
return $query->where(function ($query) {
if (request()->encaminhado === 'true') {
$query->whereNotNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
->orWhereNotNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
} else {
$query->whereNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
->whereNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
}
});
})
)
->get();
}
private static function getModel()
{
return [
'data_inicial' => null,
'data_final' => null,
'horario_inicial' => null,
'horario_final' => null,
'unidade_id' => null,
'infraestrutura_id' => null,
'ocupacao_solicitante_id' => null,
'usuario_solicitante_id' => null,
'ocupacao_executante_id' => null,
'usuario_executante_id' => null,
'exame_id' => null,
'status_id' => null,
'encaminhado' => null,
'paciente_id' => null,
'prontuario' => null,
];
}
}