2612 lines
128 KiB
PHP
2612 lines
128 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Cadastro\SujeitoAtencao;
|
|
|
|
use App\Enums\AtencaoBasica\CadastroDomiciliar\CadastroTratamento as enumsTratamento;
|
|
use App\Enums\AtencaoBasica\CadastroDomiciliar\CadastroDestinoLixo as enumsDestinoLixo;
|
|
use App\Enums\AtencaoBasica\CadastroIndividual\SaidaCidadao as EnumSaidaCidadao;
|
|
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Classificacao;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Deficiencia;
|
|
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Subclassificacao;
|
|
use App\Enums\Geral\MedidaTempo;
|
|
use App\Exceptions\AtencaoBasica\ParametrizacaoAtendimentoCboException;
|
|
use App\Exceptions\Cadastro\SujeitoAtencao\AlteracaoCadastroPacienteNaoPermitidoException;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Cadastro\SujeitoAtencao\PacienteRequest;
|
|
use App\Models\AtencaoBasica\AtendimentoIndividual\EscalaCoelho;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\Abastecimento;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\Animal;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\DestinoLixo;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipo;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipoAcesso;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\FormaEscoamento;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\HigieneResidencial;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\Lazer;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\MaterialPredominante;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoDomicilio;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoRural;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\Tratamento;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\AcompanhamentoInfantil;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\Curso;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\DoencaCardiaca;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\DoencaRespiratoria;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\OrientacaoSexual;
|
|
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\Parametrizacao\OutrosPermissaoOcupacao;
|
|
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\Localizacao\DomicilioInformacaoResidencial;
|
|
use App\Models\Cadastro\Localizacao\Endereco;
|
|
use App\Models\Cadastro\Localizacao\Zona;
|
|
use App\Models\Cadastro\Parametrizacao\Parametrizacao;
|
|
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
|
|
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoUsuario;
|
|
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
|
use App\Models\Cadastro\SujeitoAtencao\CidadaoDomicilioHistorico;
|
|
use App\Models\Cadastro\SujeitoAtencao\DeficienciaBase;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteClassificacao;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteCondicaoSaude;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteDum;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteHistorico;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencial;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencialEmprestimo;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencialFinanciamento;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencialVeiculo;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoSocial;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteResponsavel;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteSubclassificacao;
|
|
use App\Models\Cadastro\SujeitoAtencao\ProntuarioUnidade;
|
|
use App\Models\Cns\TermoInvalido;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Models\Sigtap\Ocupacao;
|
|
use App\Rules\Cns;
|
|
use App\Services\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliarService;
|
|
use App\Services\AtencaoBasica\CadastroIndividual\CadastroIndividualService;
|
|
use App\Services\Cadastro\SujeitoAtencao\CidadaoService;
|
|
use App\Services\Cadastro\SujeitoAtencao\ObitoService;
|
|
use App\Services\Imunizacao\CadastroCampanhaService;
|
|
use App\Services\Integracao\CnsService;
|
|
use App\Services\Integracao\IntegracaoCidadaoService;
|
|
use App\Utils\DataUtil;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
class PacienteController extends Controller
|
|
{
|
|
protected $modulo = 'cadastro';
|
|
protected $funcionalidade = 'paciente';
|
|
|
|
public function datatable()
|
|
{
|
|
|
|
$parametrizacao = Parametrizacao::first();
|
|
|
|
$quantidadeDias = $parametrizacao->cadastro_paciente_desatualizado_quantidade_dias ?? 0;
|
|
$provisorioBloqueado = $parametrizacao->cadastro_paciente_provisorio_bloqueado ?? false;
|
|
$provisorioQuantidadeDias = $parametrizacao->cadastro_paciente_provisorio_quantidade_dias ?? 0;
|
|
|
|
$pacientes = DB::table('cadastro_paciente')
|
|
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
|
->leftJoin(
|
|
'cadastro_carteira_identidade',
|
|
function ($leftJoin) {
|
|
|
|
$leftJoin->on('cadastro_carteira_identidade.cidadao_id', 'cadastro_cidadao.id')
|
|
->whereNull('cadastro_carteira_identidade.deleted_at')
|
|
->whereRaw('cadastro_carteira_identidade.id = (
|
|
SELECT id
|
|
FROM cadastro_carteira_identidade
|
|
WHERE cadastro_carteira_identidade.cidadao_id = cadastro_cidadao.id
|
|
ORDER BY cadastro_carteira_identidade.id
|
|
LIMIT 1
|
|
)');
|
|
}
|
|
)
|
|
->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
|
|
->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
|
->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
|
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
|
|
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
|
|
->leftJoin('cadastro_obito', function ($join) {
|
|
|
|
$join->on('cadastro_cidadao.id', '=', 'cadastro_obito.cidadao_id')
|
|
->whereNull('cadastro_obito.deleted_at');
|
|
})
|
|
->whereNull('cadastro_paciente.deleted_at')
|
|
->whereNull('cadastro_paciente.sequencial_desconhecido_em')
|
|
->select(
|
|
'cadastro_paciente.id',
|
|
'cadastro_paciente.bloqueado',
|
|
'cadastro_paciente.classificacao_id',
|
|
'cadastro_paciente.subclassificacao_id',
|
|
'cadastro_cidadao.nome',
|
|
'cadastro_cidadao.nome_social',
|
|
'cadastro_cidadao.preferencia_nome_id',
|
|
'cadastro_cidadao.data_nascimento',
|
|
'cadastro_cidadao.nome_mae',
|
|
'cadastro_cidadao.cpf',
|
|
'cadastro_cidadao.cns',
|
|
'cadastro_cidadao.dnv',
|
|
'cadastro_carteira_identidade.numero AS rg',
|
|
'cadastro_obito.obito_em',
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as prontuario'),
|
|
'cadastro_municipio.nome as municipio_nome',
|
|
'cadastro_estado.uf as uf',
|
|
DB::raw('GREATEST(cadastro_paciente.updated_at, cadastro_cidadao.updated_at) AS updated_at'),
|
|
DB::raw('
|
|
CASE
|
|
WHEN cadastro_paciente.updated_at IS NULL AND cadastro_cidadao.updated_at IS NULL THEN 1
|
|
WHEN cadastro_paciente.updated_at IS NOT NULL AND (cadastro_cidadao.updated_at IS NULL OR cadastro_paciente.updated_at > cadastro_cidadao.updated_at) THEN
|
|
CASE
|
|
WHEN ' . ($quantidadeDias > 0
|
|
? 'DATE_ADD(cadastro_paciente.updated_at, INTERVAL ' . $quantidadeDias . ' DAY) < NOW()'
|
|
: 'false') . '
|
|
THEN DATEDIFF(NOW(), DATE_ADD(cadastro_paciente.updated_at, INTERVAL ' . $quantidadeDias . ' DAY))
|
|
ELSE 0
|
|
END
|
|
WHEN cadastro_cidadao.updated_at IS NOT NULL AND (cadastro_paciente.updated_at IS NULL OR cadastro_cidadao.updated_at > cadastro_paciente.updated_at) THEN
|
|
CASE
|
|
WHEN ' . ($quantidadeDias > 0
|
|
? 'DATE_ADD(cadastro_cidadao.updated_at, INTERVAL ' . $quantidadeDias . ' DAY) < NOW()'
|
|
: 'false') . '
|
|
THEN DATEDIFF(NOW(), DATE_ADD(cadastro_cidadao.updated_at, INTERVAL ' . $quantidadeDias . ' DAY))
|
|
ELSE 0
|
|
END
|
|
ELSE 0
|
|
END as dias_cadastro_desatualizado
|
|
'),
|
|
DB::Raw("
|
|
(
|
|
SELECT cadastro_cidadao_telefone.numero
|
|
FROM cadastro_cidadao_telefone
|
|
WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id
|
|
AND cadastro_cidadao_telefone.principal = TRUE
|
|
AND cadastro_cidadao_telefone.deleted_at IS NULL
|
|
ORDER BY cadastro_cidadao_telefone.id DESC
|
|
LIMIT 1
|
|
) AS telefone_numero
|
|
"),
|
|
DB::Raw("
|
|
(
|
|
SELECT cadastro_carteira_identidade.numero
|
|
FROM cadastro_carteira_identidade
|
|
WHERE cadastro_carteira_identidade.cidadao_id = cadastro_cidadao.id
|
|
AND cadastro_carteira_identidade.deleted_at IS NULL
|
|
ORDER BY cadastro_carteira_identidade.id DESC
|
|
LIMIT 1
|
|
) AS carteira_identidade_numero
|
|
"),
|
|
DB::raw("DATE_FORMAT(GREATEST(cadastro_paciente.updated_at, cadastro_cidadao.updated_at), '%d/%m/%Y %H:%i:%s') AS data_hora_ultima_atualizacao"),
|
|
DB::raw("
|
|
(
|
|
SELECT atencao_basica_cadastro_individual.responsavel
|
|
FROM atencao_basica_cadastro_individual
|
|
WHERE atencao_basica_cadastro_individual.paciente_id = cadastro_paciente.id
|
|
ORDER BY atencao_basica_cadastro_individual.id DESC
|
|
LIMIT 1
|
|
) AS paciente_responsavel_familiar
|
|
"),
|
|
'cadastro_cidadao.deficiencia_id',
|
|
);
|
|
|
|
if (DataUtil::isStringTrue(request()->with_prontuario_unidade)) {
|
|
|
|
$pacientes->addSelect([
|
|
'prontuario_unidade' => function ($query) {
|
|
|
|
$query->select('cadastro_prontuario_unidade.prontuario')
|
|
->from('cadastro_prontuario_unidade')
|
|
->whereColumn('cadastro_prontuario_unidade.paciente_id', 'cadastro_paciente.id')
|
|
->where(
|
|
'cadastro_prontuario_unidade.unidade_id',
|
|
self::getCurrentCentroCusto()->infraestrutura->unidade_id
|
|
)
|
|
->whereNull('deleted_at')
|
|
->groupBy('cadastro_prontuario_unidade.paciente_id');
|
|
}
|
|
]);
|
|
}
|
|
|
|
if (!DataUtil::isStringTrue(request()->with_paciente_bloqueado)) {
|
|
|
|
$pacientes->where(function ($query) {
|
|
|
|
$query
|
|
->where('cadastro_paciente.bloqueado', false)
|
|
->orWhereNull('cadastro_paciente.bloqueado');
|
|
});
|
|
}
|
|
|
|
if (!DataUtil::isStringTrue(request()->with_paciente_provisorio) && $provisorioBloqueado) {
|
|
|
|
$pacientes->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->where('cadastro_paciente.subclassificacao_id', '!=', Subclassificacao::TEMPORARIO)
|
|
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->where('cadastro_paciente.subclassificacao_id', Subclassificacao::TEMPORARIO)
|
|
->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
|
|
$query->where(function ($query) {
|
|
$query->whereNull('cadastro_paciente.validade_inicio')
|
|
->orWhereDate('cadastro_paciente.validade_inicio', '<=', Carbon::now()->format('Y-m-d'));
|
|
});
|
|
|
|
$query->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->whereNull('cadastro_paciente.validade_fim')
|
|
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
|
if (!is_null($provisorioQuantidadeDias) && $provisorioQuantidadeDias > 0) {
|
|
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'))
|
|
->orWhereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->subDays($provisorioQuantidadeDias)->format('Y-m-d'));
|
|
} else {
|
|
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'));
|
|
}
|
|
});
|
|
});
|
|
});
|
|
})
|
|
->orWhereNull('cadastro_paciente.subclassificacao_id');
|
|
});
|
|
}
|
|
|
|
return datatables()
|
|
->of($pacientes)
|
|
->filterColumn('cadastro_paciente.prontuario', function ($query, $keyword) {
|
|
|
|
$query->whereRaw('LPAD(cadastro_paciente.prontuario,7,0) like ?', ["%{$keyword}%"]);
|
|
})
|
|
->filterColumn('cadastro_prontuario_unidade.prontuario', function ($query, $keyword) {
|
|
|
|
$query->whereRaw('EXISTS (
|
|
SELECT 1
|
|
FROM cadastro_prontuario_unidade
|
|
WHERE cadastro_prontuario_unidade.paciente_id = cadastro_paciente.id
|
|
AND cadastro_prontuario_unidade.unidade_id = ?
|
|
AND cadastro_prontuario_unidade.prontuario LIKE ?
|
|
AND cadastro_prontuario_unidade.deleted_at IS NULL
|
|
)', [self::getCurrentCentroCusto()->infraestrutura->unidade_id, "%{$keyword}%"]);
|
|
})
|
|
->filterColumn('cadastro_cidadao.cpf', function ($query, $keyword) {
|
|
|
|
$query
|
|
->whereRaw("cadastro_cidadao.cpf like ?", ["%{$keyword}%"])
|
|
->orWhereRaw(
|
|
"CONCAT(
|
|
SUBSTR(cadastro_cidadao.cpf,1,3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf,4,3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf,7,3),
|
|
'-',
|
|
SUBSTR(cadastro_cidadao.cpf,10,2)
|
|
) like ?",
|
|
["%{$keyword}%"]
|
|
);
|
|
})
|
|
->filterColumn('cadastro_cidadao.dnv', function ($query, $keyword) {
|
|
|
|
$query
|
|
->whereRaw("cadastro_cidadao.dnv like ?", ["%{$keyword}%"])
|
|
->orWhereRaw(
|
|
"CONCAT(
|
|
SUBSTR(cadastro_cidadao.dnv,1,2),
|
|
'-',
|
|
SUBSTR(cadastro_cidadao.dnv,3,8),
|
|
'-',
|
|
SUBSTR(cadastro_cidadao.dnv,11,1)
|
|
) like ?",
|
|
["%{$keyword}%"]
|
|
);
|
|
})
|
|
->filterColumn('cadastro_cidadao.data_nascimento', function ($query, $keyword) {
|
|
|
|
$query
|
|
->whereRaw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') like ?", ["%{$keyword}%"])
|
|
->orWhereRaw(
|
|
"CONCAT(
|
|
SUBSTR(cadastro_cidadao.data_nascimento,9,2),
|
|
SUBSTR(cadastro_cidadao.data_nascimento,6,2),
|
|
SUBSTR(cadastro_cidadao.data_nascimento,1,4)
|
|
) like ?",
|
|
["%{$keyword}%"]
|
|
);
|
|
})
|
|
->filterColumn('telefone_numero', function ($query, $keyword) {
|
|
$query->whereRaw(
|
|
"
|
|
(
|
|
SELECT cadastro_cidadao_telefone.numero
|
|
FROM cadastro_cidadao_telefone
|
|
WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id
|
|
AND cadastro_cidadao_telefone.principal = TRUE
|
|
ORDER BY cadastro_cidadao_telefone.id DESC
|
|
LIMIT 1
|
|
) like ?
|
|
",
|
|
["%{$keyword}%"]
|
|
);
|
|
})
|
|
->filterColumn('carteira_identidade_numero', function ($query, $keyword) {
|
|
$query->whereRaw(
|
|
"
|
|
(
|
|
SELECT cadastro_carteira_identidade.numero
|
|
FROM cadastro_carteira_identidade
|
|
WHERE cadastro_carteira_identidade.cidadao_id = cadastro_cidadao.id
|
|
AND cadastro_carteira_identidade.deleted_at IS NULL
|
|
ORDER BY cadastro_carteira_identidade.id DESC
|
|
LIMIT 1
|
|
) like ?
|
|
",
|
|
["%{$keyword}%"]
|
|
);
|
|
})
|
|
->filterColumn('data_hora_ultima_atualizacao', function ($query, $keyword) {
|
|
|
|
$query->whereRaw("DATE_FORMAT(GREATEST(cadastro_paciente.updated_at, cadastro_cidadao.updated_at), '%d/%m/%Y %H:%i:%s')", ["%{$keyword}%"]);
|
|
})
|
|
->skipTotalRecords()
|
|
->toJson();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$pacientes = $this->get(Paciente::class)
|
|
->whereNull('sequencial_desconhecido_em')
|
|
->doesntHave('cidadao.obito')
|
|
->get();
|
|
|
|
return response()->json($pacientes, Response::HTTP_OK);
|
|
}
|
|
|
|
public function validCNS() {
|
|
|
|
$paciente = Paciente::findOrFail(request()->paciente_id);
|
|
$parametrizacao = Parametrizacao::first();
|
|
|
|
return [
|
|
'additionals' => [
|
|
'cns_valido' => Cns::isValid($paciente->cidadao->cns),
|
|
'avisa_cns_temporario_invalido' => $parametrizacao->exibe_alerta_paciente_cns_temporario_invalido ?? false,
|
|
'cns_provisorio' => self::avisaCnsProvisorio($paciente),
|
|
]
|
|
];
|
|
}
|
|
|
|
private static function avisaCnsProvisorio($paciente)
|
|
{
|
|
return Str::startsWith($paciente->cidadao->cns, [5, 7, 8, 9]);
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$lotacao = $this->getCurrentLotacao();
|
|
$isPermissaoEndereco = ParametrizacaoPermissaoOcupacao::where('ocupacao_id', $lotacao->ocupacao_id)->first();
|
|
$count = ParametrizacaoPermissaoOcupacao::count();
|
|
|
|
$permissaoUsuario = ParametrizacaoPermissaoUsuario::where('usuario_id', $lotacao->usuario_id)
|
|
->where('infraestrutura_id', $lotacao->infraestrutura_id)
|
|
->first();
|
|
|
|
$countUsuario = ParametrizacaoPermissaoUsuario::count();
|
|
|
|
$classificacoes = $permissaoUsuario
|
|
? PacienteClassificacao::orderBy('descricao')
|
|
->get()
|
|
->filter(function ($classificacao) use ($permissaoUsuario) {
|
|
|
|
$exibe = false;
|
|
|
|
switch ($classificacao->id) {
|
|
case Classificacao::MUNICIPE:
|
|
$exibe = $permissaoUsuario->municipe;
|
|
break;
|
|
case Classificacao::PROVISORIO:
|
|
$exibe = $permissaoUsuario->provisorio;
|
|
break;
|
|
case Classificacao::OUTRO_MUNICIPIO:
|
|
$exibe = $permissaoUsuario->outro_municipio;
|
|
break;
|
|
}
|
|
|
|
return $exibe ? [
|
|
'id' => $classificacao->id,
|
|
'descricao' => $classificacao->descricao
|
|
] : null;
|
|
})
|
|
->values()
|
|
: [];
|
|
|
|
return response()->json(
|
|
[
|
|
'form' => [
|
|
'classificacoes' => $classificacoes,
|
|
'is_permissao_cadastro' => $countUsuario === 0 ? true : false,
|
|
'is_permissao_endereco' => $isPermissaoEndereco || $count === 0 ? true : false,
|
|
'is_permissao_bloquear' => $permissaoUsuario && $permissaoUsuario->desbloquear_usuario || $countUsuario === 0 ? true : false,
|
|
],
|
|
],
|
|
Response::HTTP_OK
|
|
);
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$parametrizacao = Parametrizacao::first();
|
|
|
|
return response()->json(
|
|
[
|
|
'form' => $this->getFormData(),
|
|
'additionals' => [
|
|
'exige_cpf_paciente' => $parametrizacao->exige_cpf_paciente ?? true,
|
|
'exige_cns_paciente' => $parametrizacao->exige_cns_paciente ?? true,
|
|
],
|
|
'model' => [
|
|
'responsavel_data' => Carbon::now()->format('Y-m-d'),
|
|
],
|
|
],
|
|
Response::HTTP_OK
|
|
);
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
return $this->getAdditionalsFormModelData($id, false);
|
|
}
|
|
|
|
public function store(PacienteRequest $request)
|
|
{
|
|
|
|
$this->auth(__FUNCTION__);
|
|
|
|
return $this->saveStore($request->all());
|
|
}
|
|
|
|
public function saveStore($params, $paciente = null)
|
|
{
|
|
|
|
$paciente = $this->save($params, $paciente);
|
|
|
|
self::saveHistorico($paciente->id);
|
|
|
|
$paciente->has_cadastro_individual = $paciente->cadastroIndividual && $paciente->cadastroIndividual->id ? true : false;
|
|
$paciente->has_cadastro_domiciliar = optional($paciente->cidadao->domicilio)->cadastroDomiciliar ? true : false;
|
|
|
|
if (isset($params['origem']) && $params['origem'] == 'mobile') {
|
|
|
|
return $paciente->id;
|
|
}
|
|
|
|
return response()->json($paciente, Response::HTTP_CREATED);
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
return $this->getAdditionalsFormModelData($id);
|
|
}
|
|
|
|
private static function getSistema()
|
|
{
|
|
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
|
|
|
return [
|
|
'ramo_atividade' => $cliente->sistema->ramoAtividade->nome ?? null,
|
|
'nome_sistema' => $cliente->sistema->nome ?? null,
|
|
'versao' => $cliente->sistema->versao ?? null,
|
|
];
|
|
}
|
|
|
|
public static function getResidentes($id)
|
|
{
|
|
$residentes = DB::table('cadastro_cidadao')
|
|
->select([
|
|
'cadastro_cidadao.id AS id',
|
|
'cadastro_cidadao.nome AS nome',
|
|
'cadastro_cidadao.nome_social AS nome_social',
|
|
'cadastro_cidadao.cns',
|
|
'cadastro_paciente.id as paciente_id',
|
|
'cadastro_paciente_informacao_social.responsavel as is_responsavel',
|
|
'atencao_basica_cadastro_parentesco_responsavel.descricao AS parentesco',
|
|
DB::raw('
|
|
(
|
|
CASE WHEN cadastro_cidadao.nome_mae IS NULL THEN
|
|
"Não informado"
|
|
ELSE
|
|
cadastro_cidadao.nome_mae
|
|
END
|
|
) AS nome_mae'
|
|
),
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'),
|
|
DB::raw('IF (cadastro_cidadao.data_nascimento IS NULL, "Não informada", DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")) AS data_nascimento'),
|
|
DB::raw('COALESCE(atencao_basica_cadastro_parentesco_responsavel.descricao, "-") AS parentesco'),
|
|
])
|
|
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
|
->leftJoin(DB::raw('
|
|
(
|
|
SELECT abi1.*
|
|
FROM atencao_basica_cadastro_individual abi1
|
|
WHERE abi1.id = (
|
|
SELECT MAX(abi2.id)
|
|
FROM atencao_basica_cadastro_individual abi2
|
|
WHERE abi2.paciente_id = abi1.paciente_id
|
|
)
|
|
) AS atencao_basica_cadastro_individual
|
|
'), 'atencao_basica_cadastro_individual.paciente_id', '=', 'cadastro_paciente.id')
|
|
->leftJoin('atencao_basica_cadastro_parentesco_responsavel', 'atencao_basica_cadastro_parentesco_responsavel.id', 'atencao_basica_cadastro_individual.parentesco_responsavel_id')
|
|
->leftJoin(DB::raw('
|
|
(
|
|
SELECT pis1.*
|
|
FROM cadastro_paciente_informacao_social pis1
|
|
WHERE pis1.id = (
|
|
SELECT MAX(pis2.id)
|
|
FROM cadastro_paciente_informacao_social pis2
|
|
WHERE pis2.paciente_id = pis1.paciente_id
|
|
)
|
|
) AS cadastro_paciente_informacao_social
|
|
'), 'cadastro_paciente_informacao_social.paciente_id', '=', 'cadastro_paciente.id')
|
|
->where('cadastro_cidadao.domicilio_id', $id)
|
|
->whereNull('cadastro_paciente.deleted_at')
|
|
->whereNotExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('cadastro_obito')
|
|
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
|
->whereNull('cadastro_obito.deleted_at');
|
|
})
|
|
->get();
|
|
|
|
$nomeResponsavelFamiliar = optional($residentes->firstWhere('is_responsavel', true))->nome ?? '-';
|
|
|
|
return $residentes->map(function ($residente) use ($nomeResponsavelFamiliar) {
|
|
|
|
$residente->responsavel_familiar = $residente->is_responsavel ? '-' : $nomeResponsavelFamiliar;
|
|
|
|
return $residente;
|
|
});
|
|
}
|
|
|
|
public static function getMicroareas(){
|
|
|
|
return DB::table('atencao_basica_parametrizacao_area')
|
|
->select([
|
|
'atencao_basica_parametrizacao_microarea.id AS id',
|
|
'atencao_basica_parametrizacao_microarea.descricao AS descricao_micro',
|
|
DB::raw("CONCAT(
|
|
'INE: ',
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_area.numero_ine
|
|
THEN LPAD(atencao_basica_parametrizacao_area.numero_ine, 10, '0')
|
|
ELSE ''
|
|
END,
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_area.descricao
|
|
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
|
|
ELSE ''
|
|
END,
|
|
' - Microárea: ', atencao_basica_parametrizacao_microarea.descricao
|
|
) AS descricao")
|
|
])
|
|
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.area_id', 'atencao_basica_parametrizacao_area.id')
|
|
->groupBy('descricao')
|
|
->orderBy('descricao_micro')
|
|
->get();
|
|
}
|
|
|
|
private function checkPermissaoCadastro($classificacaoId) {
|
|
|
|
$lotacao = $this->getCurrentLotacao();
|
|
|
|
$permissaoUsuario = ParametrizacaoPermissaoUsuario::where([
|
|
'usuario_id' => $lotacao->usuario_id,
|
|
'infraestrutura_id' => $lotacao->infraestrutura_id
|
|
])->first();
|
|
|
|
if (ParametrizacaoPermissaoUsuario::count() === 0) {
|
|
return true;
|
|
}
|
|
|
|
if (!$permissaoUsuario) {
|
|
return false;
|
|
}
|
|
|
|
if (!$classificacaoId && ($permissaoUsuario->municipe || $permissaoUsuario->provisorio || $permissaoUsuario->outro_municipio)) {
|
|
return true;
|
|
}
|
|
|
|
switch ($classificacaoId) {
|
|
case Classificacao::MUNICIPE:
|
|
return $permissaoUsuario->municipe;
|
|
case Classificacao::PROVISORIO:
|
|
return $permissaoUsuario->provisorio;
|
|
case Classificacao::OUTRO_MUNICIPIO:
|
|
return $permissaoUsuario->outro_municipio;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private function getFormData($unidadeReferenciaId = null, $isEdit = null)
|
|
{
|
|
$unidadesReferencia = Unidade::where('unidade_referencia', true);
|
|
|
|
if ($unidadeReferenciaId) {
|
|
|
|
$unidadesReferencia->orWhere('id', $unidadeReferenciaId);
|
|
}
|
|
|
|
$lotacao = $this->getCurrentLotacao();
|
|
$isPermissaoEndereco = ParametrizacaoPermissaoOcupacao::where('ocupacao_id', $lotacao->ocupacao_id)->first();
|
|
$count = ParametrizacaoPermissaoOcupacao::count();
|
|
|
|
$permissaoUsuario = ParametrizacaoPermissaoUsuario::where('usuario_id', $lotacao->usuario_id)
|
|
->where('infraestrutura_id', $lotacao->infraestrutura_id)
|
|
->first();
|
|
|
|
$countUsuario = ParametrizacaoPermissaoUsuario::count();
|
|
|
|
$classificacoes = self::getClassificacoes($permissaoUsuario, $countUsuario);
|
|
|
|
return [
|
|
'is_permissao_endereco' => $isEdit
|
|
? (($isPermissaoEndereco && $isEdit) || $count === 0 ? true : false)
|
|
: true,
|
|
'is_permissao_bloquear' => $permissaoUsuario && $permissaoUsuario->desbloquear_usuario || $countUsuario === 0 ? true : false,
|
|
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
|
|
'data_atual' => Carbon::now()->format('d/m/Y'),
|
|
'classificacoes' => $classificacoes,
|
|
'subclassificacoes' => PacienteSubclassificacao::orderBy('descricao')->get()
|
|
->map(fn ($subclassificacao) => [
|
|
'id' => $subclassificacao->id,
|
|
'descricao' => $subclassificacao->descricao
|
|
]),
|
|
'unidades_referencia' => $unidadesReferencia->orderBy('nome_fantasia')->get()
|
|
->map(fn ($unidades) => [
|
|
'id' => $unidades->id,
|
|
'nome_fantasia' => $unidades->cnes
|
|
? $unidades->cnes . ' - ' . $unidades->nome_fantasia
|
|
: $unidades->nome_fantasia
|
|
]),
|
|
'bloqueado' => [
|
|
[ 'value' => true, 'text' => 'SIM'],
|
|
[ 'value' => false, 'text' => 'NÃO']
|
|
],
|
|
'acompanhamento_infantil' => AcompanhamentoInfantil::orderBy('descricao')->get(),
|
|
'curso' => Curso::orderBy('descricao')->get(),
|
|
'mercado_trabalho' => SituacaoMercadoTrabalho::orderBy('descricao')->get(),
|
|
'saida_cidadao' => SaidaCidadao::orderBy('descricao')->get(),
|
|
'sistema' => self::getSistema(),
|
|
'deficiencia' => DeficienciaBase::orderBy('descricao')->get()->each(function ($item) {
|
|
$item->descricao = $item->id == Deficiencia::TEA ? $item->descricao : ucfirst(strtolower($item->descricao));
|
|
}),
|
|
'orientacao_sexual' => OrientacaoSexual::orderBy('descricao')->get(),
|
|
'imovel_tipo' => ImovelTipo::orderBy('descricao')->get(),
|
|
'situacao_domicilio' => SituacaoDomicilio::orderBy('descricao')->get(),
|
|
'domicilio_tipo' => DomicilioTipo::orderBy('descricao')->get(),
|
|
'situacao_rural' => SituacaoRural::orderBy('descricao')->get(),
|
|
'zonas' => Zona::orderBy('descricao')->get()->map(fn ($zona) => [
|
|
'id' => $zona->id,
|
|
'descricao' => $zona->descricao
|
|
]),
|
|
'domicilio_tipo_acesso' => DomicilioTipoAcesso::orderBy('descricao')->get(),
|
|
'material_predominante' => MaterialPredominante::orderBy('descricao')->get(),
|
|
'abastecimento' => Abastecimento::orderBy('descricao')->get(),
|
|
'tratamento' => Tratamento::whereNotIn('id', [enumsTratamento::FILTRADA])->orderBy('descricao')->get(),
|
|
'destino_lixo' => DestinoLixo::whereNotin('id', [enumsDestinoLixo::QUEIMADO_ENTERRADO])->orderBy('descricao')->get(),
|
|
'forma_escoamento' => FormaEscoamento::orderBy('descricao')->get(),
|
|
'higiene_residencial' => HigieneResidencial::orderBy('descricao')->get(),
|
|
'animais' => Animal::orderBy('descricao')->get(),
|
|
'escalaCoelho' => EscalaCoelho::orderBy('id')->get(),
|
|
'lazer' => Lazer::orderBy('descricao')->get(),
|
|
'microareas' => self::getMicroareas(),
|
|
'parentesco' => Parentesco::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(),
|
|
];
|
|
}
|
|
|
|
private static function getResponsaveis($paciente)
|
|
{
|
|
|
|
return DB::table('cadastro_cidadao')
|
|
->select([
|
|
'cadastro_cidadao.id AS id',
|
|
'cadastro_cidadao.nome AS nome',
|
|
])
|
|
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
|
->join('cadastro_paciente_informacao_social', 'cadastro_paciente_informacao_social.paciente_id', 'cadastro_paciente.id')
|
|
->where('cadastro_cidadao.domicilio_id', $paciente->cidadao->domicilio_id)
|
|
->where('cadastro_paciente_informacao_social.responsavel', true)
|
|
->whereNotIn('cadastro_paciente.id', [$paciente->id])
|
|
->get();
|
|
}
|
|
|
|
private static function getClassificacoes($permissaoUsuario, $countUsuario) {
|
|
|
|
if ($countUsuario === 0) {
|
|
|
|
return PacienteClassificacao::orderBy('descricao')->get();
|
|
} else {
|
|
|
|
return $permissaoUsuario
|
|
? PacienteClassificacao::orderBy('descricao')
|
|
->get()
|
|
->filter(function ($classificacao) use ($permissaoUsuario) {
|
|
|
|
$exibe = false;
|
|
|
|
switch ($classificacao->id) {
|
|
case Classificacao::MUNICIPE:
|
|
$exibe = $permissaoUsuario->municipe;
|
|
break;
|
|
case Classificacao::PROVISORIO:
|
|
$exibe = $permissaoUsuario->provisorio;
|
|
break;
|
|
case Classificacao::OUTRO_MUNICIPIO:
|
|
$exibe = $permissaoUsuario->outro_municipio;
|
|
break;
|
|
}
|
|
|
|
return $exibe ? [
|
|
'id' => $classificacao->id,
|
|
'descricao' => $classificacao->descricao
|
|
] : null;
|
|
})
|
|
->values()
|
|
: [];
|
|
}
|
|
}
|
|
|
|
public function update(PacienteRequest $request, int $id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$paciente = Paciente::findOrFail($id);
|
|
$cidadao = $paciente->cidadao ?? null;
|
|
|
|
if (!self::checkPermissaoCadastro($paciente->classificacao_id)) {
|
|
throw new AlteracaoCadastroPacienteNaoPermitidoException();
|
|
}
|
|
|
|
$paciente = $this->save($request->all(), $paciente);
|
|
|
|
if (($paciente && $paciente->wasChanged('updated_at')) || ($cidadao->updated_at != $paciente->cidadao->updated_at)
|
|
|| ($paciente->responsavel && $paciente->responsavel->updated_at != $paciente->updated_at)) {
|
|
self::saveHistorico($paciente->id);
|
|
}
|
|
|
|
$paciente->has_cadastro_individual = $paciente->cadastroIndividual && $paciente->cadastroIndividual->id ? true : false;
|
|
$paciente->has_cadastro_domiciliar = optional(optional($paciente->cidadao)->domicilio)->cadastroDomiciliar ?? false;
|
|
|
|
|
|
return response()->json($paciente, Response::HTTP_OK);
|
|
}
|
|
|
|
private static function saveHistorico($pacienteId)
|
|
{
|
|
|
|
$paciente = Paciente::findOrFail($pacienteId);
|
|
|
|
$equipeId = $paciente->responsavel && $paciente->responsavel->equipe
|
|
? $paciente->responsavel->equipe->id
|
|
: null;
|
|
|
|
$historico = new PacienteHistorico;
|
|
$historico->paciente_id = $pacienteId;
|
|
$historico->equipe_id = $equipeId;
|
|
$historico->save();
|
|
}
|
|
|
|
private function save($params, $paciente = null)
|
|
{
|
|
$pacienteSaved = null;
|
|
|
|
DB::transaction(function () use (&$pacienteSaved, $params, $paciente) {
|
|
|
|
$domicilioIdAntigo = optional(optional($paciente)->cidadao)->domicilio_id;
|
|
|
|
$params['cidadao']['origem'] = isset($params['origem']) && $params['origem'] == 'mobile' ? 'mobile' : 'paciente';
|
|
$cidadao = CidadaoService::save($params['cidadao']);
|
|
|
|
self::registrarMudancaDomicilio($cidadao, $domicilioIdAntigo);
|
|
|
|
$data = $this->getPreparedData($params);
|
|
|
|
$data['cidadao_id'] = $cidadao->id;
|
|
|
|
if (!is_null($paciente) && $paciente->classificacao_id !== $data['classificacao_id']) {
|
|
|
|
$paciente->historicoClassificacoes()->create([
|
|
'classificacao_id' => $data['classificacao_id']
|
|
]);
|
|
}
|
|
|
|
$pacienteSaved = Paciente::updateOrCreate(
|
|
['id' => $paciente->id ?? null],
|
|
$data
|
|
);
|
|
|
|
if (!isset($params['origem']) || (isset($params['origem']) && $params['origem'] !== 'mobile')) {
|
|
|
|
self::saveProntuarioUnidade(
|
|
$pacienteSaved->id,
|
|
isset($params['centro_custo_id']) && (int) $params['centro_custo_id'] > 0 ? CentroCusto::findOrFail($params['centro_custo_id'])->infraestrutura->unidade_id : $this->getCurrentCentroCusto()->infraestrutura->unidade_id,
|
|
$data['prontuario_unidade']
|
|
);
|
|
}
|
|
|
|
if (isset($params['origem']) && ($params['origem'] === 'cadastroPaciente' || $params['origem'] === 'mobile')) {
|
|
|
|
$eraResponsavelFamiliar = optional($pacienteSaved->informacaoSocial)->responsavel ?? false;
|
|
|
|
self::saveResponsavel($pacienteSaved, $data);
|
|
self::saveDum($pacienteSaved, $data);
|
|
self::saveCondicaoSaude($pacienteSaved, $data);
|
|
self::saveInformacaoResidencial($pacienteSaved, $data);
|
|
self::saveInformacaoSocial($pacienteSaved, $data);
|
|
self::saveDomicilioInformacaoResidencial($pacienteSaved, $data);
|
|
self::saveResponsavelFamiliar($pacienteSaved, $data, $eraResponsavelFamiliar);
|
|
self::saveAtencaoBasica($pacienteSaved, $data);
|
|
self::sincronizarUnidadeReferenciaResponsavelNucleo($pacienteSaved, $data);
|
|
}
|
|
|
|
IntegracaoCidadaoService::integrar($cidadao->id);
|
|
|
|
if (isset($params['altera_responsavel']) && $params['altera_responsavel'] === true) {
|
|
|
|
if (!empty($params['domicilio_id_old'])) {
|
|
|
|
$residentes = Cidadao::where('domicilio_id', $params['domicilio_id_old'])->get();
|
|
|
|
foreach ($residentes as $residente) {
|
|
|
|
$residente->update(['domicilio_id' => $cidadao->domicilio_id]);
|
|
|
|
if($residente->paciente->cadastroIndividual) {
|
|
|
|
$residente->paciente->cadastroIndividual->update([
|
|
'usuario_id' => $data['responsavel_usuario_id'],
|
|
'responsavel_equipe_id' => $data['responsavel_equipe_id'],
|
|
'responsavel_ocupacao_id' => $data['responsavel_ocupacao_id'],
|
|
]);
|
|
}
|
|
|
|
IntegracaoCidadaoService::integrar($residente->id);
|
|
self::saveHistorico($residente->paciente->id);
|
|
self::saveResponsavel($paciente, $data);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
return $pacienteSaved;
|
|
}
|
|
|
|
public static function saveProntuarioUnidade($pacienteId, $unidadeId, $prontuario)
|
|
{
|
|
if (is_null($prontuario)) {
|
|
|
|
$prontuarioUnidade = ProntuarioUnidade::where('paciente_id', $pacienteId)
|
|
->where('unidade_id', $unidadeId)
|
|
->first();
|
|
|
|
if (!is_null($prontuarioUnidade)) {
|
|
|
|
$prontuarioUnidade->delete();
|
|
}
|
|
} else {
|
|
|
|
ProntuarioUnidade::updateOrCreate(
|
|
[
|
|
'paciente_id' => $pacienteId,
|
|
'unidade_id' => $unidadeId,
|
|
],
|
|
['prontuario' => mb_strtoupper((string) $prontuario)]
|
|
);
|
|
}
|
|
}
|
|
|
|
private function saveAtencaoBasica($paciente, $data) {
|
|
|
|
self::saveAtencaoBasicaCadastroDomiciliar($paciente, $data);
|
|
self::saveAtencaoBasicaCadastroIndividual($paciente, $data);
|
|
}
|
|
|
|
private function saveResponsavelFamiliar($paciente, $data, $eraResponsavelFamiliar = false) {
|
|
|
|
if ($data['responsavel_cidadao_id']) {
|
|
|
|
$cidadaoResponsavel = Cidadao::where('id', $data['responsavel_cidadao_id'])->first();
|
|
|
|
if ($cidadaoResponsavel) {
|
|
|
|
PacienteInformacaoSocial::updateOrCreate(
|
|
[
|
|
'paciente_id' => $cidadaoResponsavel->paciente->id,
|
|
],
|
|
[
|
|
'responsavel' => true,
|
|
'responsavel_cidadao_id' => null,
|
|
]
|
|
);
|
|
|
|
PacienteInformacaoSocial::where('responsavel_cidadao_id', $paciente->cidadao->id)
|
|
->update(['responsavel_cidadao_id' => $cidadaoResponsavel->id]);
|
|
|
|
CadastroIndividual::where('paciente_id', $cidadaoResponsavel->id)
|
|
->update(['responsavel' => true, 'responsavel_cidadao_id' => null ]);
|
|
|
|
CadastroIndividual::where('responsavel_cidadao_id', $paciente->cidadao->id)
|
|
->update(['responsavel_cidadao_id' => $cidadaoResponsavel->id]);
|
|
}
|
|
}
|
|
|
|
if ($data['responsavel'] === true && !$eraResponsavelFamiliar) {
|
|
|
|
self::atualizarResponsavelFamiliarNucleo($paciente);
|
|
}
|
|
}
|
|
|
|
private static function atualizarResponsavelFamiliarNucleo($paciente) {
|
|
|
|
$domicilioId = optional($paciente->cidadao)->domicilio_id;
|
|
|
|
if (!$domicilioId) {
|
|
return;
|
|
}
|
|
|
|
$cidadaoId = $paciente->cidadao->id;
|
|
|
|
$outrosCidadaoIds = Cidadao::where('domicilio_id', $domicilioId)
|
|
->where('id', '!=', $cidadaoId)
|
|
->pluck('id');
|
|
|
|
$outrosPacienteIds = Paciente::whereIn('cidadao_id', $outrosCidadaoIds)->pluck('id');
|
|
|
|
if ($outrosPacienteIds->isEmpty()) {
|
|
|
|
return;
|
|
}
|
|
|
|
PacienteInformacaoSocial::whereIn('paciente_id', $outrosPacienteIds)
|
|
->update([
|
|
'responsavel' => false,
|
|
'responsavel_cidadao_id' => $cidadaoId,
|
|
'parentesco_responsavel_id' => null,
|
|
]);
|
|
|
|
CadastroIndividual::whereIn('paciente_id', $outrosPacienteIds)
|
|
->update([
|
|
'responsavel' => false,
|
|
'responsavel_cidadao_id' => $cidadaoId,
|
|
'parentesco_responsavel_id' => null,
|
|
]);
|
|
}
|
|
|
|
private static function sincronizarUnidadeReferenciaResponsavelNucleo($paciente, $data) {
|
|
|
|
$domicilioId = $paciente->cidadao->domicilio_id;
|
|
|
|
if (!$domicilioId) {
|
|
|
|
return;
|
|
}
|
|
|
|
$outrosCidadaoIds = Cidadao::where('domicilio_id', $domicilioId)
|
|
->where('id', '!=', $paciente->cidadao->id)
|
|
->pluck('id');
|
|
|
|
$outrosPacientes = Paciente::whereIn('cidadao_id', $outrosCidadaoIds)->get();
|
|
|
|
if ($outrosPacientes->isEmpty()) {
|
|
|
|
return;
|
|
}
|
|
|
|
foreach ($outrosPacientes as $outroPaciente) {
|
|
|
|
$outroPaciente->update(['unidade_id' => $data['unidade_id']]);
|
|
|
|
PacienteResponsavel::updateOrCreate(
|
|
['paciente_id' => $outroPaciente->id],
|
|
[
|
|
'responsavel_usuario_id' => $data['responsavel_usuario_id'],
|
|
'responsavel_equipe_id' => $data['responsavel_equipe_id'],
|
|
'responsavel_ocupacao_id' => $data['responsavel_ocupacao_id'],
|
|
'responsavel_data' => Carbon::now(),
|
|
]
|
|
);
|
|
|
|
CadastroIndividual::where('paciente_id', $outroPaciente->id)
|
|
->update([
|
|
'usuario_id' => $data['responsavel_usuario_id'],
|
|
'equipe_id' => $data['responsavel_equipe_id'],
|
|
'usuario_ocupacao_id' => $data['responsavel_ocupacao_id'],
|
|
'data_usuario_responsavel' => $data['responsavel_data'],
|
|
]);
|
|
}
|
|
}
|
|
|
|
private function saveDum($paciente, $data) {
|
|
|
|
PacienteDum::updateOrCreate(
|
|
[
|
|
'paciente_id' => $paciente->id,
|
|
],
|
|
[
|
|
'data_ultima_menstruacao' => $data['data_ultima_menstruacao'],
|
|
'idade_gestacional_semanas' => $data['idade_gestacional_semanas'],
|
|
'idade_gestacional_dias' => $data['idade_gestacional_dias'],
|
|
'data_possivel_parto' => $data['data_possivel_parto'],
|
|
'gravidez_planejada' => $data['gravidez_planejada'],
|
|
'gestacao_previa' => $data['gestacao_previa'],
|
|
'parto' => $data['parto'],
|
|
]
|
|
);
|
|
}
|
|
|
|
private function saveResponsavel($paciente, $data) {
|
|
|
|
PacienteResponsavel::updateOrCreate(
|
|
[
|
|
'paciente_id' => $paciente->id,
|
|
],
|
|
[
|
|
'responsavel_usuario_id' => $data['responsavel_usuario_id'],
|
|
'responsavel_equipe_id' => $data['responsavel_equipe_id'],
|
|
'responsavel_ocupacao_id' => $data['responsavel_ocupacao_id'],
|
|
'responsavel_data' => Carbon::now(),
|
|
]
|
|
);
|
|
}
|
|
|
|
private function saveCondicaoSaude($paciente, $data) {
|
|
|
|
PacienteCondicaoSaude::updateOrCreate(
|
|
[
|
|
'paciente_id' => $paciente->id,
|
|
],
|
|
[
|
|
'peso_id' => $data['peso_id'],
|
|
'internacao' => $data['internacao'],
|
|
'internacao_motivo' => $data['internacao_motivo'],
|
|
'internacao_data' => $data['internacao_data'],
|
|
'doenca_cardiaca' => $data['doenca_cardiaca'],
|
|
'problemas_rins' => $data['problemas_rins'],
|
|
'doenca_respiratoria' => $data['doenca_respiratoria'],
|
|
'tratamento_saude_mental' => $data['tratamento_saude_mental'],
|
|
'tratamento_saude_mental_internacao_data' => $data['tratamento_saude_mental_internacao_data'],
|
|
'tratamento_saude_mental_alta_data' => $data['tratamento_saude_mental_alta_data'],
|
|
'acamado' => $data['acamado'],
|
|
'domiciliado' => $data['domiciliado'],
|
|
'plantas_medicinais' => $data['plantas_medicinais'],
|
|
'plantas_medicinais_quais' => $data['plantas_medicinais_quais'],
|
|
'praticas_integrativas' => $data['praticas_integrativas'],
|
|
'outras_condicoes_primaria' => $data['outras_condicoes_primaria'],
|
|
'outras_condicoes_secundaria' => $data['outras_condicoes_secundaria'],
|
|
'outras_condicoes_terciaria' => $data['outras_condicoes_terciaria'],
|
|
]
|
|
);
|
|
|
|
if ($paciente->condicaoSaude) {
|
|
|
|
$paciente->condicaoSaude->doencaCardiaca()->sync($data['doenca_cardiaca_quais']);
|
|
$paciente->condicaoSaude->doencaRespiratoria()->sync($data['doenca_respiratoria_quais']);
|
|
$paciente->condicaoSaude->problemasRins()->sync($data['problemas_rins_quais']);
|
|
}
|
|
}
|
|
|
|
private function saveInformacaoSocial($paciente, $data) {
|
|
|
|
$dadosInformacaoSocialAnterior = optional($paciente)->informacaoSocial;
|
|
$alimentosAtual = optional($dadosInformacaoSocialAnterior)->alimentos_acabaram;
|
|
$comeuAtual = optional($dadosInformacaoSocialAnterior)->comeu_alguns_alimentos;
|
|
$alimentosNovo = $data['alimentos_acabaram'] ?? null;
|
|
$comeuNovo = $data['comeu_alguns_alimentos'] ?? null;
|
|
$dataAtualizacaoTriaAnterior = optional($dadosInformacaoSocialAnterior)->data_atualizacao_tria;
|
|
|
|
$atualizaDataTrita = self::houveMudancaInformacaoSocioeconomica($alimentosAtual, $comeuAtual, $alimentosNovo, $comeuNovo);
|
|
|
|
|
|
PacienteInformacaoSocial::updateOrCreate(
|
|
[
|
|
'paciente_id' => $paciente->id,
|
|
],
|
|
[
|
|
'responsavel' => $data['responsavel'],
|
|
'responsavel_cidadao_id' => $data['responsavel'] ? null : $data['responsavel_cidadao_id'],
|
|
'parentesco_responsavel_id' => $data['responsavel'] ? null : $data['parentesco_responsavel_id'],
|
|
'curso_id' => $data['curso_id'],
|
|
'orientacao_sexual' => $data['orientacao_sexual'],
|
|
'orientacao_sexual_id' => $data['orientacao_sexual_id'],
|
|
'deficiente' => $data['deficiente'],
|
|
'frequenta_escola_creche' => $data['frequenta_escola_creche'],
|
|
'situacao_mercado_trabalho_id' => $data['situacao_mercado_trabalho_id'],
|
|
'frequenta_cuidador_tradicional' => $data['frequenta_cuidador_tradicional'],
|
|
'participa_grupo_comunitario' => $data['participa_grupo_comunitario'],
|
|
'plano_saude' => $data['plano_saude'],
|
|
'comunidade_tradicional' => $data['comunidade_tradicional'],
|
|
'comunidade_tradicional_id' => $data['comunidade_tradicional_id'],
|
|
'saida_cidadao_id' => $data['saida_cidadao_id'],
|
|
'motivo_saida_data' => $data['motivo_saida_data'],
|
|
'recusa_cadastro' => $data['informacao_social_recusa_cadastro'],
|
|
'alimentos_acabaram' => $data['alimentos_acabaram'],
|
|
'comeu_alguns_alimentos' => $data['comeu_alguns_alimentos'],
|
|
'data_atualizacao_tria' => $atualizaDataTrita ? Carbon::now() : $dataAtualizacaoTriaAnterior,
|
|
]
|
|
);
|
|
|
|
if ($paciente->informacaoSocial) {
|
|
|
|
$paciente->informacaoSocial->acompanhamentoInfantil()->sync($data['acompanhamento_infantil']);
|
|
$paciente->informacaoSocial->deficiencia()->sync($data['deficiencias']);
|
|
|
|
if (!$paciente->informacaoSocial->deficiencia->pluck('id')->contains(Deficiencia::TEA)
|
|
&& $paciente->cidadao->fatoresRisco->pluck('id')->contains(FatorRisco::TEA)) {
|
|
|
|
$paciente->cidadao->fatoresRisco()->detach(FatorRisco::TEA);
|
|
}
|
|
}
|
|
|
|
if ($data['saida_cidadao_id'] == EnumSaidaCidadao::OBITO) {
|
|
|
|
$currentLotacao = self::getCurrentLotacao();
|
|
|
|
$obitoService = new ObitoService($paciente->cidadao);
|
|
|
|
if (is_null($obitoService->get())) {
|
|
|
|
$obitoService->save(
|
|
Carbon::createFromFormat('d/m/Y H:i:s', $data['obito_em']),
|
|
$data['obito_declaracao'] ?? '',
|
|
$data['obito_causa'] ?? '',
|
|
$data['obito_cid_id'] ?? null,
|
|
$currentLotacao->usuario->id
|
|
);
|
|
}
|
|
}
|
|
|
|
if ($data['saida_cidadao_id'] == EnumSaidaCidadao::MUDANCA_DE_TERRITORIO) {
|
|
|
|
Cidadao::findOrFail($paciente->cidadao->id)->update(['domicilio_id' => null]);
|
|
Paciente::findOrFail($paciente->id)->update(['classificacao_id' => Classificacao::PROVISORIO]);
|
|
}
|
|
}
|
|
|
|
private function saveInformacaoResidencial($paciente, $data) {
|
|
|
|
PacienteInformacaoResidencial::updateOrCreate(
|
|
[
|
|
'paciente_id' => $paciente->id,
|
|
],
|
|
[
|
|
'recusa_cadastro' => $data['informacao_residencial_recusa_cadastro'],
|
|
'renda_mensal' => $data['renda_mensal'],
|
|
'ocupacao_id' => $data['ocupacao_id'],
|
|
'renda_total_familiar' => $data['renda_total_familiar'],
|
|
'possui_veiculo_proprio' => $data['possui_veiculo_proprio'],
|
|
'possui_financiamento' => $data['possui_financiamento'],
|
|
'possui_emprestimo' => $data['possui_emprestimo'],
|
|
]
|
|
);
|
|
|
|
if ($paciente->informacaoResidencial) {
|
|
|
|
if ($data['veiculos'] != null) {
|
|
|
|
$paciente->informacaoResidencial->veiculo()->delete();
|
|
|
|
$veiculosData = array_map(function($veiculo) use ($paciente) {
|
|
return [
|
|
'paciente_informacao_residencial_id' => $paciente->informacaoResidencial->id,
|
|
'modelo' => $veiculo['modelo'],
|
|
'ano' => $veiculo['ano'],
|
|
];
|
|
}, $data['veiculos']);
|
|
|
|
PacienteInformacaoResidencialVeiculo::insert($veiculosData);
|
|
}
|
|
|
|
if ($data['financiamentos'] != null) {
|
|
|
|
$paciente->informacaoResidencial->financiamento()->delete();
|
|
|
|
$financiamentosData = array_map(function($financiamento) use ($paciente) {
|
|
|
|
$financiamento['valor_parcela'] = str_replace('.', '', $financiamento['valor_parcela']);
|
|
$financiamento['valor_parcela'] = str_replace(',', '.', $financiamento['valor_parcela']);
|
|
|
|
return [
|
|
'paciente_informacao_residencial_id' => $paciente->informacaoResidencial->id,
|
|
'tipo' => $financiamento['tipo'],
|
|
'valor_parcela' => $financiamento['valor_parcela'],
|
|
'quantidade_parcela' => $financiamento['quantidade_parcela'],
|
|
];
|
|
}, $data['financiamentos']);
|
|
|
|
PacienteInformacaoResidencialFinanciamento::insert($financiamentosData);
|
|
}
|
|
|
|
if ($data['emprestimos'] != null) {
|
|
|
|
$paciente->informacaoResidencial->emprestimo()->delete();
|
|
|
|
$emprestimosData = array_map(function($emprestimo) use ($paciente) {
|
|
|
|
$emprestimo['valor_parcela'] = str_replace('.', '', $emprestimo['valor_parcela']);
|
|
$emprestimo['valor_parcela'] = str_replace(',', '.', $emprestimo['valor_parcela']);
|
|
|
|
return [
|
|
'paciente_informacao_residencial_id' => $paciente->informacaoResidencial->id,
|
|
'tipo' => $emprestimo['tipo'],
|
|
'valor_parcela' => $emprestimo['valor_parcela'],
|
|
'quantidade_parcela' => $emprestimo['quantidade_parcela'],
|
|
];
|
|
}, $data['emprestimos']);
|
|
|
|
PacienteInformacaoResidencialEmprestimo::insert($emprestimosData);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function saveDomicilioInformacaoResidencial($paciente, $data) {
|
|
if($paciente->cidadao->domicilio){
|
|
DomicilioInformacaoResidencial::updateOrCreate(
|
|
[
|
|
'domicilio_id' => $paciente->cidadao->domicilio->id,
|
|
],
|
|
[
|
|
'microarea_id' => $data['microarea_id'],
|
|
'fora_area' => $data['fora_area'],
|
|
'instituicao_nome' => $data['instituicao_nome'],
|
|
'instituicao_outros_profissionais' => $data['instituicao_outros_profissionais'],
|
|
'instituicao_nome_responsavel_tecnico' => $data['instituicao_nome_responsavel_tecnico'],
|
|
'instituicao_cns_responsavel_tecnico' => $data['instituicao_cns_responsavel_tecnico'],
|
|
'instituicao_cargo_responsavel_tecnico' => $data['instituicao_cargo_responsavel_tecnico'],
|
|
'instituicao_telefone_responsavel_tecnico' => $data['instituicao_telefone_responsavel_tecnico'],
|
|
'imovel_tipo_id' => $data['imovel_tipo_id'],
|
|
'situacao_domicilio_id' => $data['situacao_domicilio_id'],
|
|
'domicilio_tipo_id' => $data['domicilio_tipo_id'],
|
|
'quantidade_comodos' => $data['quantidade_comodos'],
|
|
'situacao_rural_id' => $data['situacao_rural_id'],
|
|
'domicilio_zona_id' => $data['domicilio_zona_id'],
|
|
'domicilio_tipo_acesso_id' => $data['domicilio_tipo_acesso_id'],
|
|
'material_predominante_id' => $data['material_predominante_id'],
|
|
'abastecimento_id' => $data['abastecimento_id'],
|
|
'tratamento_id' => $data['tratamento_id'],
|
|
'destino_lixo_id' => $data['destino_lixo_id'],
|
|
'forma_escoamento_id' => $data['forma_escoamento_id'],
|
|
'possui_animais' => $data['possui_animais'],
|
|
'quantidade_animais' => $data['quantidade_animais'],
|
|
'energia_eletrica' => $data['energia_eletrica'],
|
|
'higiene_residencial_id' => $data['higiene_residencial_id'],
|
|
'bolsa_familia' => $data['bolsa_familia'],
|
|
'vale_gas' => $data['vale_gas'],
|
|
'bolsa_escola' => $data['bolsa_escola'],
|
|
'bpc' => $data['bpc'],
|
|
'escala_coelho_id' => $data['escala_coelho_id'],
|
|
]
|
|
);
|
|
|
|
if ($paciente->cidadao->domicilio->informacaoResidencial) {
|
|
|
|
$paciente->cidadao->domicilio->informacaoResidencial->lazer()->sync($data['lazer']);
|
|
$paciente->cidadao->domicilio->informacaoResidencial->animal()->sync($data['animal']);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function saveAtencaoBasicaCadastroDomiciliar($paciente, $data) {
|
|
|
|
if (is_null($data['microarea_id'] && !$data['fora_area']) || is_null($data['imovel_tipo_id'])) {
|
|
return false;
|
|
}
|
|
|
|
if ($data['responsavel_ocupacao_id']) {
|
|
|
|
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::CADASTRO_DOMICILIAR)->get();
|
|
$codigos = $permissao->pluck('ocupacao');
|
|
$ocupacao = Ocupacao::find($data['responsavel_ocupacao_id']);
|
|
$hasPermissao = $codigos->contains($ocupacao->codigo);
|
|
} else {
|
|
|
|
$hasPermissao = false;
|
|
}
|
|
|
|
if (!$hasPermissao && !($data['saida_cidadao_id'] != null)) {
|
|
throw new ParametrizacaoAtendimentoCboException;
|
|
}
|
|
|
|
$domicilioId = $paciente->cidadao->domicilio_id;
|
|
$cadastroDomiciliar = CadastroDomiciliar::where('domicilio_id', $domicilioId)->first();
|
|
|
|
$dados = [
|
|
'id' => null,
|
|
'endereco' => [
|
|
'microarea_id' => $data['microarea_id'],
|
|
'fora_area' => $data['fora_area'],
|
|
],
|
|
'cadastro' => [
|
|
'usuario_id' => $hasPermissao ? $data['responsavel_usuario_id'] : ($cadastroDomiciliar['usuario_id'] ?? null),
|
|
'equipe_id' => $hasPermissao ? $data['responsavel_equipe_id'] : ($cadastroDomiciliar['equipe_id'] ?? null),
|
|
'ocupacao_id' => $hasPermissao ? $data['responsavel_ocupacao_id'] : ($cadastroDomiciliar['usuario_ocupacao_id'] ?? null),
|
|
'data_usuario_responsavel' => $hasPermissao ? $data['responsavel_data'] : ($cadastroDomiciliar['data_usuario_responsavel'] ?? null),
|
|
],
|
|
'instituicao' => [
|
|
'nome' => $data['instituicao_nome'],
|
|
'outros_profissionais' => $data['instituicao_outros_profissionais'],
|
|
'nome_responsavel_tecnico' => $data['instituicao_nome_responsavel_tecnico'],
|
|
'cns_responsavel_tecnico' => $data['instituicao_cns_responsavel_tecnico'],
|
|
'cargo_responsavel_tecnico' => $data['instituicao_cargo_responsavel_tecnico'],
|
|
'telefone_responsavel_tecnico' => $data['instituicao_telefone_responsavel_tecnico'],
|
|
],
|
|
'residencia' => [
|
|
'imovel_tipo_id' => $data['imovel_tipo_id'],
|
|
'situacao_domicilio_id' => $data['situacao_domicilio_id'],
|
|
'domicilio_tipo_id' => $data['domicilio_tipo_id'],
|
|
'quantidade_comodos' => $data['quantidade_comodos'],
|
|
'situacao_rural_id' => $data['situacao_rural_id'],
|
|
'domicilio_zona_id' => $data['domicilio_zona_id'],
|
|
'domicilio_tipo_acesso_id' => $data['domicilio_tipo_acesso_id'],
|
|
'material_predominante_id' => $data['material_predominante_id'],
|
|
'abastecimento_id' => $data['abastecimento_id'],
|
|
'tratamento_id' => $data['tratamento_id'],
|
|
'destino_lixo_id' => $data['destino_lixo_id'],
|
|
'forma_escoamento_id' => $data['forma_escoamento_id'],
|
|
'possui_animais' => $data['possui_animais'],
|
|
'quantidade_animais' => $data['quantidade_animais'],
|
|
'energia_eletrica' => $data['energia_eletrica'],
|
|
'animal' => $data['animal'],
|
|
],
|
|
'informacao' => [
|
|
'higiene_residencial_id' => $data['higiene_residencial_id'],
|
|
'bolsa_familia' => $data['bolsa_familia'],
|
|
'vale_gas' => $data['vale_gas'],
|
|
'bolsa_escola' => $data['bolsa_escola'],
|
|
'bpc' => $data['bpc'],
|
|
'escala_coelho_id' => $data['escala_coelho_id'],
|
|
'lazer' => $data['lazer'],
|
|
],
|
|
'renda_mensal' => $data['renda_mensal'],
|
|
'ocupacao_id' => $data['ocupacao_id'],
|
|
'renda_total_familiar' => $data['renda_total_familiar'],
|
|
'recusa_cadastro' => $data['informacao_residencial_recusa_cadastro'],
|
|
'domicilio_id' => $domicilioId,
|
|
'origem' => 'cadastroPaciente',
|
|
];
|
|
|
|
if ($hasPermissao && $domicilioId || $cadastroDomiciliar) {
|
|
CadastroDomiciliarService::saveStore($dados);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private function saveAtencaoBasicaCadastroIndividual($paciente, $data) {
|
|
|
|
|
|
if ($data['responsavel_ocupacao_id']) {
|
|
|
|
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::CADASTRO_INDIVIDUAL)->get();
|
|
$codigos = $permissao->pluck('ocupacao');
|
|
$ocupacao = Ocupacao::find($data['responsavel_ocupacao_id']);
|
|
$hasPermissao = $codigos->contains($ocupacao->codigo);
|
|
} else {
|
|
|
|
$hasPermissao = false;
|
|
}
|
|
|
|
$cadastroIndividual = CadastroIndividual::where('paciente_id', $paciente->id)->first();
|
|
$fatoresRisco = $paciente->cidadao->fatoresRisco->pluck('id');
|
|
|
|
$dataUsuarioResponsavel = $hasPermissao ? $data['responsavel_data'] : ($cadastroIndividual->data_usuario_responsavel ?? null);
|
|
|
|
if (isset($data['saida_cidadao_id']) && ($data['saida_cidadao_id'] == EnumSaidaCidadao::MUDANCA_DE_TERRITORIO || $data['saida_cidadao_id'] == EnumSaidaCidadao::OBITO) && $cadastroIndividual && $hasPermissao)
|
|
{
|
|
|
|
$cadastroIndividual->update([
|
|
'usuario_id' => null,
|
|
'usuario_ocupacao_id' => null,
|
|
'equipe_id' => null,
|
|
]);
|
|
|
|
$dataUsuarioResponsavel = Carbon::now()->format('Y-m-d');
|
|
}
|
|
|
|
$dados = [
|
|
'id' => null,
|
|
'paciente_id' => $paciente->id,
|
|
'endereco' => [
|
|
'microarea_id' => $data['microarea_id'],
|
|
'fora_area' => $data['fora_area'],
|
|
],
|
|
'cadastro' => [
|
|
'usuario_id' => $hasPermissao ? $data['responsavel_usuario_id'] : ($cadastroIndividual->usuario_id ?? null),
|
|
'equipe_id' => $hasPermissao ? $data['responsavel_equipe_id'] : ($cadastroIndividual->equipe_id ?? null),
|
|
'ocupacao_id' => $hasPermissao ? $data['responsavel_ocupacao_id'] : ($cadastroIndividual->usuario_ocupacao_id ?? null),
|
|
'data_usuario_responsavel' => $dataUsuarioResponsavel,
|
|
'supervisor_id' => $cadastroIndividual ? $cadastroIndividual->supervisor_id : null,
|
|
],
|
|
'condicao' => [
|
|
'peso_id' => $data['peso_id'],
|
|
'internacao' => $data['internacao'],
|
|
'internacao_motivo' => $data['internacao_motivo'],
|
|
'doenca_cardiaca' => $data['doenca_cardiaca'],
|
|
'problemas_rins' => $data['problemas_rins'],
|
|
'doenca_respiratoria' => $data['doenca_respiratoria'],
|
|
'tratamento_saude_mental' => $data['tratamento_saude_mental'],
|
|
'acamado' => $data['acamado'],
|
|
'domiciliado' => $data['domiciliado'],
|
|
'plantas_medicinais' => $data['plantas_medicinais'],
|
|
'plantas_medicinais_quais' => $data['plantas_medicinais_quais'],
|
|
'doenca_cardiaca_quais' => $data['doenca_cardiaca_quais'],
|
|
'problemas_rins_quais' => $data['problemas_rins_quais'],
|
|
'doenca_respiratoria_quais' => $data['doenca_respiratoria_quais'],
|
|
'outras_condicoes_primaria' => $data['outras_condicoes_primaria'],
|
|
'outras_condicoes_secundaria' => $data['outras_condicoes_secundaria'],
|
|
'outras_condicoes_terciaria' => $data['outras_condicoes_terciaria'],
|
|
'avc_derrame' => $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,
|
|
'outras_drogas' => $fatoresRisco->contains(FatorRisco::OUTRAS_DROGAS) ? true : false,
|
|
'transtorno_espectro_autista' => $fatoresRisco->contains(FatorRisco::TEA) ? true : false,
|
|
'tuberculose' => $fatoresRisco->contains(FatorRisco::TUBERCULOSE) ? true : false,
|
|
'usa_alcool' => $fatoresRisco->contains(FatorRisco::USA_ALCOOL) ? true : false,
|
|
'maternidade_referencia' => $data['maternidade_referencia'],
|
|
'praticas_integrativas' => $data['praticas_integrativas'],
|
|
],
|
|
'informacao' => [
|
|
'responsavel' => $data['responsavel'],
|
|
'responsavel_cidadao_id' => $data['responsavel_cidadao_id'],
|
|
'parentesco_responsavel_id' => $data['parentesco_responsavel_id'],
|
|
'curso_id' => $data['curso_id'],
|
|
'frequenta_escola_creche' => $data['frequenta_escola_creche'],
|
|
'situacao_mercado_trabalho_id' => $data['situacao_mercado_trabalho_id'],
|
|
'frequenta_cuidador_tradicional' => $data['frequenta_cuidador_tradicional'],
|
|
'participa_grupo_comunitario' => $data['participa_grupo_comunitario'],
|
|
'plano_saude' => $data['plano_saude'],
|
|
'comunidade_tradicional' => $data['comunidade_tradicional'],
|
|
'comunidade_tradicional_id' => $data['comunidade_tradicional_id'],
|
|
'saida_cidadao_id' => $data['saida_cidadao_id'],
|
|
'motivo_saida_data' => $data['motivo_saida_data'],
|
|
'ocupacao_id' => $data['ocupacao_id'],
|
|
'acompanhamento_infantil' => $data['acompanhamento_infantil'],
|
|
'deficiente' => $data['deficiente'],
|
|
'deficiencias' => $data['deficiencias'],
|
|
'identidade_genero' => $paciente->cidadao->identidade_genero_id ? true : false,
|
|
'identidade_genero_id' => $paciente->cidadao->identidade_genero_id,
|
|
'orientacao_sexual' => $data['orientacao_sexual'],
|
|
'orientacao_sexual_id' => $data['orientacao_sexual_id'],
|
|
'obito' => $data['obito'],
|
|
'obito_em' => $data['obito_em'],
|
|
'obito_declaracao' => $data['obito_declaracao'],
|
|
'obito_causa' => $data['obito_causa'],
|
|
'obito_cid_id' => $data['obito_cid_id'],
|
|
],
|
|
'informacao_socioeconomica' => [
|
|
'alimentos_acabaram' => $data['alimentos_acabaram'],
|
|
'comeu_alguns_alimentos' => $data['comeu_alguns_alimentos'],
|
|
'data_atualizacao_tria' => $data['data_atualizacao_tria'] ?? null,
|
|
],
|
|
'cidadao' => [
|
|
'ativo' => true,
|
|
'responsavel' => $data['responsavel'],
|
|
'ocupacao_id' => $data['ocupacao_id'],
|
|
'responsavel_cidadao_id' => $data['responsavel_cidadao_id'],
|
|
'parentesco_responsavel_id' => $data['parentesco_responsavel_id'],
|
|
'renda_mensal' => $data['renda_mensal'],
|
|
],
|
|
'situacao_rua' => [
|
|
'alimentacao_diaria_id' => $data['alimentacao_diaria_id'] ? $data['alimentacao_diaria_id'] : null,
|
|
'higiene_pessoal' => $data['higiene_pessoal'] ? $data['higiene_pessoal'] : null,
|
|
'outra_instituicao' => $data['outra_instituicao'] ? $data['outra_instituicao'] : null,
|
|
'outra_instituicao_quais' => $data['outra_instituicao_quais'] ? $data['outra_instituicao_quais'] : null,
|
|
'parentesco' => $data['parentesco'] ? $data['parentesco'] : null,
|
|
'recebe_beneficio' => $data['recebe_beneficio'] ? $data['recebe_beneficio'] : null,
|
|
'referencia_familiar' => $data['referencia_familiar'] ? $data['referencia_familiar'] : null,
|
|
'situacao_rua_id' => $data['situacao_rua_id'] ? $data['situacao_rua_id'] : null,
|
|
'visita_familiar' => $data['visita_familiar'] ? $data['visita_familiar'] : null,
|
|
'origem_alimentacao' => $data['origem_alimentacao'] ? $data['origem_alimentacao'] : null,
|
|
'higiene_pessoal_quais' => $data['higiene_pessoal_quais'] ? $data['higiene_pessoal_quais'] : null,
|
|
],
|
|
'recusa_cadastro' => $data['informacao_social_recusa_cadastro'],
|
|
'origem' => 'cadastroPaciente',
|
|
];
|
|
|
|
if (isset($data['created_lotacao_id'])) {
|
|
|
|
$dados['created_lotacao_id'] = $data['created_lotacao_id'];
|
|
}
|
|
|
|
if (isset($data['created_centro_custo_id'])) {
|
|
|
|
$dados['created_centro_custo_id'] = $data['created_centro_custo_id'];
|
|
}
|
|
|
|
if (isset($data['updated_lotacao_id'])) {
|
|
|
|
$dados['updated_lotacao_id'] = $data['updated_lotacao_id'];
|
|
}
|
|
|
|
if (isset($data['updated_centro_custo_id'])) {
|
|
|
|
$dados['updated_centro_custo_id'] = $data['updated_centro_custo_id'];
|
|
}
|
|
|
|
if ($hasPermissao || $cadastroIndividual) {
|
|
|
|
CadastroIndividualService::saveStore($dados);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static function saveResidente() {
|
|
|
|
$cidadao = Cidadao::where('id', request()->cidadao_id)->first();
|
|
|
|
$cidadao->update(['domicilio_id' => request()->domicilio_id]);
|
|
$cidadao->paciente->update([
|
|
'unidade_id' => request()->unidade_id,
|
|
'classificacao_id' => request()->classificacao_id,
|
|
'responsavel_usuario_id' => request()->responsavel_usuario_id,
|
|
'responsavel_ocupacao_id' => request()->responsavel_ocupacao_id,
|
|
'responsavel_equipe_id' => request()->responsavel_equipe_id,
|
|
'responsavel_data' => Carbon::now()->format('Y-m-d'),
|
|
]);
|
|
|
|
self::registrarEntradaDomicilio($cidadao->id, request()->domicilio_id);
|
|
|
|
IntegracaoCidadaoService::integrar($cidadao->id);
|
|
|
|
return PacienteController::getResidentes(request()->domicilio_id);
|
|
}
|
|
|
|
private static function registrarMudancaDomicilio($cidadao, $domicilioIdAntigo) {
|
|
|
|
$domicilioIdNovo = $cidadao->domicilio_id;
|
|
|
|
if ($domicilioIdAntigo == $domicilioIdNovo) {
|
|
|
|
return;
|
|
}
|
|
|
|
if ($domicilioIdAntigo) {
|
|
|
|
self::registrarSaidaDomicilio($cidadao->id, $domicilioIdAntigo);
|
|
}
|
|
|
|
if ($domicilioIdNovo) {
|
|
|
|
self::registrarEntradaDomicilio($cidadao->id, $domicilioIdNovo);
|
|
}
|
|
}
|
|
|
|
private static function registrarEntradaDomicilio($cidadaoId, $domicilioId) {
|
|
|
|
CidadaoDomicilioHistorico::updateOrCreate(
|
|
[
|
|
'cidadao_id' => $cidadaoId,
|
|
'domicilio_id' => $domicilioId,
|
|
'data_saida' => null,
|
|
],
|
|
[
|
|
'data_entrada' => Carbon::now()->format('Y-m-d'),
|
|
]
|
|
);
|
|
}
|
|
|
|
private static function registrarSaidaDomicilio($cidadaoId, $domicilioId) {
|
|
|
|
if (!$domicilioId) {
|
|
|
|
return;
|
|
}
|
|
|
|
CidadaoDomicilioHistorico::where('cidadao_id', $cidadaoId)
|
|
->where('domicilio_id', $domicilioId)
|
|
->whereNull('data_saida')
|
|
->update(['data_saida' => Carbon::now()->format('Y-m-d')]);
|
|
}
|
|
|
|
public static function getResidentesAnteriores($domicilioId) {
|
|
|
|
return DB::table('cadastro_cidadao_domicilio_historico')
|
|
->select([
|
|
'cadastro_cidadao_domicilio_historico.id',
|
|
'cadastro_cidadao.nome AS nome',
|
|
'cadastro_sexo.descricao AS sexo',
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'),
|
|
'cadastro_cidadao_domicilio_historico.data_entrada',
|
|
'cadastro_cidadao_domicilio_historico.data_saida',
|
|
])
|
|
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_cidadao_domicilio_historico.cidadao_id')
|
|
->leftJoin('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
|
->leftJoin('cadastro_sexo', 'cadastro_sexo.id', 'cadastro_cidadao.sexo_id')
|
|
->where('cadastro_cidadao_domicilio_historico.domicilio_id', $domicilioId)
|
|
->whereNotNull('cadastro_cidadao_domicilio_historico.data_saida')
|
|
->orderByDesc('cadastro_cidadao_domicilio_historico.data_saida')
|
|
->get()
|
|
->map(function ($residente) {
|
|
|
|
$residente->tempo_moradia = self::getTempoMoradia($residente->data_entrada, $residente->data_saida);
|
|
$residente->data_entrada = (new Carbon($residente->data_entrada))->format('d/m/Y');
|
|
$residente->data_saida = (new Carbon($residente->data_saida))->format('d/m/Y');
|
|
|
|
return $residente;
|
|
});
|
|
}
|
|
|
|
private static function getTempoMoradia($dataEntrada, $dataSaida) {
|
|
|
|
$inicio = Carbon::parse($dataEntrada);
|
|
$fim = Carbon::parse($dataSaida);
|
|
|
|
$anos = $inicio->diffInYears($fim);
|
|
$inicio->addYears($anos);
|
|
|
|
$meses = $inicio->diffInMonths($fim);
|
|
$inicio->addMonths($meses);
|
|
|
|
$dias = $inicio->diffInDays($fim);
|
|
|
|
$partes = [];
|
|
|
|
if ($anos > 0) {
|
|
$partes[] = $anos . ($anos == 1 ? ' ano' : ' anos');
|
|
}
|
|
|
|
if ($meses > 0) {
|
|
$partes[] = $meses . ($meses == 1 ? ' mês' : ' meses');
|
|
}
|
|
|
|
if (empty($partes) || $dias > 0) {
|
|
$partes[] = $dias . ($dias == 1 ? ' dia' : ' dias');
|
|
}
|
|
|
|
return implode(' e ', $partes);
|
|
}
|
|
|
|
public static function removeResidente($cidadaoId) {
|
|
|
|
$cidadao = Cidadao::where('id', $cidadaoId)->first();
|
|
|
|
$domicilioId = $cidadao->domicilio_id;
|
|
|
|
$cidadao->update(['domicilio_id' => null]);
|
|
$cidadao->paciente->update([
|
|
'classificacao_id' => Classificacao::PROVISORIO,
|
|
]);
|
|
|
|
if ($cidadao->paciente->responsavel) {
|
|
|
|
$cidadao->paciente->responsavel->delete();
|
|
}
|
|
|
|
if($cidadao->paciente->cadastroIndividual) {
|
|
|
|
$cidadao->paciente->cadastroIndividual->update([
|
|
'usuario_id' => null,
|
|
'equipe_id' => null,
|
|
'usuario_ocupacao_id' => null,
|
|
'data_usuario_responsavel' => null,
|
|
'responsavel' => false,
|
|
]);
|
|
}
|
|
|
|
self::registrarSaidaDomicilio($cidadao->id, $domicilioId);
|
|
|
|
IntegracaoCidadaoService::integrar($cidadao->id);
|
|
self::saveHistorico($cidadao->paciente->id);
|
|
|
|
if (isset(request()->remove_familia) && request()->remove_familia == true) {
|
|
|
|
$residentes = Cidadao::where('domicilio_id', $domicilioId)->get();
|
|
|
|
foreach ($residentes as $residente) {
|
|
|
|
$residente->update(['domicilio_id' => null]);
|
|
$residente->paciente->update([
|
|
'classificacao_id' => Classificacao::PROVISORIO,
|
|
]);
|
|
|
|
if ($residente->paciente->responsavel) {
|
|
|
|
$residente->paciente->responsavel->delete();
|
|
}
|
|
|
|
if($residente->paciente->cadastroIndividual) {
|
|
|
|
$residente->paciente->cadastroIndividual->update([
|
|
'usuario_id' => null,
|
|
'equipe_id' => null,
|
|
'usuario_ocupacao_id' => null,
|
|
'data_usuario_responsavel' => null,
|
|
'responsavel' => false,
|
|
]);
|
|
}
|
|
|
|
self::registrarSaidaDomicilio($residente->id, $domicilioId);
|
|
|
|
IntegracaoCidadaoService::integrar($residente->id);
|
|
self::saveHistorico($residente->paciente->id);
|
|
}
|
|
}
|
|
|
|
return [
|
|
'residentes' => $domicilioId ? self::getResidentes($domicilioId) : [],
|
|
'residentes_anteriores' => $domicilioId ? self::getResidentesAnteriores($domicilioId) : [],
|
|
];
|
|
}
|
|
|
|
public static function getDomicilio() {
|
|
|
|
$informacaoResidencial = null;
|
|
$domicilio = null;
|
|
|
|
$endereco = Endereco::where('logradouro_id', request()->logradouro_id)
|
|
->where('numero', request()->numero)
|
|
->where('complemento', request()->complemento)
|
|
->first();
|
|
|
|
if ($endereco) {
|
|
|
|
$domicilio = $endereco->domicilios->first();
|
|
|
|
if ($domicilio) {
|
|
|
|
$informacaoResidencial = $domicilio->informacaoResidencial;
|
|
|
|
if ($informacaoResidencial && $informacaoResidencial->lazer) {
|
|
$informacaoResidencial->new_lazer = $informacaoResidencial->lazer->pluck('id')->toArray();
|
|
}
|
|
|
|
if ($informacaoResidencial && $informacaoResidencial->animal) {
|
|
$informacaoResidencial->new_animal = $informacaoResidencial->animal->pluck('id')->toArray();
|
|
}
|
|
}
|
|
}
|
|
|
|
return [
|
|
'informacaoResidencial' => $informacaoResidencial,
|
|
'residentes' => $domicilio ? self::getResidentes($domicilio->id) : [],
|
|
];
|
|
}
|
|
|
|
private function getPreparedData($params)
|
|
{
|
|
|
|
$data = [
|
|
'email' => $params['email'] ?? null,
|
|
'classificacao_id' => $params['classificacao_id'],
|
|
'subclassificacao_id' => $params['subclassificacao_id'] ?? null,
|
|
'validade_inicio' => $params['validade_inicio'] ?? null,
|
|
'validade_fim' => $params['validade_fim'] ?? null,
|
|
'prontuario_unidade' => $params['prontuario_unidade'] ?? null,
|
|
'unidade_id' => $params['unidade_id'],
|
|
'bloqueado' => $params['bloqueado'] ?? false,
|
|
'sem_documentos_em' => $params['sem_documentos_em'] ?? null,
|
|
'sequencial_desconhecido' => null,
|
|
'sequencial_desconhecido_em' => null,
|
|
'responsavel_usuario_id' => isset($params['responsavel_usuario']) ? $params['responsavel_usuario']['id'] : null,
|
|
'responsavel_equipe_id' => $params['responsavel_equipe_id'] ?? null,
|
|
'responsavel_ocupacao_id' => $params['responsavel_ocupacao_id'] ?? null,
|
|
'responsavel_data' => $params['responsavel_data'] ?? null,
|
|
'peso_id' => $params['peso_id'] ?? null,
|
|
'internacao' => $params['internacao'] ?? null,
|
|
'internacao_motivo' => $params['internacao_motivo'] ?? null,
|
|
'internacao_data' => $params['internacao_data'] ?? null,
|
|
'doenca_cardiaca' => $params['doenca_cardiaca'] ?? null,
|
|
'doenca_cardiaca_quais' => $params['doenca_cardiaca_quais'] ?? null,
|
|
'problemas_rins' => $params['problemas_rins'] ?? null,
|
|
'problemas_rins_quais' => $params['problemas_rins_quais'] ?? null,
|
|
'doenca_respiratoria' => $params['doenca_respiratoria'] ?? null,
|
|
'doenca_respiratoria_quais' => $params['doenca_respiratoria_quais'] ?? null,
|
|
'tratamento_saude_mental' => $params['tratamento_saude_mental'] ?? null,
|
|
'tratamento_saude_mental_internacao_data' => $params['tratamento_saude_mental_internacao_data'] ?? null,
|
|
'tratamento_saude_mental_alta_data' => $params['tratamento_saude_mental_alta_data'] ?? null,
|
|
'acamado' => $params['acamado'] ?? null,
|
|
'domiciliado' => $params['domiciliado'] ?? null,
|
|
'deficiente' => $params['deficiente'] ?? null,
|
|
'plantas_medicinais' => $params['plantas_medicinais'] ?? null,
|
|
'plantas_medicinais_quais' => $params['plantas_medicinais_quais'] ?? null,
|
|
'praticas_integrativas' => $params['praticas_integrativas'] ?? null,
|
|
'outras_condicoes_primaria' => $params['outras_condicoes_primaria'] ?? null,
|
|
'outras_condicoes_secundaria' => $params['outras_condicoes_secundaria'] ?? null,
|
|
'outras_condicoes_terciaria' => $params['outras_condicoes_terciaria'] ?? null,
|
|
'data_ultima_menstruacao' => $params['data_ultima_menstruacao'] ?? null,
|
|
'idade_gestacional_semanas' => $params['idade_gestacional_semanas'] ?? null,
|
|
'idade_gestacional_dias' => $params['idade_gestacional_dias'] ?? null,
|
|
'data_possivel_parto' => $params['data_possivel_parto'] ?? null,
|
|
'gravidez_planejada' => $params['gravidez_planejada'] ?? null,
|
|
'gestacao_previa' => $params['gestacao_previa'] ?? null,
|
|
'parto' => $params['parto'] ?? null,
|
|
'responsavel' => $params['responsavel'] ?? null,
|
|
'responsavel_cidadao_id' => $params['responsavel_cidadao_id'] ?? null,
|
|
'parentesco_responsavel_id' => $params['parentesco_responsavel_id'] ?? null,
|
|
'curso_id' => $params['curso_id'] ?? null,
|
|
'orientacao_sexual' => $params['orientacao_sexual'] ?? null,
|
|
'orientacao_sexual_id' => $params['orientacao_sexual_id'] ?? null,
|
|
'frequenta_escola_creche' => $params['frequenta_escola_creche'] ?? null,
|
|
'situacao_mercado_trabalho_id' => $params['situacao_mercado_trabalho_id'] ?? null,
|
|
'frequenta_cuidador_tradicional' => $params['frequenta_cuidador_tradicional'] ?? null,
|
|
'participa_grupo_comunitario' => $params['participa_grupo_comunitario'] ?? null,
|
|
'plano_saude' => $params['plano_saude'] ?? null,
|
|
'comunidade_tradicional' => $params['comunidade_tradicional'] ?? null,
|
|
'comunidade_tradicional_id' => $params['comunidade_tradicional_id'] ?? null,
|
|
'saida_cidadao_id' => $params['saida_cidadao_id'] ?? null,
|
|
'motivo_saida_data' => $params['motivo_saida_data'] ?? null,
|
|
'alimentos_acabaram' => isset($params['alimentos_acabaram']) ? $params['alimentos_acabaram'] : null,
|
|
'comeu_alguns_alimentos' => isset($params['comeu_alguns_alimentos']) ? $params['comeu_alguns_alimentos'] : null,
|
|
'data_atualizacao_tria' => $params['data_atualizacao_tria'] ?? null,
|
|
'informacao_social_recusa_cadastro' => $params['informacao_social_recusa_cadastro'] ?? null,
|
|
'acompanhamento_infantil' => $params['acompanhamento_infantil'] ?? null,
|
|
'deficiencias' => $params['deficiencias'] ?? null,
|
|
'obito' => $params['obito'] ?? null,
|
|
'obito_em' => $params['obito_em'] ?? null,
|
|
'obito_declaracao' => $params['obito_declaracao'] ?? null,
|
|
'obito_causa' => $params['obito_causa'] ?? null,
|
|
'obito_cid_id' => $params['obito_cid_id'] ?? null,
|
|
'microarea_id' => $params['microarea_id'] ?? null,
|
|
'fora_area' => $params['fora_area'] ?? null,
|
|
'instituicao_nome' => $params['instituicao_nome'] ?? null,
|
|
'instituicao_outros_profissionais' => $params['instituicao_outros_profissionais'] ?? null,
|
|
'instituicao_nome_responsavel_tecnico' => $params['instituicao_nome_responsavel_tecnico'] ?? null,
|
|
'instituicao_cns_responsavel_tecnico' => $params['instituicao_cns_responsavel_tecnico'] ?? null,
|
|
'instituicao_cargo_responsavel_tecnico' => $params['instituicao_cargo_responsavel_tecnico'] ?? null,
|
|
'instituicao_telefone_responsavel_tecnico' => $params['instituicao_telefone_responsavel_tecnico'] ?? null,
|
|
'imovel_tipo_id' => $params['imovel_tipo_id'] ?? null,
|
|
'situacao_domicilio_id' => $params['situacao_domicilio_id'] ?? null,
|
|
'domicilio_tipo_id' => $params['domicilio_tipo_id'] ?? null,
|
|
'quantidade_comodos' => $params['quantidade_comodos'] ?? null,
|
|
'situacao_rural_id' => $params['situacao_rural_id'] ?? null,
|
|
'domicilio_zona_id' => $params['domicilio_zona_id'] ?? null,
|
|
'domicilio_tipo_acesso_id' => $params['domicilio_tipo_acesso_id'] ?? null,
|
|
'material_predominante_id' => $params['material_predominante_id'] ?? null,
|
|
'abastecimento_id' => $params['abastecimento_id'] ?? null,
|
|
'tratamento_id' => $params['tratamento_id'] ?? null,
|
|
'destino_lixo_id' => $params['destino_lixo_id'] ?? null,
|
|
'forma_escoamento_id' => $params['forma_escoamento_id'] ?? null,
|
|
'possui_animais' => $params['possui_animais'] ?? null,
|
|
'quantidade_animais' => $params['quantidade_animais'] ?? null,
|
|
'energia_eletrica' => $params['energia_eletrica'] ?? null,
|
|
'higiene_residencial_id' => $params['higiene_residencial_id'] ?? null,
|
|
'bolsa_familia' => $params['bolsa_familia'] ?? null,
|
|
'vale_gas' => $params['vale_gas'] ?? null,
|
|
'bolsa_escola' => $params['bolsa_escola'] ?? null,
|
|
'bpc' => $params['bpc'] ?? null,
|
|
'informacao_residencial_recusa_cadastro' => $params['informacao_residencial_recusa_cadastro'] ?? null,
|
|
'escala_coelho_id' => $params['escala_coelho_id'] ?? null,
|
|
'renda_mensal' => $params['renda_mensal'] ?? null,
|
|
'ocupacao_id' => $params['ocupacao_id'] ?? null,
|
|
'renda_total_familiar' => $params['renda_total_familiar'] ?? null,
|
|
'possui_veiculo_proprio' => $params['possui_veiculo_proprio'] ?? false,
|
|
'possui_financiamento' => $params['possui_financiamento'] ?? false,
|
|
'possui_emprestimo' => $params['possui_emprestimo'] ?? false,
|
|
'animal' => $params['animal'] ?? null,
|
|
'lazer' => $params['lazer'] ?? null,
|
|
'veiculos' => $params['veiculos'] ?? null,
|
|
'financiamentos' => $params['financiamentos'] ?? null,
|
|
'emprestimos' => $params['emprestimos'] ?? null,
|
|
'protocolo_cross' => $params['cidadao']['documentos']['outro']['protocolo_cross'] ?? null,
|
|
'alimentacao_diaria_id' => $params['alimentacao_diaria_id'] ?? null,
|
|
'higiene_pessoal' => $params['higiene_pessoal'] ?? null,
|
|
'outra_instituicao' => $params['outra_instituicao'] ?? null,
|
|
'outra_instituicao_quais' => $params['outra_instituicao_quais'] ?? null,
|
|
'parentesco' => $params['parentesco'] ?? null,
|
|
'recebe_beneficio' => $params['recebe_beneficio'] ?? null,
|
|
'referencia_familiar' => $params['referencia_familiar'] ?? null,
|
|
'situacao_rua_id' => $params['situacao_rua_id'] ?? null,
|
|
'visita_familiar' => $params['visita_familiar'] ?? null,
|
|
'origem_alimentacao' => $params['origem_alimentacao'] ?? null,
|
|
'higiene_pessoal_quais' => $params['higiene_pessoal_quais'] ?? null,
|
|
'maternidade_referencia' => $params['maternidade_referencia'] ?? null,
|
|
'gestante' => $params['gestante'] ?? null,
|
|
];
|
|
|
|
if (is_string($data['prontuario_unidade'])) {
|
|
|
|
$data['prontuario_unidade'] = mb_strtoupper($data['prontuario_unidade']);
|
|
}
|
|
|
|
if (isset($params['origem']) && $params['origem'] == 'mobile') {
|
|
|
|
$data['created_lotacao_id'] = $params['cidadao']['created_lotacao_id'];
|
|
$data['created_centro_custo_id'] = $params['cidadao']['created_centro_custo_id'];
|
|
$data['updated_lotacao_id'] = $params['cidadao']['updated_lotacao_id'];
|
|
$data['updated_centro_custo_id'] = $params['cidadao']['updated_centro_custo_id'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function destroy(int $id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
Paciente::findOrFail($id)->delete();
|
|
|
|
return response()->json(null, Response::HTTP_NO_CONTENT);
|
|
}
|
|
|
|
public function bloquear($id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$paciente = Paciente::findOrFail($id);
|
|
|
|
$paciente->update(['bloqueado' => true]);
|
|
|
|
return response()->json($paciente->fresh(), Response::HTTP_OK);
|
|
}
|
|
|
|
public function desbloquear($id)
|
|
{
|
|
$this->auth(__FUNCTION__);
|
|
|
|
$paciente = Paciente::findOrFail($id);
|
|
|
|
$paciente->update(['bloqueado' => false]);
|
|
|
|
return response()->json($paciente->fresh(), Response::HTTP_OK);
|
|
}
|
|
|
|
public function autocomplete()
|
|
{
|
|
|
|
$parametrizacao = Parametrizacao::first();
|
|
$provisorioBloqueado = $parametrizacao->cadastro_paciente_provisorio_bloqueado ?? false;
|
|
$provisorioQuantidadeDias = $parametrizacao->cadastro_paciente_provisorio_quantidade_dias ?? 0;
|
|
|
|
$search = request()->query('search')['value'] ?? null;
|
|
|
|
$pacientes = Paciente::query()
|
|
->join('cadastro_cidadao','cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
|
->with(['cidadao', 'cidadao.sexo', 'cidadao.nacionalidade', 'cidadao.racaCor', 'cidadao.etniaIndigena'])
|
|
->select('cadastro_paciente.*', 'cadastro_cidadao.nome');
|
|
|
|
if (DataUtil::isStringBoolean(request()->query('imunizacao_aplicacao_campanha'))) {
|
|
if (self::getImunizcaoParametrizacao()->perfil_campanha) {
|
|
$campanha = CadastroCampanhaService::show(request()->query('campanha_id'));
|
|
|
|
$campanha->populacoes->each(function ($populacao) use ($pacientes) {
|
|
if ($populacao->idade_inicial_medida_tempo_id === MedidaTempo::DIAS) {
|
|
$pacientes->orWhereHas('cidadao', function ($query) use ($populacao) {
|
|
$query
|
|
->whereRaw("TIMESTAMPDIFF(DAY, data_nascimento, CURRENT_DATE) >= $populacao->idade_inicial")
|
|
->whereRaw("TIMESTAMPDIFF(DAY, data_nascimento, CURRENT_DATE) <= $populacao->idade_final");
|
|
|
|
if ($populacao->sexo_id === Sexo::FEMININO) {
|
|
$query->where('sexo_id', Sexo::FEMININO);
|
|
} elseif ($populacao->sexo_id === Sexo::MASCULINO) {
|
|
$query->where('sexo_id', Sexo::MASCULINO);
|
|
}
|
|
});
|
|
} elseif ($populacao->idade_inicial_medida_tempo_id === MedidaTempo::MESES) {
|
|
$pacientes->orWhereHas('cidadao', function ($query) use ($populacao) {
|
|
$query
|
|
->whereRaw("TIMESTAMPDIFF(MONTH, data_nascimento, CURRENT_DATE) >= $populacao->idade_inicial")
|
|
->whereRaw("TIMESTAMPDIFF(MONTH, data_nascimento, CURRENT_DATE) <= $populacao->idade_final");
|
|
|
|
if ($populacao->sexo_id === Sexo::FEMININO) {
|
|
$query->where('sexo_id', Sexo::FEMININO);
|
|
} elseif ($populacao->sexo_id === Sexo::MASCULINO) {
|
|
$query->where('sexo_id', Sexo::MASCULINO);
|
|
}
|
|
});
|
|
} elseif ($populacao->idade_inicial_medida_tempo_id === MedidaTempo::ANOS) {
|
|
$pacientes->orWhereHas('cidadao', function ($query) use ($populacao) {
|
|
$query
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, data_nascimento, CURRENT_DATE) >= $populacao->idade_inicial")
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, data_nascimento, CURRENT_DATE) <= $populacao->idade_final");
|
|
|
|
if ($populacao->sexo_id === Sexo::FEMININO) {
|
|
$query->where('sexo_id', Sexo::FEMININO);
|
|
} elseif ($populacao->sexo_id === Sexo::MASCULINO) {
|
|
$query->where('sexo_id', Sexo::MASCULINO);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
$pacientes->where(function ($query) {
|
|
$query
|
|
->where('cadastro_paciente.bloqueado', false)
|
|
->orWhereNull('cadastro_paciente.bloqueado');
|
|
});
|
|
|
|
|
|
|
|
|
|
if ($provisorioBloqueado) {
|
|
|
|
$pacientes->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->where('cadastro_paciente.subclassificacao_id', '!=', Subclassificacao::TEMPORARIO)
|
|
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->where('cadastro_paciente.subclassificacao_id', Subclassificacao::TEMPORARIO)
|
|
->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
|
|
$query->where(function ($query) {
|
|
$query->whereNull('cadastro_paciente.validade_inicio')
|
|
->orWhereDate('cadastro_paciente.validade_inicio', '<=', Carbon::now()->format('Y-m-d'));
|
|
});
|
|
|
|
$query->where(function ($query) use ($provisorioQuantidadeDias) {
|
|
$query->whereNull('cadastro_paciente.validade_fim')
|
|
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
|
if (!is_null($provisorioQuantidadeDias) && $provisorioQuantidadeDias > 0) {
|
|
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'))
|
|
->orWhereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->subDays($provisorioQuantidadeDias)->format('Y-m-d'));
|
|
} else {
|
|
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'));
|
|
}
|
|
});
|
|
});
|
|
});
|
|
})
|
|
->orWhereNull('cadastro_paciente.subclassificacao_id');
|
|
});
|
|
}
|
|
|
|
if (DataUtil::isStringBoolean(request()->query('not_cidadao_obito'))) {
|
|
$pacientes->whereDoesntHave('cidadao.obito', function ($query) {
|
|
$query->whereNull('cadastro_obito.deleted_at');
|
|
});
|
|
}
|
|
|
|
if($search){
|
|
$pacientes->orderByRaw("
|
|
CASE
|
|
WHEN cadastro_cidadao.nome = ? then 0
|
|
WHEN cadastro_cidadao.nome LIKE ? then 1
|
|
WHEN cadastro_cidadao.nome LIKE ? then 2
|
|
ELSE 3
|
|
END
|
|
",[
|
|
$search,
|
|
"$search%",
|
|
"%$search"
|
|
]);
|
|
}
|
|
|
|
return datatables()
|
|
->of($pacientes)
|
|
->filterColumn('prontuario', function ($query, $keyword) {
|
|
$query->whereRaw('LPAD(prontuario,7,0) like ?', ["%{$keyword}%"]);
|
|
})
|
|
->filterColumn('cidadao.cpf', function ($query, $keyword) {
|
|
$query->whereHas('cidadao', function ($query) use ($keyword) {
|
|
$query
|
|
->whereRaw("cpf like ?", ["%{$keyword}%"])
|
|
->orWhereRaw(
|
|
"CONCAT(
|
|
SUBSTR(cpf,1,3),
|
|
'.',
|
|
SUBSTR(cpf,4,3),
|
|
'.',
|
|
SUBSTR(cpf,7,3),
|
|
'-',
|
|
SUBSTR(cpf,10,2)
|
|
) like ?",
|
|
["%{$keyword}%"]
|
|
);
|
|
});
|
|
})
|
|
->filterColumn('cidadao.data_nascimento', function ($query, $keyword) {
|
|
$query->whereHas('cidadao', function ($query) use ($keyword) {
|
|
$query
|
|
->whereRaw("DATE_FORMAT(data_nascimento, '%d/%m/%Y') like ?", ["%{$keyword}%"])
|
|
->orWhereRaw(
|
|
"CONCAT(
|
|
SUBSTR(data_nascimento,9,2),
|
|
SUBSTR(data_nascimento,6,2),
|
|
SUBSTR(data_nascimento,1,4)
|
|
) like ?",
|
|
["%{$keyword}%"]
|
|
);
|
|
});
|
|
})
|
|
->toJson();
|
|
}
|
|
|
|
private static function getImunizcaoParametrizacao()
|
|
{
|
|
return DB::table('imunizacao_parametrizacao')
|
|
->select([
|
|
'perfil_campanha',
|
|
])
|
|
->first();
|
|
}
|
|
|
|
public static function isCadastroPacienteVencido($pacienteId)
|
|
{
|
|
$paciente = Paciente::findOrFail($pacienteId);
|
|
|
|
if (is_null($paciente->validade_fim)) {
|
|
|
|
return false;
|
|
}
|
|
|
|
return Carbon::today() > $paciente->validade_fim;
|
|
}
|
|
|
|
private 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;
|
|
}
|
|
|
|
public function getPaciente($id = null)
|
|
{
|
|
|
|
if (is_null($id)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
return Paciente::find($id);
|
|
}
|
|
|
|
public static function obterFichaPacientePorCpf($cpf)
|
|
{
|
|
|
|
$cidadao = Cidadao::with('paciente')->where('cpf', $cpf)->first();
|
|
|
|
if (is_null($cidadao)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
if (is_null($cidadao->paciente)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
return $cidadao->paciente->id;
|
|
}
|
|
|
|
public function getAdditionalsFormModelData($id, $checarPermissaoCadastro = true)
|
|
{
|
|
$paciente = Paciente::findOrFail($id);
|
|
|
|
if ($checarPermissaoCadastro) {
|
|
if (!self::checkPermissaoCadastro($paciente->classificacao_id)) {
|
|
|
|
throw new AlteracaoCadastroPacienteNaoPermitidoException();
|
|
}
|
|
}
|
|
|
|
$prontuarioUnidade = $paciente->prontuariosUnidade()
|
|
->where('unidade_id', $this->getCurrentCentroCusto()->infraestrutura->unidade_id)
|
|
->first();
|
|
|
|
$parametrizacao = Parametrizacao::first();
|
|
$quantidadeDias = $parametrizacao->cadastro_paciente_desatualizado_quantidade_dias ?? 0;
|
|
$exigeCpfPaciente = $parametrizacao->exige_cpf_paciente ?? true;
|
|
$exigeCnsPaciente = $parametrizacao->exige_cns_paciente ?? true;
|
|
|
|
$updatedAt = $paciente->updated_at > $paciente->cidadao->updated_at
|
|
? $paciente->updated_at
|
|
: $paciente->cidadao->updated_at;
|
|
|
|
if ($updatedAt) {
|
|
|
|
$updatedAtCarbon = Carbon::createFromFormat('Y-m-d H:i:s', $updatedAt);
|
|
$updatedAtCarbon->addDays($quantidadeDias);
|
|
$currentDateTime = Carbon::now();
|
|
|
|
if ($updatedAtCarbon->lessThan($currentDateTime)) {
|
|
|
|
$diasAtrasados = $updatedAtCarbon->diffInDays($currentDateTime);
|
|
$diasAtrasados = str_pad($diasAtrasados, 2, '0', STR_PAD_LEFT);
|
|
} else {
|
|
|
|
$diasAtrasados = null;
|
|
}
|
|
} else {
|
|
|
|
$diasAtrasados = null;
|
|
}
|
|
|
|
$cadastroDomiciliar = CadastroDomiciliar::where('domicilio_id', $paciente->cidadao->domicilio_id)->first();
|
|
$cadastroIndividual = CadastroIndividual::where('paciente_id', $paciente->id)->first();
|
|
|
|
$hasCadastroIndividual = CadastroIndividual::where('paciente_id', $paciente->id)->first() ? false : true;
|
|
$hasCadastroDomiciliar = $cadastroDomiciliar ? false : true;
|
|
|
|
$informacaoResidencial = $paciente->cidadao->domicilio && $paciente->cidadao->domicilio->informacaoResidencial
|
|
? $paciente->cidadao->domicilio->informacaoResidencial
|
|
: null;
|
|
|
|
$internacaoData = $paciente->condicaoSaude->internacao_data ?? null;
|
|
|
|
if ($internacaoData && Carbon::parse($internacaoData)->lt(Carbon::now()->subYear())) {
|
|
|
|
$internacao = null;
|
|
$internacaoMotivo = null;
|
|
$internacaoData = null;
|
|
} else {
|
|
|
|
$internacao = $paciente->condicaoSaude->internacao ?? null;
|
|
$internacaoMotivo = $paciente->condicaoSaude->internacao_motivo ?? null;
|
|
$internacaoData = $internacaoData;
|
|
}
|
|
|
|
$isPacienteResponsavel = $paciente->informacaoSocial && $paciente->informacaoSocial->responsavel === true;
|
|
$responsaveis = self::getResponsaveis($paciente);
|
|
$isResponsavel = (count($responsaveis) === 0 && !$isPacienteResponsavel)
|
|
? false : $isPacienteResponsavel;
|
|
|
|
$responsavelCidadaoId = $paciente->informacaoSocial->responsavel_cidadao_id ?? null;
|
|
|
|
if (!$isResponsavel && is_null($responsavelCidadaoId) && $responsaveis->count() === 1) {
|
|
|
|
$responsavelCidadaoId = $responsaveis->first()->id;
|
|
}
|
|
|
|
$fatoresRisco = $paciente->cidadao->fatoresRisco->pluck('id');
|
|
$transtornoEspectroAutista = $fatoresRisco->contains(FatorRisco::TEA) ? true : false;
|
|
|
|
$deficiencias = $paciente && $paciente->informacaoSocial
|
|
? $paciente->informacaoSocial->deficiencia->pluck('id')
|
|
: collect();
|
|
|
|
$deficiente = $paciente->informacaoSocial->deficiente ?? null;
|
|
|
|
if ($transtornoEspectroAutista) {
|
|
|
|
$deficiente = 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 response()->json(
|
|
[
|
|
'additionals' => [
|
|
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
|
|
'exige_cpf_paciente' => $exigeCpfPaciente,
|
|
'exige_cns_paciente' => $exigeCnsPaciente,
|
|
],
|
|
'form' => array_merge(
|
|
[
|
|
'cidadao' => CidadaoService::edit($paciente->cidadao_id)['form'],
|
|
'prontuario' => $paciente->prontuario,
|
|
'is_unidade_referencia' => $paciente->unidade && $paciente->unidade->unidade_referencia === true,
|
|
'is_responsavel' => $isResponsavel,
|
|
'atualizacao' => $updatedAt ? (new Carbon($updatedAt))->format('d/m/Y H:i') : null,
|
|
'dias_atrasados' => $quantidadeDias && $quantidadeDias > 0 ? $diasAtrasados : null,
|
|
'historico' => PacienteHistorico::where('paciente_id', $paciente->id)
|
|
->orderBy('created_at')
|
|
->get()
|
|
->map(fn ($historico) => [
|
|
'data' => $historico->is_integrado == 1 || $historico->lotacao != null
|
|
? (new Carbon($historico->created_at))->format('d/m/Y H:i') : null,
|
|
'usuario' => $historico->is_integrado == 1
|
|
? 'INTEGRAÇÃO'
|
|
:($historico->lotacao
|
|
? $historico->lotacao->usuario->cidadao->nome
|
|
: null),
|
|
'equipe' => $historico->equipe && $historico->equipe->microarea_id
|
|
? ($historico->equipe->microarea->descricao
|
|
? 'INE: ' . str_pad($historico->equipe->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT)
|
|
. ' - ÁREA: ' . $historico->equipe->microarea->area->descricao
|
|
. ' - MICROÁREA: ' . $historico->equipe->microarea->descricao
|
|
: 'INE: ' . str_pad($historico->equipe->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT)
|
|
. ' - ÁREA: ' . $historico->equipe->microarea->area->descricao)
|
|
: '-',
|
|
])->filter(),
|
|
'impressoes' => [
|
|
['value' => 'cadastroIndividual', 'text' => 'Cadastro individual', 'disabled' => $hasCadastroIndividual],
|
|
['value' => 'cadastroDomiciliar', 'text' => 'Cadastro domiciliar', 'disabled' => $hasCadastroDomiciliar],
|
|
['value' => 'termoRecusaCadastro', 'text' => 'Termo de recusa do cadastro', 'disabled' => false],
|
|
['value' => 'etiquetaConectasus', 'text' => 'Etiqueta do prontuário', 'disabled' => false],
|
|
['value' => 'residentes', 'text' => 'Residentes', 'disabled' => false],
|
|
['value' => 'folhaRosto', 'text' => 'Folha de rosto', 'disabled' => false],
|
|
['value' => 'cartaoNacionalSaude', 'text' => 'Cartão nacional de saúde', 'disabled' => false],
|
|
],
|
|
'residentes' => $paciente && $paciente->cidadao->domicilio_id
|
|
? self::getResidentes($paciente->cidadao->domicilio_id) : [],
|
|
'residentes_anteriores' => $paciente && $paciente->cidadao->domicilio_id
|
|
? self::getResidentesAnteriores($paciente->cidadao->domicilio_id) : [],
|
|
'domicilio_id' => $paciente ? $paciente->cidadao->domicilio_id : null,
|
|
'cadastro_domiciliar_id' => $cadastroDomiciliar ? $cadastroDomiciliar->id : null,
|
|
'responsaveis' => $responsaveis,
|
|
],
|
|
$this->getFormData($paciente->unidade_id, true)
|
|
),
|
|
'model' => [
|
|
'email' => $paciente->email,
|
|
'classificacao_id' => $paciente->classificacao_id,
|
|
'subclassificacao_id' => $paciente->subclassificacao_id,
|
|
'validade_inicio' => $paciente->validade_inicio,
|
|
'validade_fim' => $paciente->validade_fim,
|
|
'prontuario_unidade' => $prontuarioUnidade->prontuario ?? null,
|
|
'protocolo_cross' => $paciente->protocolo_cross ?? null,
|
|
'unidade_id' => $paciente->unidade_id,
|
|
'infraestrutura_id' => $paciente->infraestrutura_id,
|
|
'altera_responsavel' => false,
|
|
'domicilio_id_old' => $paciente->cidadao->domicilio_id ?? null,
|
|
'responsavel_usuario' => [
|
|
'id' => $paciente->responsavel && $paciente->responsavel->usuario
|
|
? $paciente->responsavel->usuario->id : null,
|
|
'cidadao_nome' => $paciente->responsavel && $paciente->responsavel->usuario
|
|
? $paciente->responsavel->usuario->cidadao->nome : null,
|
|
],
|
|
'responsavel_unidade_id' => $paciente->responsavel && $paciente->responsavel->equipe
|
|
? $paciente->responsavel->equipe->unidade_id : null,
|
|
'responsavel_infraestrutura_id' => $paciente->responsavel && $paciente->responsavel->equipe
|
|
? $paciente->responsavel->equipe->infraestrutura_id : null,
|
|
'responsavel_equipe_id' => $paciente->responsavel
|
|
? $paciente->responsavel->responsavel_equipe_id : null,
|
|
'responsavel_ocupacao_id' => $paciente->responsavel
|
|
? $paciente->responsavel->responsavel_ocupacao_id : null,
|
|
'responsavel_data' => $paciente->responsavel && $paciente->responsavel->responsavel_data
|
|
? $paciente->responsavel->responsavel_data : Carbon::now()->format('Y-m-d'),
|
|
'prontuarios_unidades' => $paciente->prontuariosUnidade,
|
|
'bloqueado' => $paciente->bloqueado ? true : false,
|
|
'cidadao' => array_merge([
|
|
'id' => $paciente->cidadao_id,
|
|
], CidadaoService::edit($paciente->cidadao_id)['model']),
|
|
'impressoes' => [],
|
|
'curso_id' => $paciente ? $paciente->curso_id : null,
|
|
'frequenta_escola_creche' => $paciente ? $paciente->frequenta_escola_creche : null,
|
|
'situacao_mercado_trabalho_id' => $paciente ? $paciente->situacao_mercado_trabalho_id : null,
|
|
'frequenta_cuidador_tradicional' => $paciente ? $paciente->frequenta_cuidador_tradicional : null,
|
|
'participa_grupo_comunitario' => $paciente ? $paciente->participa_grupo_comunitario : null,
|
|
'acompanhamento_infantil' => $paciente && $paciente->informacaoSocial
|
|
? $paciente->informacaoSocial->acompanhamentoInfantil->pluck('id')
|
|
: [],
|
|
'deficiencias' => $deficiencias,
|
|
'plano_saude' => $paciente
|
|
? $paciente->cidadao->conveniosMedico->isEmpty() ? $paciente->plano_saude : true
|
|
: null,
|
|
'convenio_medico' => $paciente->cidadao->conveniosMedico ?? null,
|
|
'comunidade_tradicional' => $paciente ? $paciente->comunidade_tradicional : null,
|
|
'comunidade_tradicional_qual' => $paciente && $paciente->comunidade_tradicional ? [
|
|
'id' => $paciente->comunidadeTradicionalQual->id,
|
|
'codigo_esus' => $paciente->comunidadeTradicionalQual->codigo_esus,
|
|
'descricao' => $paciente->comunidadeTradicionalQual->descricao,
|
|
] : null,
|
|
'saida_cidadao_id' => optional($paciente->informacaoSocial)->saida_cidadao_id,
|
|
'motivo_saida_data' => optional($paciente->informacaoSocial)->motivo_saida_data,
|
|
'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,
|
|
],
|
|
'fora_area' => $informacaoResidencial ? $informacaoResidencial->fora_area : false,
|
|
'microarea_id' => $informacaoResidencial ? $informacaoResidencial->microarea_id : null,
|
|
'imovel_tipo_id' => $informacaoResidencial ? $informacaoResidencial->imovel_tipo_id : null,
|
|
'situacao_domicilio_id' => $informacaoResidencial ? $informacaoResidencial->situacao_domicilio_id : null,
|
|
'domicilio_tipo_id' => $informacaoResidencial ? $informacaoResidencial->domicilio_tipo_id : null,
|
|
'quantidade_comodos' => $informacaoResidencial ? $informacaoResidencial->quantidade_comodos : null,
|
|
'situacao_rural_id' => $informacaoResidencial ? $informacaoResidencial->situacao_rural_id : null,
|
|
'domicilio_zona_id' => $informacaoResidencial ? $informacaoResidencial->domicilio_zona_id : null,
|
|
'domicilio_tipo_acesso_id' => $informacaoResidencial ? $informacaoResidencial->domicilio_tipo_acesso_id : null,
|
|
'material_predominante_id' => $informacaoResidencial ? $informacaoResidencial->material_predominante_id : null,
|
|
'abastecimento_id' => $informacaoResidencial ? $informacaoResidencial->abastecimento_id : null,
|
|
'tratamento_id' => $informacaoResidencial ? $informacaoResidencial->tratamento_id : null,
|
|
'destino_lixo_id' => $informacaoResidencial ? $informacaoResidencial->destino_lixo_id : null,
|
|
'forma_escoamento_id' => $informacaoResidencial ? $informacaoResidencial->forma_escoamento_id : null,
|
|
'possui_animais' => $informacaoResidencial ? $informacaoResidencial->possui_animais : false,
|
|
'energia_eletrica' => $informacaoResidencial ? $informacaoResidencial->energia_eletrica : false,
|
|
'quantidade_animais' => $informacaoResidencial ? $informacaoResidencial->quantidade_animais : null,
|
|
'animal' => $informacaoResidencial && $informacaoResidencial->animal ? $informacaoResidencial->animal->pluck('id') : [],
|
|
'escala_coelho_id' => $informacaoResidencial ? $informacaoResidencial->escala_coelho_id : null,
|
|
'higiene_residencial_id' => $informacaoResidencial ? $informacaoResidencial->higiene_residencial_id : null,
|
|
'bolsa_familia' => $informacaoResidencial ? $informacaoResidencial->bolsa_familia : false,
|
|
'vale_gas' => $informacaoResidencial ? $informacaoResidencial->vale_gas : false,
|
|
'bolsa_escola' => $informacaoResidencial ? $informacaoResidencial->bolsa_escola : false,
|
|
'lazer' => $informacaoResidencial && $informacaoResidencial->lazer ? $informacaoResidencial->lazer->pluck('id') : [],
|
|
'bpc' => $informacaoResidencial ? $informacaoResidencial->bpc : false,
|
|
'renda_mensal' => $paciente->informacaoResidencial && $paciente->informacaoResidencial->renda_mensal
|
|
? number_format($paciente->informacaoResidencial->renda_mensal, 2, ',', '.')
|
|
: '0,00',
|
|
'ocupacao_id' => $paciente->informacaoResidencial->ocupacao_id ?? null,
|
|
'ocupacao' => $paciente && $paciente->informacaoResidencial && $paciente->informacaoResidencial->ocupacao ? [
|
|
'id' => $paciente->informacaoResidencial->ocupacao->id,
|
|
'codigo' => $paciente->informacaoResidencial->ocupacao->codigo,
|
|
'nome' => $paciente->informacaoResidencial->ocupacao->nome,
|
|
] : null,
|
|
'renda_total_familiar' => $paciente->informacaoResidencial && $paciente->informacaoResidencial->renda_total_familiar
|
|
? number_format($paciente->informacaoResidencial->renda_total_familiar, 2, ',', '.')
|
|
: '0,00',
|
|
'informacao_residencial_recusa_cadastro' => $paciente->informacaoResidencial->recusa_cadastro ?? false,
|
|
'possui_veiculo_proprio' => $paciente->informacaoResidencial->possui_veiculo_proprio ?? false,
|
|
'possui_financiamento' => $paciente->informacaoResidencial->possui_financiamento ?? false,
|
|
'possui_emprestimo' => $paciente->informacaoResidencial->possui_emprestimo ?? false,
|
|
'instituicao_nome' => $paciente->informacaoResidencial->instituicao_nome ?? null,
|
|
'instituicao_outros_profissionais' => $paciente->cidadao->domicilio->informacaoResidencial->instituicao_outros_profissionais ?? false,
|
|
'instituicao_nome_responsavel_tecnico' => $paciente->cidadao->domicilio->informacaoResidencial->instituicao_nome_responsavel_tecnico ?? null,
|
|
'instituicao_cns_responsavel_tecnico' => isset($paciente->cidadao) && isset($paciente->cidadao->domicilio) &&
|
|
isset($paciente->cidadao->domicilio->informacaoResidencial) &&
|
|
isset($paciente->cidadao->domicilio->informacaoResidencial->instituicao_cns_responsavel_tecnico)
|
|
? MaskUtil::getCnsMasked($paciente->cidadao->domicilio->informacaoResidencial->instituicao_cns_responsavel_tecnico)
|
|
: null,
|
|
'instituicao_cargo_responsavel_tecnico' => $paciente->cidadao->domicilio->informacaoResidencial->instituicao_cargo_responsavel_tecnico ?? null,
|
|
'instituicao_telefone_responsavel_tecnico' => isset($paciente->cidadao) && isset($paciente->cidadao->domicilio) &&
|
|
isset($paciente->cidadao->domicilio->informacaoResidencial) && isset($paciente->cidadao->domicilio->informacaoResidencial->instituicao_telefone_responsavel_tecnico)
|
|
? MaskUtil::getPhoneMasked($paciente->cidadao->domicilio->informacaoResidencial->instituicao_telefone_responsavel_tecnico)
|
|
: null,
|
|
'parentesco_id' => $paciente->parentesco_id ?? null,
|
|
'peso_id' => $paciente->condicaoSaude->peso_id ?? null,
|
|
'internacao' => $internacao,
|
|
'internacao_motivo' => $internacaoMotivo,
|
|
'internacao_data' => $internacaoData,
|
|
'doenca_cardiaca' => $paciente->condicaoSaude->doenca_cardiaca ?? null,
|
|
'doenca_cardiaca_quais' => $paciente && $paciente->condicaoSaude ? $paciente->condicaoSaude->doencaCardiaca->pluck('id') : [],
|
|
'problemas_rins' => $paciente->condicaoSaude->problemas_rins ?? null,
|
|
'problemas_rins_quais' => $paciente && $paciente->condicaoSaude ? $paciente->condicaoSaude->problemasRins->pluck('id') : [],
|
|
'doenca_respiratoria' => $paciente->condicaoSaude->doenca_respiratoria ?? null,
|
|
'doenca_respiratoria_quais' => $paciente && $paciente->condicaoSaude ? $paciente->condicaoSaude->doencaRespiratoria->pluck('id') : [],
|
|
'tratamento_saude_mental' => $paciente->condicaoSaude->tratamento_saude_mental ?? null,
|
|
'tratamento_saude_mental_internacao_data' => $paciente->condicaoSaude->tratamento_saude_mental_internacao_data ?? null,
|
|
'tratamento_saude_mental_alta_data' => $paciente->condicaoSaude->tratamento_saude_mental_alta_data ?? null,
|
|
'acamado' => $paciente->condicaoSaude->acamado ?? null,
|
|
'domiciliado' => $paciente->condicaoSaude->domiciliado ?? null,
|
|
'plantas_medicinais' => $paciente->condicaoSaude->plantas_medicinais ?? null,
|
|
'plantas_medicinais_quais' => $paciente->condicaoSaude->plantas_medicinais_quais ?? null,
|
|
'praticas_integrativas' => $paciente->condicaoSaude->praticas_integrativas ?? null,
|
|
'outras_condicoes_primaria' => $paciente->condicaoSaude->outras_condicoes_primaria ?? null,
|
|
'outras_condicoes_secundaria' => $paciente->condicaoSaude->outras_condicoes_secundaria ?? null,
|
|
'outras_condicoes_terciaria' => $paciente->condicaoSaude->outras_condicoes_terciaria ?? null,
|
|
'recusa_cadastro' => $paciente->recusa_cadastro ?? false,
|
|
'data_ultima_menstruacao' => $paciente->dum->data_ultima_menstruacao ?? null,
|
|
'idade_gestacional_semanas' => $paciente->dum->idade_gestacional_semanas ?? null,
|
|
'idade_gestacional_dias' => $paciente->dum->idade_gestacional_dias ?? null,
|
|
'data_possivel_parto' => $paciente->dum->data_possivel_parto ?? null,
|
|
'gravidez_planejada' => $paciente->dum->gravidez_planejada ?? null,
|
|
'gestacao_previa' => $paciente->dum->gestacao_previa ?? null,
|
|
'parto' => $paciente->dum->parto ?? null,
|
|
'responsavel' => $isResponsavel,
|
|
'responsavel_cidadao_id' => $responsavelCidadaoId,
|
|
'parentesco_responsavel_id' => $paciente->informacaoSocial->parentesco_responsavel_id ?? null,
|
|
'curso_id' => $paciente->informacaoSocial->curso_id ?? null,
|
|
'orientacao_sexual' => $paciente->informacaoSocial->orientacao_sexual ?? null,
|
|
'orientacao_sexual_id' => $paciente->informacaoSocial->orientacao_sexual_id ?? null,
|
|
'identidade_genero' => !is_null($paciente->cidadao->identidade_genero_id),
|
|
'deficiente' => $deficiente,
|
|
'frequenta_escola_creche' => $paciente->informacaoSocial->frequenta_escola_creche ?? null,
|
|
'situacao_mercado_trabalho_id' => $paciente->informacaoSocial->situacao_mercado_trabalho_id ?? null,
|
|
'frequenta_cuidador_tradicional' => $paciente->informacaoSocial->frequenta_cuidador_tradicional ?? null,
|
|
'participa_grupo_comunitario' => $paciente->informacaoSocial->participa_grupo_comunitario ?? null,
|
|
'plano_saude' => $paciente->informacaoSocial->plano_saude ?? null,
|
|
'comunidade_tradicional' => $paciente->informacaoSocial->comunidade_tradicional ?? null,
|
|
'comunidade_tradicional_qual' => $paciente->informacaoSocial && $paciente->informacaoSocial->comunidadeTradicionalQual
|
|
? [ 'id' => $paciente->informacaoSocial->comunidadeTradicionalQual->id,
|
|
'codigo_esus' => $paciente->informacaoSocial->comunidadeTradicionalQual->codigo_esus,
|
|
'descricao' => $paciente->informacaoSocial->comunidadeTradicionalQual->descricao, ]
|
|
: null,
|
|
'saida_cidadao_id' => $paciente->informacaoSocial->saida_cidadao_id ?? null,
|
|
'motivo_saida_data' => $paciente->informacaoSocial->motivo_saida_data ?? null,
|
|
'informacao_social_recusa_cadastro' => $paciente->informacaoSocial->recusa_cadastro ?? null,
|
|
'alimentos_acabaram' => $paciente->informacaoSocial->alimentos_acabaram ?? null,
|
|
'comeu_alguns_alimentos' => $paciente->informacaoSocial->comeu_alguns_alimentos ?? null,
|
|
'data_atualizacao_tria' => optional($paciente->informacaoSocial)->data_atualizacao_tria ? optional($paciente->informacaoSocial)->data_atualizacao_tria : optional($cadastroIndividual)->created_at,
|
|
'veiculos' => $paciente->informacaoResidencial->veiculo ?? [],
|
|
'financiamentos' => $paciente->informacaoResidencial && $paciente->informacaoResidencial->financiamento
|
|
? $paciente->informacaoResidencial->financiamento->map(fn($financiamento) => [
|
|
'id' => $financiamento->id ?? null,
|
|
'tipo' => $financiamento->tipo ?? null,
|
|
'valor_parcela' => $financiamento->valor_parcela ? number_format($financiamento->valor_parcela, 2, ',', '.') : null,
|
|
'quantidade_parcela' => $financiamento->quantidade_parcela ?? null,
|
|
])
|
|
: [],
|
|
'emprestimos' => $paciente->informacaoResidencial && $paciente->informacaoResidencial->emprestimo
|
|
? $paciente->informacaoResidencial->emprestimo->map(fn($emprestimo) => [
|
|
'id' => $emprestimo->id ?? null,
|
|
'tipo' => $emprestimo->tipo ?? null,
|
|
'valor_parcela' => $emprestimo->valor_parcela ? number_format($emprestimo->valor_parcela, 2, ',', '.') : null,
|
|
'quantidade_parcela' => $emprestimo->quantidade_parcela ?? null,
|
|
])
|
|
: [],
|
|
],
|
|
],
|
|
Response::HTTP_OK
|
|
);
|
|
}
|
|
|
|
public function getPrintFormModelData($id)
|
|
{
|
|
$paciente = Paciente::findOrFail($id);
|
|
|
|
$cadastroDomiciliar = CadastroDomiciliar::where('domicilio_id', $paciente->cidadao->domicilio_id)->first();
|
|
$cadastroIndividual = CadastroIndividual::where('paciente_id', $paciente->id)->first();
|
|
|
|
$unidadesReferencia = Unidade::where('unidade_referencia', true)
|
|
->where('id', $paciente->unidade_id)
|
|
->orderBy('nome_fantasia')
|
|
->get();
|
|
|
|
return [
|
|
'form' => [
|
|
'prontuario' => $paciente->prontuario,
|
|
'unidades_referencia' => $unidadesReferencia->map(fn ($unidades) => [
|
|
'id' => $unidades->id,
|
|
'nome_fantasia' => $unidades->cnes ? $unidades->cnes . ' - ' . $unidades->nome_fantasia : $unidades->nome_fantasia
|
|
]),
|
|
'impressoes' => [
|
|
['value' => 'cadastroIndividual', 'text' => 'Cadastro individual', 'disabled' => $cadastroIndividual ? false: true],
|
|
['value' => 'cadastroDomiciliar', 'text' => 'Cadastro domiciliar', 'disabled' => $cadastroDomiciliar ? false : true],
|
|
['value' => 'termoRecusaCadastro', 'text' => 'Termo de recusa do cadastro', 'disabled' => false],
|
|
['value' => 'etiquetaConectasus', 'text' => 'Etiqueta do prontuário', 'disabled' => false],
|
|
['value' => 'residentes', 'text' => 'Residentes', 'disabled' => false],
|
|
['value' => 'folhaRosto', 'text' => 'Folha de rosto', 'disabled' => false],
|
|
['value' => 'cartaoNacionalSaude', 'text' => 'Cartão nacional de saúde', 'disabled' => false],
|
|
],
|
|
],
|
|
'model' => [
|
|
'id' => $paciente->id,
|
|
'domicilio_id' => $paciente ? $paciente->cidadao->domicilio_id : null,
|
|
'cadastro_domiciliar_id' => $cadastroDomiciliar ? $cadastroDomiciliar->id : null,
|
|
'cidadao' => $paciente->cidadao,
|
|
'impressoes' => [],
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function houveMudancaInformacaoSocioeconomica($alimentosAtual, $comeuAtual, $alimentosNovo, $comeuNovo)
|
|
{
|
|
return $alimentosAtual !== $alimentosNovo || $comeuAtual !== $comeuNovo;
|
|
}
|
|
}
|