250 lines
14 KiB
PHP
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,
|
|
])
|
|
]
|
|
];
|
|
}
|
|
}
|