209 lines
12 KiB
PHP
209 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoTriagem;
|
|
|
|
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
|
use App\Models\ProntoAtendimento\Atendimento\Triagem\Encaminhamento;
|
|
use App\Utils\MaskUtil;
|
|
use Barryvdh\Snappy\Facades\SnappyPdf;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Str;
|
|
|
|
class GuiaEncaminhamentoController extends Controller
|
|
{
|
|
public function __invoke($atendimentoId = null)
|
|
{
|
|
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
|
->where('sistema_id', 1)
|
|
->firstOrFail();
|
|
|
|
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
|
|
|
|
$encaminhamentos = [];
|
|
|
|
if (!is_null($atendimentoId)) {
|
|
$encaminhamentos = self::getEncaminhamentosByAtendimento($atendimentoId);
|
|
} else {
|
|
$encaminhamentos = self::getEncaminhamentos(request()->paciente_id);
|
|
}
|
|
|
|
$data = [
|
|
'cliente' => [
|
|
'nome' => Str::upper($cliente->nome),
|
|
'logotipo' => $logotipo,
|
|
],
|
|
'encaminhamentos' => $encaminhamentos,
|
|
];
|
|
|
|
return SnappyPdf::loadView('impressoes.template.pronto-atendimento.atendimento-triagem.guia-encaminhamento', compact('data'))
|
|
->setOption('header-html', '')
|
|
->setOption('footer-html', '')
|
|
->setOption('margin-top', '10')
|
|
->setOption('margin-bottom', '10')
|
|
->inline();
|
|
}
|
|
|
|
public static function getEncaminhamentosByAtendimento($atendimentoId)
|
|
{
|
|
$encaminhamentos = [];
|
|
|
|
$atendimento = Atendimento::findOrFail($atendimentoId);
|
|
$paciente = $atendimento->faa->paciente;
|
|
|
|
$atendimento->atendimentosTriagem->each(function ($atendimentoTriagem) use ($paciente, &$encaminhamentos) {
|
|
$atendimentoTriagem->encaminhamentos->each(function ($encaminhamento) use ($paciente, &$encaminhamentos) {
|
|
$lotacaoOrigem = $encaminhamento->createdLotacao;
|
|
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
|
|
$usuarioOrigem = $lotacaoOrigem->usuario;
|
|
$infraestruturaDestino = $encaminhamento->infraestrutura;
|
|
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
|
|
$endereco = $infraestruturaDestino->endereco->completo;
|
|
|
|
$encaminhamentos[] = [
|
|
'paciente' => [
|
|
'nome' => $paciente->cidadao->nome,
|
|
'prontuario' => $paciente->prontuario,
|
|
'nome_social' => $paciente->cidadao->nome_social,
|
|
'idade' => $paciente->cidadao->idade_formatada,
|
|
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
|
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
|
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
|
'sexo' => $paciente->cidadao->sexo->descricao,
|
|
'data_nascimento' => $paciente->cidadao->data_nascimento
|
|
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
|
: 'NÃO INFORMADA',
|
|
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
|
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
|
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
|
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
|
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
|
'numero' => $paciente->cidadao->domicilio->endereco->numero,
|
|
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
|
|
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
|
'cep' => $paciente->cidadao->domicilio
|
|
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
|
|
: null,
|
|
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
|
|
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
|
|
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
|
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
|
],
|
|
'instituicao' => $instituicao,
|
|
'endereco' => $endereco,
|
|
'unidade_origem' => [
|
|
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
|
|
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
|
|
'cnes' => $infraestruturaOrigem->unidade->cnes,
|
|
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
|
|
],
|
|
'usuario_origem' => [
|
|
'nome' => $usuarioOrigem->cidadao->nome ?? null,
|
|
'usuario_nome' => $usuarioOrigem->cidadao->nome,
|
|
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
|
|
. $lotacaoOrigem->ocupacao->nome,
|
|
'documento' => $usuarioOrigem->registro_tipo_id
|
|
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
|
? $usuarioOrigem->registro_tipo_outro
|
|
: $usuarioOrigem->registroTipo->sigla
|
|
) . ": {$usuarioOrigem->registro_numero}"
|
|
: 'Conselho profissional: NÃO INFORMADO',
|
|
],
|
|
'data' => Carbon::now()->format('d/m/Y') ?? null,
|
|
'horario' => Carbon::now()->format('H:i') ?? null,
|
|
'motivo' => $encaminhamento['motivo'] ?? null,
|
|
];
|
|
});
|
|
});
|
|
|
|
return $encaminhamentos;
|
|
}
|
|
|
|
public static function getEncaminhamentos($pacienteId)
|
|
{
|
|
$encaminhamentos = [];
|
|
|
|
$paciente = Paciente::findOrFail($pacienteId);
|
|
|
|
foreach (request()->encaminhamentos as $encaminhamento) {
|
|
$lotacaoOrigem = null;
|
|
$infraestruturaDestino = null;
|
|
|
|
if (isset($encaminhamento['id'])) {
|
|
$encaminhamento = Encaminhamento::findOrFail($encaminhamento['id']);
|
|
$lotacaoOrigem = $encaminhamento->createdLotacao;
|
|
$infraestruturaDestino = $encaminhamento->infraestrutura;
|
|
} else {
|
|
$lotacaoOrigem = self::getCurrentLotacao();
|
|
$infraestruturaDestino = Infraestrutura::findOrFail($encaminhamento['infraestrutura_id']);
|
|
}
|
|
|
|
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
|
|
$usuarioOrigem = $lotacaoOrigem->usuario;
|
|
|
|
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
|
|
$endereco = $infraestruturaDestino->endereco->completo;
|
|
|
|
$encaminhamentos[] = [
|
|
'paciente' => [
|
|
'nome' => $paciente->cidadao->nome,
|
|
'prontuario' => $paciente->prontuario,
|
|
'nome_social' => $paciente->cidadao->nome_social,
|
|
'idade' => $paciente->cidadao->idade_formatada,
|
|
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
|
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
|
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
|
'sexo' => $paciente->cidadao->sexo->descricao,
|
|
'data_nascimento' => $paciente->cidadao->data_nascimento
|
|
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
|
: 'NÃO INFORMADA',
|
|
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
|
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
|
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
|
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
|
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
|
'numero' => $paciente->cidadao->domicilio->endereco->numero,
|
|
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
|
|
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
|
'cep' => $paciente->cidadao->domicilio
|
|
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
|
|
: null,
|
|
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
|
|
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
|
|
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
|
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
|
],
|
|
'instituicao' => $instituicao,
|
|
'endereco' => $endereco,
|
|
'unidade_origem' => [
|
|
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
|
|
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
|
|
'cnes' => $infraestruturaOrigem->unidade->cnes,
|
|
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
|
|
],
|
|
'usuario_origem' => [
|
|
'nome' => $usuarioOrigem->cidadao->nome ?? null,
|
|
'usuario_nome' => $usuarioOrigem->cidadao->nome,
|
|
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
|
|
. $lotacaoOrigem->ocupacao->nome,
|
|
'documento' => $usuarioOrigem->registro_tipo_id
|
|
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
|
? $usuarioOrigem->registro_tipo_outro
|
|
: $usuarioOrigem->registroTipo->sigla
|
|
) . ": {$usuarioOrigem->registro_numero}"
|
|
: 'Conselho profissional: NÃO INFORMADO',
|
|
],
|
|
'data' => Carbon::now()->format('d/m/Y') ?? null,
|
|
'horario' => Carbon::now()->format('H:i') ?? null,
|
|
'motivo' => $encaminhamento['motivo'] ?? null,
|
|
];
|
|
}
|
|
|
|
return $encaminhamentos;
|
|
}
|
|
}
|