Files
rkm-conectasus-ci-sandbox/api/app/Services/Integracao/IntegracaoCidadaoService.php
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

250 lines
14 KiB
PHP

<?php
namespace App\Services\Integracao;
use App\Enums\Cadastro\SujeitoAtencao\CertidaoModelo;
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
class IntegracaoCidadaoService extends Service
{
public static function integrar($cidadaoId, $origem = 'paciente')
{
$url = config('app.integracao_cidadao_url');
if (empty($url)) {
return;
}
$data = null;
switch ($origem) {
case 'paciente': {
$data = self::getPacienteData($cidadaoId);
break;
}
case 'usuario': {
$data = self::getUsuarioData($cidadaoId);
break;
}
}
$response = Http::withHeaders([
'Authorization' => config('app.integracao_cidadao_senha')
])->post($url . '/integracao', $data);
if ($response->status() === Response::HTTP_NOT_FOUND && $response->json() && $response->json('code') === 1) {
// TODO: Verificar o que vai fazer quando não tiver cliente cadastrado na integração.
} elseif ($response->status() !== Response::HTTP_CREATED) {
throw new \Exception('Erro na integração entre sistemas', Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
private static function getPacienteData($cidadaoId)
{
$cidadao = Cidadao::findOrFail($cidadaoId);
$telefoneCelular = $cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
$telefoneResidencial = $cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 10)->first()->numero ?? null;
$telefoneRecado = $cidadao->telefones
->filter(fn ($t) => !in_array($t->numero, [$telefoneCelular, $telefoneResidencial]))
->first()->numero ?? null;
return [
'sistema' => 'conectasus_v2',
'cliente' => app('config')->get('database.default'),
'tipo_origem_id' => 1, // CADASTRO_CIDADAO
'dados' => [
'aposentado_pensionista' => null,
'bairro_nome' => $cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'certidao_cartorio_codigo' => $cidadao->certidao->cartorio_codigo ?? null,
'certidao_cartorio_nome' => $cidadao->certidao->cartorio_nome ?? null,
'certidao_data_emissao' => ($cidadao->certidao->data_emissao ?? null)
? $cidadao->certidao->data_emissao->format('Y-m-d') : null,
'certidao_folha' => $cidadao->certidao->folha ?? null,
'certidao_livro' => $cidadao->certidao->livro ?? null,
'certidao_modelo_id' => $cidadao->certidao->modelo_id ?? null,
'certidao_municipio_ibge' => $cidadao->certidao->municipio->ibge ?? null,
'certidao_numero' => ($cidadao->certidao->modelo_id ?? null) === CertidaoModelo::NOVO
? ($cidadao->certidao->numero ?? null) : null,
'certidao_termo' => ($cidadao->certidao->modelo_id ?? null) === CertidaoModelo::ANTIGO
? ($cidadao->certidao->numero ?? null) : null,
'certidao_tipo_id' => $cidadao->certidao->tipo_id ?? null,
'cidadao_id_v2' => $cidadao->id,
'classificacao_id' => $cidadao->paciente->classificacao_id ?? null,
'cnh_categoria_id' => $cidadao->carteiraHabilitacao->categoria_id ?? null,
'cnh_data_emissao' => ($cidadao->carteiraHabilitacao->data_emissao ?? null)
? $cidadao->carteiraHabilitacao->data_emissao->format('Y-m-d') : null,
'cnh_data_validade' => ($cidadao->carteiraHabilitacao->data_validade ?? null)
? $cidadao->carteiraHabilitacao->data_validade->format('Y-m-d') : null,
'cnh_estado_uf' => $cidadao->carteiraHabilitacao->estado->uf ?? null,
'cnh_numero' => $cidadao->carteiraHabilitacao->numero ?? null,
'cns' => $cidadao->cns,
'comorbidade_descricao' => null,
'complemento' => $cidadao->domicilio->endereco->complemento ?? null,
'convenio_medico_nome' => $cidadao->conveniosMedico->first()->nome ?? null,
'convenio_odontologico_nome' => null,
'cpf_numero' => $cidadao->cpf,
'ctps_data_emissao' => ($cidadao->carteiraTrabalho->data_emissao ?? null)
? $cidadao->carteiraTrabalho->data_emissao->format('Y-m-d') : null,
'ctps_estado_uf' => $cidadao->carteiraTrabalho->estado->uf ?? null,
'ctps_nis_pis_pasep' => $cidadao->carteiraTrabalho->nis_pis_pasep ?? null,
'ctps_numero' => $cidadao->carteiraTrabalho->numero ?? null,
'ctps_serie' => $cidadao->carteiraTrabalho->serie ?? null,
'data_entrada_brasil' => ($cidadao->estrangeiroEntradaBrasil->data_entrada ?? null)
? $cidadao->estrangeiroEntradaBrasil->data_entrada->format('Y-m-d') : null,
'data_nascimento' => $cidadao->data_nascimento
? $cidadao->data_nascimento->format('Y-m-d') : null,
'data_naturalizacao' => $cidadao->data_naturalizacao
? $cidadao->data_naturalizacao->format('Y-m-d') : null,
'data_obito' => $cidadao->obito
? $cidadao->obito->obito_em->format('Y-m-d H:i:s')
: null,
'deficiencia_id' => $cidadao->deficiencia_id,
'deficiencia_outra' => $cidadao->deficiencia_outro,
'desconhece_mae' => $cidadao->desconhece_nome_mae,
'desconhece_pai' => $cidadao->desconhece_nome_pai,
'doador_orgao' => null,
'email' => $cidadao->paciente->email ?? null,
'escolaridade_id' => $cidadao->escolaridade_id,
'esporte_descricao' => null,
'esta_empregado_atualmente' => null,
'estado_civil_id' => $cidadao->estado_civil_id,
'etnia_indigena_descricao' => $cidadao->etniaIndigena->descricao ?? null,
'faixa_renda_id' => null,
'id' => $cidadao->cidadao_id ?? null,
'identidade_genero_id' => $cidadao->identidade_genero_id,
'local_nascimento_id' => $cidadao->local_nascimento_id,
'logradouro_cep' => $cidadao->domicilio->endereco->logradouro->cep ?? null,
'logradouro_nome' => $cidadao->domicilio->endereco->logradouro->nome ?? null,
'logradouro_tipo_nome' => $cidadao->domicilio->endereco->logradouro->tipo->descricao ?? null,
'loteamento_nome' => $cidadao->domicilio->endereco->loteamento->nome ?? null,
'mobilidade_reduzida_id' => $cidadao->mobilidade_reduzida_id,
'municipio_ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'municipio_nascimento_ibge' => $cidadao->municipioNascimento->ibge ?? null,
'nacionalidade_id' => $cidadao->nacionalidade_id,
'nome' => $cidadao->nome,
'nome_conjuge' => $cidadao->conjuge,
'nome_mae' => $cidadao->nome_mae,
'nome_pai' => $cidadao->nome_pai,
'nome_social' => $cidadao->nome_social,
'numero' => $cidadao->domicilio->endereco->numero ?? null,
'ocupacao_descricao' => null,
'orientacao_sexual_id' => null,
'pais_codigo' => $cidadao->domicilio->endereco->logradouro->municipio->estado->pais->codigo ?? null,
'pais_nome' => $cidadao->domicilio->endereco->logradouro->municipio->estado->pais->nome ?? null,
'pais_nascimento_codigo' => $cidadao->paisNascimento->codigo ?? null,
'pais_nascimento_nome' => $cidadao->paisNascimento->nome ?? null,
'plano_funerario_nome' => null,
'ponto_referencia' => $cidadao->domicilio->endereco->referencia ?? null,
'portador_alguma_comorbidade' => null,
'pratica_algum_esporte' => null,
'preferencia_nome_id' => $cidadao->preferencia_nome_id,
'raca_cor_id' => $cidadao->raca_cor_id,
'reside_domicilio_desde' => $cidadao->data_entrada_domicilio
? $cidadao->data_entrada_domicilio->format('Y-m-d') : null,
'rg_data_emissao' => ($cidadao->carteiraIdentidade->data_emissao ?? null)
? $cidadao->carteiraIdentidade->data_emissao->format('Y-m-d') : null,
'rg_estado_uf' => $cidadao->carteiraIdentidade->estado->uf ?? null,
'rg_numero' => $cidadao->carteiraIdentidade->numero ?? null,
'rg_orgao_emissor' => $cidadao->carteiraIdentidade->orgao_emissor ?? null,
'rne_numero' => $cidadao->estrangeiroEntradaBrasil->rne ?? null,
'sem_numero' => $cidadao->domicilio->endereco->sem_numero ?? null,
'sexo_id' => $cidadao->sexo_id,
'situacao_familiar_conjugal_id' => $cidadao->situacao_familiar_conjugal_id,
'subclassificacao_id' => $cidadao->paciente->subclassificacao_id ?? null,
'telefone_celular' => $telefoneCelular,
'telefone_recado' => $telefoneRecado,
'telefone_residencial' => $telefoneResidencial,
'tipo_moradia_id' => null,
'tipo_sanguineo_id' => $cidadao->tipo_sanguineo_id,
'titulo_eleitor_municipio_ibge' => null,
'titulo_eleitor_numero' => $cidadao->tituloEleitor->numero ?? null,
'titulo_eleitor_secao' => $cidadao->tituloEleitor->secao ?? null,
'titulo_eleitor_zona' => $cidadao->tituloEleitor->zona ?? null,
'unidade_referencia_nome' => $cidadao->paciente->unidade->nome_fantasia ?? null,
'utiliza_transporte_coletivo' => null,
'zona_id' => $cidadao->domicilio->endereco->zona_id ?? null,
]
];
}
private static function getUsuarioData($cidadaoId)
{
$cidadao = Cidadao::findOrFail($cidadaoId);
$usuario = $cidadao->usuario;
$telefoneCelular = $cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
$telefoneResidencial = $cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 10)->first()->numero ?? null;
$telefoneRecado = $cidadao->telefones
->filter(fn ($t) => !in_array($t->numero, [$telefoneCelular, $telefoneResidencial]))
->first()->numero ?? null;
return [
'sistema' => 'conectasus_v2',
'cliente' => app('config')->get('database.default'),
'tipo_origem_id' => 2, // CADASTRO_USUARIO
'dados' => [
'cd_usuario_sistema_v1' => $usuario->cd_usuario_sistema_v1,
'usuario_id_v2' => $usuario->id,
'registro_numero' => $usuario->registro_numero,
'escolaridade_id' => $cidadao->escolaridade_id,
'estado_civil_id' => $cidadao->estado_civil_id,
'bairro_nome' => $cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro_nome' => $cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $cidadao->domicilio->endereco->numero ?? null,
'logradouro_cep' => $cidadao->domicilio->endereco->logradouro->cep ?? null,
'municipio_ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'logradouro_tipo_nome' => $cidadao->domicilio->endereco->logradouro->tipo->descricao ?? null,
'complemento' => $cidadao->domicilio->endereco->complemento ?? null,
'registro_tipo_id' => $usuario->registro_tipo_id,
'sexo_id' => $cidadao->sexo_id,
'data_nascimento' => $cidadao->data_nascimento->format('Y-m-d'),
'email' => $usuario->email,
'tipo_usuario' => $usuario->lotacoes()->exists() ? 'MED' : 'USU',
'nome_mae' => $cidadao->nome_mae,
'nome_pai' => $cidadao->nome_pai,
'nome' => $cidadao->nome,
'cns' => $cidadao->cns,
'cpf' => $cidadao->cpf,
'rg_numero' => $cidadao->carteiraIdentidade->numero ?? null,
'registro_uf' => $usuario->registroEstado->uf ?? null,
'nome_usuario' => $usuario->usuario,
'loteamento_nome' => $cidadao->domicilio->endereco->loteamento->nome ?? null,
'ponto_referencia' => $cidadao->domicilio->endereco->referencia ?? null,
'zona_id' => $cidadao->domicilio->endereco->zona_id ?? null,
'estado_nascimento_uf' => $cidadao->estadoNascimento->uf ?? null,
'municipio_nascimento_ibge' => $cidadao->municipioNascimento->ibge ?? null,
'telefone_recado' => $telefoneRecado,
'telefone_celular' => $telefoneCelular,
'telefone_residencial' => $telefoneResidencial,
'telefones' => $cidadao->telefones->map(fn ($telefone) => [
'numero' => $telefone->numero,
'autoriza_sms' => $telefone->autoriza_sms,
'principal' => $telefone->principal,
])
]
];
}
}