720 lines
27 KiB
PHP
720 lines
27 KiB
PHP
<?php
|
|
|
|
namespace App\Services\ProntoAtendimento;
|
|
|
|
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
|
use App\Models\Sigtap\Procedimento;
|
|
use App\Services\Service;
|
|
use App\Utils\Format;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class RelatorioQuantitativoProducaoService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$params = request()->all();
|
|
|
|
self::adjustPeriod($params);
|
|
|
|
$idadeDe = $params['idade_de'] ?? null;
|
|
$idadeAte = $params['idade_ate'] ?? null;
|
|
|
|
$procedimentosAtendimentos = DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
DB::raw(
|
|
'SUM(pronto_atendimento_atendimento_procedimento.quantidade) as quantidade',
|
|
),
|
|
'sigtap_procedimento.nome as procedimento_nome',
|
|
'sigtap_procedimento.codigo as procedimento_codigo',
|
|
'sigtap_ocupacao.nome as ocupacao_nome',
|
|
'sigtap_ocupacao.codigo as ocupacao_codigo',
|
|
'profissional.nome as profissional_nome',
|
|
DB::raw("CASE WHEN pronto_atendimento_faa.finalizado = 1 THEN 'FINALIZADO' ELSE 'EM ABERTO' END AS status"),
|
|
)
|
|
->join(
|
|
'sigtap.procedimento as sigtap_procedimento',
|
|
'sigtap_procedimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.procedimento_id'
|
|
)
|
|
->join(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->join(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
)
|
|
->where('pronto_atendimento_faa.cancelado', 0)
|
|
->whereNull('pronto_atendimento_faa.deleted_at')
|
|
->whereNull('pronto_atendimento_atendimento_procedimento.deleted_at')
|
|
->groupBy(
|
|
'sigtap_procedimento.codigo',
|
|
'sigtap_ocupacao.codigo',
|
|
DB::raw("CASE WHEN pronto_atendimento_faa.finalizado = 1 THEN 'FINALIZADO' ELSE 'EM ABERTO' END"),
|
|
)
|
|
->orderBy('sigtap_procedimento.nome');
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$procedimentosAtendimentos->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']);
|
|
}
|
|
|
|
if (!is_null($params['local_atendimento_id'] ?? null)) {
|
|
|
|
$procedimentosAtendimentos->where('cadastro_infraestrutura.id', $params['local_atendimento_id']);
|
|
}
|
|
|
|
if (!is_null($idadeDe)) {
|
|
|
|
$procedimentosAtendimentos->whereRaw("(TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURRENT_DATE)) >= $idadeDe");
|
|
}
|
|
|
|
if (!is_null($idadeAte)) {
|
|
|
|
$procedimentosAtendimentos->whereRaw("(TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURRENT_DATE)) <= $idadeAte");
|
|
}
|
|
|
|
if (!is_null($params['ocupacao_id'] ?? null)) {
|
|
|
|
$procedimentosAtendimentos->where('cadastro_lotacao.ocupacao_id', $params['ocupacao_id']);
|
|
}
|
|
|
|
if (!is_null($params['usuario_id'] ?? null)) {
|
|
|
|
$procedimentosAtendimentos->where('cadastro_lotacao.usuario_id', $params['usuario_id']);
|
|
}
|
|
|
|
if (!is_null($params['procedimento_id'] ?? null)) {
|
|
|
|
$procedimento = Procedimento::findOrFail($params['procedimento_id']);
|
|
|
|
$procedimentosAtendimentos->where('sigtap_procedimento.codigo', $procedimento->codigo);
|
|
}
|
|
|
|
if (!is_null($params['status'] ?? null)) {
|
|
|
|
$procedimentosAtendimentos->where('pronto_atendimento_faa.finalizado', $params['status']);
|
|
}
|
|
|
|
$procedimentosAtendimentos = $procedimentosAtendimentos->get();
|
|
|
|
$quantidadeTotal = 0;
|
|
$result = [];
|
|
$index = 1;
|
|
|
|
foreach ($procedimentosAtendimentos as $procedimentoAtendimento) {
|
|
|
|
$procedimentoAtendimento->index = $index;
|
|
|
|
$procedimentoCodigo = Format::getProcedimentoFormated($procedimentoAtendimento->procedimento_codigo);
|
|
$procedimentoAtendimento->procedimento_codigo_nome =
|
|
"{$procedimentoCodigo} - {$procedimentoAtendimento->procedimento_nome}";
|
|
|
|
$procedimentoAtendimento->ocupacao_codigo_nome =
|
|
"{$procedimentoAtendimento->ocupacao_codigo} - {$procedimentoAtendimento->ocupacao_nome}";
|
|
|
|
$quantidadeTotal += $procedimentoAtendimento->quantidade;
|
|
$index++;
|
|
}
|
|
|
|
return [
|
|
'procedimentos_atendimentos' => $procedimentosAtendimentos,
|
|
'quantidade_total' => $quantidadeTotal,
|
|
];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
return [
|
|
'form' => self::getForm(),
|
|
'model' => self::getModel(),
|
|
'additionals' => [
|
|
'data_atual' => Carbon::today()->format('d/m/Y'),
|
|
]
|
|
];
|
|
}
|
|
|
|
private static function getForm()
|
|
{
|
|
$params = request()->all();
|
|
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
|
|
|
self::adjustPeriod($params);
|
|
|
|
return [
|
|
'unidades' => self::getUnidades($params),
|
|
'locais_atendimento' => self::getLocaisAtendimento($params),
|
|
'ocupacoes' => self::getOcupacoes($params),
|
|
'procedimentos' => self::getProcedimentos($params),
|
|
'usuarios' => self::getUsuarios($params),
|
|
'status' => self::getStatus($params),
|
|
'unidade_logada' => [
|
|
'unidade_id' => $lotacao->infraestrutura->unidade->id,
|
|
'infraestrutura_id' => $lotacao->infraestrutura->id,
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function adjustPeriod(&$params)
|
|
{
|
|
if (!is_null($params['periodo']['date']['start'] ?? null) && $params['periodo']['date']['end']) {
|
|
|
|
$params['periodo']['date']['start'] =
|
|
(Carbon::createFromFormat('d/m/Y', "{$params['periodo']['date']['start']}"))->startOfDay();
|
|
$params['periodo']['date']['end'] =
|
|
(Carbon::createFromFormat('d/m/Y', "{$params['periodo']['date']['end']}"))->endOfDay();
|
|
}
|
|
}
|
|
|
|
private static function getUnidades($params)
|
|
{
|
|
return DB::table('cadastro_unidade')
|
|
->select(
|
|
'cadastro_unidade.id',
|
|
'cadastro_unidade.nome_fantasia'
|
|
)
|
|
->whereExists(function ($query) use ($params) {
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_faa')
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'=',
|
|
'pronto_atendimento_faa.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.faa_id',
|
|
'=',
|
|
'pronto_atendimento_faa.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id',
|
|
'=',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'=',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
);
|
|
})
|
|
->orderBy('cadastro_unidade.nome_fantasia')
|
|
->get();
|
|
}
|
|
|
|
private static function getLocaisAtendimento($params)
|
|
{
|
|
$locaisAtendimento = 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"
|
|
),
|
|
)
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->whereExists(function ($query) use ($params) {
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_faa')
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'=',
|
|
'pronto_atendimento_faa.created_centro_custo_id'
|
|
)
|
|
->whereColumn('cadastro_centro_custo.infraestrutura_id', 'cadastro_infraestrutura.id')
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
);
|
|
});
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$locaisAtendimento->where('cadastro_unidade.id', $params['unidade_id']);
|
|
}
|
|
|
|
return $locaisAtendimento->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('sigtap.ocupacao as ocupacao')
|
|
->select(
|
|
'ocupacao.id',
|
|
'ocupacao.nome',
|
|
'ocupacao.codigo',
|
|
)
|
|
->whereExists(function ($query) use ($params) {
|
|
|
|
$idadeDe = $params['idade_de'] ?? null;
|
|
$idadeAte = $params['idade_ate'] ?? null;
|
|
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_atendimento_procedimento')
|
|
->join(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
)
|
|
->whereColumn('cadastro_lotacao.ocupacao_id', 'ocupacao.id');
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']);
|
|
}
|
|
|
|
if (!is_null($params['local_atendimento_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.id', $params['local_atendimento_id']);
|
|
}
|
|
|
|
if (!is_null($idadeDe)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) >= $idadeDe");
|
|
}
|
|
|
|
if (!is_null($idadeAte)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) <= $idadeAte");
|
|
}
|
|
});
|
|
|
|
$ocupacoes = $ocupacoes
|
|
->orderBy('ocupacao.nome')
|
|
->get();
|
|
|
|
foreach ($ocupacoes as $ocupacaoAtendimento) {
|
|
|
|
$ocupacaoCodigo = Format::getProcedimentoFormated($ocupacaoAtendimento->codigo);
|
|
|
|
$ocupacaoAtendimento->ocupacao_codigo_nome =
|
|
"{$ocupacaoCodigo} - {$ocupacaoAtendimento->nome}";
|
|
}
|
|
|
|
return $ocupacoes;
|
|
}
|
|
|
|
private static function getUsuarios($params)
|
|
{
|
|
$usuarios = DB::table('cadastro_usuario')
|
|
->select(
|
|
'cadastro_usuario.id',
|
|
'cadastro_cidadao.nome'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->whereExists(function ($query) use ($params) {
|
|
|
|
$idadeDe = $params['idade_de'] ?? null;
|
|
$idadeAte = $params['idade_ate'] ?? null;
|
|
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_atendimento_procedimento')
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao as paciente',
|
|
'paciente.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
)
|
|
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id');
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']);
|
|
}
|
|
|
|
if (!is_null($params['local_atendimento_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.id', $params['local_atendimento_id']);
|
|
}
|
|
|
|
if (!is_null($idadeDe)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(paciente.data_nascimento)) >= $idadeDe");
|
|
}
|
|
|
|
if (!is_null($idadeAte)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(paciente.data_nascimento)) <= $idadeAte");
|
|
}
|
|
|
|
if (!is_null($params['ocupacao_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_lotacao.ocupacao_id', $params['ocupacao_id']);
|
|
}
|
|
});
|
|
|
|
return $usuarios
|
|
->orderBy('cadastro_cidadao.nome')
|
|
->get();
|
|
}
|
|
|
|
private static function getProcedimentos($params)
|
|
{
|
|
$procedimentos = DB::table('sigtap.procedimento as procedimento')
|
|
->select(
|
|
'procedimento.id',
|
|
'procedimento.nome',
|
|
'procedimento.codigo',
|
|
)
|
|
->whereExists(function ($query) use ($params) {
|
|
|
|
$idadeDe = $params['idade_de'] ?? null;
|
|
$idadeAte = $params['idade_ate'] ?? null;
|
|
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_atendimento_procedimento')
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_faa.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
)
|
|
->whereColumn('pronto_atendimento_atendimento_procedimento.procedimento_id', 'procedimento.id');
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']);
|
|
}
|
|
|
|
if (!is_null($params['local_atendimento_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.id', $params['local_atendimento_id']);
|
|
}
|
|
|
|
if (!is_null($idadeDe)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) >= $idadeDe");
|
|
}
|
|
|
|
if (!is_null($idadeAte)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) <= $idadeAte");
|
|
}
|
|
|
|
if (!is_null($params['ocupacao_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_lotacao.ocupacao_id', $params['ocupacao_id']);
|
|
}
|
|
});
|
|
|
|
$procedimentos = $procedimentos
|
|
->groupBy('procedimento.codigo')
|
|
->orderBy('procedimento.nome')
|
|
->get();
|
|
|
|
foreach ($procedimentos as $procedimentoAtendimento) {
|
|
|
|
$procedimentoCodigo = Format::getProcedimentoFormated($procedimentoAtendimento->codigo);
|
|
|
|
$procedimentoAtendimento->procedimento_codigo_nome =
|
|
"{$procedimentoCodigo} - {$procedimentoAtendimento->nome}";
|
|
}
|
|
|
|
return $procedimentos;
|
|
}
|
|
|
|
private static function getStatus($params)
|
|
{
|
|
return DB::table('pronto_atendimento_faa as paf')
|
|
->select(
|
|
'paf.finalizado',
|
|
)
|
|
->distinct()
|
|
->whereExists(function($query) use ($params) {
|
|
|
|
$idadeDe = $params['idade_de'] ?? null;
|
|
$idadeAte = $params['idade_ate'] ?? null;
|
|
|
|
$query->select(DB::raw(1))
|
|
->from('pronto_atendimento_atendimento')
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_lotacao.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereColumn(
|
|
'pronto_atendimento_atendimento.faa_id',
|
|
'paf.id'
|
|
)
|
|
->whereBetween(
|
|
'paf.created_at',
|
|
[
|
|
$params['periodo']['date']['start'] ?? null,
|
|
$params['periodo']['date']['end'] ?? null
|
|
]
|
|
);
|
|
|
|
if (!is_null($params['unidade_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.unidade_id', $params['unidade_id']);
|
|
}
|
|
|
|
if (!is_null($params['local_atendimento_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_infraestrutura.id', $params['local_atendimento_id']);
|
|
}
|
|
|
|
if (!is_null($idadeDe)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) >= $idadeDe");
|
|
}
|
|
|
|
if (!is_null($idadeAte)) {
|
|
|
|
$query->whereRaw("(YEAR(CURDATE()) - YEAR(cadastro_cidadao.data_nascimento)) <= $idadeAte");
|
|
}
|
|
|
|
if (!is_null($params['ocupacao_id'] ?? null)) {
|
|
|
|
$query->where('cadastro_lotacao.ocupacao_id', $params['ocupacao_id']);
|
|
}
|
|
|
|
if (!is_null($params['procedimento_id'] ?? null)) {
|
|
|
|
$query->where('pronto_atendimento_atendimento_procedimento.procedimento_id', $params['procedimento_id']);
|
|
}
|
|
})
|
|
->get()
|
|
->map(function($status) {
|
|
return [
|
|
'valor' => $status->finalizado ?? false,
|
|
'nome' => $status->finalizado ? 'FINALIZADO' : 'EM ABERTO',
|
|
];
|
|
});
|
|
}
|
|
|
|
private static function getModel()
|
|
{
|
|
return [
|
|
'periodo' => [
|
|
'date' => [
|
|
'start' => $params['periodo']['date']['start'] ?? null,
|
|
'end' => $params['periodo']['date']['end'] ?? null,
|
|
],
|
|
'time' => [
|
|
'start' => $params['periodo']['time']['start'] ?? null,
|
|
'end' => $params['periodo']['time']['end'] ?? null,
|
|
]
|
|
],
|
|
'unidade_id' => null,
|
|
'localAtendimento_id' => null,
|
|
'ocupacao_id' => null,
|
|
'usuario_id' => null,
|
|
'procedimento_id' => null,
|
|
'idade_de' => null,
|
|
'idade_ate' => null,
|
|
'status' => null,
|
|
];
|
|
}
|
|
}
|