Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

608 lines
28 KiB
PHP

<?php
namespace App\Services\Cadastro\SujeitoAtencao;
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco as FatorRiscoEnum;
use App\Enums\Cadastro\SujeitoAtencao\ModeloCertidao;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor as SujeitoAtencaoRacaCor;
use App\Enums\Intranet\Pais as LocalizacaoPais;
use App\Exceptions\Cadastro\SujeitoAtencao\AlteracaoEnderecoNaoPermitidaException;
use App\Http\Controllers\Cadastro\SujeitoAtencao\PacienteController;
use App\Models\AtencaoBasica\CadastroIndividual\AcompanhamentoInfantil;
use App\Models\AtencaoBasica\CadastroIndividual\Curso;
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoMercadoTrabalho;
use App\Models\Cadastro\Localizacao\Zona;
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
use App\Models\Cadastro\SujeitoAtencao\AlergiaCriticidade;
use App\Models\Cadastro\SujeitoAtencao\AlergiaTipo;
use App\Models\Cadastro\SujeitoAtencao\CarteiraHabilitacaoCategoria;
use App\Models\Cadastro\SujeitoAtencao\CertidaoModelo;
use App\Models\Cadastro\SujeitoAtencao\CertidaoTipo;
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
use App\Models\Cadastro\SujeitoAtencao\CidadaoTelefone;
use App\Models\Cadastro\SujeitoAtencao\Deficiencia;
use App\Models\Cadastro\SujeitoAtencao\DeficienciaBase;
use App\Models\Cadastro\SujeitoAtencao\Escolaridade;
use App\Models\Cadastro\SujeitoAtencao\EstadoCivil;
use App\Models\Cadastro\SujeitoAtencao\EtniaIndigena;
use App\Models\Cadastro\SujeitoAtencao\FatorRisco;
use App\Models\Cadastro\SujeitoAtencao\IdentidadeGenero;
use App\Models\Cadastro\SujeitoAtencao\LocalNascimento;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\MobilidadeReduzida;
use App\Models\Cadastro\SujeitoAtencao\MotivoDuplicidadeCpf;
use App\Models\Cadastro\SujeitoAtencao\Nacionalidade;
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencial;
use App\Models\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Models\Cadastro\SujeitoAtencao\RacaCor;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Models\Cadastro\SujeitoAtencao\SituacaoFamiliarConjugal;
use App\Models\Cadastro\SujeitoAtencao\TipoSanguineo;
use App\Models\Cns\TermoInvalido;
use App\Models\Intranet\Estado;
use App\Models\Intranet\Pais;
use App\Services\Cadastro\SujeitoAtencao\DomicilioService;
use App\Services\Integracao\IntegracaoCidadaoService;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Str;
class CidadaoService
{
public static function create()
{
return [
'form' => self::getFormData(),
];
}
public static function edit($id): array
{
$cidadao = Cidadao::findOrFail($id);
return [
'form' => self::getFormData($cidadao),
'model' => [
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : null,
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : null,
'dnv' => $cidadao->dnv ? MaskUtil::getDnvMasked($cidadao->dnv) : null,
'cpf_nao_pertence_ao_cidadao' => $cidadao->cpf_nao_pertence_ao_cidadao,
'motivo_duplicidade_cpf_id' => $cidadao->motivo_duplicidade_cpf_id,
'motivo_duplicidade_cpf_outro' => $cidadao->motivo_duplicidade_cpf_outro ?? '',
'nome' => $cidadao->nome,
'nome_social' => $cidadao->nome_social ?? '',
'preferencia_nome_id' => $cidadao->preferencia_nome_id,
'data_nascimento' => $cidadao->data_nascimento
? $cidadao->data_nascimento->format('Y-m-d')
: null,
'idade' => $cidadao->idade['anos'] ?? null,
'data_obito' => $cidadao->obito->obito_em ?? null,
'sexo_id' => $cidadao->sexo_id,
'identidade_genero_id' => $cidadao->identidade_genero_id,
'estado_civil_id' => $cidadao->estado_civil_id,
'conjuge' => $cidadao->conjuge ?? '',
'situacao_familiar_conjugal_id' => $cidadao->situacao_familiar_conjugal_id,
'raca_cor_id' => $cidadao->raca_cor_id && $cidadao->raca_cor_id != SujeitoAtencaoRacaCor::SEM_INFORMACAO
? $cidadao->raca_cor_id
: null,
'etnia_indigena_id' => $cidadao->etnia_indigena_id,
'tipo_sanguineo_id' => $cidadao->tipo_sanguineo_id,
'deficiencia_id' => $cidadao->deficiencia_id,
'deficiencia_outro' => $cidadao->deficiencia_outro ?? '',
'mobilidade_reduzida_id' => $cidadao->mobilidade_reduzida_id,
'desconhece_nome_mae' => $cidadao->desconhece_nome_mae,
'desconhece_nome_pai' => $cidadao->desconhece_nome_pai,
'nome_mae' => $cidadao->nome_mae ?? '',
'nome_pai' => $cidadao->nome_pai ?? '',
'local_nascimento_id' => $cidadao->local_nascimento_id,
'pais_nascimento_id' => $cidadao->pais_nascimento_id,
'nacionalidade_id' => $cidadao->nacionalidade_id,
'data_naturalizacao' => $cidadao->data_naturalizacao,
'portaria_naturalizacao' => $cidadao->portaria_naturalizacao,
'estado_nascimento_id' => $cidadao->estado_nascimento_id,
'municipio_nascimento' => $cidadao->municipioNascimento,
'frequenta_escola' => $cidadao->frequenta_escola,
'escolaridade_id' => $cidadao->escolaridade_id,
'telefones' => $cidadao->telefones->map(fn ($telefone) => [
'id' => $telefone->id,
'numero' => MaskUtil::getPhoneMasked($telefone->numero),
'observacao' => $telefone->observacao ?? '',
'autoriza_sms' => $telefone->autoriza_sms,
'principal' => $telefone->principal,
]),
'convenios_medicos' => $cidadao->conveniosMedico->map(fn ($convenio) => [
'id' => $convenio->id,
'nome' => $convenio->nome,
]),
'fatores_risco' => $cidadao->fatoresRisco->pluck('id'),
'fator_risco_outro' => $cidadao->fator_risco_outro ?? '',
'alergias' => $cidadao->alergias->map(fn ($alergia) => [
'alergia' => [
'agente_substancia_especifica' => $alergia->agente_substancia_especifica,
'criticidade' => [
'id' => $alergia->cidadaoAlergia->criticidade->id,
'nome' => $alergia->cidadaoAlergia->criticidade->nome,
],
'id' => $alergia->cidadaoAlergia->alergia_id,
'reacoes_observacoes' => $alergia->cidadaoAlergia->reacoes_observacoes,
'tipo' => [
'id' => $alergia->tipo->id,
'descricao' => $alergia->tipo->descricao,
],
'cid' => [
'id' => $alergia->cidadaoAlergia->cid->id ?? null,
'nome' => $alergia->cidadaoAlergia->cid->nome ?? null,
'codigo' => $alergia->cidadaoAlergia->cid->codigo ?? null,
'codigo_nome' => $alergia->cidadaoAlergia->cid
? $alergia->cidadaoAlergia->cid->codigo . ' - ' . $alergia->cidadaoAlergia->cid->nome
: null,
]
],
]),
'medicamentos_uso_continuo' => $cidadao->medicamentosUsoContinuo->map(fn ($medicamento) => [
'medicamento' => [
'nome' => $medicamento->nome,
'id' => $medicamento->CidadaoMedicamentoUsoContinuo->medicamento_id,
],
'lotacao' => [
'ocupacao' => [
'id' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->id ?? null,
'codigo' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->codigo ?? null,
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->nome ?? null,
],
'profissional' => [
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->usuario->cidadao->nome ?? null,
],
],
'centro_custo' => [
'setor' => [
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdCentroCusto->setor->nome ?? null,
],
],
'data_hora' => $medicamento->CidadaoMedicamentoUsoContinuo->created_at->format('d/m/Y H:i:s') ?? null,
]),
'data_entrada_domicilio' => $cidadao->data_entrada_domicilio,
'ocupacao_id' => $cidadao->ocupacao_id,
'domicilio_id' => $cidadao->domicilio_id ?? null,
'domicilio' => [
'endereco' => [
'logradouro' => $cidadao->domicilio->endereco->logradouro ?? null,
'numero' => $cidadao->domicilio->endereco->numero ?? null,
'complemento' => $cidadao->domicilio->endereco->complemento ?? '',
'referencia' => $cidadao->domicilio->endereco->referencia ?? '',
'loteamento' => $cidadao->domicilio->endereco->loteamento ?? null,
'zona_id' => $cidadao->domicilio->endereco->zona_id ?? null,
'latitude' => $cidadao->domicilio->endereco->latitude ?? '',
'longitude' => $cidadao->domicilio->endereco->longitude ?? '',
],
],
'documentos' => [
'carteira_identidade' => [
'id' => $cidadao->carteiraIdentidade->id ?? null,
'numero' => $cidadao->carteiraIdentidade->numero ?? '',
'estado_id' => $cidadao->carteiraIdentidade->estado_id ?? null,
'orgao_emissor' => $cidadao->carteiraIdentidade->orgao_emissor ?? '',
'data_emissao' => $cidadao->carteiraIdentidade->data_emissao ?? null,
],
'carteira_nacional_habilitacao' => [
'id' => $cidadao->carteiraHabilitacao->id ?? null,
'numero' => $cidadao->carteiraHabilitacao->numero ?? '',
'data_emissao' => $cidadao->carteiraHabilitacao->data_emissao ?? null,
'data_validade' => $cidadao->carteiraHabilitacao->data_validade ?? null,
'estado_id' => $cidadao->carteiraHabilitacao->estado_id ?? null,
'categoria_id' => $cidadao->carteiraHabilitacao->categoria_id ?? null,
],
'carteira_trabalho' => [
'id' => $cidadao->carteiraTrabalho->id ?? null,
'numero' => $cidadao->carteiraTrabalho->numero ?? '',
'serie' => $cidadao->carteiraTrabalho->serie ?? '',
'data_emissao' => $cidadao->carteiraTrabalho->data_emissao ?? null,
'estado_id' => $cidadao->carteiraTrabalho->estado_id ?? null,
'nis_pis_pasep' => $cidadao->carteiraTrabalho->nis_pis_pasep ?? '',
],
'estrangeiro_entrada_brasil' => [
'id' => $cidadao->estrangeiroEntradaBrasil->id ?? null,
'rne' => $cidadao->estrangeiroEntradaBrasil->rne ?? '',
'data_entrada' => $cidadao->estrangeiroEntradaBrasil->data_entrada ?? null,
],
'titulo_eleitor' => [
'id' => $cidadao->tituloEleitor->id ?? null,
'numero' => $cidadao->tituloEleitor->numero ?? '',
'zona' => $cidadao->tituloEleitor->zona ?? '',
'secao' => $cidadao->tituloEleitor->secao ?? '',
],
'certidao' => [
'id' => $cidadao->certidao->id ?? null,
'tipo_id' => $cidadao->certidao->tipo_id ?? null,
'modelo_id' => $cidadao->certidao->modelo_id ?? null,
'numero' => ($cidadao->certidao->modelo_id ?? null) === ModeloCertidao::NOVO
? MaskUtil::getNumeroCertidaoMasked($cidadao->certidao->numero)
: ($cidadao->certidao->numero ?? ''),
'cartorio_nome' => $cidadao->certidao->cartorio_nome ?? '',
'livro' => $cidadao->certidao->livro ?? '',
'folha' => $cidadao->certidao->folha ?? '',
'data_emissao' => $cidadao->certidao->data_emissao ?? null,
'municipio' => $cidadao->certidao->municipio ?? null,
'cartorio_codigo' => $cidadao->certidao->cartorio_codigo ?? '',
],
'outro' => [
'protocolo_cross' => $cidadao->paciente->protocolo_cross ?? null,
],
],
'sexo' => $cidadao->sexo,
],
];
}
private static function getFormData($cidadao = null): array
{
return [
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
'data_atual' => Carbon::now()->format('d/m/Y'),
'identificacao' => [
'has_dnv' => isset($cidadao->dnv),
'motivos_duplicidade_cpf' => MotivoDuplicidadeCpf::orderBy('descricao')->get()->map(fn ($motivo) => [
'id' => $motivo->id,
'descricao' => $motivo->descricao
]),
'preferencias_nome' => PreferenciaNome::orderBy('descricao')->get()->map(fn ($preferencia) => [
'id' => $preferencia->id,
'descricao' => $preferencia->descricao
]),
'sexos' => Sexo::orderBy('descricao')->get()->map(fn ($sexo) => [
'id' => $sexo->id,
'descricao' => $sexo->descricao
]),
'identidades_genero' => IdentidadeGenero::orderBy('descricao')->get()->map(fn ($identidade) => [
'id' => $identidade->id,
'descricao' => $identidade->descricao
]),
'estados_civis' => EstadoCivil::orderBy('descricao')->get()->map(fn ($estadoCivil) => [
'id' => $estadoCivil->id,
'descricao' => $estadoCivil->descricao
]),
'situacoes_familiares_conjugais' => SituacaoFamiliarConjugal::orderBy('descricao')->get()->map(
fn ($situacao) => [
'id' => $situacao->id,
'descricao' => $situacao->descricao
]
),
'racas_cores' => RacaCor::whereNotIn('id', [SujeitoAtencaoRacaCor::SEM_INFORMACAO])->orderBy('descricao')->get()->map(fn ($racaCor) => [
'id' => $racaCor->id,
'descricao' => $racaCor->descricao
]),
'etnias_indigenas' => EtniaIndigena::orderBy('descricao')->get()->map(fn ($etnia) => [
'id' => $etnia->id,
'descricao' => $etnia->descricao
]),
'tipos_sanguineo' => TipoSanguineo::orderBy('descricao')->get()->map(fn ($tipo) => [
'id' => $tipo->id,
'descricao' => $tipo->descricao
]),
'deficiencias' => Deficiencia::orderBy('descricao')->get()->map(fn ($deficiencia) => [
'id' => $deficiencia->id,
'descricao' => $deficiencia->descricao
]),
'mobilidades_reduzidas' => MobilidadeReduzida::orderBy('descricao')->get()->map(fn ($mobilidade) => [
'id' => $mobilidade->id,
'descricao' => $mobilidade->descricao
]),
'locais_nascimento' => LocalNascimento::orderBy('descricao')->get()->map(fn ($local) => [
'id' => $local->id,
'descricao' => $local->descricao
]),
'paises' => Pais::orderBy('nome')->get()->map(fn ($pais) => [
'id' => $pais->id,
'nome' => $pais->nome
]),
'nacionalidades' => Nacionalidade::orderBy('descricao')->get()->map(fn ($nacionalidade) => [
'id' => $nacionalidade->id,
'descricao' => $nacionalidade->descricao
]),
'escolaridades' => Escolaridade::orderBy('descricao')->get()->map(fn ($escolaridade) => [
'id' => $escolaridade->id,
'descricao' => $escolaridade->descricao
]),
],
'endereco' => [
'cep' => ($cidadao->domicilio ?? null)
? MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
: '',
'sem_numero' => $cidadao->domicilio->endereco->sem_numero ?? false,
'zonas' => Zona::orderBy('descricao')->get()->map(fn ($zona) => [
'id' => $zona->id,
'descricao' => $zona->descricao
]),
],
'documentos' => [
'estados' => Estado::orderBy('nome')->get()->map(fn ($estado) => [
'id' => $estado->id,
'uf' => $estado->uf
]),
'carteira_nacional_habilitacao' => [
'categorias' => CarteiraHabilitacaoCategoria::orderBy('letra')->get()->map(fn ($categoria) => [
'id' => $categoria->id,
'letra' => $categoria->letra
]),
],
'certidao' => [
'tipos' => CertidaoTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
'id' => $tipo->id,
'descricao' => $tipo->descricao
]),
'modelos' => CertidaoModelo::orderBy('id')->get()->map(fn ($tipo) => [
'id' => $tipo->id,
'nome' => $tipo->nome
]),
'estado_id' => $cidadao->certidao->municipio->estado_id ?? null,
],
],
'questionario_saude' => [
'alergia_tipos' => AlergiaTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
'id' => $tipo->id,
'descricao' => $tipo->descricao,
]),
'alergia_criticidades' => AlergiaCriticidade::orderBy('nome')->get()->map(fn ($criticidade) => [
'id' => $criticidade->id,
'nome' => $criticidade->nome,
]),
'fatores_risco' => FatorRisco::orderBy('id')->where('id', '<>', FatorRiscoEnum::GESTANTE)->get()->map(fn ($fatorRisco) => [
'id' => $fatorRisco->id,
'nome' => $fatorRisco->nome,
]),
'fatores_risco_gestante' => FatorRisco::orderBy('nome')->get()->map(fn ($fatorRisco) => [
'id' => $fatorRisco->id,
'nome' => $fatorRisco->nome,
]),
],
'acompanhamento_infantil' => AcompanhamentoInfantil::orderBy('descricao')->get(),
'curso' => Curso::orderBy('descricao')->get(),
'mercado_trabalho' => SituacaoMercadoTrabalho::orderBy('descricao')->get(),
'deficiencia' => DeficienciaBase::orderBy('descricao')->get()->each(function ($item) {
$item->descricao = ucfirst(strtolower($item->descricao));
}),
];
}
public static function save(array $params): Cidadao
{
self::prepareData($params);
if (!empty($params['id']) && strtolower($params['origem']) == 'paciente' && self::hasException($params)) {
throw new AlteracaoEnderecoNaoPermitidaException();
}
$params['domicilio_id'] = ($params['domicilio']['endereco']['logradouro_id'] ?? null)
? DomicilioService::save($params['domicilio'])->id : null;
$cidadao = Cidadao::updateOrCreate(
['id' => $params['id']],
$params,
);
$cidadao->conveniosMedico()->sync($params['convenios_medicos']);
$cidadao->fatoresRisco()->sync($params['fatores_risco']);
$cidadao->alergias()->sync($params['alergias']);
$cidadao->medicamentosUsoContinuo()->sync($params['medicamentos_uso_continuo']);
self::deleteTelefonesNotPresent($cidadao, $params['telefones']);
self::saveTelefones($cidadao, $params['telefones']);
self::saveDocumentos($cidadao, $params['documentos']);
return $cidadao->fresh();
}
private static function hasException($params)
{
if (!self::hasPermission($params['lotacao_id'] ?? null)) {
$cidadao = Cidadao::where('id', $params['id'])->first();
if (!$cidadao->domicilio && $params['domicilio']['endereco']['logradouro_id']) {
return true;
}
$endereco = $cidadao->domicilio->endereco;
$paramsEndereco = $params['domicilio']['endereco'];
$fields = [
'logradouro_id', 'latitude', 'complemento',
'longitude', 'loteamento_id', 'numero',
'referencia', 'zona_id'
];
foreach ($fields as $field) {
if ($endereco->$field !== $paramsEndereco[$field]) {
return true;
}
}
}
return false;
}
public static function hasPermission($idLotacao = null)
{
$lotacao = Lotacao::findOrFail($idLotacao ?? auth()->payload()->get('lotacao_id'));
$count = ParametrizacaoPermissaoOcupacao::count();
return ParametrizacaoPermissaoOcupacao::where('ocupacao_id', $lotacao->ocupacao_id)->exists() || $count === 0;
}
private static function prepareData(&$params)
{
$params['id'] = $params['id'] ?? null;
$params['origem'] = $params['origem'] ?? null;
$params['telefones'] = $params['telefones'] ?? [];
$params['convenios_medicos'] = $params['convenios_medicos'] ?? [];
$params['fatores_risco'] = $params['fatores_risco'] ?? [];
$params['domicilio'] = ['endereco' => $params['domicilio']['endereco'] ?? []];
$params['documentos'] = $params['documentos'] ?? [];
if (!$params['cpf_nao_pertence_ao_cidadao']) {
$params['motivo_duplicidade_cpf_id'] = null;
}
if (!isset($params['domicilio']['endereco']['logradouro_id'])) {
$params['data_entrada_domicilio'] = null;
}
if ($params['pais_nascimento_id'] === LocalizacaoPais::BRASIL) {
$params['documentos']['estrangeiro_entrada_brasil']['rne'] = null;
}
if (!in_array(FatorRiscoEnum::OUTRO, $params['fatores_risco'])) {
$params['fator_risco_outro'] = null;
}
$alergias = [];
foreach (($params['alergias'] ?? []) as $alergia) {
$alergias[$alergia['alergia_id']] = [
'criticidade_id' => $alergia['criticidade_id'],
'reacoes_observacoes' => $alergia['reacoes_observacoes'] ?? null,
'cid_id' => $alergia['cid_id'] ?? null,
];
}
$params['alergias'] = $alergias;
$medicamentos = [];
foreach (($params['medicamentos_uso_continuo'] ?? []) as $medicamento) {
$medicamentos[] = $medicamento['medicamento_id'];
}
$params['medicamentos_uso_continuo'] = $medicamentos;
array_walk_recursive($params, function (&$item) {
if (is_string($item)) {
$item = mb_strtoupper($item);
}
});
unset($item);
}
public static function deleteTelefonesNotPresent($cidadao, $telefones)
{
$ids = collect($telefones)->pluck('id')->filter(fn ($id) => !is_null($id))->toArray();
CidadaoTelefone::destroy($cidadao->telefones()->whereNotIn('id', $ids)->pluck('id'));
}
public static function saveTelefones($cidadao, $telefones)
{
foreach ($telefones as $telefone) {
$cidadao->telefones()->updateOrCreate(
['id' => $telefone['id'] ?? null],
$telefone
);
}
}
private static function saveDocumentos($cidadao, $documentos)
{
if (is_null($documentos['carteira_identidade']['numero'] ?? null)) {
if ($cidadao->carteiraIdentidade) {
$cidadao->carteiraIdentidade()->delete();
}
} else {
$cidadao->carteiraIdentidade()->updateOrCreate(
['id' => $documentos['carteira_identidade']['id'] ?? null],
$documentos['carteira_identidade'],
);
}
if (is_null($documentos['carteira_nacional_habilitacao']['numero'] ?? null)) {
if ($cidadao->carteiraHabilitacao) {
$cidadao->carteiraHabilitacao()->delete();
}
} else {
$cidadao->carteiraHabilitacao()->updateOrCreate(
['id' => $documentos['carteira_nacional_habilitacao']['id'] ?? null],
$documentos['carteira_nacional_habilitacao'],
);
}
if (is_null($documentos['carteira_trabalho']['numero'] ?? null) && is_null($documentos['carteira_trabalho']['nis_pis_pasep'] ?? null)) {
if ($cidadao->carteiraTrabalho) {
$cidadao->carteiraTrabalho()->delete();
}
} else {
$cidadao->carteiraTrabalho()->updateOrCreate(
['id' => $documentos['carteira_trabalho']['id'] ?? null],
$documentos['carteira_trabalho'],
);
}
if (is_null($documentos['estrangeiro_entrada_brasil']['rne'] ?? null)) {
if ($cidadao->estrangeiroEntradaBrasil) {
$cidadao->estrangeiroEntradaBrasil()->delete();
}
} else {
$cidadao->estrangeiroEntradaBrasil()->updateOrCreate(
['id' => $documentos['estrangeiro_entrada_brasil']['id'] ?? null],
$documentos['estrangeiro_entrada_brasil'],
);
}
if (is_null($documentos['titulo_eleitor']['numero'] ?? null)) {
if ($cidadao->tituloEleitor) {
$cidadao->tituloEleitor()->delete();
}
} else {
$cidadao->tituloEleitor()->updateOrCreate(
['id' => $documentos['titulo_eleitor']['id'] ?? null],
[
'numero' => Str::padLeft($documentos['titulo_eleitor']['numero'], 13, '0'),
'zona' => Str::padLeft($documentos['titulo_eleitor']['zona'], 3, '0'),
'secao' => Str::padLeft($documentos['titulo_eleitor']['secao'], 4, '0'),
],
);
}
if (is_null($documentos['certidao']['numero'] ?? null)) {
if ($cidadao->certidao) {
$cidadao->certidao()->delete();
}
} else {
$cidadao->certidao()->updateOrCreate(
['id' => $documentos['certidao']['id'] ?? null],
$documentos['certidao'],
);
}
}
}