Files
rkm-conectasus-ci-sandbox/api/app/Services/ProntoAtendimento/Evasao/CancelamentoEvasaoService.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

108 lines
4.6 KiB
PHP

<?php
namespace App\Services\ProntoAtendimento\Evasao;
use App\Enums\ProntoAtendimento\Atendimento\Desfecho;
use App\Models\ProntoAtendimento\Atendimento\Faa;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class CancelamentoEvasaoService extends Service
{
public static function datatable($request)
{
$cancelamentoEvasao = DB::table('pronto_atendimento_atendimento')
->leftJoin('painel_senha_fila_historico', function($leftJoin) {
$leftJoin->on('pronto_atendimento_atendimento.fila_id', '=', 'painel_senha_fila_historico.fila_id')
->where('painel_senha_fila_historico.id', '=', function ($query) {
$query->select('painel_senha_fila_historico.id')
->from('painel_senha_fila_historico')
->whereColumn('painel_senha_fila_historico.fila_id', 'pronto_atendimento_atendimento.fila_id')
->orderByDesc('painel_senha_fila_historico.created_at')
->limit(1);
});
})
->leftJoin('cadastro_centro_custo as fila_centro_custo', 'fila_centro_custo.id', 'painel_senha_fila_historico.created_centro_custo_id')
->leftJoin('cadastro_setor', 'cadastro_setor.id', 'fila_centro_custo.setor_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('cadastro_centro_custo', 'cadastro_centro_custo.id', 'pronto_atendimento_atendimento.created_centro_custo_id')
->where('pronto_atendimento_faa.desfecho_id', Desfecho::EVASAO)
->where('pronto_atendimento_faa.updated_at', '>=', Carbon::now()->subHours(24)->toDateTimeString())
->where('cadastro_centro_custo.infraestrutura_id', '=', $request->infraestrutura_id);
return $cancelamentoEvasao
->select([
DB::raw('DATE_FORMAT(pronto_atendimento_faa.updated_at, "%d/%m/%Y") as data'),
DB::raw('DATE_FORMAT(pronto_atendimento_faa.updated_at, "%H:%i") as hora'),
'cadastro_cidadao.nome',
DB::raw('(CASE
WHEN cadastro_cidadao.nome_mae IS NULL
THEN "Não informado"
ELSE cadastro_cidadao.nome_mae
END) as nome_mae'),
DB::raw('(CASE
WHEN DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y") IS NULL
THEN "Não informada"
ELSE DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")
END) as data_nascimento'),
'cadastro_paciente.prontuario',
'cadastro_paciente.sequencial_desconhecido',
'cadastro_cidadao.caracteristicas_fisicas',
'cadastro_cidadao.preferencia_nome_id AS preferencia_nome_id',
'cadastro_cidadao.nome_social AS nome_social',
'pronto_atendimento_faa.id as faa_id',
'pronto_atendimento_faa.numero as faa_numero',
DB::raw('(CASE
WHEN painel_senha_fila_historico.motivo_evasao IS NULL
THEN "Não informado"
ELSE painel_senha_fila_historico.motivo_evasao
END) as motivo_evasao'),
'cadastro_setor.nome as setor'
])
->orderByDesc('pronto_atendimento_faa.updated_at')
->get();
}
public static function cancel($request, $faaId)
{
self::validations();
DB::transaction(function () use ($request, $faaId) {
$faa = Faa::findOrFail($faaId);
$faa->update([
'desfecho_id' => null,
'finalizado' => false,
'motivo_cancelamento_evasao' => $request->motivo_cancelamento_evasao,
]);
$fila = $faa->atendimentos->first()->fila;
if (!is_null($fila)) {
$fila->update([
'evadido' => false,
'motivo_cancelamento_evasao' => $request->motivo_cancelamento_evasao,
]);
}
});
}
private static function validations()
{
return request()->validate([
'motivo_cancelamento_evasao' => [
'required',
'string',
'between:3,500',
]
]);
}
}