This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user