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,156 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
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\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class CartaMedicaController extends Controller
{
private const TITLE = 'CARTA MÉDICA';
private const TEMPLATE = 'ambulatorio.carta-medica';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$cartasMedicas = $this->getCartasMedicasNaoSalvas($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::CARTA_MEDICA);
} else {
$cartasMedicas = $this->getCartasMedicas($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('cartasMedicas'));
}
private function getCartasMedicasNaoSalvas($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$infraestrutura = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
$cartasMedicas[] = [
'usuario' => [
'nome' => $lotacao->usuario->cidadao->nome,
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
'unidade' => [
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
'endereco' => $infraestrutura->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
],
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
'idade' => $paciente->cidadao->idadeFormatada,
'prontuario' => $paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae,
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
],
'descricao' => request()->descricao,
'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 = [
'cartasMedicas' => $cartasMedicas,
];
return $data;
}
private function getCartasMedicas($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$cartasMedicas = [];
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$cartasMedicas, $paciente) {
$soap->cartasMedicas()->get()->each(function($cartaMedica) use (&$cartasMedicas, $paciente) {
$lotacao = $cartaMedica->createdLotacao;
$infraestrutura = $cartaMedica->createdCentroCusto->infraestrutura;
$cartasMedicas[] = [
'usuario' => [
'nome' => $lotacao->usuario->cidadao->nome,
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
'unidade' => [
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
'endereco' => $infraestrutura->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
],
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
'idade' => $paciente->cidadao->idadeFormatada,
'prontuario' => $paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae,
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
],
'descricao' => $cartaMedica->descricao,
'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 = [
'cartasMedicas' => $cartasMedicas,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}