Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/CadastroIndividual/CadastroIndividualService.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

1298 lines
64 KiB
PHP

<?php
namespace App\Services\AtencaoBasica\CadastroIndividual;
use App\Enums\AtencaoBasica\CadastroIndividual\OrientacaoSexual as CadastroIndividualOrientacaoSexual;
use App\Enums\AtencaoBasica\CadastroIndividual\SaidaCidadao as EnumSaidaCidadao;
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
use App\Enums\Cadastro\SujeitoAtencao\Deficiencia;
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco;
use App\Enums\Parametrizacao\Exame\Classificacao;
use App\Models\AtencaoBasica\CadastroIndividual\AcompanhamentoInfantil;
use App\Models\AtencaoBasica\CadastroIndividual\AlimentacaoDiaria;
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
use App\Models\AtencaoBasica\CadastroIndividual\ComunidadeTradicional;
use App\Models\AtencaoBasica\CadastroIndividual\Curso;
use App\Models\AtencaoBasica\CadastroIndividual\DoencaCardiaca;
use App\Models\AtencaoBasica\CadastroIndividual\DoencaRespiratoria;
use App\Models\AtencaoBasica\CadastroIndividual\HigienePessoal;
use App\Models\AtencaoBasica\CadastroIndividual\OrientacaoSexual;
use App\Models\AtencaoBasica\CadastroIndividual\OrigemAlimentacao;
use App\Models\AtencaoBasica\CadastroIndividual\Parentesco;
use App\Models\AtencaoBasica\CadastroIndividual\Peso;
use App\Models\AtencaoBasica\CadastroIndividual\ProblemasRins;
use App\Models\AtencaoBasica\CadastroIndividual\SaidaCidadao;
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoMercadoTrabalho;
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoRua;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
use App\Models\AtencaoBasica\Parametrizacao\OutrosSupervisor;
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
use App\Models\Cadastro\SujeitoAtencao\DeficienciaBase;
use App\Models\Cadastro\SujeitoAtencao\IdentidadeGenero;
use App\Models\Cadastro\SujeitoAtencao\Nacionalidade;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Cadastro\SujeitoAtencao\PacienteCondicaoSaude;
use App\Models\Cadastro\SujeitoAtencao\PacienteHistorico;
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencial;
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoSocial;
use App\Models\Cadastro\SujeitoAtencao\PacienteResponsavel;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Cns\TermoInvalido;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Services\Cadastro\SujeitoAtencao\ObitoService;
use App\Services\Integracao\CnsService;
use App\Services\Service;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CadastroIndividualService extends Service
{
public static function index()
{
return [
'model' => self::getModelData(),
];
}
public static function getEquipes(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'atencao_basica_parametrizacao_equipe.id AS id',
DB::raw("
CONCAT(
CASE
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine)
ELSE ''
END,
CASE
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: '
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_area.descricao, ''),
CASE
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: '
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: '
ELSE ''
END,
COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
) AS descricao
")
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
->get();
}
public static function getUnidades(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_unidade.id AS id',
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->distinct()
->orderBy('cadastro_unidade.cnes')
->get();
}
public static function getInfraestruturas(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_infraestrutura.id AS id',
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
->distinct()
->orderBy('nome')
->get();
}
public static function getOcupacoes()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::CADASTRO_INDIVIDUAL)->get();
$codigos = $permissao->pluck('ocupacao');
return $usuario->lotacoes
->filter(function ($lotacao) use ($codigos) {
return $lotacao->infraestrutura->id == request()->infraestrutura_id &&
$codigos->contains($lotacao->ocupacao->codigo);
})
->pluck('ocupacao');
}
public static function getSupervisores()
{
return OutrosSupervisor::where('usuario_id', request()->usuario_id)
->first();
}
private static function getFormData($id)
{
return [
'data_atual' => Carbon::now()->format('d/m/Y'),
'acompanhamento_infantil' => AcompanhamentoInfantil::orderBy('descricao')->get(),
'parentesco' => Parentesco::orderBy('descricao')->get(),
'curso' => Curso::orderBy('descricao')->get(),
'mercado_trabalho' => SituacaoMercadoTrabalho::orderBy('descricao')->get(),
'orientacao_sexual' => OrientacaoSexual::whereNotIn('id', [CadastroIndividualOrientacaoSexual::HOMOSSEXUAL])->orderBy('descricao')->get(),
'identidade_genero' => IdentidadeGenero::orderBy('descricao')->get(),
'deficiencia' => DeficienciaBase::orderBy('descricao')->get()->each(function ($item) {
$item->descricao = $item->id == Deficiencia::TEA ? $item->descricao : ucfirst(strtolower($item->descricao));
}),
'saida_cidadao' => SaidaCidadao::orderBy('descricao')->get(),
'peso' => Peso::orderBy('descricao')->get(),
'doencas_cardiacas' => DoencaCardiaca::orderBy('descricao')->get(),
'problemas_rins' => ProblemasRins::orderBy('descricao')->get(),
'doencas_respiratorias' => DoencaRespiratoria::orderBy('descricao')->get(),
'situacao_rua' => SituacaoRua::orderBy('descricao')->get(),
'alimentacao_diaria' => AlimentacaoDiaria::orderBy('descricao')->get(),
'origem_alimentacao' => OrigemAlimentacao::orderBy('descricao')->get(),
'higiene_pessoal' => HigienePessoal::orderBy('descricao')->get(),
'nacionalidades' => Nacionalidade::orderBy('descricao')->get(),
'responsaveis' => self::getResponsaveis($id),
'residentes' => self::getResidentes($id),
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
];
}
private static function getModelData($cadastro = null, $paciente = null)
{
$informacaoSocial = PacienteInformacaoSocial::where('paciente_id', $paciente['id'])->first();
$responsavel = $informacaoSocial ? $informacaoSocial->responsavel : false;
$responsavelCidadaoId = $informacaoSocial ? $informacaoSocial->responsavel_cidadao_id : null;
$parentescoResponsavelId = $informacaoSocial ? $informacaoSocial->parentesco_responsavel_id : null;
$cursoId = $informacaoSocial ? $informacaoSocial->curso_id : null;
$orientacaoSexual = $informacaoSocial ? $informacaoSocial->orientacao_sexual : null;
$orientacaoSexualId = $informacaoSocial ? $informacaoSocial->orientacao_sexual_id : null;
$deficiente = $informacaoSocial ? $informacaoSocial->deficiente : false;
$frequentaEscolaCreche = $informacaoSocial ? $informacaoSocial->frequenta_escola_creche : false;
$situacaoMercadoTrabalhoId = $informacaoSocial ? $informacaoSocial->situacao_mercado_trabalho_id : null;
$frequentaCuidadorTradicional = $informacaoSocial ? $informacaoSocial->frequenta_cuidador_tradicional : false;
$participaGrupoComunitario = $informacaoSocial ? $informacaoSocial->participa_grupo_comunitario : false;
$planoSaude = $informacaoSocial ? $informacaoSocial->plano_saude : false;
$comunidadeTradicional = $informacaoSocial ? $informacaoSocial->comunidade_tradicional : false;
$saidaCidadaoId = $informacaoSocial ? $informacaoSocial->saida_cidadao_id : null;
$motivoSaidaData = $informacaoSocial ? $informacaoSocial->motivo_saida_data : null;
$condicaoSaude = PacienteCondicaoSaude::where('paciente_id', $paciente['id'])->first();
$pesoId = $condicaoSaude ? $condicaoSaude->peso_id : null;
$internacao = $condicaoSaude ? $condicaoSaude->internacao : false;
$internacaoMotivo = $condicaoSaude ? $condicaoSaude->internacao_motivo : null;
$doencaCardiaca = $condicaoSaude ? $condicaoSaude->doenca_cardiaca : null;
$problemasRins = $condicaoSaude ? $condicaoSaude->problemas_rins : null;
$doencaRespiratoria = $condicaoSaude ? $condicaoSaude->doenca_respiratoria : null;
$tratamentoSaudeMental = $condicaoSaude ? $condicaoSaude->tratamento_saude_mental : null;
$acamado = $condicaoSaude ? $condicaoSaude->acamado : null;
$domiciliado = $condicaoSaude ? $condicaoSaude->domiciliado : null;
$plantasMedicinais = $condicaoSaude ? $condicaoSaude->plantas_medicinais : null;
$plantasMedicinaisQuais = $condicaoSaude ? $condicaoSaude->plantas_medicinais_quais : null;
$praticasIntegrativas = $condicaoSaude ? $condicaoSaude->praticas_integrativas : null;
$outrasCondicoesPrimaria = $condicaoSaude ? $condicaoSaude->outras_condicoes_primaria : null;
$outrasCondicoesSecundaria = $condicaoSaude ? $condicaoSaude->outras_condicoes_secundaria : null;
$outrasCondicoesTerciaria = $condicaoSaude ? $condicaoSaude->outras_condicoes_terciaria : null;
$informacaoResidencial = PacienteInformacaoResidencial::where('paciente_id', $paciente['id'])->first();
$rendaMensal = $informacaoResidencial ? $informacaoResidencial->renda_mensal : null;
$fatoresRisco = $paciente->cidadao->fatoresRisco->pluck('id');
$avcDerrame = $fatoresRisco->contains(FatorRisco::AVC) ? true : false;
$cancer = $fatoresRisco->contains(FatorRisco::CANCERO) ? true : false;
$diabetes = $fatoresRisco->contains(FatorRisco::DIABETES) ? true : false;
$fibromialgia = $fatoresRisco->contains(FatorRisco::FIBROMIALGIA) ? true : false;
$fumante = $fatoresRisco->contains(FatorRisco::TABAGISMO) ? true : false;
$gestante = $fatoresRisco->contains(FatorRisco::GESTANTE) ? true : false;
$hanseniase = $fatoresRisco->contains(FatorRisco::HANSENIASE) ? true : false;
$hipertensao = $fatoresRisco->contains(FatorRisco::HIPERTENSAO) ? true : false;
$infarto = $fatoresRisco->contains(FatorRisco::INFARTO) ? true : false;
$outrasDrogas = $fatoresRisco->contains(FatorRisco::OUTRAS_DROGAS) ? true : false;
$transtornoEspectroAutista = $fatoresRisco->contains(FatorRisco::TEA) ? true : false;
$tuberculose = $fatoresRisco->contains(FatorRisco::TUBERCULOSE) ? true : false;
$usaAlcool = $fatoresRisco->contains(FatorRisco::USA_ALCOOL) ? true : false;
$cadastroDeficiente = $cadastro ? $cadastro->deficiente : $deficiente;
$deficiencias = $cadastro
? $cadastro->deficiencia->pluck('id')
: ($informacaoSocial ? $informacaoSocial->deficiencia->pluck('id') : collect());
$cadastroTea = $cadastro ? $cadastro->transtorno_espectro_autista : $transtornoEspectroAutista;
if ($cadastroTea) {
$cadastroDeficiente = true;
if (!$deficiencias->contains(Deficiencia::TEA)) {
$deficiencias->push(Deficiencia::TEA);
}
}
if ($deficiencias->contains(Deficiencia::TEA) && !$fatoresRisco->contains(FatorRisco::TEA)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::TEA);
}
return [
'fatores_risco' => $paciente->cidadao->fatoresRisco ?? [],
'has_cadastro' => $cadastro,
'has_informacao_paciente' => $informacaoSocial || $informacaoResidencial || $condicaoSaude ? true : false,
'cadastro_domiciliar' => $paciente->cidadao->domicilio && $paciente->cidadao->domicilio->cadastroDomiciliar
? [
'id' => $paciente->cidadao->domicilio->cadastroDomiciliar->id,
]
: null,
'cadastro' => [
'usuario' => [
'id' => $cadastro->usuario->id ?? null,
'cidadao_nome' => $cadastro->usuario->cidadao->nome ?? null,
],
'unidade_id' => $cadastro->equipe->unidade_id ?? null,
'infraestrutura_id' => $cadastro->equipe->infraestrutura_id ?? null,
'equipe_id' => $cadastro->equipe_id ?? null,
'ocupacao_id' => $cadastro->usuario_ocupacao_id ?? null,
'supervisor_id' => $cadastro->supervisor_id ?? null,
'data_usuario_responsavel' => $cadastro->data_usuario_responsavel ?? Carbon::now()->format('Y-m-d'),
],
'exportacao' => [
'data' => $cadastro && $cadastro->data_hora_exportacao
? (new Carbon($cadastro->data_hora_exportacao))->format('d/m/Y') . ' às '
. (new Carbon($cadastro->data_hora_exportacao))->format('H:i')
: null,
'profissional' => $cadastro && $cadastro->usuarioExportacao
? $cadastro->usuarioExportacao->cidadao->nome
: null,
],
'alteracao' => [
'data_cadastro' => optional(optional($cadastro)->created_at)->format('d/m/Y'),
'usuario_cadastro' => optional(optional(optional($cadastro)->createdLotacao)->usuario)->cidadao->nome ?? null,
'data_alteracao' => optional(optional($cadastro)->updated_at)->format('d/m/Y'),
'usuario_alteracao' => optional(optional(optional($cadastro)->updatedLotacao)->usuario)->cidadao->nome ?? null,
],
'cidadao' => [
'nome' => $paciente->cidadao->nome ?? null,
'nome_social' => $paciente->cidadao->nome_social ?? null,
'status_id' => $cadastro ? $cadastro->status_id : null,
'sexo_id' => $paciente->cidadao->sexo_id ?? null,
'cns' => $paciente ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
'cpf' => $paciente ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'data_nascimento' => $paciente->cidadao->data_nascimento->format('Y-m-d') ?? null,
'data_naturalizacao' => $paciente->cidadao->data_naturalizacao ?
$paciente->cidadao->data_naturalizacao->format('Y-m-d') : null,
'nacionalidade_id' => $paciente->cidadao->nacionalidade_id ?? null,
'portaria_naturalizacao' => $paciente->cidadao->portaria_naturalizacao ?? '',
'responsavel_cidadao_id' => $cadastro ? $cadastro->responsavel_cidadao_id : $responsavelCidadaoId,
'responsavel' => (count(self::getResponsaveis($paciente->id)) === 0) ? true : ($cadastro ? $cadastro->responsavel : $responsavel),
'ocupacao' => $cadastro && $cadastro->responsavelCidadao && $cadastro->responsavelCidadao->paciente->cadastroIndividual && $cadastro->responsavelCidadao->paciente->cadastroIndividual->ocupacao ? [
'id' => $cadastro->responsavelCidadao->paciente->cadastroIndividual->ocupacao->id,
'codigo' => $cadastro->responsavelCidadao->paciente->cadastroIndividual->ocupacao->codigo,
'nome' => $cadastro->responsavelCidadao->paciente->cadastroIndividual->ocupacao->nome,
] : null,
'renda_mensal' => $cadastro ? $cadastro->renda_mensal : $rendaMensal,
'unidade_area_sus' => $paciente->cidadao->domicilio && $paciente->cidadao->domicilio->cadastroDomiciliar && $paciente->cidadao->domicilio->cadastroDomiciliar->equipe ?
$paciente->cidadao->domicilio->cadastroDomiciliar->equipe->unidade->nome_fantasia . ' - ÁREA: ' .
$paciente->cidadao->domicilio->cadastroDomiciliar->equipe->area->descricao .
(
$paciente->cidadao->domicilio->cadastroDomiciliar->equipe->microarea
? ' - MICROÁREA' . $paciente->cidadao->domicilio->cadastroDomiciliar->equipe->microarea->descricao
: ' - MICROÁREA - '
) : null,
'ativo' => $cadastro ? $cadastro->ativo : true,
'classificacao_id' => $paciente->classificacao_id,
'cidadao_id' => $paciente->cidadao_id,
],
'informacao' => [
'parentesco_responsavel_id' => $cadastro ? $cadastro->parentesco_responsavel_id : $parentescoResponsavelId,
'ocupacao' => $cadastro && $cadastro->ocupacao
? [
'id' => $cadastro->ocupacao->id,
'codigo' => $cadastro->ocupacao->codigo,
'nome' => $cadastro->ocupacao->nome,
] : ($informacaoResidencial && $informacaoResidencial->ocupacao
? [
'id' => $informacaoResidencial->ocupacao->id,
'codigo' => $informacaoResidencial->ocupacao->codigo,
'nome' => $informacaoResidencial->ocupacao->nome,
] : null),
'curso_id' => $cadastro ? $cadastro->curso_id : $cursoId,
'frequenta_escola_creche' => $cadastro ? $cadastro->frequenta_escola_creche : $frequentaEscolaCreche,
'situacao_mercado_trabalho_id' => $cadastro ? $cadastro->situacao_mercado_trabalho_id : $situacaoMercadoTrabalhoId,
'frequenta_cuidador_tradicional' => $cadastro ? $cadastro->frequenta_cuidador_tradicional : $frequentaCuidadorTradicional,
'participa_grupo_comunitario' => $cadastro ? $cadastro->participa_grupo_comunitario : $participaGrupoComunitario,
'acompanhamento_infantil' => $cadastro
? $cadastro->acompanhamentoInfantil->pluck('id')
: ($informacaoSocial ? $informacaoSocial->acompanhamentoInfantil->pluck('id') : []),
'plano_saude' => $cadastro
? $paciente->cidadao->conveniosMedico->isEmpty() ? $cadastro->plano_saude : true
: $planoSaude,
'convenio_medico' => $paciente->cidadao->conveniosMedico ?? null,
'comunidade_tradicional' => $cadastro ? $cadastro->comunidade_tradicional : $comunidadeTradicional,
'comunidade_tradicional_qual' => $cadastro && $cadastro->comunidade_tradicional ? [
'id' => $cadastro->comunidadeTradicionalQual->id,
'codigo_esus' => $cadastro->comunidadeTradicionalQual->codigo_esus,
'descricao' => $cadastro->comunidadeTradicionalQual->descricao,
] : ($informacaoSocial && $informacaoSocial->comunidade_tradicional ? [
'id' => $informacaoSocial->comunidadeTradicionalQual->id,
'codigo_esus' => $informacaoSocial->comunidadeTradicionalQual->codigo_esus,
'descricao' => $informacaoSocial->comunidadeTradicionalQual->descricao,
] : null),
'orientacao_sexual' => $cadastro ? $cadastro->orientacao_sexual : $orientacaoSexual,
'orientacao_sexual_id' => $cadastro ? $cadastro->orientacao_sexual_id : $orientacaoSexualId,
'identidade_genero' => $cadastro
? $cadastro->paciente->cidadao->identidade_genero_id ? true : $cadastro->identidade_genero
: null,
'identidade_genero_id' => $cadastro ? $cadastro->paciente->cidadao->identidade_genero_id : null,
'deficiente' => $cadastroDeficiente,
'deficiencias' => $deficiencias,
'saida_cidadao_id' => $cadastro ? $cadastro->saida_cidadao_id : $saidaCidadaoId,
'motivo_saida_data' => $cadastro ? $cadastro->motivo_saida_data : $motivoSaidaData,
'obito' => $paciente->cidadao->obito ? true : false,
'obito_em' => $paciente->cidadao->obito ? (new Carbon($paciente->cidadao->obito->obito_em))->format('Y-m-d') : null,
'hora_obito' => $paciente->cidadao->obito ? (new Carbon($paciente->cidadao->obito->obito_em))->format('H:i:s') : null,
'obito_declaracao' => $paciente->cidadao->obito->declaracao ?? null,
'obito_causa' => $paciente->cidadao->obito->causa ?? null,
'obito_cid' => [
'id' => $paciente->cidadao->obito->cid->id ?? null,
'nome' => $paciente->cidadao->obito->cid->nome ?? null,
],
'data_entrada' => $paciente->cidadao->estrangeiroEntradaBrasil->data_entrada ?? null,
'data_naturalizacao' => $paciente->cidadao->data_naturalizacao ?? null,
],
'informacao_socioeconomica' => [
'alimentos_acabaram' => $cadastro ? $cadastro->alimentos_acabaram : null,
'comeu_alguns_alimentos' => $cadastro ? $cadastro->comeu_alguns_alimentos : null,
'data_atualizacao_tria' => optional($cadastro)->data_atualizacao_tria ? optional($cadastro)->data_atualizacao_tria : optional($cadastro)->created_at,
],
'recusa_cadastro' => $cadastro ? $cadastro->recusa_cadastro : false,
'condicao' => [
'gestante' => $cadastro && $cadastro->gestante !== null ? $cadastro->gestante : null,
'maternidade_referencia' => $cadastro ? $cadastro->maternidade_referencia : null,
'peso_id' => $cadastro ? $cadastro->peso_id : $pesoId,
'fumante' => $cadastro ? $cadastro->fumante : $fumante,
'usa_alcool' => $cadastro ? $cadastro->usa_alcool : $usaAlcool,
'outras_drogas' => $cadastro ? $cadastro->outras_drogas : $outrasDrogas,
'hipertensao' => $cadastro ? $cadastro->hipertensao : $hipertensao,
'diabetes' => $cadastro ? $cadastro->diabetes : $diabetes,
'avc_derrame' => $cadastro ? $cadastro->avc_derrame : $avcDerrame,
'infarto' => $cadastro ? $cadastro->infarto : $infarto,
'hanseniase' => $cadastro ? $cadastro->hanseniase : $hanseniase,
'tuberculose' => $cadastro ? $cadastro->tuberculose : $tuberculose,
'cancer' => $cadastro ? $cadastro->cancer : $cancer,
'fibromialgia' => $cadastro ? $cadastro->fibromialgia : $fibromialgia,
'transtorno_espectro_autista' => $cadastro
? $cadastro->transtorno_espectro_autista : $transtornoEspectroAutista,
'internacao' => $cadastro ? $cadastro->internacao : $internacao,
'internacao_motivo' => $cadastro ? $cadastro->internacao_motivo : $internacaoMotivo,
'doenca_cardiaca' => $cadastro ? $cadastro->doenca_cardiaca : $doencaCardiaca,
'doenca_cardiaca_quais' => $cadastro
? $cadastro->doencaCardiaca->pluck('id')
: ($condicaoSaude ? $condicaoSaude->doencaCardiaca->pluck('id') : []),
'problemas_rins' => $cadastro ? $cadastro->problemas_rins : $problemasRins,
'problemas_rins_quais' => $cadastro
? $cadastro->problemasRins->pluck('id')
: ($condicaoSaude ? $condicaoSaude->problemasRins->pluck('id') : []),
'doenca_respiratoria' => $cadastro ? $cadastro->doenca_respiratoria : $doencaRespiratoria,
'doenca_respiratoria_quais' => $cadastro
? $cadastro->doencaRespiratoria->pluck('id')
: ($condicaoSaude ? $condicaoSaude->doencaRespiratoria->pluck('id') : []),
'tratamento_saude_mental' => $cadastro ? $cadastro->tratamento_saude_mental : $tratamentoSaudeMental,
'acamado' => $cadastro ? $cadastro->acamado : $acamado,
'domiciliado' => $cadastro ? $cadastro->domiciliado : $domiciliado,
'plantas_medicinais' => $cadastro ? $cadastro->plantas_medicinais : $plantasMedicinais,
'plantas_medicinais_quais' => $cadastro ? $cadastro->plantas_medicinais_quais : $plantasMedicinaisQuais,
'praticas_integrativas' => $cadastro ? $cadastro->praticas_integrativas : $praticasIntegrativas,
'outras_condicoes_primaria' => $cadastro ? $cadastro->outras_condicoes_primaria : $outrasCondicoesPrimaria,
'outras_condicoes_secundaria' => $cadastro ? $cadastro->outras_condicoes_secundaria : $outrasCondicoesSecundaria,
'outras_condicoes_terciaria' => $cadastro ? $cadastro->outras_condicoes_terciaria : $outrasCondicoesTerciaria,
],
'situacao_rua' => [
'situacao_rua_id' => $cadastro ? $cadastro->situacao_rua_id : null,
'outra_instituicao' => $cadastro ? $cadastro->outra_instituicao : false,
'outra_instituicao_quais' => $cadastro ? $cadastro->outra_instituicao_quais : null,
'recebe_beneficio' => $cadastro ? $cadastro->recebe_beneficio : false,
'referencia_familiar' => $cadastro ? $cadastro->referencia_familiar : false,
'visita_familiar' => $cadastro ? $cadastro->visita_familiar : false,
'parentesco' => $cadastro ? $cadastro->parentesco : null,
'alimentacao_diaria_id' => $cadastro ? $cadastro->alimentacao_diaria_id : null,
'origem_alimentacao' => $cadastro ? $cadastro->origemAlimentacao->pluck('id') : [],
'higiene_pessoal' => $cadastro ? $cadastro->higiene_pessoal : false,
'higiene_pessoal_quais' => $cadastro ? $cadastro->higienePessoal->pluck('id') : [],
],
];
}
public static function show($id)
{
return CadastroIndividual::where('paciente_id', $id)->first();
}
public static function edit($id)
{
$cadastro = self::show($id);
$paciente = Paciente::findOrFail($id);
return [
'additionals' => [
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
],
'form' => self::getFormData($id),
'model' => self::getModelData($cadastro, $paciente),
];
}
public static function store()
{
return self::saveStore(request()->all());
}
public static function saveStore($params)
{
self::validate($params);
$params = (object) $params;
$paciente = CadastroIndividual::where('paciente_id', $params->paciente_id)
-> first() ?? new CadastroIndividual();
$paciente->paciente_id = $params->paciente_id;
$paciente->recusa_cadastro = $params->recusa_cadastro;
$cadastro = $params->cadastro;
$paciente->data_usuario_responsavel = Carbon::now();
$paciente->equipe_id = $cadastro['equipe_id'];
$paciente->usuario_ocupacao_id = $cadastro['ocupacao_id'];
$paciente->usuario_id = $cadastro['usuario_id'];
$paciente->supervisor_id = $cadastro['supervisor_id'];
$condicao = $params->condicao;
$paciente->acamado = $condicao['acamado'];
$paciente->avc_derrame = $condicao['avc_derrame'];
$paciente->cancer = $condicao['cancer'];
$paciente->diabetes = $condicao['diabetes'];
$paciente->doenca_cardiaca = $condicao['doenca_cardiaca'];
$paciente->doenca_respiratoria = $condicao['doenca_respiratoria'];
$paciente->domiciliado = $condicao['domiciliado'];
$paciente->fibromialgia = $condicao['fibromialgia'];
$paciente->fumante = $condicao['fumante'];
$paciente->gestante = $condicao['gestante'];
$paciente->hanseniase = $condicao['hanseniase'];
$paciente->hipertensao = $condicao['hipertensao'];
$paciente->infarto = $condicao['infarto'];
$paciente->internacao = $condicao['internacao'];
$paciente->internacao_motivo = $condicao['internacao_motivo'];
$paciente->maternidade_referencia = $condicao['maternidade_referencia'];
$paciente->outras_condicoes_primaria = $condicao['outras_condicoes_primaria'];
$paciente->outras_condicoes_secundaria = $condicao['outras_condicoes_secundaria'];
$paciente->outras_condicoes_terciaria = $condicao['outras_condicoes_terciaria'];
$paciente->outras_drogas = $condicao['outras_drogas'];
$paciente->peso_id = $condicao['peso_id'];
$paciente->praticas_integrativas = $condicao['praticas_integrativas'];
$paciente->problemas_rins = $condicao['problemas_rins'];
$paciente->transtorno_espectro_autista = $condicao['transtorno_espectro_autista'];
$paciente->tratamento_saude_mental = $condicao['tratamento_saude_mental'];
$paciente->tuberculose = $condicao['tuberculose'];
$paciente->usa_alcool = $condicao['usa_alcool'];
$paciente->plantas_medicinais = $condicao['plantas_medicinais'];
$paciente->plantas_medicinais_quais = $condicao['plantas_medicinais_quais'];
$informacao = $params->informacao;
$paciente->comunidade_tradicional = $informacao['comunidade_tradicional'];
$paciente->comunidade_tradicional_id = $informacao['comunidade_tradicional_id'];
$paciente->curso_id = $informacao['curso_id'];
$paciente->deficiente = $informacao['deficiente'];
$paciente->frequenta_cuidador_tradicional = $informacao['frequenta_cuidador_tradicional'];
$paciente->frequenta_escola_creche = $informacao['frequenta_escola_creche'];
$paciente->identidade_genero = $informacao['identidade_genero'];
$paciente->saida_cidadao_id = $informacao['saida_cidadao_id'];
$paciente->motivo_saida_data = $informacao['motivo_saida_data'];
$paciente->ocupacao_id = $informacao['ocupacao_id'];
$paciente->orientacao_sexual = $informacao['orientacao_sexual'];
$paciente->orientacao_sexual_id = $informacao['orientacao_sexual_id'];
$paciente->parentesco_responsavel_id = $informacao['parentesco_responsavel_id'];
$paciente->participa_grupo_comunitario = $informacao['participa_grupo_comunitario'];
$paciente->plano_saude = $informacao['plano_saude'];
$paciente->situacao_mercado_trabalho_id = $informacao['situacao_mercado_trabalho_id'];
if (isset($params->informacao_socioeconomica)) {
$socioeconomica = $params->informacao_socioeconomica;
$alimentosAcabaram = isset($socioeconomica['alimentos_acabaram']) ? $socioeconomica['alimentos_acabaram'] : null;
$comeuAlgunsAlimentos = isset($socioeconomica['comeu_alguns_alimentos']) ? $socioeconomica['comeu_alguns_alimentos'] : null;
$houveMudancaSocioeconomica = self::houveMudancaInformacaoSocioeconomica(
$paciente->alimentos_acabaram,
$paciente->comeu_alguns_alimentos,
$alimentosAcabaram,
$comeuAlgunsAlimentos
);
$paciente->alimentos_acabaram = $alimentosAcabaram;
$paciente->comeu_alguns_alimentos = $comeuAlgunsAlimentos;
if ($houveMudancaSocioeconomica) {
$paciente->data_atualizacao_tria = Carbon::now();
}
} else {
$paciente->alimentos_acabaram = null;
$paciente->comeu_alguns_alimentos = null;
$paciente->data_atualizacao_tria = null;
}
if ($informacao['identidade_genero']) {
Cidadao::findOrFail($paciente->paciente->cidadao->id)
->update(['identidade_genero_id' => $informacao['identidade_genero_id']]);
}
$cidadao = $params->cidadao;
$paciente->renda_mensal = $cidadao['renda_mensal'];
if (!is_null($cidadao['renda_mensal'])) {
$paciente->renda_mensal = str_replace('.', '', $paciente->renda_mensal);
$paciente->renda_mensal = str_replace(',', '.', $paciente->renda_mensal);
}
$paciente->ativo = $cidadao['ativo'];
if (!$cidadao['responsavel'] && $cidadao['responsavel_cidadao_id']) {
$cadastro_cidadao = Paciente::where('cidadao_id', $cidadao['responsavel_cidadao_id'])->first();
CadastroIndividual::where('paciente_id', $cadastro_cidadao->id)
->update(['ocupacao_id' => $cidadao['ocupacao_id']]);
}
if ($paciente->responsavel && $informacao['saida_cidadao_id'] == EnumSaidaCidadao::OBITO) {
if ($cidadao['responsavel_cidadao_id'] !== null) {
$cadastro_cidadao = Paciente::where('cidadao_id', $cidadao['responsavel_cidadao_id'])->first();
CadastroIndividual::where('paciente_id', $cadastro_cidadao->id)
->update(['responsavel' => true, 'responsavel_cidadao_id' => null]);
CadastroIndividual::where('responsavel_cidadao_id', $paciente->paciente->cidadao->id)
->whereNotIn('paciente_id', [$cadastro_cidadao->id])
->update(['responsavel_cidadao_id' => $cidadao['responsavel_cidadao_id']]);
}
}
$paciente->responsavel = $cidadao['responsavel'];
$paciente->responsavel_cidadao_id = $cidadao['responsavel_cidadao_id'];
$situacao_rua = $params->situacao_rua;
$paciente->alimentacao_diaria_id = $situacao_rua['alimentacao_diaria_id'];
$paciente->higiene_pessoal = $situacao_rua['higiene_pessoal'];
$paciente->outra_instituicao = $situacao_rua['outra_instituicao'];
$paciente->outra_instituicao_quais = $situacao_rua['outra_instituicao_quais'];
$paciente->parentesco = $situacao_rua['parentesco'];
$paciente->recebe_beneficio = $situacao_rua['recebe_beneficio'];
$paciente->referencia_familiar = $situacao_rua['referencia_familiar'];
$paciente->situacao_rua_id = $situacao_rua['situacao_rua_id'];
$paciente->visita_familiar = $situacao_rua['visita_familiar'];
$paciente->exportacao_id = null;
$paciente->save();
$paciente->acompanhamentoInfantil()->sync($informacao['acompanhamento_infantil']);
$paciente->deficiencia()->sync($informacao['deficiencias']);
$paciente->doencaCardiaca()->sync($condicao['doenca_cardiaca_quais']);
$paciente->problemasRins()->sync($condicao['problemas_rins_quais']);
$paciente->doencaRespiratoria()->sync($condicao['doenca_respiratoria_quais']);
$paciente->origemAlimentacao()->sync($situacao_rua['origem_alimentacao']);
$paciente->higienePessoal()->sync($situacao_rua['higiene_pessoal_quais']);
if (!$paciente->deficiencia->pluck('id')->contains(Deficiencia::TEA)
&& $paciente->paciente->cidadao->fatoresRisco->pluck('id')->contains(FatorRisco::TEA)) {
$paciente->paciente->cidadao->fatoresRisco()->detach(FatorRisco::TEA);
if ($paciente->paciente->informacaoSocial && $paciente->paciente->informacaoSocial->deficiencia) {
$paciente->paciente->informacaoSocial->deficiencia()->detach(Deficiencia::TEA);
}
}
if ($informacao['saida_cidadao_id'] == EnumSaidaCidadao::OBITO) {
$currentLotacao = self::getCurrentLotacao();
$obitoService = new ObitoService($paciente->paciente->cidadao);
if (is_null($obitoService->get())) {
$obitoService->save(
Carbon::createFromFormat('d/m/Y H:i:s', $informacao['obito_em']),
$informacao['obito_declaracao'] ?? '',
$informacao['obito_causa'] ?? '',
$informacao['obito_cid_id'] ?? null,
$currentLotacao->usuario->id
);
}
}
if ($informacao['saida_cidadao_id'] == EnumSaidaCidadao::MUDANCA_DE_TERRITORIO) {
$cidadao = Cidadao::findOrFail($paciente->paciente->cidadao->id);
$cidadao->update(['domicilio_id' => null]);
if ($cidadao->paciente->responsavel) {
$cidadao->paciente->responsavel->delete();
}
}
if ($params->origem == 'atencaoBasica') {
if ($informacao['saida_cidadao_id'] !== EnumSaidaCidadao::MUDANCA_DE_TERRITORIO) {
self::saveResponsavel($paciente->paciente, $params);
}
self::saveCondicaoSaude($paciente->paciente, $params);
self::saveInformacaoSocial($paciente->paciente, $params);
self::saveInformacaoResidencial($paciente->paciente, $params);
self::atualizaFatoresRisco($paciente->paciente, $condicao);
}
if (isset($params->created_lotacao_id) && isset($params->created_centro_custo_id) && isset($params->updated_lotacao_id) && isset($params->updated_centro_custo_id)) {
CadastroIndividual::where('id', $paciente->id)
->update([
'created_lotacao_id' => $params->created_lotacao_id,
'created_centro_custo_id' => $params->created_centro_custo_id,
'updated_lotacao_id' => $params->updated_lotacao_id,
'updated_centro_custo_id' => $params->updated_centro_custo_id,
]);
}
}
private static function atualizaFatoresRisco($paciente, $condicao) {
$fatoresRisco = $paciente->cidadao->fatoresRisco->pluck('id');
if (!empty($condicao['avc_derrame'])) {
if (!$fatoresRisco->contains(FatorRisco::AVC)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::AVC);
}
} else {
if ($fatoresRisco->contains(FatorRisco::AVC)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::AVC);
}
}
if (!empty($condicao['cancer'])) {
if (!$fatoresRisco->contains(FatorRisco::CANCERO)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::CANCERO);
}
} else {
if ($fatoresRisco->contains(FatorRisco::CANCERO)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::CANCERO);
}
}
if (!empty($condicao['diabetes'])) {
if (!$fatoresRisco->contains(FatorRisco::DIABETES)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::DIABETES);
}
} else {
if ($fatoresRisco->contains(FatorRisco::DIABETES)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::DIABETES);
}
}
if (!empty($condicao['fibromialgia'])) {
if (!$fatoresRisco->contains(FatorRisco::FIBROMIALGIA)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::FIBROMIALGIA);
}
} else {
if ($fatoresRisco->contains(FatorRisco::FIBROMIALGIA)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::FIBROMIALGIA);
}
}
if (!empty($condicao['fibromialgia'])) {
if (!$fatoresRisco->contains(FatorRisco::FIBROMIALGIA)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::FIBROMIALGIA);
}
} else {
if ($fatoresRisco->contains(FatorRisco::FIBROMIALGIA)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::FIBROMIALGIA);
}
}
if (!empty($condicao['fumante'])) {
if (!$fatoresRisco->contains(FatorRisco::TABAGISMO)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::TABAGISMO);
}
} else {
if ($fatoresRisco->contains(FatorRisco::TABAGISMO)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::TABAGISMO);
}
}
if (!empty($condicao['gestante'])) {
if (!$fatoresRisco->contains(FatorRisco::GESTANTE)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::GESTANTE);
}
} else {
if ($fatoresRisco->contains(FatorRisco::GESTANTE)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::GESTANTE);
}
}
if (!empty($condicao['hanseniase'])) {
if (!$fatoresRisco->contains(FatorRisco::HANSENIASE)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::HANSENIASE);
}
} else {
if ($fatoresRisco->contains(FatorRisco::HANSENIASE)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::HANSENIASE);
}
}
if (!empty($condicao['infarto'])) {
if (!$fatoresRisco->contains(FatorRisco::INFARTO)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::INFARTO);
}
} else {
if ($fatoresRisco->contains(FatorRisco::INFARTO)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::INFARTO);
}
}
if (!empty($condicao['outras_drogas'])) {
if (!$fatoresRisco->contains(FatorRisco::OUTRAS_DROGAS)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::OUTRAS_DROGAS);
}
} else {
if ($fatoresRisco->contains(FatorRisco::OUTRAS_DROGAS)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::OUTRAS_DROGAS);
}
}
if (!empty($condicao['transtorno_espectro_autista'])) {
if (!$fatoresRisco->contains(FatorRisco::TEA)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::TEA);
}
} else {
if ($fatoresRisco->contains(FatorRisco::TEA)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::TEA);
}
}
if (!empty($condicao['tuberculose'])) {
if (!$fatoresRisco->contains(FatorRisco::TUBERCULOSE)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::TUBERCULOSE);
}
} else {
if ($fatoresRisco->contains(FatorRisco::TUBERCULOSE)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::TUBERCULOSE);
}
}
if (!empty($condicao['usa_alcool'])) {
if (!$fatoresRisco->contains(FatorRisco::USA_ALCOOL)) {
$paciente->cidadao->fatoresRisco()->attach(FatorRisco::USA_ALCOOL);
}
} else {
if ($fatoresRisco->contains(FatorRisco::USA_ALCOOL)) {
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::USA_ALCOOL);
}
}
}
private function saveResponsavel($paciente, $params) {
$cadastro = $params->cadastro;
PacienteResponsavel::updateOrCreate(
[
'paciente_id' => $paciente->id,
],
[
'responsavel_usuario_id' => $cadastro['usuario_id'],
'responsavel_equipe_id' => $cadastro['equipe_id'],
'responsavel_ocupacao_id' => $cadastro['ocupacao_id'],
'responsavel_data' => Carbon::now(),
]
);
}
private static function saveCondicaoSaude($paciente, $params) {
$condicao = $params->condicao;
PacienteCondicaoSaude::updateOrCreate(
[
'paciente_id' => $paciente->id,
],
[
'peso_id' => $condicao['peso_id'] ?? null,
'internacao' => $condicao['internacao'] ?? null,
'internacao_motivo' => $condicao['internacao_motivo'] ?? null,
'doenca_cardiaca' => $condicao['doenca_cardiaca'] ?? null,
'problemas_rins' => $condicao['problemas_rins'] ?? null,
'doenca_respiratoria' => $condicao['doenca_respiratoria'] ?? null,
'tratamento_saude_mental' => $condicao['tratamento_saude_mental'] ?? null,
'acamado' => $condicao['acamado'] ?? null,
'domiciliado' => $condicao['domiciliado'] ?? null,
'plantas_medicinais' => $condicao['plantas_medicinais'] ?? null,
'plantas_medicinais_quais' => $condicao['plantas_medicinais_quais'] ?? null,
'praticas_integrativas' => $condicao['praticas_integrativas'] ?? null,
'outras_condicoes_primaria' => $condicao['outras_condicoes_primaria'] ?? null,
'outras_condicoes_secundaria' => $condicao['outras_condicoes_secundaria'] ?? null,
'outras_condicoes_terciaria' => $condicao['outras_condicoes_terciaria'] ?? null,
]
);
if ($paciente->condicaoSaude) {
$paciente->condicaoSaude->doencaCardiaca()->sync($condicao['doenca_cardiaca_quais']);
$paciente->condicaoSaude->doencaRespiratoria()->sync($condicao['doenca_respiratoria_quais']);
$paciente->condicaoSaude->problemasRins()->sync($condicao['problemas_rins_quais']);
}
}
private static function saveInformacaoSocial($paciente, $params) {
$informacao = $params->informacao;
$cidadao = $params->cidadao;
$informacaoSocialAtual = $paciente->informacaoSocial;
if (isset($params->informacao_socioeconomica)) {
$socioeconomica = $params->informacao_socioeconomica;
$alimentos_acabaram = isset($socioeconomica['alimentos_acabaram']) ? $socioeconomica['alimentos_acabaram'] : null;
$comeu_alguns_alimentos = isset($socioeconomica['comeu_alguns_alimentos']) ? $socioeconomica['comeu_alguns_alimentos'] : null;
$houveMudancaSocioeconomica = self::houveMudancaInformacaoSocioeconomica(
optional($informacaoSocialAtual)->alimentos_acabaram,
optional($informacaoSocialAtual)->comeu_alguns_alimentos,
$alimentos_acabaram,
$comeu_alguns_alimentos
);
$data_atualizacao_tria = $houveMudancaSocioeconomica ? Carbon::now() : optional($informacaoSocialAtual)->data_atualizacao_tria;
} else {
$alimentos_acabaram = null;
$comeu_alguns_alimentos = null;
$data_atualizacao_tria = null;
}
PacienteInformacaoSocial::updateOrCreate(
[
'paciente_id' => $paciente->id,
],
[
'responsavel' => $cidadao['responsavel'],
'responsavel_cidadao_id' => $cidadao['responsavel_cidadao_id'],
'parentesco_responsavel_id' => $informacao['parentesco_responsavel_id'],
'curso_id' => $informacao['curso_id'],
'orientacao_sexual' => $informacao['orientacao_sexual'],
'orientacao_sexual_id' => $informacao['orientacao_sexual_id'],
'deficiente' => $informacao['deficiente'],
'frequenta_escola_creche' => $informacao['frequenta_escola_creche'],
'situacao_mercado_trabalho_id' => $informacao['situacao_mercado_trabalho_id'],
'frequenta_cuidador_tradicional' => $informacao['frequenta_cuidador_tradicional'],
'participa_grupo_comunitario' => $informacao['participa_grupo_comunitario'],
'plano_saude' => $informacao['plano_saude'],
'comunidade_tradicional' => $informacao['comunidade_tradicional'],
'comunidade_tradicional_id' => $informacao['comunidade_tradicional_id'],
'saida_cidadao_id' => $informacao['saida_cidadao_id'],
'motivo_saida_data' => $informacao['motivo_saida_data'],
'alimentos_acabaram' => $alimentos_acabaram,
'comeu_alguns_alimentos' => $comeu_alguns_alimentos,
'data_atualizacao_tria' => $data_atualizacao_tria,
'recusa_cadastro' => $params->recusa_cadastro,
]
);
if (isset($params->informacao_socioeconomica)) {
$socioeconomica = $params->informacao_socioeconomica;
$paciente->alimentos_acabaram = isset($socioeconomica['alimentos_acabaram']) ? $socioeconomica['alimentos_acabaram'] : null;
$paciente->comeu_alguns_alimentos = isset($socioeconomica['comeu_alguns_alimentos']) ? $socioeconomica['comeu_alguns_alimentos'] : null;
$paciente->data_atualizacao_tria = $data_atualizacao_tria;
} else {
$paciente->alimentos_acabaram = null;
$paciente->comeu_alguns_alimentos = null;
$paciente->data_atualizacao_tria = null;
}
if ($paciente->informacaoSocial) {
$paciente->informacaoSocial->acompanhamentoInfantil()->sync($informacao['acompanhamento_infantil']);
$paciente->informacaoSocial->deficiencia()->sync($informacao['deficiencias']);
if (!$paciente->informacaoSocial->deficiencia->pluck('id')->contains(Deficiencia::TEA)
&& $paciente->cidadao->fatoresRisco->pluck('id')->contains(FatorRisco::TEA)) {
$paciente->informacaoSocial->deficiencia()->attach(Deficiencia::TEA);
}
}
}
private static function saveInformacaoResidencial($paciente, $params) {
$informacao = $params->informacao;
$cidadao = $params->cidadao;
$rendaMensal = $cidadao['renda_mensal'];
if (!is_null($cidadao['renda_mensal'])) {
$rendaMensal = str_replace('.', '', $rendaMensal);
$rendaMensal = str_replace(',', '.', $rendaMensal);
}
PacienteInformacaoResidencial::updateOrCreate(
[
'paciente_id' => $paciente->id,
],
[
'recusa_cadastro' => $params->recusa_cadastro,
'renda_mensal' => $rendaMensal,
'ocupacao_id' => $informacao['ocupacao_id'],
]
);
}
public static function autocompleteComunidades()
{
$comunidades = ComunidadeTradicional::getQuery();
return $comunidades;
}
private static function getResponsaveis($id)
{
$paciente = Paciente::findOrFail($id);
return DB::table('cadastro_cidadao')
->select([
'cadastro_cidadao.id AS id',
'cadastro_cidadao.nome AS nome',
'ocupacao.id AS ocupacao_id',
'ocupacao.nome AS ocupacao_nome',
'ocupacao.codigo AS ocupacao_codigo',
])
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->leftJoin('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'atencao_basica_cadastro_individual.ocupacao_id')
->where('cadastro_cidadao.domicilio_id', $paciente->cidadao->domicilio_id)
->where('atencao_basica_cadastro_individual.responsavel', true)
->whereNotIn('cadastro_paciente.id', [$paciente->id])
->get();
}
private static function getResidentes($id)
{
$paciente = Paciente::findOrFail($id);
return DB::table('cadastro_cidadao')
->select([
'cadastro_cidadao.id AS id',
'cadastro_cidadao.nome AS nome',
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as prontuario'),
'ocupacao.id AS ocupacao_id',
'ocupacao.nome AS ocupacao_nome',
'ocupacao.codigo AS ocupacao_codigo',
])
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->leftJoin('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'atencao_basica_cadastro_individual.ocupacao_id')
->where('cadastro_cidadao.domicilio_id', $paciente->cidadao->domicilio_id)
->whereNotIn('cadastro_paciente.id', [$paciente->id])
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->get();
}
private static function validate($params)
{
$saidaMudancaTerritorio = $params['informacao']['saida_cidadao_id'] == EnumSaidaCidadao::MUDANCA_DE_TERRITORIO;
return Validator::make($params, [
'cadastro.usuario_id' => [
$saidaMudancaTerritorio ? 'nullable' : 'required',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'cadastro.equipe_id' => [
$saidaMudancaTerritorio ? 'nullable' : 'required',
'integer',
Rule::exists(Equipe::class, 'id'),
],
'cadastro.ocupacao_id' => [
$saidaMudancaTerritorio ? 'nullable' : 'required',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'cadastro.data_usuario_responsavel' => [
'required',
'date',
],
'cidadao.ocupacao_id' => [
'nullable',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'informacao.parentesco_responsavel_id' => [
'nullable',
'integer',
Rule::exists(Parentesco::class, 'id'),
],
'informacao.ocupacao_id' => [
'nullable',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'informacao.curso_id' => [
'nullable',
'integer',
Rule::exists(Curso::class, 'id'),
],
'informacao.situacao_mercado_trabalho_id' => [
'nullable',
'integer',
Rule::exists(SituacaoMercadoTrabalho::class, 'id'),
],
'informacao.acompanhamento_infantil' => [
'nullable',
'array',
Rule::exists(AcompanhamentoInfantil::class, 'id'),
],
'informacao.comunidade_tradicional_id' => [
'nullable',
'required_if:informacao.comunidade_tradicional,true',
'integer',
Rule::exists(ComunidadeTradicional::class, 'id'),
],
'informacao.orientacao_sexual_id' => [
'nullable',
'required_if:informacao.orientacao_sexual,true',
'integer',
Rule::exists(OrientacaoSexual::class, 'id'),
],
'informacao.identidade_genero_id' => [
'nullable',
'required_if:informacao.identidade_genero,true',
'integer',
Rule::exists(IdentidadeGenero::class, 'id'),
],
'informacao.deficiencias' => [
'nullable',
'required_if:informacao.deficiente,true',
'array',
Rule::exists(DeficienciaBase::class, 'id'),
],
'informacao.obito_cid_id' => [
'nullable',
'integer',
Rule::exists(Cid::class, 'id'),
],
'informacao.obito_causa' => [
'nullable',
'string',
'max:255'
],
'informacao.obito_em' => [
'nullable',
'required_if:informacao.saida_cidadao_id,' . EnumSaidaCidadao::OBITO,
'date_format:d/m/Y H:i:s',
],
'informacao.obito_declaracao' => [
'nullable',
'string',
'min:8',
'max:13'
],
'informacao.motivo_saida_data' => [
'nullable',
'required_if:informacao.saida_cidadao_id,' . EnumSaidaCidadao::MUDANCA_DE_TERRITORIO,
],
'informacao_socioeconomica.alimentos_acabaram' => [
'nullable',
'boolean',
'required_unless:informacao_socioeconomica.comeu_alguns_alimentos,null',
],
'informacao_socioeconomica.comeu_alguns_alimentos' => [
'nullable',
'boolean',
'required_unless:informacao_socioeconomica.alimentos_acabaram,null',
],
'informacao_socioeconomica.data_atualizacao_tria' => [
'nullable',
'date',
],
'condicao.maternidade_referencia' => [
'nullable',
'string',
'min:3',
'max:100'
],
'condicao.internacao_motivo' => [
'nullable',
'string',
'min:3',
'max:100'
],
'condicao.peso_id' => [
'nullable',
'integer',
Rule::exists(Peso::class, 'id'),
],
'condicao.doenca_cardiaca_quais' => [
'nullable',
'required_if:condicao.doenca_cardiaca,true',
'array',
Rule::exists(DoencaCardiaca::class, 'id'),
],
'condicao.problemas_rins_quais' => [
'nullable',
'required_if:condicao.problemas_rins,true',
'array',
Rule::exists(ProblemasRins::class, 'id'),
],
'condicao.doenca_respiratoria_quais' => [
'nullable',
'required_if:condicao.doenca_respiratoria,true',
'array',
Rule::exists(DoencaRespiratoria::class, 'id'),
],
'condicao.plantas_medicinais_quais' => [
'nullable',
'string',
'min:3',
'max:100'
],
'condicao.outras_condicoes_primaria' => [
'nullable',
'string',
'min:3',
'max:100'
],
'condicao.outras_condicoes_secundaria' => [
'nullable',
'string',
'min:3',
'max:100'
],
'condicao.outras_condicoes_terciaria' => [
'nullable',
'string',
'min:3',
'max:100'
],
'situacao_rua.situacao_rua_id' => [
'nullable',
'integer',
Rule::exists(SituacaoRua::class, 'id'),
],
'situacao_rua.outra_instituicao_quais' => [
'nullable',
'string',
'min:3',
'max:100'
],
'situacao_rua.parentesco' => [
'nullable',
'string',
'min:3',
'max:100'
],
'situacao_rua.alimentacao_diaria_id' => [
'nullable',
'integer',
Rule::exists(AlimentacaoDiaria::class, 'id'),
],
'situacao_rua.origem_alimentacao' => [
'nullable',
'array',
Rule::exists(OrigemAlimentacao::class, 'id'),
],
'situacao_rua.higiene_pessoal_quais' => [
'nullable',
'required_if:condicao.higiene_pessoal,true',
'array',
Rule::exists(HigienePessoal::class, 'id'),
],
],
[
'informacao.orientacao_sexual_id.required_if' =>
'Selecione uma orientação sexual.',
'informacao_socioeconomica.comeu_alguns_alimentos.required_unless' =>
'O campo "Nos últimos três meses, você comeu apenas alguns alimentos que ainda tinha porque o dinheiro acabou?" é obrigatório.',
'informacao_socioeconomica.alimentos_acabaram.required_unless' =>
'O campo "Nos últimos três meses, os alimentos acabaram antes que você tivesse dinheiro para comprar mais comida" é obrigatório.',
])->validate();
}
private static function getPermissoesAtualizacaoCadastroPaciente()
{
$parametrizacao = CnsService::getParametrizacao();
if (!is_null($parametrizacao)) {
$lotacao = self::getCurrentLotacao();
return DB::table('cadastro_parametrizacao_permissao_usuario')
->select([
'municipe',
'provisorio',
'outro_municipio',
])
->where('infraestrutura_id', $lotacao->infraestrutura_id)
->where('usuario_id', $lotacao->usuario_id)
->get()
->first();
}
return null;
}
private static function houveMudancaInformacaoSocioeconomica($alimentosAtual, $comeuAtual, $alimentosNovo, $comeuNovo)
{
return $alimentosAtual !== $alimentosNovo || $comeuAtual !== $comeuNovo;
}
}