init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,152 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Geral\DocumentoTipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\DocumentoTipo as GeralDocumentoTipo;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\NumericUtil;
class AtestadoController extends Controller
{
private const TITLE = 'ATESTADO';
private const TEMPLATE = 'ambulatorio.atestado';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$atestados = $this->getAtestadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ATESTADO_MEDICO);
} else {
$atestados = $this->getAtestados($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('atestados'));
}
private function getAtestadosNaoSalvos($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$unidade = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura->unidade;
$atestados[] = [
'modelo_id' => (int) request()->modelo_id,
'descricao' => request()->descricao,
'is_atestado_acompanhante' => DataUtil::getBooleanValueFromStringBoolean(request()->is_atestado_acompanhante),
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => request()->nome,
'documento' => [
'tipo' => GeralDocumentoTipo::find(request()->documento_tipo_id)->nome ?? null,
'numero' => request()->documento_tipo_id ? (request()->documento_tipo_id == DocumentoTipo::CPF ? request()->cpf : request()->cns) : null,
],
'unidade' => [
'nome_fantasia' => $unidade->nome_fantasia,
],
'data' => request()->data,
'horario' => request()->horario,
'horario_inicial' => request()->horario_inicial,
'quantidade_horas' => request()->quantidade_horas,
'cid' => request()->cid['codigo'] ?? null,
'dias' => request()->dias,
'dias_por_extenso' => NumericUtil::getPorExtenso((int) request()->dias),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? (
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
$data = [
'atestados' => $atestados,
];
return $data;
}
private function getAtestados($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atestados = [];
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$atestados, $paciente) {
$soap->atestados()->get()->each(function($atestado) use (&$atestados, $paciente) {
$lotacao = $atestado->createdLotacao;
$unidade = $atestado->createdCentroCusto->infraestrutura->unidade;
$atestados[] = [
'modelo_id' => $atestado->modelo_id,
'descricao' => $atestado->descricao,
'is_atestado_acompanhante' => $atestado->is_atestado_acompanhante,
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => $atestado->nome_acompanhante,
'documento' => [
'tipo' => $atestado->documentoTipo->nome ?? null,
'numero' => $atestado->documento_tipo_id ? ($atestado->documento_tipo_id === DocumentoTipo::CPF ? $atestado->cpf : $atestado->cns) : null,
],
'unidade' => [
'nome_fantasia' => $unidade->nome_fantasia,
],
'data' => $atestado->data ? $atestado->data->format('d/m/Y') : null,
'horario' => $atestado->horario ? $atestado->horario->format('H:i') : null,
'horario_inicial' => $atestado->horario_inicial ? $atestado->horario_inicial->format('H:i') : null,
'quantidade_horas' => $atestado->quantidade_horas,
'cid' => $atestado->cid->codigo ?? null,
'dias' => $atestado->dias,
'dias_por_extenso' => NumericUtil::getPorExtenso((int) $atestado->dias),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? (
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
});
});
$data = [
'atestados' => $atestados,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}