Files
rkm-conectasus-ci-sandbox/api/app/Http/Controllers/Impressao/Ambulatorio/RequisicaoMamografiaController.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

206 lines
13 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Sigtap\Procedimento;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Utils\DataUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class RequisicaoMamografiaController extends Controller
{
public function __invoke($atendimentoId)
{
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
$data = $this->getDadosNaoSalvos();
}
else {
$data = $this->getDadosAtendimento($atendimentoId);
}
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-mamografia', $data)
->setOption('margin-bottom', 4)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 4)
->setOption('enable-local-file-access', true)
->setPaper('a4')
->setOrientation('portrait');
$pdf->setTimeout(180);
return $pdf->inline('requisicao-mamografia.pdf');
}
private function getDadosNaoSalvos()
{
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$paciente = Paciente::findOrFail(request()->paciente_id);
return [
'requisitante' => [
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($paciente->prontuario),
'cns' => mb_str_split($paciente->cidadao->cns),
'cpf' => mb_str_split($paciente->cidadao->cpf),
'is_sexo_masculino' => $paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($paciente->cidadao->nome),
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
'nacionalidade' => $paciente->cidadao->nacionalidade->descricao ?? null,
'rg' => [
'numero' => mb_str_split($paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (string) $paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => [[]],
];
}
private function getDadosAtendimento($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$hasExame = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->whereHas('exame', fn ($q) => $q
->whereIn('codigo', [
Procedimento::MAMOGRAFIA,
Procedimento::MAMOGRAFIA_BILATERAL_PARA_RASTREAMENTO,
])
)
->exists();
if ($hasExame) {
$solicitacoesExames->push([]);
}
});
});
return [
'requisitante' => [
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
'is_sexo_masculino' => $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $atendimento->paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
'nacionalidade' => $atendimento->paciente->cidadao->nacionalidade->descricao ?? null,
'rg' => [
'numero' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (string) $atendimento->paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($atendimento->paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => $solicitacoesExames,
];
}
}