1348 lines
66 KiB
PHP
1348 lines
66 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\Procedimento;
|
|
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\LocalAtendimento as EnumsLocalAtendimento;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
|
|
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
|
|
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
|
use App\Enums\Sigtap\Procedimento as EnumsSigtapProcedimento;
|
|
use App\Models\Ambulatorio\GlicemiaCapilarMomentoColeta;
|
|
use App\Models\AtencaoBasica\AtendimentoIndividual\AtendimentoIndividual;
|
|
use App\Models\AtencaoBasica\AtendimentoIndividual\AtendimentoIndividualProcedimento;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
|
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
|
|
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
|
|
use App\Models\AtencaoBasica\Procedimento\PequenaCirurgia;
|
|
use App\Models\AtencaoBasica\Procedimento\Procedimento;
|
|
use App\Models\AtencaoBasica\Procedimento\ProcedimentoAtendimento;
|
|
use App\Models\AtencaoBasica\Procedimento\ProcedimentoAtendimentoIvcf;
|
|
use App\Models\AtencaoBasica\Procedimento\ProcedimentoAtendimentoProcedimento;
|
|
use App\Models\AtencaoBasica\Procedimento\TesteRapido;
|
|
use App\Models\AtencaoBasica\Procedimento\ViaAdministracao;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
|
use App\Models\Cns\TermoInvalido;
|
|
use App\Models\Geral\Turno;
|
|
use App\Models\Sigtap\Competencia;
|
|
use App\Models\Sigtap\Ocupacao;
|
|
use App\Models\Sigtap\Procedimento as ModelSigtapProcedimento;
|
|
use App\Services\Service;
|
|
use App\Services\Sigtap\ProcedimentoValidationService;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use App\Models\Integracao\Esus\Inconsistencia;
|
|
|
|
class ProcedimentoService extends Service
|
|
{
|
|
|
|
public static function index()
|
|
{
|
|
return [
|
|
'form' => [
|
|
'data_atual' => Carbon::now()->format('Y-m-d'),
|
|
'unidades' => [],
|
|
'infraestruturas' => [],
|
|
'usuarios' => [],
|
|
],
|
|
'model' => [],
|
|
];
|
|
}
|
|
|
|
public static function create()
|
|
{
|
|
$atendimento = null;
|
|
|
|
$dataAtendimento = Carbon::now()->format('Y-m-d');
|
|
|
|
return [
|
|
'form' => self::getFormData($dataAtendimento, $atendimento),
|
|
'model' => self::getModelData($atendimento),
|
|
];
|
|
}
|
|
|
|
public static function getAtendimentos()
|
|
{
|
|
|
|
$periodo = is_null(request()->periodo) ? null : [
|
|
'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59)
|
|
];
|
|
|
|
return [
|
|
'atendimentos' => Procedimento::whereBetween('data_usuario_responsavel', $periodo)
|
|
->whereHas('equipe', function ($query) {
|
|
$query
|
|
->when(request()->unidade_id, fn ($q, $id) =>
|
|
$q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
|
->when(request()->infraestrutura_id, fn ($q, $id) =>
|
|
$q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
|
|
->when(request()->usuario_id, function ($query, $id) {
|
|
$query->where('usuario_id', $id);
|
|
});
|
|
})
|
|
->get()
|
|
->map(function ($query) {
|
|
return [
|
|
'id' => $query->id,
|
|
'exportado' => $query->exportacao_id ?? null,
|
|
'data' => $query->data_usuario_responsavel,
|
|
'unidade' => $query->equipe->unidade->nome_fantasia ?? null,
|
|
'local_atendimento' => $query->equipe->infraestrutura->nome ?? null,
|
|
'profissional' => $query->usuario->cidadao->nome ?? null,
|
|
'data_exportacao' => $query->data_hora_exportacao
|
|
? (new Carbon($query->data_hora_exportacao))->format('d/m/Y') . ' às '
|
|
. (new Carbon($query->data_hora_exportacao))->format('H:i')
|
|
: null,
|
|
'profissional_exportacao' => $query->usuarioExportacao->cidadao->nome ?? null,
|
|
];
|
|
}),
|
|
];
|
|
}
|
|
|
|
public static function getAtendimentoResponsavel()
|
|
{
|
|
|
|
return Procedimento::where('data_usuario_responsavel', request()->data_usuario_responsavel)
|
|
->where('usuario_id', request()->usuario_id)
|
|
->where('ocupacao_id', request()->ocupacao_id)
|
|
->where('equipe_id', request()->equipe_id)
|
|
->when(request()->id, fn ($q, $id) => $q->where('id', '!=', $id))
|
|
->whereHas('equipe', function ($query) {
|
|
$query->when(request()->infraestrutura_id, fn ($q, $id) =>
|
|
$q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id));
|
|
})
|
|
->whereHas('procedimentoAtendimentos', function ($query) {
|
|
$query->havingRaw('count(*) < 99');
|
|
})
|
|
->first();
|
|
}
|
|
|
|
public static function getAtendimentoPaciente()
|
|
{
|
|
|
|
return Procedimento::where('data_usuario_responsavel', request()->data_usuario_responsavel)
|
|
->where('ocupacao_id', request()->ocupacao_id)
|
|
->where('equipe_id', request()->equipe_id)
|
|
->when(request()->id, fn ($q, $id) => $q->where('id', '!=', $id))
|
|
->whereHas('equipe', function ($query) {
|
|
$query
|
|
->when(request()->unidade_id, fn ($q, $id) =>
|
|
$q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
|
->when(request()->infraestrutura_id, fn ($q, $id) =>
|
|
$q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id));
|
|
})
|
|
->whereHas('procedimentoAtendimentos', function ($query) {
|
|
$query->where('paciente_id', request()->paciente_id);
|
|
})
|
|
->first();
|
|
}
|
|
|
|
public static function loadUnidades()
|
|
{
|
|
|
|
$periodo = is_null(request()->periodo) ? null : [
|
|
'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59)
|
|
];
|
|
|
|
return DB::table('atencao_basica_procedimento')
|
|
->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_procedimento.equipe_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
|
->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo)
|
|
->distinct()
|
|
->orderBy('cadastro_unidade.cnes')
|
|
->get();
|
|
}
|
|
|
|
public static function loadLocaisAtendimento()
|
|
{
|
|
|
|
$periodo = is_null(request()->periodo) ? null : [
|
|
'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59)
|
|
];
|
|
|
|
return DB::table('atencao_basica_procedimento')
|
|
->select([
|
|
'cadastro_infraestrutura.id AS id',
|
|
DB::raw('IF(cadastro_infraestrutura.nome IS NULL, '
|
|
. 'cadastro_unidade.nome_fantasia, cadastro_infraestrutura.nome) as nome'),
|
|
])
|
|
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_procedimento.equipe_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo)
|
|
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
|
->distinct()
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
public static function loadProfissionais()
|
|
{
|
|
|
|
$periodo = is_null(request()->periodo) ? null : [
|
|
'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59)
|
|
];
|
|
|
|
return DB::table('atencao_basica_procedimento')
|
|
->select([
|
|
'cadastro_usuario.id AS id',
|
|
'cadastro_cidadao.nome as nome'
|
|
])
|
|
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_procedimento.equipe_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
|
|
->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_procedimento.usuario_id')
|
|
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
|
->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo)
|
|
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
|
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
|
|
->distinct()
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
public static function getUnidades()
|
|
{
|
|
|
|
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
|
->select([
|
|
'cadastro_unidade.id AS id',
|
|
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
|
|
])
|
|
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
|
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
|
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
|
->distinct()
|
|
->orderBy('cadastro_unidade.cnes')
|
|
->get();
|
|
}
|
|
|
|
public static function getInfraestruturas()
|
|
{
|
|
|
|
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
|
->select([
|
|
'cadastro_infraestrutura.id AS id',
|
|
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
|
|
])
|
|
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
|
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
|
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
|
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
|
|
->distinct()
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
public static function getEquipes()
|
|
{
|
|
|
|
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
|
|
->select([
|
|
'atencao_basica_parametrizacao_equipe.id AS id',
|
|
DB::raw("
|
|
CONCAT(
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine)
|
|
ELSE ''
|
|
END,
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: '
|
|
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(atencao_basica_parametrizacao_area.descricao, ''),
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: '
|
|
WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
|
|
) AS descricao
|
|
")
|
|
])
|
|
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
|
|
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
|
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
|
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
|
|
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
|
|
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
|
|
->get();
|
|
}
|
|
|
|
public static function getOcupacoes()
|
|
{
|
|
$usuario = Usuario::findOrFail(request()->usuario_id);
|
|
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::PROCEDIMENTOS)->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 getCadastroIndividual()
|
|
{
|
|
return CadastroIndividual::where('paciente_id', request()->paciente_id)->select('id')->first();
|
|
}
|
|
|
|
private static function getFormData()
|
|
{
|
|
return [
|
|
'data_atual' => Carbon::now()->format('d/m/Y'),
|
|
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
|
|
'turnos' => Turno::orderBy('nome')->get(),
|
|
'local_atendimento' => LocalAtendimento::whereNotIn('id', [
|
|
EnumsLocalAtendimento::HOSPITAL,
|
|
EnumsLocalAtendimento::UNIDADE_PRONTO_ATENDIMENTO,
|
|
EnumsLocalAtendimento::CACON_UNACON,
|
|
])
|
|
->orderBy('descricao')
|
|
->get(),
|
|
'procedimentos' => ModelSigtapProcedimento::whereIn('codigo', [
|
|
EnumsSigtapProcedimento::MEDICAO_PESO,
|
|
EnumsSigtapProcedimento::MEDICAO_ALTURA,
|
|
EnumsSigtapProcedimento::AFERICAO_TEMPERATURA,
|
|
EnumsSigtapProcedimento::AFERICAO_PRESSAO_ARTERIAL,
|
|
EnumsSigtapProcedimento::AVALIACAO_ANTROPOMETRICA,
|
|
EnumsSigtapProcedimento::GLICEMIA_CAPILAR,
|
|
EnumsSigtapProcedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL,
|
|
])
|
|
->where('competencia_id', function ($query) {
|
|
$query->select('sigtap.competencia.id')
|
|
->from('sigtap.competencia')
|
|
->orderByDesc('sigtap.competencia.valor')
|
|
->limit(1);
|
|
})
|
|
->groupBy('codigo')
|
|
->get(),
|
|
'sigtap_competencias' => Competencia::orderByDesc('valor')->take(4)->get(),
|
|
'procedimento_pequena_cirurgia' => [],
|
|
'administracao_medicamento' => [],
|
|
'teste_rapido' => [],
|
|
'procedimento_usuario' => [],
|
|
'equipes' => [],
|
|
'ocupacoes' => [],
|
|
'momentos_coleta' => GlicemiaCapilarMomentoColeta::orderBy('id')->get(['id', 'nome'])
|
|
];
|
|
}
|
|
|
|
public static function getProcedimentos()
|
|
{
|
|
|
|
$ocupacao = Ocupacao::findOrFail(request()->ocupacao_id);
|
|
$paciente = Paciente::findOrFail(request()->paciente_id);
|
|
|
|
$testesRapido = TesteRapido::orderBy('descricao')->get();
|
|
$procedimentosTesteRapido = collect();
|
|
|
|
foreach ($testesRapido as $testeRapido) {
|
|
|
|
if ($testeRapido->codigo_procedimento) {
|
|
|
|
$procedimento = self::getProcedimentoCompetencia($testeRapido->codigo_procedimento);
|
|
$validation = new ProcedimentoValidationService($procedimento);
|
|
|
|
$procedimentosTesteRapido->push([
|
|
'id' => $testeRapido->id,
|
|
'descricao' => $testeRapido->descricao,
|
|
'competencia_id' => $procedimento->competencia_id,
|
|
'is_disabled' => !$validation->isOcupacaoValid($ocupacao)
|
|
|| !$validation->isSexoValid($paciente->cidadao->sexo)
|
|
|| !$validation->isIdadeValid($paciente->cidadao->idade['anos'])
|
|
]);
|
|
}
|
|
else {
|
|
|
|
$procedimentosTesteRapido->push([
|
|
'id' => $testeRapido->id,
|
|
'descricao' => $testeRapido->descricao,
|
|
'competencia_id' => null,
|
|
'is_disabled' => false
|
|
]);
|
|
}
|
|
}
|
|
|
|
$viasAdministracao = ViaAdministracao::orderBy('descricao')->get();
|
|
$procedimentosVia = collect();
|
|
|
|
foreach ($viasAdministracao as $viaAdministracao) {
|
|
|
|
$procedimento = self::getProcedimentoCompetencia($viaAdministracao->codigo_procedimento);
|
|
$validation = new ProcedimentoValidationService($procedimento);
|
|
|
|
$procedimentosVia->push([
|
|
'id' => $viaAdministracao->id,
|
|
'descricao' => $viaAdministracao->descricao,
|
|
'competencia_id' => $procedimento->competencia_id,
|
|
'is_disabled' => !$validation->isOcupacaoValid($ocupacao)
|
|
|| !$validation->isSexoValid($paciente->cidadao->sexo)
|
|
|| !$validation->isIdadeValid($paciente->cidadao->idade['anos'])
|
|
]);
|
|
}
|
|
|
|
$pequenasCirurgia = PequenaCirurgia::orderBy('descricao')->get();
|
|
$procedimentosPequenasCirurgia = collect();
|
|
|
|
foreach ($pequenasCirurgia as $pequenaCirurgia) {
|
|
|
|
if ($pequenaCirurgia->codigo_procedimento) {
|
|
|
|
$procedimento = self::getProcedimentoCompetencia($pequenaCirurgia->codigo_procedimento);
|
|
$validation = new ProcedimentoValidationService($procedimento);
|
|
|
|
$procedimentosPequenasCirurgia->push([
|
|
'id' => $pequenaCirurgia->id,
|
|
'descricao' => $pequenaCirurgia->descricao,
|
|
'competencia_id' => $procedimento->competencia_id,
|
|
'is_disabled' => !$validation->isOcupacaoValid($ocupacao)
|
|
|| !$validation->isSexoValid($paciente->cidadao->sexo)
|
|
|| !$validation->isIdadeValid($paciente->cidadao->idade['anos'])
|
|
]);
|
|
} else {
|
|
|
|
$procedimentosPequenasCirurgia->push([
|
|
'id' => $pequenaCirurgia->id,
|
|
'descricao' => $pequenaCirurgia->descricao,
|
|
'competencia_id' => null,
|
|
'is_disabled' => false,
|
|
]);
|
|
|
|
}
|
|
}
|
|
|
|
return [
|
|
'teste_rapido' => $procedimentosTesteRapido,
|
|
'administracao_medicamento' => $procedimentosVia,
|
|
'procedimento_pequena_cirurgia' => $procedimentosPequenasCirurgia,
|
|
];
|
|
}
|
|
|
|
public static function getProcedimentosUsuario()
|
|
{
|
|
|
|
$ocupacao = Ocupacao::findOrFail(request()->ocupacao_id);
|
|
|
|
$sigtapProcedimentos = ModelSigtapProcedimento::whereIn('codigo', [
|
|
EnumsSigtapProcedimento::MEDICAO_PESO,
|
|
EnumsSigtapProcedimento::MEDICAO_ALTURA,
|
|
EnumsSigtapProcedimento::AFERICAO_TEMPERATURA,
|
|
EnumsSigtapProcedimento::AFERICAO_PRESSAO_ARTERIAL,
|
|
EnumsSigtapProcedimento::AVALIACAO_ANTROPOMETRICA,
|
|
EnumsSigtapProcedimento::GLICEMIA_CAPILAR,
|
|
EnumsSigtapProcedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL,
|
|
])
|
|
->groupBy('codigo')
|
|
->get();
|
|
|
|
$procedimentos = collect();
|
|
|
|
foreach ($sigtapProcedimentos as $sigtapProcedimento) {
|
|
|
|
$procedimento = self::getProcedimentoCompetencia($sigtapProcedimento->codigo);
|
|
$validation = new ProcedimentoValidationService($procedimento);
|
|
|
|
$procedimentos->push([
|
|
'id' => $sigtapProcedimento->id,
|
|
'descricao' => $sigtapProcedimento->nome,
|
|
'codigo' => $sigtapProcedimento->codigo,
|
|
'is_disabled' => !$validation->isOcupacaoValid($ocupacao)
|
|
]);
|
|
}
|
|
|
|
return $procedimentos;
|
|
}
|
|
|
|
private static function getProcedimentoCompetencia($codigo)
|
|
{
|
|
return ModelSigtapProcedimento::where(
|
|
'codigo', $codigo
|
|
)
|
|
->orderByDesc('competencia_id')
|
|
->firstOrFail();
|
|
}
|
|
|
|
private static function getModelData($procedimento = null)
|
|
{
|
|
return [
|
|
'id' => $procedimento->id ?? null,
|
|
'atendimento_domiciliar_id' => $procedimento->atendimento_domiciliar_id ?? null,
|
|
'exportado' => $procedimento->atendimentoDomiciliar->exportacao ?? null,
|
|
'cadastro' => [
|
|
'usuario' => [
|
|
'id' => $procedimento->usuario->id ?? null,
|
|
'cidadao_nome' => $procedimento->usuario->cidadao->nome ?? null,
|
|
],
|
|
'unidade_id' => $procedimento->equipe->unidade_id ?? null,
|
|
'infraestrutura_id' => $procedimento->equipe->infraestrutura_id ?? null,
|
|
'equipe_id' => $procedimento->equipe_id ?? null,
|
|
'ocupacao_id' => $procedimento->ocupacao_id ?? null,
|
|
'data_usuario_responsavel' => $procedimento->data_usuario_responsavel ?? Carbon::now()->format('Y-m-d'),
|
|
],
|
|
'atendimentos' => $procedimento
|
|
? ProcedimentoAtendimento::where('procedimento_id', $procedimento->id)
|
|
->get()
|
|
->map(function ($atendimento) {
|
|
|
|
$ivcf = ProcedimentoAtendimentoIvcf::where('procedimento_atendimento_id', $atendimento->id)->first();
|
|
|
|
$atendimentoIvcf = [
|
|
'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,
|
|
];
|
|
|
|
return [
|
|
'id' => $atendimento ? $atendimento->id : null,
|
|
'nome' => isset($atendimento->paciente->cidadao->nome)
|
|
? $atendimento->paciente->cidadao->nome
|
|
: null,
|
|
'nome_social' => isset($atendimento->paciente->cidadao->nome_social)
|
|
? $atendimento->paciente->cidadao->nome_social
|
|
: null,
|
|
'prefere_nome_social' => isset($atendimento->paciente->cidadao) &&
|
|
$atendimento->paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
'prontuario' => $atendimento->paciente->prontuario ?? null,
|
|
'paciente_id' => $atendimento->paciente->id ?? null,
|
|
'paciente' => [
|
|
'id' => $atendimento->paciente->id ?? null,
|
|
'prontuario' => $atendimento->paciente->prontuario ?? null,
|
|
'cidadao' => [
|
|
'nome' => $atendimento->paciente->cidadao->nome ?? null,
|
|
'nome_social' => $atendimento->paciente->cidadao->nome_social ?? null,
|
|
'prefere_nome_social' => isset($atendimento->paciente->cidadao) &&
|
|
$atendimento->paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
'domicilio_id' => $atendimento->paciente->cidadao->domicilio_id ?? null,
|
|
'cns' => isset($atendimento->paciente->cidadao->cns)
|
|
? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns)
|
|
: '',
|
|
'cpf' => isset($atendimento->paciente->cidadao->cpf)
|
|
? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : null,
|
|
'dataNascimento' => $atendimento->paciente->cidadao->data_nascimento ?? null,
|
|
'idade' => $atendimento->paciente->cidadao->idade
|
|
],
|
|
],
|
|
'cns' => isset($atendimento->paciente->cidadao->cns)
|
|
? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : '',
|
|
'cpf' => isset($atendimento->paciente->cidadao->cpf)
|
|
? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : null,
|
|
'dataNascimento' => $atendimento->paciente->cidadao->data_nascimento ?? null,
|
|
'turno_id' => $atendimento ? $atendimento->turno_id : null,
|
|
'turno' => $atendimento ? $atendimento->turno->descricao : null,
|
|
'microarea' => $atendimento && $atendimento->microarea_id
|
|
? ($atendimento->microarea->descricao
|
|
? 'INE: ' . str_pad($atendimento->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT)
|
|
. ' - ÁREA: ' . $atendimento->microarea->area->descricao
|
|
. ' - MICROÁREA: ' . $atendimento->microarea->descricao
|
|
: 'INE: ' . str_pad($atendimento->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT)
|
|
. ' - ÁREA: ' . $atendimento->microarea->area->descricao)
|
|
: null,
|
|
'local_atendimento_id' => $atendimento ? $atendimento->local_atendimento_id : null,
|
|
'local_atendimento' => $atendimento ? $atendimento->localAtendimento->descricao : null,
|
|
'microarea_id' => $atendimento ? $atendimento->microarea_id : null,
|
|
'tipo_atendimento_id' => $atendimento ? $atendimento->tipo_atendimento_id : null,
|
|
'perimetro_cefalico' => $atendimento ? $atendimento->perimetro_cefalico : null,
|
|
'glicemia' => $atendimento ? $atendimento->glicemia_capilar : null,
|
|
'momento_coleta_id' => $atendimento ? $atendimento->momento_coleta_id : null,
|
|
'saturacao_o2' => $atendimento ? $atendimento->saturacao_o2 : null,
|
|
'circunferencia_abdominal' => $atendimento ? $atendimento->circunferencia_abdominal : null,
|
|
'perimetro_panturrilha' => $atendimento ? $atendimento->perimetro_panturrilha : null,
|
|
'frequencia_cardiaca' => $atendimento ? $atendimento->frequencia_cardiaca : null,
|
|
'frequencia_respiratoria' => $atendimento ? $atendimento->frequencia_respiratoria : null,
|
|
'peso' => $atendimento ? $atendimento->peso : null,
|
|
'altura' => $atendimento ? $atendimento->altura : null,
|
|
'temperatura' => $atendimento ? $atendimento->temperatura : null,
|
|
'afericao_pa' => $atendimento ? $atendimento->afericao_pa : null,
|
|
'escuta_inicial' => $atendimento ? $atendimento->escuta_inicial : null,
|
|
'exame_laboratorial' => $atendimento ? $atendimento->exame_laboratorial : null,
|
|
'teste_rapido' => $atendimento ? $atendimento->testesRapidos->pluck('id') : [],
|
|
'procedimento_pequena_cirurgia' => $atendimento ? $atendimento->pequenasCirurgias->pluck('id') : [],
|
|
'administracao_medicamento' => $atendimento ? $atendimento->administracaoMedicamentos->pluck('id') : [],
|
|
'ivcf' => $atendimentoIvcf,
|
|
'procedimentos' => $atendimento ? ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $atendimento->id)
|
|
->get()
|
|
->map(function ($query) {
|
|
return [
|
|
'id' => $query->procedimento->id ?? null,
|
|
'codigo' => $query->procedimento->codigo ?? null,
|
|
'nome' => $query->procedimento->nome ?? null,
|
|
];
|
|
})
|
|
->sortBy('nome')
|
|
->values() : [],
|
|
];
|
|
})
|
|
->sortBy('id')
|
|
->values()
|
|
: [],
|
|
'procedimento_consolidado' => [
|
|
'afericao_pa' => $procedimento->afericao_pa ?? null,
|
|
'curativo' => $procedimento->curativo_simples ?? null,
|
|
'glicemia_capilar' => $procedimento->glicemia_capilar ?? null,
|
|
'peso' => $procedimento->medicao_peso ?? null,
|
|
'exame_laboratorial' => $procedimento->coleta_material_exame_laboratorial ?? null,
|
|
'temperatura' => $procedimento->afericao_temperatura ?? null,
|
|
'altura' => $procedimento->medicao_altura ?? null,
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function showAtendimento($id)
|
|
{
|
|
return Procedimento::findOrFail($id);
|
|
}
|
|
|
|
public static function edit($id)
|
|
{
|
|
|
|
$atendimento = self::showAtendimento($id);
|
|
|
|
$dataAtendimento = $atendimento->data_usuario_responsavel;
|
|
|
|
return [
|
|
'form' => self::getFormData($dataAtendimento, $atendimento),
|
|
'model' => self::getModelData($atendimento),
|
|
];
|
|
}
|
|
|
|
public static function show()
|
|
{
|
|
|
|
$atendimento = null;
|
|
|
|
$dataAtendimento = Carbon::now()->format('Y-m-d');
|
|
|
|
return [
|
|
'form' => self::getFormData($dataAtendimento, $atendimento),
|
|
'model' => self::getModelData($atendimento),
|
|
];
|
|
}
|
|
|
|
public static function store()
|
|
{
|
|
self::saveStore(request()->all());
|
|
}
|
|
|
|
public static function saveStore($params)
|
|
{
|
|
|
|
self::validate($params);
|
|
|
|
$cadastro = $params['cadastro'];
|
|
|
|
if ($params['id'] && is_numeric($params['id'])) {
|
|
|
|
$procedimento = Procedimento::findOrFail($params['id']) ?? new Procedimento();
|
|
} else {
|
|
|
|
$procedimento = self::getFichaProcedimento($cadastro) ?? new Procedimento();
|
|
}
|
|
|
|
$procedimento->data_usuario_responsavel = $cadastro['data_usuario_responsavel'];
|
|
$procedimento->usuario_id = $cadastro['usuario_id'];
|
|
$procedimento->equipe_id = $cadastro['equipe_id'];
|
|
$procedimento->ocupacao_id = $cadastro['ocupacao_id'];
|
|
|
|
if(!is_null($procedimento->atendimento_domiciliar_id)) {
|
|
$procedimento->atendimentoDomiciliar->data = $cadastro['data_usuario_responsavel'];
|
|
$procedimento->atendimentoDomiciliar->usuario_id = $cadastro['usuario_id'];
|
|
$procedimento->atendimentoDomiciliar->equipe_id = $cadastro['equipe_id'];
|
|
$procedimento->atendimentoDomiciliar->ocupacao_id = $cadastro['ocupacao_id'];
|
|
}
|
|
|
|
$procedimento_consolidado = $params['procedimento_consolidado'];
|
|
$procedimento->afericao_pa = $procedimento_consolidado['afericao_pa'];
|
|
$procedimento->medicao_altura = $procedimento_consolidado['altura'];
|
|
$procedimento->curativo_simples = $procedimento_consolidado['curativo'];
|
|
$procedimento->coleta_material_exame_laboratorial = $procedimento_consolidado['exame_laboratorial'];
|
|
$procedimento->glicemia_capilar = $procedimento_consolidado['glicemia_capilar'];
|
|
$procedimento->medicao_peso = $procedimento_consolidado['peso'];
|
|
$procedimento->afericao_temperatura = $procedimento_consolidado['temperatura'];
|
|
|
|
$procedimento->save();
|
|
|
|
self::saveAtendimentos($params, $procedimento);
|
|
}
|
|
|
|
private static function saveProcedimentos($procedimentos, $procedimentoAtendimento)
|
|
{
|
|
|
|
AtendimentoIndividualProcedimento::where('atendimento_individual_id', $procedimentoAtendimento->atendimento_individual_id)
|
|
->delete();
|
|
|
|
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->delete();
|
|
|
|
foreach ($procedimentos as $procedimento) {
|
|
|
|
$existe = ProcedimentoAtendimentoProcedimento::where('procedimento_id', $procedimento['id'])
|
|
->where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->first();
|
|
|
|
if (!$existe) {
|
|
|
|
$AtendimentoIndividualProcedimento = new ProcedimentoAtendimentoProcedimento();
|
|
$AtendimentoIndividualProcedimento->procedimento_id = $procedimento['id'];
|
|
$AtendimentoIndividualProcedimento->procedimento_atendimento_id = $procedimentoAtendimento->id;
|
|
$AtendimentoIndividualProcedimento->save();
|
|
|
|
}
|
|
|
|
if ($procedimentoAtendimento->atendimento_individual_id) {
|
|
|
|
$AtendimentoIndividualProcedimento = new AtendimentoIndividualProcedimento();
|
|
$AtendimentoIndividualProcedimento->procedimento_id = $procedimento['id'];
|
|
$AtendimentoIndividualProcedimento->atendimento_individual_id = $procedimentoAtendimento->atendimento_individual_id;
|
|
$AtendimentoIndividualProcedimento->save();
|
|
}
|
|
|
|
if($procedimentoAtendimento->atendimento_domiciliar_id) {
|
|
$procedimentoAtendimento->atendimentoDomiciliar->procedimentos()->each(function($procedimento) use ($procedimentos) {
|
|
if(!in_array($procedimento->codigo, array_column($procedimentos, 'codigo'))) {
|
|
$procedimento->delete();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function saveAtendimentos($params, $procedimento)
|
|
{
|
|
|
|
$ids = [];
|
|
|
|
foreach ($params['atendimentos'] as $atendimento) {
|
|
|
|
$procedimentoAtendimento = isset($atendimento['id']) && is_numeric($atendimento['id'])
|
|
? ProcedimentoAtendimento::findOrFail($atendimento['id'])
|
|
: (self::getFichaAtendimento($procedimento, $atendimento) ?? new ProcedimentoAtendimento());
|
|
|
|
$procedimentoAtendimento->paciente_id = $atendimento['paciente_id'];
|
|
$procedimentoAtendimento->procedimento_id = $procedimento->id;
|
|
$procedimentoAtendimento->turno_id = $atendimento['turno_id'];
|
|
$procedimentoAtendimento->local_atendimento_id = $atendimento['local_atendimento_id'];
|
|
$procedimentoAtendimento->microarea_id = $atendimento['microarea_id'];
|
|
$procedimentoAtendimento->latitude = $atendimento['latitude'] ?? null;
|
|
$procedimentoAtendimento->longitude = $atendimento['longitude'] ?? null;
|
|
|
|
if (!isset($params['origem'])) {
|
|
|
|
$procedimentoAtendimento->escuta_inicial = $atendimento['escuta_inicial'];
|
|
$procedimentoAtendimento->peso = $atendimento['peso'];
|
|
$procedimentoAtendimento->altura = $atendimento['altura'];
|
|
$procedimentoAtendimento->temperatura = $atendimento['temperatura'];
|
|
$procedimentoAtendimento->afericao_pa = $atendimento['afericao_pa'];
|
|
$procedimentoAtendimento->glicemia_capilar = $atendimento['glicemia'];
|
|
$procedimentoAtendimento->perimetro_cefalico = $atendimento['perimetro_cefalico'];
|
|
$procedimentoAtendimento->frequencia_respiratoria = $atendimento['frequencia_respiratoria'];
|
|
$procedimentoAtendimento->frequencia_cardiaca = $atendimento['frequencia_cardiaca'];
|
|
$procedimentoAtendimento->saturacao_o2 = $atendimento['saturacao_o2'];
|
|
$procedimentoAtendimento->circunferencia_abdominal = $atendimento['circunferencia_abdominal'];
|
|
$procedimentoAtendimento->perimetro_panturrilha = $atendimento['perimetro_panturrilha'];
|
|
$procedimentoAtendimento->momento_coleta_id = $atendimento['momento_coleta_id'];
|
|
$procedimentoAtendimento->exame_laboratorial = $atendimento['exame_laboratorial'];
|
|
|
|
if ($procedimentoAtendimento->atendimento_individual_id && $procedimentoAtendimento->escuta_inicial) {
|
|
|
|
AtendimentoIndividual::where('id', $procedimentoAtendimento->atendimento_individual_id)
|
|
->update(['tipo_atendimento_id' => TipoAtendimento::ESCUTA_INICIAL_ORIENTACAO]);
|
|
}
|
|
|
|
} else if (isset($params['origem']) && $params['origem'] == 'atendimento_individual') {
|
|
|
|
if (!$procedimentoAtendimento->atendimento_individual_id) {
|
|
|
|
$procedimentos = ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->get();
|
|
|
|
foreach ($procedimentos as $procedimento) {
|
|
|
|
$procedimentoId = $procedimento['procedimento_id'];
|
|
|
|
$existe = false;
|
|
foreach ($atendimento['procedimentos'] as $proc) {
|
|
if ($proc['id'] == $procedimentoId) {
|
|
$existe = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$existe) {
|
|
$atendimento['procedimentos'][] = [
|
|
'id' => $procedimentoId
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$procedimentoAtendimento->atendimento_individual_id = $atendimento['atendimento_individual_id'];
|
|
$procedimentoAtendimento->peso = $atendimento['peso'];
|
|
$procedimentoAtendimento->altura = $atendimento['altura'];
|
|
$procedimentoAtendimento->temperatura = $atendimento['temperatura'];
|
|
$procedimentoAtendimento->afericao_pa = $atendimento['afericao_pa'];
|
|
$procedimentoAtendimento->glicemia_capilar = $atendimento['glicemia'];
|
|
$procedimentoAtendimento->perimetro_cefalico = $atendimento['perimetro_cefalico'];
|
|
$procedimentoAtendimento->frequencia_respiratoria = $atendimento['frequencia_respiratoria'];
|
|
$procedimentoAtendimento->frequencia_cardiaca = $atendimento['frequencia_cardiaca'];
|
|
$procedimentoAtendimento->saturacao_o2 = $atendimento['saturacao_o2'];
|
|
$procedimentoAtendimento->circunferencia_abdominal = $atendimento['circunferencia_abdominal'];
|
|
$procedimentoAtendimento->perimetro_panturrilha = $atendimento['perimetro_panturrilha'];
|
|
$procedimentoAtendimento->momento_coleta_id = $atendimento['momento_coleta_id'];
|
|
$procedimentoAtendimento->exame_laboratorial = $atendimento['exame_laboratorial'];
|
|
$procedimentoAtendimento->escuta_inicial = $atendimento['tipo_atendimento_id'] == TipoAtendimento::ESCUTA_INICIAL_ORIENTACAO ? true : false;
|
|
}
|
|
|
|
if (isset($params['origem']) && $params['origem'] == 'atividade_coletiva') {
|
|
|
|
$procedimentoAtendimento->peso = $atendimento['peso'];
|
|
$procedimentoAtendimento->altura = $atendimento['altura'];
|
|
}
|
|
|
|
$procedimentoAtendimento->save();
|
|
|
|
if (!isset($params['origem'])) {
|
|
|
|
$procedimentoAtendimento->testesRapidos()->sync($atendimento['teste_rapido']);
|
|
$procedimentoAtendimento->pequenasCirurgias()->sync($atendimento['procedimento_pequena_cirurgia']);
|
|
$procedimentoAtendimento->administracaoMedicamentos()->sync($atendimento['administracao_medicamento']);
|
|
|
|
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->delete();
|
|
}
|
|
|
|
if (isset($atendimento['ivcf']['deseja_preencher']) && $atendimento['ivcf']['deseja_preencher'] === true) {
|
|
ProcedimentoAtendimentoIvcf::updateOrCreate(
|
|
[
|
|
'procedimento_atendimento_id' => $procedimentoAtendimento->id
|
|
],
|
|
[
|
|
'procedimento_atendimento_id' => $procedimentoAtendimento->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 {
|
|
ProcedimentoAtendimentoIvcf::where('procedimento_atendimento_id', $procedimentoAtendimento->id)->delete();
|
|
}
|
|
|
|
self::saveProcedimentos($atendimento['procedimentos'], $procedimentoAtendimento);
|
|
|
|
$ids[] = $procedimentoAtendimento->id;
|
|
}
|
|
|
|
if (!isset($params['origem'])) {
|
|
|
|
self::destroyMultiple(ProcedimentoAtendimento::where('procedimento_id', $procedimento->id)
|
|
->whereNotIn('id', $ids)->pluck('id'));
|
|
}
|
|
}
|
|
|
|
public static function getCadastroDomiciliar()
|
|
{
|
|
|
|
$cadastro = CadastroDomiciliar::where('domicilio_id', request()->domicilio_id)->first();
|
|
$equipe = Equipe::where('id', request()->profissional_equipe_id)->first();
|
|
|
|
if ($cadastro) {
|
|
|
|
$descricao = $cadastro->microarea
|
|
? 'INE: ' . str_pad($cadastro->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: '
|
|
. $cadastro->microarea->area->descricao . ' - MICROÁREA: '
|
|
. $cadastro->microarea->descricao
|
|
: 'INE: ' . str_pad($cadastro->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: '
|
|
. $cadastro->microarea->area->descricao;
|
|
|
|
return [
|
|
'area_id' => $cadastro->microarea->area->id ?? null,
|
|
'microarea_id' => $cadastro->microarea->id ?? null,
|
|
'descricao' => $descricao ?? null,
|
|
'pertence_area' => $cadastro->microarea->area
|
|
&& $cadastro->microarea->area->id == $equipe->area_id ? true : false,
|
|
];
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
private static function destroyMultiple($ids)
|
|
{
|
|
|
|
foreach ($ids as $id) {
|
|
|
|
$procedimentoAtendimentos = ProcedimentoAtendimento::where('id', $id)->get();
|
|
|
|
foreach ($procedimentoAtendimentos as $procedimentoAtendimento) {
|
|
|
|
if ($procedimentoAtendimento->atendimento_individual_id) {
|
|
|
|
AtendimentoIndividualProcedimento::where('atendimento_individual_id', $procedimentoAtendimento->atendimento_individual_id)
|
|
->delete();
|
|
}
|
|
|
|
if($procedimentoAtendimento->atendimento_domiciliar_id) {
|
|
$procedimentoAtendimento->atendimentoDomiciliar->each(function($atendimento) {
|
|
$atendimento->procedimentos->delete();
|
|
});
|
|
$procedimentoAtendimento->atendimentoDomiciliar->delete();
|
|
}
|
|
|
|
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->delete();
|
|
|
|
$procedimentoAtendimento->testesRapidos()->sync([]);
|
|
$procedimentoAtendimento->pequenasCirurgias()->sync([]);
|
|
$procedimentoAtendimento->administracaoMedicamentos()->sync([]);
|
|
|
|
DB::table('integracao_esus_inconsistencia_procedimento_atendimento')
|
|
->where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->delete();
|
|
|
|
$procedimentoAtendimento->delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function destroy($id)
|
|
{
|
|
$procedimentoAtendimentos = ProcedimentoAtendimento::where('procedimento_id', $id)->get();
|
|
|
|
foreach ($procedimentoAtendimentos as $procedimentoAtendimento) {
|
|
if ($procedimentoAtendimento->atendimento_individual_id) {
|
|
AtendimentoIndividualProcedimento::where('atendimento_individual_id',
|
|
$procedimentoAtendimento->atendimento_individual_id)->delete();
|
|
}
|
|
|
|
ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id',
|
|
$procedimentoAtendimento->id)->delete();
|
|
|
|
$procedimentoAtendimento->testesRapidos()->sync([]);
|
|
$procedimentoAtendimento->pequenasCirurgias()->sync([]);
|
|
$procedimentoAtendimento->administracaoMedicamentos()->sync([]);
|
|
|
|
DB::table('integracao_esus_inconsistencia_procedimento_atendimento')
|
|
->where('procedimento_atendimento_id', $procedimentoAtendimento->id)
|
|
->delete();
|
|
|
|
$procedimentoAtendimento->delete();
|
|
}
|
|
|
|
Inconsistencia::where('procedimento_id', $id)
|
|
->get()
|
|
->each(function ($inconsistencia) {
|
|
$cliente = app('config')->get('database.default');
|
|
|
|
$xmlPath = 'integracao' . DIRECTORY_SEPARATOR
|
|
. 'esus' . DIRECTORY_SEPARATOR
|
|
. 'inconsistencia' . DIRECTORY_SEPARATOR
|
|
. 'xml-envio' . DIRECTORY_SEPARATOR
|
|
. $cliente . DIRECTORY_SEPARATOR
|
|
. "{$inconsistencia->id}.xml";
|
|
|
|
Storage::disk('local')->delete($xmlPath);
|
|
$inconsistencia->delete();
|
|
});
|
|
|
|
Procedimento::findOrFail($id)->delete();
|
|
}
|
|
|
|
private static function validate($params)
|
|
{
|
|
|
|
return Validator::make($params, [
|
|
'cadastro.usuario_id' => [
|
|
'required',
|
|
'integer',
|
|
Rule::exists(Usuario::class, 'id'),
|
|
],
|
|
'cadastro.equipe_id' => [
|
|
'required',
|
|
'integer',
|
|
Rule::exists(Equipe::class, 'id'),
|
|
],
|
|
'cadastro.ocupacao_id' => [
|
|
'required',
|
|
'integer',
|
|
Rule::exists(Ocupacao::class, 'id'),
|
|
],
|
|
'cadastro.data_usuario_responsavel' => [
|
|
'required',
|
|
'date',
|
|
],
|
|
])->validate();
|
|
}
|
|
|
|
public static function saveFromAmbulatorioPreAtendimento($params)
|
|
{
|
|
$fichaProcedimento = self::getFichaProcedimento($params['cadastro']);
|
|
|
|
if (is_null($fichaProcedimento)) {
|
|
|
|
$fichaProcedimento = Procedimento::create($params['cadastro']);
|
|
}
|
|
|
|
$atendimentoParams = $params['atendimentos'][0];
|
|
$fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams);
|
|
|
|
if (is_null($fichaAtendimento)) {
|
|
|
|
$fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([
|
|
'paciente_id' => $atendimentoParams['paciente_id'],
|
|
'turno_id' => $atendimentoParams['turno_id'],
|
|
'local_atendimento_id' => $atendimentoParams['local_atendimento_id'],
|
|
]);
|
|
}
|
|
|
|
$fichaAtendimento->microarea_id = $atendimentoParams['microarea_id'];
|
|
|
|
if (isset($atendimentoParams['escuta_inicial']))
|
|
$fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial'];
|
|
|
|
if (isset($atendimentoParams['peso']))
|
|
$fichaAtendimento->peso = $atendimentoParams['peso'];
|
|
|
|
if (isset($atendimentoParams['altura']))
|
|
$fichaAtendimento->altura = $atendimentoParams['altura'];
|
|
|
|
if (isset($atendimentoParams['temperatura']))
|
|
$fichaAtendimento->temperatura = $atendimentoParams['temperatura'];
|
|
|
|
if (isset($atendimentoParams['afericao_pa']))
|
|
$fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa'];
|
|
|
|
if (isset($atendimentoParams['glicemia']))
|
|
$fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia'];
|
|
|
|
if (isset($atendimentoParams['frequencia_respiratoria']))
|
|
$fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria'];
|
|
|
|
if (isset($atendimentoParams['frequencia_cardiaca']))
|
|
$fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca'];
|
|
|
|
if (isset($atendimentoParams['saturacao_o2']))
|
|
$fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2'];
|
|
|
|
if (isset($atendimentoParams['momento_coleta_id']))
|
|
$fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id'];
|
|
|
|
if (isset($atendimentoParams['perimetro_cefalico']))
|
|
$fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico'];
|
|
|
|
if (isset($atendimentoParams['circunferencia_abdominal']))
|
|
$fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal'];
|
|
|
|
if (isset($atendimentoParams['perimetro_panturrilha']))
|
|
$fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha'];
|
|
|
|
if (isset($atendimentoParams['exame_laboratorial']))
|
|
$fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial'];
|
|
|
|
$fichaAtendimento->save();
|
|
|
|
$testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id');
|
|
|
|
collect($atendimentoParams['teste_rapido'])
|
|
->reject(fn ($id) => $testesRapidos->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id));
|
|
|
|
$pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id');
|
|
|
|
collect($atendimentoParams['procedimento_pequena_cirurgia'])
|
|
->reject(fn ($id) => $pequenasCirurgias->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id));
|
|
|
|
$administracaoMedicamentos = $fichaAtendimento->administracaoMedicamentos()->pluck('id');
|
|
|
|
collect($atendimentoParams['administracao_medicamento'])
|
|
->reject(fn ($id) => $administracaoMedicamentos->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->administracaoMedicamentos()->attach($id));
|
|
|
|
|
|
$procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id');
|
|
|
|
$fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos'])
|
|
->unique('procedimento_id')
|
|
->reject(fn ($p) => $procedimentos->contains($p['procedimento_id']))
|
|
->values()
|
|
->all()
|
|
);
|
|
|
|
return $fichaProcedimento;
|
|
}
|
|
|
|
public static function saveFromAmbulatorioPosConsulta($params)
|
|
{
|
|
$fichaProcedimento = self::getFichaProcedimento($params['cadastro']);
|
|
|
|
if (is_null($fichaProcedimento)) {
|
|
|
|
$fichaProcedimento = Procedimento::create($params['cadastro']);
|
|
}
|
|
|
|
$atendimentoParams = $params['atendimentos'][0];
|
|
$fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams);
|
|
|
|
if (is_null($fichaAtendimento)) {
|
|
|
|
$fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([
|
|
'pos_consulta_id' => $atendimentoParams['pos_consulta_id'],
|
|
'paciente_id' => $atendimentoParams['paciente_id'],
|
|
'turno_id' => $atendimentoParams['turno_id'],
|
|
'local_atendimento_id' => $atendimentoParams['local_atendimento_id'],
|
|
]);
|
|
}
|
|
|
|
$fichaAtendimento->microarea_id = $atendimentoParams['microarea_id'];
|
|
|
|
if (isset($atendimentoParams['escuta_inicial']))
|
|
$fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial'];
|
|
|
|
if (isset($atendimentoParams['peso']))
|
|
$fichaAtendimento->peso = $atendimentoParams['peso'];
|
|
|
|
if (isset($atendimentoParams['altura']))
|
|
$fichaAtendimento->altura = $atendimentoParams['altura'];
|
|
|
|
if (isset($atendimentoParams['temperatura']))
|
|
$fichaAtendimento->temperatura = $atendimentoParams['temperatura'];
|
|
|
|
if (isset($atendimentoParams['afericao_pa']))
|
|
$fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa'];
|
|
|
|
if (isset($atendimentoParams['glicemia']))
|
|
$fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia'];
|
|
|
|
if (isset($atendimentoParams['frequencia_respiratoria']))
|
|
$fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria'];
|
|
|
|
if (isset($atendimentoParams['frequencia_cardiaca']))
|
|
$fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca'];
|
|
|
|
if (isset($atendimentoParams['saturacao_o2']))
|
|
$fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2'];
|
|
|
|
if (isset($atendimentoParams['momento_coleta_id']))
|
|
$fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id'];
|
|
|
|
if (isset($atendimentoParams['perimetro_cefalico']))
|
|
$fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico'];
|
|
|
|
if (isset($atendimentoParams['circunferencia_abdominal']))
|
|
$fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal'];
|
|
|
|
if (isset($atendimentoParams['perimetro_panturrilha']))
|
|
$fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha'];
|
|
|
|
if (isset($atendimentoParams['exame_laboratorial']))
|
|
$fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial'];
|
|
|
|
$fichaAtendimento->save();
|
|
|
|
$testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id');
|
|
|
|
collect($atendimentoParams['teste_rapido'])
|
|
->reject(fn ($id) => $testesRapidos->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id));
|
|
|
|
$pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id');
|
|
|
|
collect($atendimentoParams['procedimento_pequena_cirurgia'])
|
|
->reject(fn ($id) => $pequenasCirurgias->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id));
|
|
|
|
$administracaoMedicamentos = $fichaAtendimento->administracaoMedicamentos()->pluck('id');
|
|
|
|
collect($atendimentoParams['administracao_medicamento'])
|
|
->reject(fn ($id) => $administracaoMedicamentos->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->administracaoMedicamentos()->attach($id));
|
|
|
|
$procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id');
|
|
|
|
$fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos'])
|
|
->unique('procedimento_id')
|
|
->reject(fn ($p) => $procedimentos->contains($p['procedimento_id']))
|
|
->values()
|
|
->all()
|
|
);
|
|
|
|
return $fichaProcedimento;
|
|
}
|
|
|
|
public static function saveFromAmbulatorioAtendimentoEnfermagem($params)
|
|
{
|
|
$fichaProcedimento = self::getFichaProcedimento($params['cadastro']);
|
|
|
|
if (is_null($fichaProcedimento)) {
|
|
|
|
$fichaProcedimento = Procedimento::create($params['cadastro']);
|
|
}
|
|
|
|
$atendimentoParams = $params['atendimentos'][0];
|
|
$fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams);
|
|
|
|
if (is_null($fichaAtendimento)) {
|
|
|
|
$fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([
|
|
'soap_id' => $atendimentoParams['soap_id'],
|
|
'paciente_id' => $atendimentoParams['paciente_id'],
|
|
'turno_id' => $atendimentoParams['turno_id'],
|
|
'local_atendimento_id' => $atendimentoParams['local_atendimento_id'],
|
|
]);
|
|
}
|
|
|
|
$fichaAtendimento->microarea_id = $atendimentoParams['microarea_id'];
|
|
|
|
if (isset($atendimentoParams['escuta_inicial']))
|
|
$fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial'];
|
|
|
|
if (isset($atendimentoParams['peso']))
|
|
$fichaAtendimento->peso = $atendimentoParams['peso'];
|
|
|
|
if (isset($atendimentoParams['altura']))
|
|
$fichaAtendimento->altura = $atendimentoParams['altura'];
|
|
|
|
if (isset($atendimentoParams['temperatura']))
|
|
$fichaAtendimento->temperatura = $atendimentoParams['temperatura'];
|
|
|
|
if (isset($atendimentoParams['afericao_pa']))
|
|
$fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa'];
|
|
|
|
if (isset($atendimentoParams['glicemia']))
|
|
$fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia'];
|
|
|
|
if (isset($atendimentoParams['frequencia_respiratoria']))
|
|
$fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria'];
|
|
|
|
if (isset($atendimentoParams['frequencia_cardiaca']))
|
|
$fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca'];
|
|
|
|
if (isset($atendimentoParams['saturacao_o2']))
|
|
$fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2'];
|
|
|
|
if (isset($atendimentoParams['momento_coleta_id']))
|
|
$fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id'];
|
|
|
|
if (isset($atendimentoParams['perimetro_cefalico']))
|
|
$fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico'];
|
|
|
|
if (isset($atendimentoParams['circunferencia_abdominal']))
|
|
$fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal'];
|
|
|
|
if (isset($atendimentoParams['perimetro_panturrilha']))
|
|
$fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha'];
|
|
|
|
if (isset($atendimentoParams['exame_laboratorial']))
|
|
$fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial'];
|
|
|
|
$fichaAtendimento->save();
|
|
|
|
$testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id');
|
|
|
|
collect($atendimentoParams['teste_rapido'])
|
|
->reject(fn ($id) => $testesRapidos->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id));
|
|
|
|
$pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id');
|
|
|
|
collect($atendimentoParams['procedimento_pequena_cirurgia'])
|
|
->reject(fn ($id) => $pequenasCirurgias->contains($id))
|
|
->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id));
|
|
|
|
$procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id');
|
|
|
|
$fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos'])
|
|
->unique('procedimento_id')
|
|
->reject(fn ($p) => $procedimentos->contains($p['procedimento_id']))
|
|
->values()
|
|
->all()
|
|
);
|
|
|
|
return $fichaProcedimento;
|
|
}
|
|
|
|
private static function getFichaProcedimento($params)
|
|
{
|
|
return Procedimento::where('data_usuario_responsavel', $params['data_usuario_responsavel'])
|
|
->where('usuario_id', $params['usuario_id'])
|
|
->where('equipe_id', $params['equipe_id'])
|
|
->where('ocupacao_id', $params['ocupacao_id'])
|
|
->whereHas('procedimentoAtendimentos', function ($query) {
|
|
$query->havingRaw('count(*) < 99');
|
|
})
|
|
->first();
|
|
}
|
|
|
|
private static function getFichaAtendimento($fichaProcedimento, $params)
|
|
{
|
|
return ProcedimentoAtendimento::where('procedimento_id', $fichaProcedimento->id)
|
|
->where('paciente_id', $params['paciente_id'])
|
|
->where('turno_id', $params['turno_id'])
|
|
->where('local_atendimento_id', $params['local_atendimento_id'])
|
|
->first();
|
|
}
|
|
}
|