This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade as EscolaridadeEnum;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\LocalNascimento;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\CasoSuspeito;
|
||||
use App\Models\Ambulatorio\CasoSuspeitoFicha;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Obito;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Intranet\Estado;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\Intranet\Pais;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FichaNotificacaoController extends Controller
|
||||
{
|
||||
private const TEMPLATE = 'impressoes.template.ambulatorio.ficha-notificacao';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
$request = request()->all();
|
||||
|
||||
$atendimentoId = $request['atendimento_id'] ?? $atendimentoId;
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
$cliente = Cliente::where('link', config('database.default'))->firstOrFail();
|
||||
|
||||
if (!isset($request['caso_suspeito_id'])) {
|
||||
$soapIds = $atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->whereHas('casosSuspeitos')
|
||||
->pluck('id');
|
||||
|
||||
$casoSuspeitoIds = DB::table('ambulatorio_atendimento_soap_caso_suspeito')
|
||||
->whereIn('soap_id', $soapIds)
|
||||
->pluck('caso_suspeito_id')
|
||||
->filter()
|
||||
->unique()
|
||||
->values()
|
||||
->toArray();
|
||||
} else {
|
||||
$casoSuspeitoIds = [$request['caso_suspeito_id']];
|
||||
}
|
||||
|
||||
$impressoes = [];
|
||||
|
||||
foreach ($casoSuspeitoIds as $casoSuspeitoId) {
|
||||
$numeroFicha = 1;
|
||||
|
||||
$fichaExistente = CasoSuspeitoFicha::where('atendimento_id', $atendimento->id)
|
||||
->where('caso_suspeito_id', $casoSuspeitoId)
|
||||
->first();
|
||||
|
||||
if ($fichaExistente) {
|
||||
$numeroFicha = $fichaExistente->numero;
|
||||
} else {
|
||||
$ultimaFicha = CasoSuspeitoFicha::orderByDesc('created_at')->orderByDesc('id')->first();
|
||||
if ($ultimaFicha) {
|
||||
$numeroFicha = intval($ultimaFicha->numero) + 1;
|
||||
}
|
||||
|
||||
CasoSuspeitoFicha::create([
|
||||
'atendimento_id' => $atendimento->id,
|
||||
'caso_suspeito_id' => $casoSuspeitoId,
|
||||
'numero' => $numeroFicha,
|
||||
]);
|
||||
}
|
||||
|
||||
$params = $this->montarParametros(
|
||||
$atendimento,
|
||||
$paciente,
|
||||
$cliente,
|
||||
$casoSuspeitoId,
|
||||
$numeroFicha,
|
||||
$request['cid_id'] ?? null
|
||||
);
|
||||
|
||||
$impressoes[] = $params;
|
||||
}
|
||||
|
||||
return view(self::TEMPLATE, compact('impressoes'));
|
||||
}
|
||||
|
||||
private function montarParametros($atendimento, $paciente, $cliente, $casoSuspeitoId, $numeroFicha, $cidId)
|
||||
{
|
||||
$municipio = Municipio::find($cliente->municipio_id);
|
||||
$estado = Estado::find($municipio->estado_id);
|
||||
|
||||
$dataAtendimento = Carbon::parse($atendimento->created_at);
|
||||
$dataAtendimentoArray = str_split($dataAtendimento->format('dmY'));
|
||||
$dataNascimentoPaciente = $paciente->cidadao->data_nascimento->format('dmY');
|
||||
$dataNascimentoPacienteArray = str_split($dataNascimentoPaciente);
|
||||
$sexoPaciente = $paciente->cidadao->sexo->descricao;
|
||||
|
||||
$gestantePaciente = null;
|
||||
if ($paciente->cidadao->sexo_id === Sexo::MASCULINO) {
|
||||
$gestantePaciente = '6';
|
||||
} else {
|
||||
$soap = $atendimento->soaps()->first();
|
||||
$isGestante = $soap ? AtendimentoService::isPacienteGestante($soap) : false;
|
||||
|
||||
if ($isGestante) {
|
||||
$idadeGestacional = AtendimentoService::getIdadeGestacional($paciente);
|
||||
|
||||
if ($idadeGestacional !== null) {
|
||||
$semanas = $idadeGestacional['semanas'];
|
||||
|
||||
if ($semanas <= 13) {
|
||||
$gestantePaciente = '1';
|
||||
} elseif ($semanas <= 27) {
|
||||
$gestantePaciente = '2';
|
||||
} else {
|
||||
$gestantePaciente = '3';
|
||||
}
|
||||
} else {
|
||||
$gestantePaciente = '4';
|
||||
}
|
||||
} else {
|
||||
$gestantePaciente = null;
|
||||
}
|
||||
}
|
||||
|
||||
$racaCorPaciente = null;
|
||||
switch ($paciente->cidadao->raca_cor_id) {
|
||||
case RacaCor::BRANCA: $racaCorPaciente = '1'; break;
|
||||
case RacaCor::NEGRA: $racaCorPaciente = '2'; break;
|
||||
case RacaCor::AMARELA: $racaCorPaciente = '3'; break;
|
||||
case RacaCor::PARDA: $racaCorPaciente = '4'; break;
|
||||
case RacaCor::INDIGENA: $racaCorPaciente = '5'; break;
|
||||
case RacaCor::SEM_INFORMACAO: $racaCorPaciente = '6'; break;
|
||||
default: $racaCorPaciente = null; break;
|
||||
}
|
||||
|
||||
$escolaridadePaciente = null;
|
||||
if (!is_null($paciente->cidadao->escolaridade_id)) {
|
||||
switch ($paciente->cidadao->escolaridade_id) {
|
||||
case EscolaridadeEnum::FUNDAMENTAL_INCOMPLETO: $escolaridadePaciente = '1'; break;
|
||||
case EscolaridadeEnum::FUNDAMENTAL_COMPLETO: $escolaridadePaciente = '4'; break;
|
||||
case EscolaridadeEnum::MEDIO_INCOMPLETO: $escolaridadePaciente = '5'; break;
|
||||
case EscolaridadeEnum::MEDIO_COMPLETO: $escolaridadePaciente = '6'; break;
|
||||
case EscolaridadeEnum::SUPERIOR_GRADUAcao_INCOMPLETO: $escolaridadePaciente = '7'; break;
|
||||
case EscolaridadeEnum::SUPERIOR_GRADUACAO_COMPLETO: $escolaridadePaciente = '8'; break;
|
||||
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_INCOMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_INCOMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_INCOMPLETO:
|
||||
$escolaridadePaciente = '7'; break;
|
||||
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_COMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_COMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_COMPLETO:
|
||||
$escolaridadePaciente = '8'; break;
|
||||
default: $escolaridadePaciente = '9'; break;
|
||||
}
|
||||
}
|
||||
|
||||
$domicilioPaciente = DB::table('cadastro_domicilio')->where('id', $paciente->cidadao->domicilio_id)->first();
|
||||
$enderecoPaciente = DB::table('cadastro_endereco')->where('id', $domicilioPaciente->endereco_id)->first();
|
||||
$logradouroPaciente = DB::table('cadastro_logradouro')->where('id', $enderecoPaciente->logradouro_id)->first();
|
||||
$logradouroPacienteTipo = DB::table('cadastro_logradouro_tipo')->where('id', $logradouroPaciente->tipo_id)->first();
|
||||
$municipioPaciente = Municipio::find($logradouroPaciente->municipio_id);
|
||||
$estadoPaciente = Estado::find($municipioPaciente->estado_id);
|
||||
$bairroPaciente = DB::table('cadastro_bairro')->where('id', $logradouroPaciente->bairro_id)->first();
|
||||
$telefonePrincipalPaciente = $paciente->cidadao->telefones->where('principal', true)->first() ?? $paciente->cidadao->telefones->first();
|
||||
$localNascimentoPaciente = $paciente->cidadao->local_nascimento_id;
|
||||
|
||||
$paisPaciente = null;
|
||||
if ($localNascimentoPaciente === LocalNascimento::EM_OUTRO_PAIS) {
|
||||
$paisPaciente = Pais::where('id', $estadoPaciente->pais_id)->pluck('nome')->first();
|
||||
}
|
||||
|
||||
$usuarioLogado = self::getCurrentLotacao()->usuario;
|
||||
$pacienteObito = Obito::where('cidadao_id', $paciente->cidadao_id)->exists();
|
||||
|
||||
if (!$cidId) {
|
||||
$cidId = DB::table('ambulatorio_caso_suspeito_cid')
|
||||
->where('caso_suspeito_id', $casoSuspeitoId)
|
||||
->value('cid_id');
|
||||
}
|
||||
$cidNome = Cid::where('id', $cidId)->pluck('nome')->first();
|
||||
$nomeCasoSuspeito = CasoSuspeito::where('id', $casoSuspeitoId)->pluck('nome')->first();
|
||||
|
||||
return [
|
||||
'numero_notificacao' => $numeroFicha,
|
||||
'nome_caso_suspeito' => $nomeCasoSuspeito,
|
||||
'data_notificacao' => $dataAtendimentoArray,
|
||||
'cliente' => [
|
||||
'estado' => str_split($estado->uf),
|
||||
'municipio' => $municipio->nome,
|
||||
'codigo_ibge' => str_split($municipio->ibge),
|
||||
'nome_unidade' => $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
|
||||
'codigo_sinan_unidade' => null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'data_nascimento' => $dataNascimentoPacienteArray,
|
||||
'idade' => null,
|
||||
'sexo' => substr($sexoPaciente, 0, 1),
|
||||
'gestante' => $gestantePaciente,
|
||||
'raca_cor' => $racaCorPaciente,
|
||||
'escolaridade' => $escolaridadePaciente ?? '9',
|
||||
'cartao_sus' => str_split($paciente->cidadao->cns),
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'DESCONHECE',
|
||||
'endereco' => [
|
||||
'estado' => str_split($estadoPaciente->uf),
|
||||
'municipio' => $municipioPaciente->nome,
|
||||
'codigo_ibge' => str_split($municipio->ibge),
|
||||
'distrito' => null,
|
||||
'bairro' => $bairroPaciente->nome,
|
||||
'logradouro' => $logradouroPacienteTipo->descricao . " " . $logradouroPaciente->nome,
|
||||
'numero' => $enderecoPaciente->numero ?? null,
|
||||
'complemento' => $enderecoPaciente->complemento ?? null,
|
||||
'referencia' => $enderecoPaciente->referencia ?? null,
|
||||
'cep' => $logradouroPaciente->cep ? str_split($logradouroPaciente->cep) : null,
|
||||
'telefone_ddd' => $telefonePrincipalPaciente ? substr($telefonePrincipalPaciente->numero, 0, 2) : null,
|
||||
'telefone_numero' => $telefonePrincipalPaciente ? str_split(substr($telefonePrincipalPaciente->numero, 2)) : null,
|
||||
'pais' => $paisPaciente,
|
||||
],
|
||||
],
|
||||
'notificante' => [
|
||||
'municipio_unidade' => $municipio->nome . "/" . $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
|
||||
'nome' => $usuarioLogado->cidadao->nome,
|
||||
'funcao' => self::getCurrentLotacao()->ocupacao->nome,
|
||||
],
|
||||
'dados_complementares' => [
|
||||
'obito' => $pacienteObito ? '1' : '2',
|
||||
'cid_10' => $cidNome ?? null,
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user