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, ] ]; } }