This commit is contained in:
@@ -0,0 +1,950 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\AtencaoBasica\AtendimentoDomiciliar;
|
||||
|
||||
use App\Enums\AtencaoBasica\AtendimentoDomiciliar\Modalidade;
|
||||
use App\Enums\AtencaoBasica\AtendimentoDomiciliar\Procedimento as EnumAtendimentoDomiciliarProcedimento;
|
||||
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
|
||||
use App\Enums\AtencaoBasica\TipoAtendimento as AtencaoBasicaTipoAtendimento;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliar;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarAtendimento;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarAtendimentoIvcf;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarAtendProblemaCondicao;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarCondicao;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarCondicaoAvaliada;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarProcedimento;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\CondutaDesfecho;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\DoencaTransmissivel;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\ModalidadeAtencaoDomiciliar;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\Rastreamento;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
|
||||
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
||||
use App\Models\AtencaoBasica\CadastroPerfilEpidemiologico;
|
||||
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
|
||||
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
|
||||
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
|
||||
use App\Models\AtencaoBasica\Procedimento\Procedimento as AtencaoBasicaProcedimento;
|
||||
use App\Models\AtencaoBasica\Procedimento\ProcedimentoAtendimento;
|
||||
use App\Models\AtencaoBasica\Procedimento\ProcedimentoAtendimentoProcedimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Geral\Ciap;
|
||||
use App\Models\Geral\Turno;
|
||||
use App\Models\Integracao\Esus\Inconsistencia;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class AtendimentoDomiciliarService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'unidades' => [],
|
||||
],
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null
|
||||
],
|
||||
'usuario' => null,
|
||||
'unidade_id' => null
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
return AtendimentoDomiciliar::with('usuario')
|
||||
->where('data', '>=', request()->data_inicial)
|
||||
->where('data', '<=', request()->data_final)
|
||||
->when(request()->usuario_id, function($query) {
|
||||
$query->where('usuario_id', request()->usuario_id);
|
||||
})
|
||||
->when(request()->unidade_id, function($query) {
|
||||
$query->where('unidade_id', request()->unidade_id);
|
||||
})
|
||||
->get()
|
||||
->map(function($query){
|
||||
return [
|
||||
'id' => $query->id,
|
||||
'data' => $query->data,
|
||||
'profissional' => $query->usuario->nome,
|
||||
'cns' => $query->usuario->cidadao->cns,
|
||||
'unidade' => $query->equipe->unidade->nome_fantasia,
|
||||
'exportacao' => $query->exportacao,
|
||||
'data_exportacao' => $query->exportacao_id
|
||||
? (new Carbon($query->exportado->created_at))->format('d/m/Y') . ' às '
|
||||
. (new Carbon($query->exportado->created_at))->format('H:i')
|
||||
: null,
|
||||
'profissional_exportacao' => $query->usuarioExportacao->cidadao->nome ?? null,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData()
|
||||
];
|
||||
}
|
||||
|
||||
public static function getUnidades()
|
||||
{
|
||||
if(isset(request()->data_inicial) && isset(request()->data_final)) {
|
||||
return DB::table('atencao_basica_atendimento_domiciliar as atendimento_domiciliar')
|
||||
->select([
|
||||
'cadastro_unidade.id AS id',
|
||||
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe as equipe', 'atendimento_domiciliar.equipe_id', 'equipe.id')
|
||||
->join('cadastro_unidade', 'equipe.unidade_id', 'cadastro_unidade.id')
|
||||
->where('atendimento_domiciliar.data', '>=', request()->data_inicial)
|
||||
->where('atendimento_domiciliar.data', '<=', request()->data_final)
|
||||
->when(request()->usuario_id, fn ($q, $id) => $q->where('atendimento_domiciliar.usuario_id', $id))
|
||||
->when(request()->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
||||
->distinct()
|
||||
->orderBy('cadastro_unidade.cnes')
|
||||
->get();
|
||||
}
|
||||
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->select([
|
||||
'cadastro_unidade.id AS id',
|
||||
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
||||
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
||||
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
||||
->distinct()
|
||||
->orderBy('cadastro_unidade.cnes')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getInfraestruturas()
|
||||
{
|
||||
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->select([
|
||||
'cadastro_infraestrutura.id AS id',
|
||||
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
||||
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
||||
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
||||
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
||||
->distinct()
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getEquipes()
|
||||
{
|
||||
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->select([
|
||||
'atencao_basica_parametrizacao_equipe.id AS id',
|
||||
DB::raw("
|
||||
CONCAT(
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine)
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: '
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: '
|
||||
ELSE ''
|
||||
END,
|
||||
COALESCE(atencao_basica_parametrizacao_area.descricao, ''),
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: '
|
||||
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: '
|
||||
ELSE ''
|
||||
END,
|
||||
COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
|
||||
) AS descricao
|
||||
")
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
||||
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
||||
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getOcupacoes()
|
||||
{
|
||||
$usuario = Usuario::findOrFail(request()->usuario_id);
|
||||
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::ATENDIMENTO_DOMICILIAR)->get();
|
||||
$codigos = $permissao->pluck('ocupacao');
|
||||
|
||||
return $usuario->lotacoes
|
||||
->filter(function ($lotacao) use ($codigos) {
|
||||
return $lotacao->infraestrutura->id == request()->infraestrutura_id && $codigos->contains($lotacao->ocupacao->codigo);
|
||||
})
|
||||
->pluck('ocupacao');
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
|
||||
return self::saveStore(request()->all());
|
||||
}
|
||||
|
||||
public static function saveStore($params)
|
||||
{
|
||||
self::validate($params);
|
||||
|
||||
$params = (object) $params;
|
||||
|
||||
$atendimento_domiciliar = AtendimentoDomiciliar::where([
|
||||
'usuario_id' => $params->usuario_id,
|
||||
'equipe_id' => $params->equipe_id,
|
||||
'ocupacao_id' => $params->ocupacao_id,
|
||||
'usuario_auxiliar_id' => $params->usuario_auxiliar_id ?? null,
|
||||
'equipe_auxiliar_id' => $params->equipe_auxiliar_id,
|
||||
'ocupacao_auxiliar_id' => $params->ocupacao_auxiliar_id,
|
||||
'data' => $params->data
|
||||
])->whereHas('atendimentos', function ($query) {
|
||||
$query->havingRaw('COUNT(*) < 99');
|
||||
})->first();
|
||||
|
||||
if (!$atendimento_domiciliar) {
|
||||
$atendimento_domiciliar = AtendimentoDomiciliar::create([
|
||||
'usuario_id' => $params->usuario_id,
|
||||
'equipe_id' => $params->equipe_id,
|
||||
'ocupacao_id' => $params->ocupacao_id,
|
||||
'usuario_auxiliar_id' => $params->usuario_auxiliar_id ?? null,
|
||||
'equipe_auxiliar_id' => $params->equipe_auxiliar_id,
|
||||
'ocupacao_auxiliar_id' => $params->ocupacao_auxiliar_id,
|
||||
'data' => $params->data,
|
||||
])->fresh();
|
||||
}
|
||||
|
||||
$atencao_basica_procedimento = AtencaoBasicaProcedimento::where([
|
||||
'usuario_id' => $atendimento_domiciliar->usuario_id,
|
||||
'equipe_id' => $atendimento_domiciliar->equipe_id,
|
||||
'ocupacao_id' => $atendimento_domiciliar->ocupacao_id,
|
||||
'data_usuario_responsavel' => $atendimento_domiciliar->data,
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar->id
|
||||
])->whereHas('procedimentoAtendimentos', function ($query) {
|
||||
$query->havingRaw('COUNT(*) < 99');
|
||||
})->first();
|
||||
|
||||
if (!$atencao_basica_procedimento) {
|
||||
|
||||
$atencao_basica_procedimento = AtencaoBasicaProcedimento::create([
|
||||
'usuario_id' => $atendimento_domiciliar->usuario_id,
|
||||
'equipe_id' => $atendimento_domiciliar->equipe_id,
|
||||
'ocupacao_id' => $atendimento_domiciliar->ocupacao_id,
|
||||
'data_usuario_responsavel' => $atendimento_domiciliar->data,
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar->id
|
||||
])->fresh();
|
||||
}
|
||||
|
||||
foreach($params->atendimentos as $atendimento)
|
||||
{
|
||||
$atendimento_domiciliar_atendimento = AtendimentoDomiciliarAtendimento::create([
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar->id,
|
||||
'paciente_id' => $atendimento['paciente_id'],
|
||||
'local_atendimento_id' => $atendimento['local_atendimento_id'],
|
||||
'tipo_atendimento_id' => $atendimento['tipo_atendimento_id'],
|
||||
'modalidade_id' => $atendimento['modalidade_id'],
|
||||
'turno_id' => $atendimento['turno_id'],
|
||||
'conduta_desfecho_id' => $atendimento['conduta_desfecho_id'],
|
||||
'codigo_cid' => $atendimento['cid'] ?? null,
|
||||
'codigo_ciap' => $atendimento['ciap'] ?? null,
|
||||
'latitude' => $atendimento['latitude'] ?? null,
|
||||
'longitude' => $atendimento['longitude'] ?? null,
|
||||
'observacao_perfil_epidemiologico' => $atendimento['observacao_perfil_epidemiologico'] ?? null,
|
||||
])->fresh();
|
||||
|
||||
if (!empty($atendimento['procedimentos'])) {
|
||||
if (in_array($atendimento_domiciliar_atendimento->local_atendimento_id, [11, 12, 13])) {
|
||||
$atendimento_domiciliar_atendimento->local_atendimento_id = 6;
|
||||
}
|
||||
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::create([
|
||||
'paciente_id' => $atendimento_domiciliar_atendimento->paciente_id,
|
||||
'procedimento_id' => $atencao_basica_procedimento->id,
|
||||
'turno_id' => $atendimento_domiciliar_atendimento->turno_id,
|
||||
'local_atendimento_id' => $atendimento_domiciliar_atendimento->local_atendimento_id,
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar_atendimento->id
|
||||
])->fresh();
|
||||
}
|
||||
|
||||
if (isset($atendimento['perfis_epidemiologicos'])) {
|
||||
$atendimento_domiciliar_atendimento->perfisEpidemiologicos()->sync($atendimento['perfis_epidemiologicos']);
|
||||
}
|
||||
|
||||
foreach($atendimento['condicoes'] as $condicao)
|
||||
{
|
||||
AtendimentoDomiciliarCondicao::create([
|
||||
'atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'condicao_id' => $condicao
|
||||
]);
|
||||
}
|
||||
|
||||
foreach($atendimento['procedimentos'] as $procedimento)
|
||||
{
|
||||
AtendimentoDomiciliarProcedimento::create([
|
||||
'atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'codigo_procedimento' => $procedimento['codigo']
|
||||
]);
|
||||
|
||||
ProcedimentoAtendimentoProcedimento::create([
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'procedimento_atendimento_id' => $procedimento_atendimento->id
|
||||
]);
|
||||
}
|
||||
|
||||
self::saveProblemasCondicoes($atendimento_domiciliar_atendimento, $atendimento['problemas_condicoes']);
|
||||
|
||||
$atendimento_domiciliar_atendimento->condicaoAvaliada()->sync($atendimento['condicao_avaliada']);
|
||||
$atendimento_domiciliar_atendimento->doencaTransmissivel()->sync($atendimento['doenca_transmissivel']);
|
||||
$atendimento_domiciliar_atendimento->rastreamento()->sync($atendimento['rastreamento']);
|
||||
|
||||
if (isset($atendimento['ivcf']['deseja_preencher']) && $atendimento['ivcf']['deseja_preencher'] === true) {
|
||||
AtendimentoDomiciliarAtendimentoIvcf::updateOrCreate(
|
||||
[
|
||||
'atendimento_domiciliar_atendimento_id' => $atendimento_domiciliar_atendimento->id
|
||||
],
|
||||
[
|
||||
'atendimento_domiciliar_atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'estado_saude_geral' => $atendimento['ivcf']['estado_saude_geral'],
|
||||
'limitacao_compras' => $atendimento['ivcf']['limitacao_compras'],
|
||||
'limitacao_gestao_financeira' => $atendimento['ivcf']['limitacao_gestao_financeira'],
|
||||
'limitacao_tarefas_domesticas' => $atendimento['ivcf']['limitacao_tarefas_domesticas'],
|
||||
'banho_independencia' => $atendimento['ivcf']['banho_independencia'],
|
||||
'relato_esquecimento_por_terceiros' => $atendimento['ivcf']['relato_esquecimento_por_terceiros'],
|
||||
'esquecimento_piorando' => $atendimento['ivcf']['esquecimento_piorando'],
|
||||
'esquecimento_impacta_atividades' => $atendimento['ivcf']['esquecimento_impacta_atividades'],
|
||||
'humor_tristeza_desanimo' => $atendimento['ivcf']['humor_tristeza_desanimo'],
|
||||
'perda_interesse_atividades' => $atendimento['ivcf']['perda_interesse_atividades'],
|
||||
'limitacao_elevar_bracos' => $atendimento['ivcf']['limitacao_elevar_bracos'],
|
||||
'limitacao_motricidade_fina' => $atendimento['ivcf']['limitacao_motricidade_fina'],
|
||||
'perda_peso_nao_intencional' => $atendimento['ivcf']['perda_peso_nao_intencional'],
|
||||
'imc_abaixo_22' => $atendimento['ivcf']['imc_abaixo_22'],
|
||||
'panturrilha_abaixo_31' => $atendimento['ivcf']['panturrilha_abaixo_31'],
|
||||
'marcha_lenta_4m_maior_5s' => $atendimento['ivcf']['marcha_lenta_4m_maior_5s'],
|
||||
'dificuldade_caminhar_impacto_atividades' => $atendimento['ivcf']['dificuldade_caminhar_impacto_atividades'],
|
||||
'quedas_recorrentes' => $atendimento['ivcf']['quedas_recorrentes'],
|
||||
'incontinencia' => $atendimento['ivcf']['incontinencia'],
|
||||
'problema_visao_impacto_atividades' => $atendimento['ivcf']['problema_visao_impacto_atividades'],
|
||||
'problema_audicao_impacto_atividades' => $atendimento['ivcf']['problema_audicao_impacto_atividades'],
|
||||
'doencas_cronicas_multiplas' => $atendimento['ivcf']['doencas_cronicas_multiplas'],
|
||||
'polifarmacia_5_ou_mais_medicamentos' => $atendimento['ivcf']['polifarmacia_5_ou_mais_medicamentos'],
|
||||
'internacao_ultimos_6_meses' => $atendimento['ivcf']['internacao_ultimos_6_meses'],
|
||||
]
|
||||
);
|
||||
} else {
|
||||
AtendimentoDomiciliarAtendimentoIvcf::where('atendimento_domiciliar_atendimento_id', $atendimento_domiciliar_atendimento->id)->delete();
|
||||
}
|
||||
}
|
||||
|
||||
if ($atencao_basica_procedimento && !$atencao_basica_procedimento->procedimentoAtendimentos()->exists()) {
|
||||
$atencao_basica_procedimento->delete();
|
||||
}
|
||||
}
|
||||
|
||||
private static function validate($params)
|
||||
{
|
||||
return Validator::make($params, [
|
||||
'usuario_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Usuario::class, 'id')
|
||||
],
|
||||
'equipe_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Equipe::class, 'id')
|
||||
],
|
||||
'ocupacao_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Ocupacao::class, 'id')
|
||||
],
|
||||
'usuario_auxiliar_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Usuario::class, 'id')
|
||||
|
||||
],
|
||||
'equipe_auxiliar_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Equipe::class, 'id')
|
||||
],
|
||||
'ocupacao_auxiliar_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Ocupacao::class, 'id')
|
||||
],
|
||||
'data' => [
|
||||
'required',
|
||||
'date',
|
||||
],
|
||||
'atendimentos' => [
|
||||
'array',
|
||||
],
|
||||
'atendimentos.*.paciente_id' => [
|
||||
'required'
|
||||
],
|
||||
'atendimentos.*.local_atendimento_id' => [
|
||||
'required'
|
||||
],
|
||||
'atendimentos.*.tipo_atendimento_id' => [
|
||||
'required'
|
||||
],
|
||||
'atendimentos.*.modalidade_id' => [
|
||||
'nullable',
|
||||
],
|
||||
'atendimentos.*.turno_id' => [
|
||||
'required'
|
||||
],
|
||||
'atendimentos.*.conduta_desfecho_id' => [
|
||||
'required'
|
||||
],
|
||||
])->validate();
|
||||
}
|
||||
|
||||
private static function getModelData($id = null)
|
||||
{
|
||||
$atendimento_domiciliar = AtendimentoDomiciliar::with(['atendimentos.paciente'])->find($id);
|
||||
|
||||
return [
|
||||
'id' => $atendimento_domiciliar->id ?? null,
|
||||
'usuario' => $atendimento_domiciliar ? [
|
||||
'id' => $atendimento_domiciliar->usuario->id,
|
||||
'cidadao_nome' => $atendimento_domiciliar->usuario->nome,
|
||||
'cidadao_cns' => $atendimento_domiciliar->usuario->cidadao->cns
|
||||
] : null,
|
||||
'usuario_auxiliar' => $atendimento_domiciliar && $atendimento_domiciliar->usuario_auxiliar_id ? [
|
||||
'id' => $atendimento_domiciliar->usuarioAuxiliar->id,
|
||||
'cidadao_nome' => $atendimento_domiciliar->usuarioAuxiliar->nome,
|
||||
'cidadao_cns' => $atendimento_domiciliar->usuarioAuxiliar->cidadao->cns
|
||||
] : null,
|
||||
'unidade_id' => $atendimento_domiciliar ? $atendimento_domiciliar->equipe->unidade_id : null,
|
||||
'infraestrutura_id' => $atendimento_domiciliar ? $atendimento_domiciliar->equipe->infraestrutura_id : null,
|
||||
'equipe_id' => $atendimento_domiciliar->equipe_id ?? null,
|
||||
'ocupacao_id' => $atendimento_domiciliar->ocupacao_id ?? null,
|
||||
'unidade_auxiliar_id' => $atendimento_domiciliar && $atendimento_domiciliar->usuario_auxiliar_id ? $atendimento_domiciliar->equipeAuxiliar->unidade_id : null,
|
||||
'infraestrutura_auxiliar_id' => $atendimento_domiciliar && $atendimento_domiciliar->usuario_auxiliar_id ? $atendimento_domiciliar->equipeAuxiliar->infraestrutura_id : null,
|
||||
'equipe_auxiliar_id' => $atendimento_domiciliar->equipe_auxiliar_id ?? null,
|
||||
'ocupacao_auxiliar_id' => $atendimento_domiciliar->ocupacao_auxiliar_id ?? null,
|
||||
'data' => $atendimento_domiciliar->data ?? null,
|
||||
'atendimentos' => $atendimento_domiciliar ? $atendimento_domiciliar->atendimentos->map(function($atendimento) {
|
||||
$atendimento->paciente_nome = $atendimento->paciente->cidadao->nome;
|
||||
$atendimento->cns = $atendimento->paciente->cidadao->cns;
|
||||
$atendimento->data_nascimento = Carbon::parse($atendimento->paciente->cidadao->data_nascimento)->format('d/m/Y');
|
||||
$atendimento->paciente_idade_anos = $atendimento->paciente->cidadao->idade['anos'] ?? null;
|
||||
$atendimento->paciente_idade_meses = $atendimento->paciente->cidadao->idade['meses'] ?? null;
|
||||
$atendimento->condicoes->transform(fn($condicao) => $condicao->condicao_id);
|
||||
$ciap = Ciap::where('codigo', $atendimento->codigo_ciap)->first();
|
||||
$atendimento->codigo_ciap = $ciap ? [
|
||||
'codigo' => $ciap->codigo,
|
||||
'descricao' => $ciap->descricao
|
||||
] : null;
|
||||
$cid = Cid::where('codigo', $atendimento->codigo_cid)->first();
|
||||
$atendimento->codigo_cid = $cid ? [
|
||||
'codigo' => $cid->codigo,
|
||||
'nome' => $cid->nome
|
||||
] : null;
|
||||
$atendimento->procedimentos->transform(function($procedimento) {
|
||||
$procedimento_sigtap = Procedimento::where('codigo', $procedimento->codigo_procedimento)->first();
|
||||
return [
|
||||
'id' => $procedimento_sigtap->id,
|
||||
'nome' => $procedimento_sigtap->nome,
|
||||
'codigo' => $procedimento->codigo_procedimento
|
||||
];
|
||||
});
|
||||
$atendimento->condicao_avaliada = $atendimento->condicaoAvaliada()->pluck('id');
|
||||
$atendimento->doenca_transmissivel = $atendimento->doencaTransmissivel()->pluck('id');
|
||||
$atendimento->rastreamento = $atendimento->rastreamento()->pluck('id');
|
||||
$atendimento->problemas_condicoes = self::getProblemasCondicoes($atendimento);
|
||||
|
||||
$ivcf = AtendimentoDomiciliarAtendimentoIvcf::where('atendimento_domiciliar_atendimento_id', $atendimento->id)->first();
|
||||
|
||||
$atendimento->ivcf = [
|
||||
'deseja_preencher' => $ivcf ? true : false,
|
||||
'estado_saude_geral' => $ivcf->estado_saude_geral ?? null,
|
||||
'limitacao_compras' => $ivcf->limitacao_compras ?? null,
|
||||
'limitacao_gestao_financeira' => $ivcf->limitacao_gestao_financeira ?? null,
|
||||
'limitacao_tarefas_domesticas' => $ivcf->limitacao_tarefas_domesticas ?? null,
|
||||
'banho_independencia' => $ivcf->banho_independencia ?? null,
|
||||
'relato_esquecimento_por_terceiros' => $ivcf->relato_esquecimento_por_terceiros ?? null,
|
||||
'esquecimento_piorando' => $ivcf->esquecimento_piorando ?? null,
|
||||
'esquecimento_impacta_atividades' => $ivcf->esquecimento_impacta_atividades ?? null,
|
||||
'humor_tristeza_desanimo' => $ivcf->humor_tristeza_desanimo ?? null,
|
||||
'perda_interesse_atividades' => $ivcf->perda_interesse_atividades ?? null,
|
||||
'limitacao_elevar_bracos' => $ivcf->limitacao_elevar_bracos ?? null,
|
||||
'limitacao_motricidade_fina' => $ivcf->limitacao_motricidade_fina ?? null,
|
||||
'perda_peso_nao_intencional' => $ivcf->perda_peso_nao_intencional ?? null,
|
||||
'imc_abaixo_22' => $ivcf->imc_abaixo_22 ?? null,
|
||||
'panturrilha_abaixo_31' => $ivcf->panturrilha_abaixo_31 ?? null,
|
||||
'marcha_lenta_4m_maior_5s' => $ivcf->marcha_lenta_4m_maior_5s ?? null,
|
||||
'dificuldade_caminhar_impacto_atividades' => $ivcf->dificuldade_caminhar_impacto_atividades ?? null,
|
||||
'quedas_recorrentes' => $ivcf->quedas_recorrentes ?? null,
|
||||
'incontinencia' => $ivcf->incontinencia ?? null,
|
||||
'problema_visao_impacto_atividades' => $ivcf->problema_visao_impacto_atividades ?? null,
|
||||
'problema_audicao_impacto_atividades' => $ivcf->problema_audicao_impacto_atividades ?? null,
|
||||
'doencas_cronicas_multiplas' => $ivcf->doencas_cronicas_multiplas ?? null,
|
||||
'polifarmacia_5_ou_mais_medicamentos' => $ivcf->polifarmacia_5_ou_mais_medicamentos ?? null,
|
||||
'internacao_ultimos_6_meses' => $ivcf->internacao_ultimos_6_meses ?? null,
|
||||
];
|
||||
|
||||
$atendimento->perfis_epidemiologicos = $atendimento->perfisEpidemiologicos()->pluck('id');
|
||||
$atendimento->observacao_perfil_epidemiologico = $atendimento->observacao_perfil_epidemiologico ?? null;
|
||||
|
||||
return $atendimento;
|
||||
}) : [],
|
||||
'paciente' => null,
|
||||
'local_atendimento_id' => null,
|
||||
'tipo_atendimento_id' => null,
|
||||
'modalidade_id' => null,
|
||||
'turno_id' => null,
|
||||
'condicoes' => [],
|
||||
'cid' => null,
|
||||
'ciap' => null,
|
||||
'procedimentos' => [],
|
||||
'conduta_desfecho_id' => null,
|
||||
'exportacao' => $atendimento_domiciliar->exportacao ?? false,
|
||||
'condicao_avaliada' => [],
|
||||
'doenca_transmissivel' => [],
|
||||
'rastreamento' => [],
|
||||
'problemas_condicoes' => [],
|
||||
'ivcf' => [
|
||||
'deseja_preencher' => false,
|
||||
'estado_saude_geral' => null,
|
||||
'limitacao_compras' => null,
|
||||
'limitacao_gestao_financeira' => null,
|
||||
'limitacao_tarefas_domesticas' => null,
|
||||
'banho_independencia' => null,
|
||||
'relato_esquecimento_por_terceiros' => null,
|
||||
'esquecimento_piorando' => null,
|
||||
'esquecimento_impacta_atividades' => null,
|
||||
'humor_tristeza_desanimo' => null,
|
||||
'perda_interesse_atividades' => null,
|
||||
'limitacao_elevar_bracos' => null,
|
||||
'limitacao_motricidade_fina' => null,
|
||||
'perda_peso_nao_intencional' => null,
|
||||
'imc_abaixo_22' => null,
|
||||
'panturrilha_abaixo_31' => null,
|
||||
'marcha_lenta_4m_maior_5s' => null,
|
||||
'dificuldade_caminhar_impacto_atividades' => null,
|
||||
'quedas_recorrentes' => null,
|
||||
'incontinencia' => null,
|
||||
'problema_visao_impacto_atividades' => null,
|
||||
'problema_audicao_impacto_atividades' => null,
|
||||
'doencas_cronicas_multiplas' => null,
|
||||
'polifarmacia_5_ou_mais_medicamentos' => null,
|
||||
'internacao_ultimos_6_meses' => null,
|
||||
],
|
||||
'perfis_epidemiologicos' => [],
|
||||
'observacao_perfil_epidemiologico' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'unidades' => [],
|
||||
'infraestruturas' => [],
|
||||
'equipes' => [],
|
||||
'ocupacoes' => [],
|
||||
'unidadesAuxiliar' => [],
|
||||
'infraestruturasAuxiliar' => [],
|
||||
'equipesAuxiliar' => [],
|
||||
'ocupacoesAuxiliar' => [],
|
||||
'locais_atendimento' => LocalAtendimento::get(),
|
||||
'tipos_atendimento' => TipoAtendimento::whereIn('id', [
|
||||
AtencaoBasicaTipoAtendimento::ATENDIMENTO_PROGRAMADO,
|
||||
AtencaoBasicaTipoAtendimento::ATENDIMENTO_NAO_PROGRAMADO,
|
||||
AtencaoBasicaTipoAtendimento::VISITA_DOMICILIAR_POS_OBITO,
|
||||
])->get(),
|
||||
'modalidades' => ModalidadeAtencaoDomiciliar::whereIn('id', [
|
||||
Modalidade::AD_1,
|
||||
Modalidade::AD_2,
|
||||
Modalidade::AD_3,
|
||||
])->get(),
|
||||
'turnos' => Turno::get(),
|
||||
'condicoes' => AtendimentoDomiciliarCondicaoAvaliada::get()
|
||||
->map(function($query) {
|
||||
return [
|
||||
'nome' => $query->nome,
|
||||
'codigo' => $query->codigo
|
||||
];
|
||||
}),
|
||||
'procedimentos' => Procedimento::whereIn('codigo', [
|
||||
EnumAtendimentoDomiciliarProcedimento::ACOMPANHAMENTO_PACIENTE_REABILITACAO_COMUNICACAO,
|
||||
EnumAtendimentoDomiciliarProcedimento::ANTIBIOTICOTERAPIA_PARENTERAL,
|
||||
EnumAtendimentoDomiciliarProcedimento::ATENDIMENTO_ACOMPANHAMENTO_PACIENTE_REABILITACAO_DESENVOLVIMENTO_MOTOR,
|
||||
EnumAtendimentoDomiciliarProcedimento::ATENDIMENTO_FISIOTERAPEUTICO_PACIENTE_TRANSTORNO_RESPIRATORIO_SEM_COMPLICACOES_SISTEMICAS,
|
||||
EnumAtendimentoDomiciliarProcedimento::ATEMDIMENTO_MEDICO_FINALIDADE_ATESTAR_OBITO,
|
||||
EnumAtendimentoDomiciliarProcedimento::ATENDIMENTO_ACOMPANHAMENTO_REABILITACAO_MULTIPLAS_DEFICIENCIAS,
|
||||
EnumAtendimentoDomiciliarProcedimento::CATETERISMO_VESICAL_ALIVIO,
|
||||
EnumAtendimentoDomiciliarProcedimento::CATETERISMO_VESICAL_DEMORA,
|
||||
EnumAtendimentoDomiciliarProcedimento::COLETA_MATERIAL_EXAME_LABORATORIAL,
|
||||
EnumAtendimentoDomiciliarProcedimento::CUIDADOS_ESTOMAS,
|
||||
EnumAtendimentoDomiciliarProcedimento::CUIDADOS_TRAQUEOSTOMIA,
|
||||
EnumAtendimentoDomiciliarProcedimento::ENEMA,
|
||||
EnumAtendimentoDomiciliarProcedimento::OXIGENOTERAPIA,
|
||||
EnumAtendimentoDomiciliarProcedimento::RETIRADAS_PONTOS_CIRURGIAS_BASICAS,
|
||||
EnumAtendimentoDomiciliarProcedimento::SONDAGEM_GASTRICA,
|
||||
EnumAtendimentoDomiciliarProcedimento::TERAPIA_REIDRATACAO_ORAL,
|
||||
EnumAtendimentoDomiciliarProcedimento::TERAPIA_REIDRATACAO_PARENTERAL,
|
||||
EnumAtendimentoDomiciliarProcedimento::TERAPIA_FONOAUDIOLOGICA_INDIVIDUAL,
|
||||
EnumAtendimentoDomiciliarProcedimento::TRATAMENTO_TRAUMATISMO,
|
||||
EnumAtendimentoDomiciliarProcedimento::TRATAMENTO_REABILITACAO,
|
||||
EnumAtendimentoDomiciliarProcedimento::TRAQUEOSTOMIA,
|
||||
])
|
||||
->groupBy('codigo')
|
||||
->get()
|
||||
->map(function($query){
|
||||
return [
|
||||
'id' => $query->id,
|
||||
'nome' => $query->nome,
|
||||
'codigo' => $query->codigo
|
||||
];
|
||||
}),
|
||||
'condutaDesfecho' => CondutaDesfecho::get(),
|
||||
'condicao_avaliada' => CondicaoAvaliada::orderBy('descricao')->get(),
|
||||
'doenca_transmissivel' => DoencaTransmissivel::orderBy('descricao')->get(),
|
||||
'rastreamento' => Rastreamento::orderBy('descricao')->get(),
|
||||
'perfis_epidemiologicos' => CadastroPerfilEpidemiologico::orderBy('id')
|
||||
->get(['id', 'descricao']),
|
||||
];
|
||||
}
|
||||
|
||||
public static function edit()
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(request()->id),
|
||||
'form' => self::getFormData()
|
||||
];
|
||||
}
|
||||
|
||||
public static function update()
|
||||
{
|
||||
|
||||
return self::saveUpdate(request()->all());
|
||||
}
|
||||
|
||||
public static function saveUpdate($params)
|
||||
{
|
||||
self::validate($params);
|
||||
|
||||
$params = (object) $params;
|
||||
|
||||
$atendimento_domiciliar = AtendimentoDomiciliar::find($params->id);
|
||||
$atendimento_domiciliar->usuario_id = $params->usuario_id;
|
||||
$atendimento_domiciliar->equipe_id = $params->equipe_id;
|
||||
$atendimento_domiciliar->ocupacao_id = $params->ocupacao_id;
|
||||
$atendimento_domiciliar->usuario_auxiliar_id = $params->usuario_auxiliar_id ?? null;
|
||||
$atendimento_domiciliar->equipe_auxiliar_id = $params->equipe_auxiliar_id ?? null;
|
||||
$atendimento_domiciliar->ocupacao_auxiliar_id = $params->ocupacao_auxiliar_id ?? null;
|
||||
$atendimento_domiciliar->data = $params->data;
|
||||
$atendimento_domiciliar->save();
|
||||
|
||||
$atencaoBasicaProcedimento = AtencaoBasicaProcedimento::where('atendimento_domiciliar_id', $atendimento_domiciliar->id)->first();
|
||||
|
||||
foreach ($params->atendimentos as $atendimento) {
|
||||
|
||||
$atendimento_domiciliar_atendimento = AtendimentoDomiciliarAtendimento::find($atendimento['id']);
|
||||
|
||||
if (!$atendimento_domiciliar_atendimento) {
|
||||
|
||||
$atendimento_domiciliar_atendimento = AtendimentoDomiciliarAtendimento::create([
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar->id,
|
||||
'paciente_id' => $atendimento['paciente_id'],
|
||||
'local_atendimento_id' => $atendimento['local_atendimento_id'],
|
||||
'tipo_atendimento_id' => $atendimento['tipo_atendimento_id'],
|
||||
'modalidade_id' => $atendimento['modalidade_id'],
|
||||
'turno_id' => $atendimento['turno_id'],
|
||||
'conduta_desfecho_id' => $atendimento['conduta_desfecho_id'],
|
||||
'codigo_cid' => $atendimento['cid'] ?? null,
|
||||
'codigo_ciap' => $atendimento['ciap'] ?? null
|
||||
])->fresh();
|
||||
|
||||
if (in_array($atendimento['local_atendimento_id'], [11, 12, 13])) {
|
||||
$atendimento['local_atendimento_id'] = 6;
|
||||
}
|
||||
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::create([
|
||||
'paciente_id' => $atendimento['paciente_id'],
|
||||
'procedimento_id' => $atencaoBasicaProcedimento->id,
|
||||
'turno_id' => $atendimento['turno_id'],
|
||||
'local_atendimento_id' => $atendimento['local_atendimento_id'],
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar_atendimento->id
|
||||
])->fresh();
|
||||
} else {
|
||||
$atendimento_domiciliar_atendimento->paciente_id = $atendimento['paciente_id'];
|
||||
$atendimento_domiciliar_atendimento->local_atendimento_id = $atendimento['local_atendimento_id'];
|
||||
$atendimento_domiciliar_atendimento->tipo_atendimento_id = $atendimento['tipo_atendimento_id'];
|
||||
$atendimento_domiciliar_atendimento->modalidade_id = $atendimento['modalidade_id'];
|
||||
$atendimento_domiciliar_atendimento->turno_id = $atendimento['turno_id'];
|
||||
$atendimento_domiciliar_atendimento->conduta_desfecho_id = $atendimento['conduta_desfecho_id'];
|
||||
$atendimento_domiciliar_atendimento->codigo_cid = $atendimento['cid'] ?? null;
|
||||
$atendimento_domiciliar_atendimento->codigo_ciap = $atendimento['ciap'] ?? null;
|
||||
$atendimento_domiciliar_atendimento->save();
|
||||
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::where('atendimento_domiciliar_id', $atendimento['id'])->first();
|
||||
if ($procedimento_atendimento) {
|
||||
$procedimento_atendimento->paciente_id = $atendimento['paciente_id'];
|
||||
$procedimento_atendimento->turno_id = $atendimento['turno_id'];
|
||||
$procedimento_atendimento->local_atendimento_id = $atendimento['local_atendimento_id'];
|
||||
$procedimento_atendimento->save();
|
||||
} else {
|
||||
if (!empty($atendimento['procedimentos'])) {
|
||||
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::create([
|
||||
'paciente_id' => $atendimento['paciente_id'],
|
||||
'procedimento_id' => $atendimento_domiciliar->procedimento->id,
|
||||
'turno_id' => $atendimento['turno_id'],
|
||||
'local_atendimento_id' => $atendimento['local_atendimento_id'],
|
||||
'atendimento_domiciliar_id' => $atendimento_domiciliar_atendimento->id
|
||||
])->fresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
$condicoes = AtendimentoDomiciliarCondicao::where('atendimento_id', $atendimento_domiciliar_atendimento->id)->get();
|
||||
$condicaoIds = $condicoes->pluck('condicao_id')->toArray();
|
||||
|
||||
foreach ($atendimento['condicoes'] as $condicao) {
|
||||
if (!in_array($condicao, $condicaoIds)) {
|
||||
AtendimentoDomiciliarCondicao::create([
|
||||
'atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'condicao_id' => $condicao
|
||||
])->fresh();
|
||||
}
|
||||
}
|
||||
|
||||
$procedimentos = AtendimentoDomiciliarProcedimento::where('atendimento_id', $atendimento_domiciliar_atendimento->id)->get();
|
||||
$atendimento_procedimentos = $atendimento['procedimentos'];
|
||||
$procedimentos->each(function ($procedimento) use ($atendimento_procedimentos) {
|
||||
if (!in_array($procedimento->codigo_procedimento, array_column($atendimento_procedimentos, 'codigo'))) {
|
||||
$procedimento->delete();
|
||||
}
|
||||
});
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::where('atendimento_domiciliar_id', $atendimento_domiciliar_atendimento->id)->first();
|
||||
|
||||
if ($procedimento_atendimento) {
|
||||
|
||||
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimento_atendimento->id)
|
||||
->get()
|
||||
->each(function ($procedimento) use ($atendimento_procedimentos) {
|
||||
if (!in_array($procedimento->procedimento_id, array_column($atendimento_procedimentos, 'id'))) {
|
||||
$procedimento->delete();
|
||||
}
|
||||
});
|
||||
|
||||
$procedimentos_ficha_procedimentos = ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimento_atendimento->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimento['procedimentos'] as $procedimento) {
|
||||
if (!in_array($procedimento['codigo'], $procedimentos->pluck('codigo_procedimento')->toArray())) {
|
||||
AtendimentoDomiciliarProcedimento::create([
|
||||
'atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'codigo_procedimento' => $procedimento['codigo']
|
||||
])->fresh();
|
||||
}
|
||||
|
||||
if (!in_array($procedimento['id'], $procedimentos_ficha_procedimentos->pluck('procedimento_id')->toArray())) {
|
||||
ProcedimentoAtendimentoProcedimento::create([
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'procedimento_atendimento_id' => $procedimento_atendimento->id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self::saveProblemasCondicoes($atendimento_domiciliar_atendimento, $atendimento['problemas_condicoes']);
|
||||
|
||||
$atendimento_domiciliar_atendimento->condicaoAvaliada()->sync($atendimento['condicao_avaliada']);
|
||||
$atendimento_domiciliar_atendimento->doencaTransmissivel()->sync($atendimento['doenca_transmissivel']);
|
||||
$atendimento_domiciliar_atendimento->rastreamento()->sync($atendimento['rastreamento']);
|
||||
|
||||
if (isset($atendimento['ivcf']['deseja_preencher']) && $atendimento['ivcf']['deseja_preencher'] === true) {
|
||||
AtendimentoDomiciliarAtendimentoIvcf::updateOrCreate(
|
||||
[
|
||||
'atendimento_domiciliar_atendimento_id' => $atendimento_domiciliar_atendimento->id
|
||||
],
|
||||
[
|
||||
'atendimento_domiciliar_atendimento_id' => $atendimento_domiciliar_atendimento->id,
|
||||
'estado_saude_geral' => $atendimento['ivcf']['estado_saude_geral'],
|
||||
'limitacao_compras' => $atendimento['ivcf']['limitacao_compras'],
|
||||
'limitacao_gestao_financeira' => $atendimento['ivcf']['limitacao_gestao_financeira'],
|
||||
'limitacao_tarefas_domesticas' => $atendimento['ivcf']['limitacao_tarefas_domesticas'],
|
||||
'banho_independencia' => $atendimento['ivcf']['banho_independencia'],
|
||||
'relato_esquecimento_por_terceiros' => $atendimento['ivcf']['relato_esquecimento_por_terceiros'],
|
||||
'esquecimento_piorando' => $atendimento['ivcf']['esquecimento_piorando'],
|
||||
'esquecimento_impacta_atividades' => $atendimento['ivcf']['esquecimento_impacta_atividades'],
|
||||
'humor_tristeza_desanimo' => $atendimento['ivcf']['humor_tristeza_desanimo'],
|
||||
'perda_interesse_atividades' => $atendimento['ivcf']['perda_interesse_atividades'],
|
||||
'limitacao_elevar_bracos' => $atendimento['ivcf']['limitacao_elevar_bracos'],
|
||||
'limitacao_motricidade_fina' => $atendimento['ivcf']['limitacao_motricidade_fina'],
|
||||
'perda_peso_nao_intencional' => $atendimento['ivcf']['perda_peso_nao_intencional'],
|
||||
'imc_abaixo_22' => $atendimento['ivcf']['imc_abaixo_22'],
|
||||
'panturrilha_abaixo_31' => $atendimento['ivcf']['panturrilha_abaixo_31'],
|
||||
'marcha_lenta_4m_maior_5s' => $atendimento['ivcf']['marcha_lenta_4m_maior_5s'],
|
||||
'dificuldade_caminhar_impacto_atividades' => $atendimento['ivcf']['dificuldade_caminhar_impacto_atividades'],
|
||||
'quedas_recorrentes' => $atendimento['ivcf']['quedas_recorrentes'],
|
||||
'incontinencia' => $atendimento['ivcf']['incontinencia'],
|
||||
'problema_visao_impacto_atividades' => $atendimento['ivcf']['problema_visao_impacto_atividades'],
|
||||
'problema_audicao_impacto_atividades' => $atendimento['ivcf']['problema_audicao_impacto_atividades'],
|
||||
'doencas_cronicas_multiplas' => $atendimento['ivcf']['doencas_cronicas_multiplas'],
|
||||
'polifarmacia_5_ou_mais_medicamentos' => $atendimento['ivcf']['polifarmacia_5_ou_mais_medicamentos'],
|
||||
'internacao_ultimos_6_meses' => $atendimento['ivcf']['internacao_ultimos_6_meses'],
|
||||
]
|
||||
);
|
||||
} else {
|
||||
AtendimentoDomiciliarAtendimentoIvcf::where('atendimento_domiciliar_atendimento_id', $atendimento_domiciliar_atendimento->id)->delete();
|
||||
}
|
||||
}
|
||||
|
||||
AtendimentoDomiciliarAtendimento::whereNotIn('id', array_column($params->atendimentos, 'id'))
|
||||
->where('atendimento_domiciliar_id', $atendimento_domiciliar->id)
|
||||
->get()
|
||||
->each(function ($atendimento) {
|
||||
|
||||
DB::transaction(function () use ($atendimento) {
|
||||
|
||||
AtendimentoDomiciliarCondicao::where('atendimento_id', $atendimento->id)->delete();
|
||||
AtendimentoDomiciliarProcedimento::where('atendimento_id', $atendimento->id)->delete();
|
||||
|
||||
$atendimento->condicaoAvaliada()->sync([]);
|
||||
$atendimento->problemasCondicoes()->delete();
|
||||
|
||||
if ($procedimento = ProcedimentoAtendimento::where('atendimento_domiciliar_id', $atendimento->id)->first()) {
|
||||
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimento->id)->delete();
|
||||
$procedimento->delete();
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($atendimento) {
|
||||
|
||||
$cliente = config('database.default');
|
||||
|
||||
$inconsistenciaIds = DB::table('integracao_esus_inconsistencia_atendimento_domiciliar_atend')
|
||||
->where('atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->pluck('inconsistencia_id');
|
||||
|
||||
foreach ($inconsistenciaIds as $inconsistenciaId) {
|
||||
|
||||
$xmlPath = 'integracao' . DIRECTORY_SEPARATOR
|
||||
. 'esus' . DIRECTORY_SEPARATOR
|
||||
. 'inconsistencia' . DIRECTORY_SEPARATOR
|
||||
. 'xml-envio' . DIRECTORY_SEPARATOR
|
||||
. $cliente . DIRECTORY_SEPARATOR
|
||||
. $inconsistenciaId . '.xml';
|
||||
|
||||
Storage::disk('local')->delete($xmlPath);
|
||||
}
|
||||
|
||||
DB::table('integracao_esus_inconsistencia')
|
||||
->whereIn('id', $inconsistenciaIds)
|
||||
->delete();
|
||||
|
||||
$atendimento->delete();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
DB::transaction(function() use ($id) {
|
||||
$atendimento_domiciliar = AtendimentoDomiciliar::find($id);
|
||||
$atendimento_domiciliar->atendimentos->each(function($atendimento) {
|
||||
AtendimentoDomiciliarCondicao::where('atendimento_id', $atendimento->id)->delete();
|
||||
AtendimentoDomiciliarProcedimento::where('atendimento_id', $atendimento->id)->delete();
|
||||
$procedimento_atendimento = ProcedimentoAtendimento::where('atendimento_domiciliar_id', $atendimento->id)->first();
|
||||
if($procedimento_atendimento) {
|
||||
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimento_atendimento->id)->get()->each(function($procedimento) {
|
||||
$procedimento->delete();
|
||||
});
|
||||
$procedimento_atendimento->delete();
|
||||
}
|
||||
DB::table('atencao_basica_atendimento_domiciliar_atend_condicao_avaliada')->where('atendimento_domiciliar_atendimento_id', $atendimento->id)->delete();
|
||||
DB::table('atencao_basica_atendimento_domiciliar_atend_problema_condicao')->where('atendimento_domiciliar_atendimento_id', $atendimento->id)->delete();
|
||||
DB::table('atencao_basica_atendimento_domiciliar_atend_rastreamento')->where('atendimento_domiciliar_atendimento_id', $atendimento->id)->delete();
|
||||
$atendimento->delete();
|
||||
});
|
||||
AtencaoBasicaProcedimento::where('atendimento_domiciliar_id', $id)->delete();
|
||||
$atendimento_domiciliar->delete();
|
||||
});
|
||||
}
|
||||
|
||||
public static function getArea()
|
||||
{
|
||||
$paciente = Paciente::find(request()->paciente_id);
|
||||
if($paciente && $paciente->cidadao->domicilio_id) {
|
||||
$cadastro_domiciliar = CadastroDomiciliar::where('domicilio_id', $paciente->cidadao->domicilio_id)->first();
|
||||
if($cadastro_domiciliar) {
|
||||
return 'Área: ' . ($cadastro_domiciliar->microarea->descricao ?? '-') .
|
||||
' - Microárea: ' . ($cadastro_domiciliar->microarea->area->descricao ?? '-');
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
private static function getProblemasCondicoes($atendimento)
|
||||
{
|
||||
return AtendimentoDomiciliarAtendProblemaCondicao::where('atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->get()
|
||||
->map(fn ($problemaCondicao) => [
|
||||
'id' => $problemaCondicao->id,
|
||||
'ciap' => is_null($problemaCondicao->ciap_id) ? null : [
|
||||
'id' => $problemaCondicao->ciap->id,
|
||||
'codigo' => $problemaCondicao->ciap->codigo,
|
||||
'descricao' => $problemaCondicao->ciap->descricao,
|
||||
],
|
||||
'cid' => is_null($problemaCondicao->cid_id) ? null : [
|
||||
'id' => $problemaCondicao->cid->id,
|
||||
'codigo' => $problemaCondicao->cid->codigo,
|
||||
'nome' => $problemaCondicao->cid->nome,
|
||||
],
|
||||
])
|
||||
->all();
|
||||
}
|
||||
|
||||
private static function saveProblemasCondicoes($atendimento, $problemasCondicoes)
|
||||
{
|
||||
|
||||
$ids = collect($problemasCondicoes)->pluck('id')->filter()->toArray();
|
||||
$atendimento->problemasCondicoes()->whereNotIn('id', $ids)->delete();
|
||||
|
||||
if (!$problemasCondicoes) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($problemasCondicoes as $problemaCondicao) {
|
||||
|
||||
$problemaCondicaoCiapId = isset($problemaCondicao['ciap']['id']) ? $problemaCondicao['ciap']['id'] : null;
|
||||
$problemaCondicaoCidId = isset($problemaCondicao['cid']['id']) ? $problemaCondicao['cid']['id'] : null;
|
||||
|
||||
$data = [
|
||||
'ciap_id' => $problemaCondicaoCiapId,
|
||||
'cid_id' => $problemaCondicaoCidId,
|
||||
];
|
||||
|
||||
$atendimento->problemasCondicoes()->updateOrCreate(
|
||||
['id' => $problemaCondicao['id'] ?? null],
|
||||
$data
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user