189 lines
12 KiB
PHP
189 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
|
|
|
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
|
|
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
|
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 RequisicaoExameCitopatologicoColoUteroController 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-exame-citopatologico-colo-utero', $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-exame-citopatologico-colo-utero.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_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
|
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
|
],
|
|
'paciente' => [
|
|
'prontuario' => mb_str_split($paciente->prontuario),
|
|
'cns' => mb_str_split($paciente->cidadao->cns),
|
|
'cpf' => mb_str_split($paciente->cidadao->cpf),
|
|
'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,
|
|
'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::COLETA_DE_MATERIAL_DO_COLO_DE_UTERO_PARA_EXAME_CITOPATOLOGICO,
|
|
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA,
|
|
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA_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_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
|
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
|
],
|
|
'paciente' => [
|
|
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
|
|
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
|
|
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
|
|
'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,
|
|
'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,
|
|
];
|
|
}
|
|
}
|