This commit is contained in:
607
api/app/Services/Cadastro/SujeitoAtencao/CidadaoService.php
Normal file
607
api/app/Services/Cadastro/SujeitoAtencao/CidadaoService.php
Normal file
@@ -0,0 +1,607 @@
|
||||
<?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'],
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user