Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/AtendimentoOdontologico/AtendimentoOdontologicoService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

969 lines
54 KiB
PHP

<?php
namespace App\Services\AtencaoBasica\AtendimentoOdontologico;
use App\Enums\AtencaoBasica\AtendimentoIndividual\LocalAtendimento as EnumsLocalAtendimento;
use App\Enums\AtencaoBasica\AtendimentoIndividual\TipoAtendimento as EnumsTipoAtendimento;
use App\Enums\AtencaoBasica\AtendimentoOdontologico\Fornecimento as EnumFornecimento;
use App\Enums\AtencaoBasica\AtendimentoOdontologico\Procedimento as EnumProcedimento;
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
use App\Enums\Sigtap\Procedimento as EnumSigtapProcedimento;
use App\Exceptions\AtencaoBasica\AtendimentoOdontologico\ExportedException;
use App\Exceptions\AtencaoBasica\AtendimentoOdontologico\FichaGeradaException;
use App\Models\Ambulatorio\GlicemiaCapilarMomentoColeta;
use App\Models\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
use App\Models\AtencaoBasica\AtendimentoIndividual\DoencaTransmissivel;
use App\Models\AtencaoBasica\AtendimentoIndividual\ExameSolicitadoAvaliado;
use App\Models\AtencaoBasica\AtendimentoIndividual\Rastreamento;
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologico;
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologicoExame;
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologicoIvcf;
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologicoProblemaCondicao;
use App\Models\AtencaoBasica\AtendimentoOdontologico\CondutaEncaminhamento;
use App\Models\AtencaoBasica\AtendimentoOdontologico\Fornecimento;
use App\Models\AtencaoBasica\AtendimentoOdontologico\Procedimento;
use App\Models\AtencaoBasica\AtendimentoOdontologico\TipoConsulta;
use App\Models\AtencaoBasica\AtendimentoOdontologico\VigilanciaBucal;
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\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Procedimento as SigtapProcedimento;
use App\Services\Integracao\CnsService;
use App\Services\Service;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class AtendimentoOdontologicoService extends Service
{
public static function index()
{
return [];
}
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 getUnidades()
{
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_unidade.id AS id',
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->distinct()
->orderBy('cadastro_unidade.cnes')
->get();
}
public static function getInfraestruturas()
{
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_infraestrutura.id AS id',
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
->distinct()
->orderBy('nome')
->get();
}
public static function getOcupacoes()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::ATENDIMENTO_ODONTOLOGICO)->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 getOcupacoesAuxiliar()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
return $usuario->lotacoes
->filter(function ($lotacao) {
return $lotacao->infraestrutura->id == request()->infraestrutura_id;
})
->pluck('ocupacao');
}
public static function create($id)
{
$paciente = Paciente::findOrFail($id);
return [
'additionals' => [
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
],
'form' => self::getFormData(),
'model' => self::getModelData($paciente),
];
}
public static function edit($id)
{
$atendimento = AtendimentoOdontologico::findOrFail($id);
$paciente = Paciente::findOrFail($atendimento->paciente_id);
return [
'additionals' => [
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
],
'form' => self::getFormData(),
'model' => self::getModelData($paciente, $atendimento)
];
}
public static function show($id)
{
return AtendimentoOdontologico::where('paciente_id', $id)->first();
}
private static function getFormData()
{
return [
'data_atual' => Carbon::now()->format('d/m/Y'),
'turno' => Turno::orderBy('id')->get(),
'local_atendimento' => LocalAtendimento::whereIn('id', [
EnumsLocalAtendimento::UBS,
EnumsLocalAtendimento::UNIDADE_MOVEL,
EnumsLocalAtendimento::RUA,
EnumsLocalAtendimento::DOMICILIO,
EnumsLocalAtendimento::ESCOLA_CRECHE,
EnumsLocalAtendimento::OUTROS,
EnumsLocalAtendimento::POLO,
EnumsLocalAtendimento::INSTITUICAO,
EnumsLocalAtendimento::UNIDADE_PRISIONAL_CONGENERES,
EnumsLocalAtendimento::UNIDADE_SOCIOEDUCATIVA
])->orderBy('descricao')->get(),
'tipo_atendimento' => TipoAtendimento::whereIn('id', [
EnumsTipoAtendimento::CONSULTA_AGENDADA,
EnumsTipoAtendimento::ESCUTA_INICIAL_ORIENTACAO,
EnumsTipoAtendimento::CONSULTA_NO_DIA,
EnumsTipoAtendimento::ATENDIMENTO_DE_URGENCIA
])->orderBy('descricao')->get(),
'tipo_consulta' => TipoConsulta::orderBy('descricao')->get(),
'momentos_coleta' => GlicemiaCapilarMomentoColeta::orderBy('id')->get(['id', 'nome']),
'procedimentos' => SigtapProcedimento::whereIn('codigo', [
EnumSigtapProcedimento::MEDICAO_PESO,
EnumSigtapProcedimento::MEDICAO_ALTURA,
EnumSigtapProcedimento::AFERICAO_TEMPERATURA,
EnumSigtapProcedimento::AFERICAO_PRESSAO_ARTERIAL,
EnumSigtapProcedimento::AVALIACAO_ANTROPOMETRICA,
])
->where('competencia_id', function ($query) {
$query->select('sigtap.competencia.id')
->from('sigtap.competencia')
->orderByDesc('sigtap.competencia.valor')
->limit(1);
})
->groupBy('codigo')
->get(),
'condicao_avaliada' => CondicaoAvaliada::orderBy('descricao')->get(),
'doenca_transmissivel' => DoencaTransmissivel::orderBy('descricao')->get(),
'rastreamento' => Rastreamento::orderBy('descricao')->get(),
'exames' => ExameSolicitadoAvaliado::orderBy('descricao')
->get(['id', 'codigo_esus', 'codigo_procedimento', 'descricao']),
];
}
private static function getModelData($paciente, $atendimento = null)
{
$cadastro = CadastroIndividual::where('paciente_id', $paciente->id)->first();
if ($atendimento) {
$ivcf = AtendimentoOdontologicoIvcf::where('atendimento_odontologico_id', $atendimento->id)->first();
} else {
$ivcf = null;
}
return [
'cadastro' => [
'usuario' => [
'id' => $atendimento->usuario->id ?? null,
'cidadao_nome' => $atendimento->usuario->cidadao->nome ?? null,
],
'unidade_id' => $atendimento->equipe->unidade_id ?? null,
'infraestrutura_id' => $atendimento->equipe->infraestrutura_id ?? null,
'equipe_id' => $atendimento->equipe_id ?? null,
'ocupacao_id' => $atendimento->ocupacao_id ?? null,
'data_atendimento' => $atendimento->data_atendimento ?? Carbon::now()->format('Y-m-d'),
'usuario_auxiliar' => [
'id' => $atendimento->usuario_auxiliar_id ?? null,
'cidadao_nome' => $atendimento->usuario_auxiliar->cidadao->nome ?? null,
],
'unidade_auxiliar_id' => $atendimento->equipe->unidade_auxiliar_id ?? null,
'infraestrutura_auxiliar_id' => $atendimento->equipe->infraestrutura_auxiliar_id ?? null,
'equipe_auxiliar_id' => $atendimento->equipe_auxiliar_id ?? null,
'ocupacao_auxiliar_id' => $atendimento->usuario_auxiliar->ocupacao_id ?? null,
],
'cidadao' => [
'paciente_id' => $paciente->id ?? null,
'nome' => $paciente->cidadao->nome ?? null,
'nome_social' => $paciente->cidadao->nome_social ?? null,
'sexo_id' => $paciente->cidadao->sexo_id ?? null,
'sexo' => $paciente->cidadao->sexo->descricao ?? null,
'cns' => $paciente ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
'data_nascimento' => $paciente->cidadao->data_nascimento->format('Y-m-d') ?? null,
'idade' => $paciente->cidadao->data_nascimento
? "{$paciente->cidadao->idade['anos']} ano(s), "
. "{$paciente->cidadao->idade['meses']} mês(es) e "
. "{$paciente->cidadao->idade['dias']} dia(s) "
: 'NÃO INFORMADA',
'classificacao_id' => $paciente->classificacao_id,
'cidadao_id' => $paciente->cidadao_id,
'idade_anos' => $paciente->cidadao->idade['anos'] ?? null,
],
'atendimento' => [
'turno_id' => $atendimento->turno_id ?? null,
'local_atendimento_id' => $atendimento->local_atendimento_id ?? null,
'tipo_atendimento_id' => $atendimento->tipo_atendimento_id ?? null,
'tipo_consulta_id' => $atendimento->tipo_consulta_id ?? null,
'necessidades_especiais' => $atendimento->necessidades_especiais ?? false,
'gestante' => $cadastro ? ($cadastro->gestante !== null ? $cadastro->gestante : false) : ($atendimento->gestante ?? false)
],
'condicao_avaliada' => $atendimento ? $atendimento->condicaoAvaliada->pluck('id') : [],
'doenca_transmissivel' => $atendimento ? $atendimento->doencaTransmissivel->pluck('id') : [],
'rastreamento' => $atendimento ? $atendimento->rastreamento->pluck('id') : [],
'vigilancia' => $atendimento && $atendimento->vigilancia ? $atendimento->vigilancia->pluck('vigilancia_bucal_id') : [],
'problemas_condicoes' => $atendimento ? self::getProblemasCondicoes($atendimento) : [],
'procedimentos_quantidade' => [
'acesso_polpa_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::ACESSO_POLPA_DENTARIA)->quantidade ?? '' : '',
'adaptacao_protese_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::ADAPTACAO_PROTESE)->quantidade ?? '' : '',
'aplicacao_cariostatico' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::APLICACAO_CARIOSTATICO)->quantidade ?? '' : '',
'aplicacao_selante' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::APLICACAO_SELANTE)->quantidade ?? '' : '',
'aplicacao_topica_fluor' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::APLICACAO_TOPICA_FLUOR)->quantidade ?? '' : '',
'capeamento_pulpar' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::CAPEAMENTO_PULPAR)->quantidade ?? '' : '',
'cimentacao_protese' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::CIMENTACAO_PROTESE_DENTARIA)->quantidade ?? '' : '',
'curativo_demora' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::CURATIVO_DEMORA)->quantidade ?? '' : '',
'drenagem_abscesso' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::DRENAGEM_ABSCESSO)->quantidade ?? '' : '',
'evidenciacao_placa_bacteriana' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::EVIDENCIACAO_PLACA_BACTERIANA)->quantidade ?? '' : '',
'exodontia_dente_deciduo' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::EXODONTIA_DENTE_DECIDUO)->quantidade ?? '' : '',
'exodontia_dente_permanente' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::EXODONTIA_DENTE_PERMANENTE)->quantidade ?? '' : '',
'instalacao_protese_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::INSTALACAO_PROTESE_DENTARIA)->quantidade ?? '' : '',
'moldagem_protese_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::MOLDAGEM_PROTESE_DENTARIA)->quantidade ?? '' : '',
'orientacao_higiene_bucal' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::ORIENTACAO_HIGIENE_BUCAL)->quantidade ?? '' : '',
'orientacao_individual_em_saude' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::ORIENTACAO_INDIVIDUAL_EM_SAUDE)->quantidade ?? '' : '',
'remocao_placa_bacteriana' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::REMOCAO_PLACA_BACTERIANA)->quantidade ?? '' : '',
'pulpotomia_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::PULPOTOMIA_DENTARIA)->quantidade ?? '' : '',
'raspagem_supragengivais' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::RASPAGEM_SUPRAGENGIVAIS)->quantidade ?? '' : '',
'raspagem_subgengivais' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::RASPAGEM_SUBGENGIVAIS)->quantidade ?? '' : '',
'restauracao_dente_permanente_anterior' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::RESTAURACAO_DENTE_PERMANENTE_ANTERIOR)->quantidade ?? '' : '',
'selamento_provisorio_cavidade_dentaria' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::SELAMENTO_PROVISORIO_CAVIDADE_DENTARIA)->quantidade ?? '' : '',
'tratamento_alveolite' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::TRATAMENTO_ALVEOLITE)->quantidade ?? '' : '',
'ulotomia_ulectomia' => $atendimento && $atendimento->procedimento ? $atendimento->procedimento->firstWhere('codigo_procedimento', EnumProcedimento::ULOTOMIA_ULECTOMIA)->quantidade ?? '' : ''
],
'procedimentos' => $atendimento ? DB::table('atencao_basica_atendimento_odontologico_procedimento as atendimento_procedimento')
->select(
'atendimento_procedimento.quantidade',
'procedimento.codigo',
'procedimento.nome'
)
->join(DB::raw("
(
SELECT procedimento_principal.*
FROM sigtap.procedimento AS procedimento_principal
INNER JOIN (
SELECT
codigo,
MAX(competencia_id) AS competencia_id
FROM sigtap.procedimento
GROUP BY codigo
) AS procedimento_ultima_competencia
ON procedimento_principal.codigo = procedimento_ultima_competencia.codigo
AND procedimento_principal.competencia_id = procedimento_ultima_competencia.competencia_id
) AS procedimento
"), 'atendimento_procedimento.codigo_procedimento', '=', 'procedimento.codigo')
->where('atendimento_procedimento.atendimento_odontologico_id', $atendimento->id)
->whereNotIn(
'atendimento_procedimento.codigo_procedimento',
array_values(EnumProcedimento::getConstants())
)
->orderBy('procedimento.nome')
->get()
: [],
'fornecimento' => [
'escova_dental' => $atendimento && $atendimento->fornecimento->firstWhere('fornecimento_id', EnumFornecimento::ESCOVA_DENTAL) ? true : false,
'creme_dental' => $atendimento && $atendimento->fornecimento->firstWhere('fornecimento_id', EnumFornecimento::CREME_DENTAL) ? true : false,
'fio_dental' => $atendimento && $atendimento->fornecimento->firstWhere('fornecimento_id', EnumFornecimento::FIO_DENTAL) ? true : false,
],
'medicoes' => [
'perimetro_cefalico' => $atendimento ? $atendimento->perimetro_cefalico : null,
'glicemia' => $atendimento ? $atendimento->glicemia : 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,
'pressao_arterial' => $atendimento ? $atendimento->pressao_arterial : null,
'peso' => $atendimento ? $atendimento->peso : null,
'altura' => $atendimento ? $atendimento->altura : null,
'temperatura' => $atendimento ? $atendimento->temperatura : null,
],
'conduta_encaminhamento' => $atendimento && $atendimento->condutaEncaminhamento ? $atendimento->condutaEncaminhamento->pluck('conduta_encaminhamento_id') : [],
'search_by_apelido' => false,
'exportacao' => $atendimento->exportacao ?? null,
'quantidade' => '1',
'procedimento' => null,
'exames' => $atendimento ? self::getExames($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,
],
];
}
public static function getAtendimentos($id)
{
return DB::table('atencao_basica_atendimento_odontologico as atendimento')
->select(
'atendimento.id as id',
'atendimento.data_atendimento as data',
'turno.nome as turno',
'local.descricao as local',
'cidadao.nome as profissional',
'cidadao_exportacao.nome as profissional_exportacao',
'atendimento.exportacao',
DB::raw("DATE_FORMAT(exportacao.created_at, '%d/%m/%Y') AS data_exportacao"),
DB::raw("DATE_FORMAT(exportacao.created_at, '%H:%i') AS horario_exportacao")
)
->join('geral_turno as turno', 'atendimento.turno_id', 'turno.id')
->join('atencao_basica_local_atendimento as local', 'atendimento.local_atendimento_id', 'local.id')
->join('cadastro_usuario as usuario', 'atendimento.usuario_id', 'usuario.id')
->join('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
->leftJoin('cadastro_usuario as usuario_exportacao', 'usuario_exportacao.id', 'atendimento.usuario_exportacao_id')
->leftJoin('cadastro_cidadao as cidadao_exportacao', 'cidadao_exportacao.id', 'usuario_exportacao.cidadao_id')
->leftJoin('atencao_basica_exportacao as exportacao', 'exportacao.id', 'atendimento.exportacao_id')
->where('paciente_id', $id)
->orderBy('data')
->get();
}
public static function store()
{
self::saveStore(request()->all());
}
public static function saveStore($params)
{
self::validate($params);
$params = (object) $params;
$atendimento = new AtendimentoOdontologico();
$atendimento->soap_id = $params->soap_id ?? null;
$atendimento->paciente_id = $params->paciente_id;
$atendimento->usuario_id = $params->usuario_id;
$atendimento->ocupacao_id = $params->ocupacao_id;
$atendimento->usuario_auxiliar_id = request()->usuario_auxiliar_id;
$atendimento->ocupacao_auxiliar_id = request()->ocupacao_auxiliar_id;
$atendimento->data_atendimento = $params->data_atendimento;
$atendimento->turno_id = $params->turno_id;
$atendimento->local_atendimento_id = $params->local_atendimento_id;
$atendimento->tipo_atendimento_id = $params->tipo_atendimento_id;
$atendimento->tipo_consulta_id = $params->tipo_consulta_id;
$atendimento->necessidades_especiais = $params->necessidades_especiais;
$atendimento->gestante = $params->gestante ?? false;
$atendimento->unidade_id = $params->unidade_id;
$atendimento->equipe_id = $params->equipe_id;
$atendimento->equipe_auxiliar_id = $params->equipe_auxiliar_id ?? null;
$atendimento->altura = $params->medicoes['altura'] ?? null;
$atendimento->circunferencia_abdominal = $params->medicoes['circunferencia_abdominal'] ?? null;
$atendimento->frequencia_cardiaca = $params->medicoes['frequencia_cardiaca'] ?? null;
$atendimento->frequencia_respiratoria = $params->medicoes['frequencia_respiratoria'] ?? null;
$atendimento->glicemia = $params->medicoes['glicemia'] ?? null;
$atendimento->momento_coleta_id = $params->medicoes['momento_coleta_id'] ?? null;
$atendimento->perimetro_cefalico = $params->medicoes['perimetro_cefalico'] ?? null;
$atendimento->perimetro_panturrilha = $params->medicoes['perimetro_panturrilha'] ?? null;
$atendimento->peso = $params->medicoes['peso'] ?? null;
$atendimento->pressao_arterial = $params->medicoes['pressao_arterial'] ?? null;
$atendimento->saturacao_o2 = $params->medicoes['saturacao_o2'] ?? null;
$atendimento->temperatura = $params->medicoes['temperatura'] ?? null;
$atendimento->save();
self::saveProblemasCondicoes($atendimento, $params->problemas_condicoes);
if (isset($params->exames)) {
self::saveExames($atendimento, $params->exames);
}
$atendimento->condicaoAvaliada()->sync($params->condicao_avaliada);
$atendimento->doencaTransmissivel()->sync($params->doenca_transmissivel);
$atendimento->rastreamento()->sync($params->rastreamento);
if($params->escova_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::ESCOVA_DENTAL
]);
}
if($params->creme_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::CREME_DENTAL
]);
}
if($params->fio_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::FIO_DENTAL
]);
}
foreach($params->vigilancia as $vigilancia_id) {
VigilanciaBucal::create([
'atendimento_odontologico_id' => $atendimento->id,
'vigilancia_bucal_id' => $vigilancia_id
]);
}
if (!empty($params->conduta_encaminhamento)) {
$condutaEncaminhamentos = collect($params->conduta_encaminhamento)->toArray();
foreach($condutaEncaminhamentos as $conduta_encaminhamento_id) {
CondutaEncaminhamento::create([
'atendimento_odontologico_id' => $atendimento->id,
'conduta_encaminhamento_id' => $conduta_encaminhamento_id
]);
}
}
if($params->procedimentos) {
foreach($params->procedimentos as $procedimento) {
Procedimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'codigo_procedimento' => $procedimento['codigo'],
'quantidade' => array_key_exists('quantidade', $procedimento) ? $procedimento['quantidade'] : 1
]);
}
}
if (isset($params->ivcf['deseja_preencher']) && $params->ivcf['deseja_preencher'] === true) {
AtendimentoOdontologicoIvcf::updateOrCreate(
[
'atendimento_odontologico_id' => $atendimento->id
],
[
'atendimento_individual_id' => $atendimento->id,
'estado_saude_geral' => $params->ivcf['estado_saude_geral'],
'limitacao_compras' => $params->ivcf['limitacao_compras'],
'limitacao_gestao_financeira' => $params->ivcf['limitacao_gestao_financeira'],
'limitacao_tarefas_domesticas' => $params->ivcf['limitacao_tarefas_domesticas'],
'banho_independencia' => $params->ivcf['banho_independencia'],
'relato_esquecimento_por_terceiros' => $params->ivcf['relato_esquecimento_por_terceiros'],
'esquecimento_piorando' => $params->ivcf['esquecimento_piorando'],
'esquecimento_impacta_atividades' => $params->ivcf['esquecimento_impacta_atividades'],
'humor_tristeza_desanimo' => $params->ivcf['humor_tristeza_desanimo'],
'perda_interesse_atividades' => $params->ivcf['perda_interesse_atividades'],
'limitacao_elevar_bracos' => $params->ivcf['limitacao_elevar_bracos'],
'limitacao_motricidade_fina' => $params->ivcf['limitacao_motricidade_fina'],
'perda_peso_nao_intencional' => $params->ivcf['perda_peso_nao_intencional'],
'imc_abaixo_22' => $params->ivcf['imc_abaixo_22'],
'panturrilha_abaixo_31' => $params->ivcf['panturrilha_abaixo_31'],
'marcha_lenta_4m_maior_5s' => $params->ivcf['marcha_lenta_4m_maior_5s'],
'dificuldade_caminhar_impacto_atividades' => $params->ivcf['dificuldade_caminhar_impacto_atividades'],
'quedas_recorrentes' => $params->ivcf['quedas_recorrentes'],
'incontinencia' => $params->ivcf['incontinencia'],
'problema_visao_impacto_atividades' => $params->ivcf['problema_visao_impacto_atividades'],
'problema_audicao_impacto_atividades' => $params->ivcf['problema_audicao_impacto_atividades'],
'doencas_cronicas_multiplas' => $params->ivcf['doencas_cronicas_multiplas'],
'polifarmacia_5_ou_mais_medicamentos' => $params->ivcf['polifarmacia_5_ou_mais_medicamentos'],
'internacao_ultimos_6_meses' => $params->ivcf['internacao_ultimos_6_meses'],
]
);
} else {
AtendimentoOdontologicoIvcf::where('atendimento_odontologico_id', $atendimento->id)->delete();
}
}
public static function update($id, $params = null)
{
if(!$params['soap_id']){
self::validate(request()->all());
$atendimento = AtendimentoOdontologico::find($id);
$atendimento->paciente_id = request()->paciente_id;
$atendimento->usuario_id = request()->usuario_id;
$atendimento->ocupacao_id = request()->ocupacao_id;
$atendimento->usuario_auxiliar_id = request()->usuario_auxiliar_id;
$atendimento->ocupacao_auxiliar_id = request()->ocupacao_auxiliar_id;
$atendimento->data_atendimento = request()->data_atendimento;
$atendimento->turno_id = request()->turno_id;
$atendimento->local_atendimento_id = request()->local_atendimento_id;
$atendimento->tipo_atendimento_id = request()->tipo_atendimento_id;
$atendimento->tipo_consulta_id = request()->tipo_consulta_id;
$atendimento->necessidades_especiais = request()->necessidades_especiais;
$atendimento->gestante = request()->gestante ?? false;
$atendimento->unidade_id = request()->unidade_id;
$atendimento->equipe_id = request()->equipe_id;
$atendimento->altura = request()->medicoes['altura'] ?? null;
$atendimento->circunferencia_abdominal = request()->medicoes['circunferencia_abdominal'] ?? null;
$atendimento->frequencia_cardiaca = request()->medicoes['frequencia_cardiaca'] ?? null;
$atendimento->frequencia_respiratoria = request()->medicoes['frequencia_respiratoria'] ?? null;
$atendimento->glicemia = request()->medicoes['glicemia'] ?? null;
$atendimento->momento_coleta_id = request()->medicoes['momento_coleta_id'] ?? null;
$atendimento->perimetro_cefalico = request()->medicoes['perimetro_cefalico'] ?? null;
$atendimento->perimetro_panturrilha = request()->medicoes['perimetro_panturrilha'] ?? null;
$atendimento->peso = request()->medicoes['peso'] ?? null;
$atendimento->pressao_arterial = request()->medicoes['pressao_arterial'] ?? null;
$atendimento->saturacao_o2 = request()->medicoes['saturacao_o2'] ?? null;
$atendimento->temperatura = request()->medicoes['temperatura'] ?? null;
$atendimento->save();
self::saveProblemasCondicoes($atendimento, request()->problemas_condicoes);
self::saveExames($atendimento, $params->exames);
$atendimento->condicaoAvaliada()->sync(request()->condicao_avaliada);
$atendimento->doencaTransmissivel()->sync(request()->doenca_transmissivel);
$atendimento->rastreamento()->sync(request()->rastreamento);
Fornecimento::where('atendimento_odontologico_id', $id)->delete();
if(request()->escova_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::ESCOVA_DENTAL
]);
}
if(request()->creme_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::CREME_DENTAL
]);
}
if(request()->fio_dental) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::FIO_DENTAL
]);
}
VigilanciaBucal::where('atendimento_odontologico_id', $id)->delete();
foreach(request()->vigilancia as $vigilancia_id) {
VigilanciaBucal::create([
'atendimento_odontologico_id' => $atendimento->id,
'vigilancia_bucal_id' => $vigilancia_id
]);
}
CondutaEncaminhamento::where('atendimento_odontologico_id', $id)->delete();
foreach(request()->conduta_encaminhamento as $conduta_encaminhamento_id) {
CondutaEncaminhamento::create([
'atendimento_odontologico_id' => $atendimento->id,
'conduta_encaminhamento_id' => $conduta_encaminhamento_id
]);
}
Procedimento::where('atendimento_odontologico_id', $id)->delete();
if(request()->procedimentos) {
foreach(request()->procedimentos as $procedimento) {
Procedimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'codigo_procedimento' => $procedimento['codigo'],
'quantidade' => $procedimento['quantidade']
]);
}
}
if (isset($params->ivcf['deseja_preencher']) && $params->ivcf['deseja_preencher'] === true) {
AtendimentoOdontologicoIvcf::updateOrCreate(
[
'atendimento_odontologico_id' => $atendimento->id
],
[
'atendimento_odontologico_id' => $atendimento->id,
'estado_saude_geral' => $params->ivcf['estado_saude_geral'],
'limitacao_compras' => $params->ivcf['limitacao_compras'],
'limitacao_gestao_financeira' => $params->ivcf['limitacao_gestao_financeira'],
'limitacao_tarefas_domesticas' => $params->ivcf['limitacao_tarefas_domesticas'],
'banho_independencia' => $params->ivcf['banho_independencia'],
'relato_esquecimento_por_terceiros' => $params->ivcf['relato_esquecimento_por_terceiros'],
'esquecimento_piorando' => $params->ivcf['esquecimento_piorando'],
'esquecimento_impacta_atividades' => $params->ivcf['esquecimento_impacta_atividades'],
'humor_tristeza_desanimo' => $params->ivcf['humor_tristeza_desanimo'],
'perda_interesse_atividades' => $params->ivcf['perda_interesse_atividades'],
'limitacao_elevar_bracos' => $params->ivcf['limitacao_elevar_bracos'],
'limitacao_motricidade_fina' => $params->ivcf['limitacao_motricidade_fina'],
'perda_peso_nao_intencional' => $params->ivcf['perda_peso_nao_intencional'],
'imc_abaixo_22' => $params->ivcf['imc_abaixo_22'],
'panturrilha_abaixo_31' => $params->ivcf['panturrilha_abaixo_31'],
'marcha_lenta_4m_maior_5s' => $params->ivcf['marcha_lenta_4m_maior_5s'],
'dificuldade_caminhar_impacto_atividades' => $params->ivcf['dificuldade_caminhar_impacto_atividades'],
'quedas_recorrentes' => $params->ivcf['quedas_recorrentes'],
'incontinencia' => $params->ivcf['incontinencia'],
'problema_visao_impacto_atividades' => $params->ivcf['problema_visao_impacto_atividades'],
'problema_audicao_impacto_atividades' => $params->ivcf['problema_audicao_impacto_atividades'],
'doencas_cronicas_multiplas' => $params->ivcf['doencas_cronicas_multiplas'],
'polifarmacia_5_ou_mais_medicamentos' => $params->ivcf['polifarmacia_5_ou_mais_medicamentos'],
'internacao_ultimos_6_meses' => $params->ivcf['internacao_ultimos_6_meses'],
]
);
} else {
AtendimentoOdontologicoIvcf::where('atendimento_odontologico_id', $atendimento->id)->delete();
}
}
else{
self::validate($params);
$atendimento = AtendimentoOdontologico::find($params['id']);
$atendimento->paciente_id = $params['paciente_id'];
$atendimento->usuario_id = $params['usuario_id'];
$atendimento->ocupacao_id = $params['ocupacao_id'];
$atendimento->usuario_auxiliar_id = $params['usuario_auxiliar_id'];
$atendimento->ocupacao_auxiliar_id = $params['ocupacao_auxiliar_id'];
$atendimento->data_atendimento = $params['data_atendimento'];
$atendimento->turno_id = $params['turno_id'];
$atendimento->local_atendimento_id = $params['local_atendimento_id'];
$atendimento->tipo_atendimento_id = $params['tipo_atendimento_id'];
$atendimento->tipo_consulta_id = $params['tipo_consulta_id'];
$atendimento->necessidades_especiais = $params['necessidades_especiais'];
$atendimento->gestante = $params['gestante'] ?? false;
$atendimento->unidade_id = $params['unidade_id'];
$atendimento->equipe_id = $params['equipe_id'];
$atendimento->altura = $params['altura'] ?? null;
$atendimento->circunferencia_abdominal = $params['circunferencia_abdominal'] ?? null;
$atendimento->frequencia_cardiaca = $params['frequencia_cardiaca'] ?? null;
$atendimento->frequencia_respiratoria = $params['frequencia_respiratoria'] ?? null;
$atendimento->glicemia = $params['glicemia'] ?? null;
$atendimento->momento_coleta_id = $params['momento_coleta_id'] ?? null;
$atendimento->perimetro_cefalico = $params['perimetro_cefalico'] ?? null;
$atendimento->perimetro_panturrilha = $params['perimetro_panturrilha'] ?? null;
$atendimento->peso = $params['peso'] ?? null;
$atendimento->pressao_arterial = $params['pressao_arterial'] ?? null;
$atendimento->saturacao_o2 = $params['saturacao_o2'] ?? null;
$atendimento->temperatura = $params['temperatura'] ?? null;
$atendimento->save();
self::saveProblemasCondicoes($atendimento, $params['problemas_condicoes']);
$atendimento->condicaoAvaliada()->sync($params['condicao_avaliada']);
$atendimento->doencaTransmissivel()->sync($params['doenca_transmissivel']);
$atendimento->rastreamento()->sync($params['rastreamento']);
Fornecimento::where('atendimento_odontologico_id', $id)->delete();
if($params['escova_dental']) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::ESCOVA_DENTAL
]);
}
if($params['creme_dental']) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::CREME_DENTAL
]);
}
if($params['fio_dental']) {
Fornecimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'fornecimento_id' => EnumFornecimento::FIO_DENTAL
]);
}
VigilanciaBucal::where('atendimento_odontologico_id', $id)->delete();
foreach($params['vigilancia'] as $vigilancia_id) {
VigilanciaBucal::create([
'atendimento_odontologico_id' => $atendimento->id,
'vigilancia_bucal_id' => $vigilancia_id
]);
}
CondutaEncaminhamento::where('atendimento_odontologico_id', $id)->delete();
foreach($params['conduta_encaminhamento'] as $conduta_encaminhamento_id) {
CondutaEncaminhamento::create([
'atendimento_odontologico_id' => $atendimento->id,
'conduta_encaminhamento_id' => $conduta_encaminhamento_id
]);
}
Procedimento::where('atendimento_odontologico_id', $id)->delete();
if($params['procedimentos']) {
foreach($params['procedimentos'] as $procedimento) {
Procedimento::create([
'atendimento_odontologico_id' => $atendimento->id,
'codigo_procedimento' => $procedimento['codigo'],
'quantidade' => $procedimento['quantidade']
]);
}
}
}
}
private static function getProblemasCondicoes($atendimento)
{
return AtendimentoOdontologicoProblemaCondicao::where('atendimento_odontologico_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 getExames($atendimento)
{
return DB::table('atencao_basica_atendimento_odontologico_exame')
->select(
'atencao_basica_cadastro_exame_solicitado_avaliado.id AS exame_id',
'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_esus AS exame_codigo_esus',
'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_procedimento AS exame_codigo_procedimento',
'atencao_basica_cadastro_exame_solicitado_avaliado.descricao AS exame_descricao',
'atencao_basica_atendimento_odontologico_exame.solicitado',
'atencao_basica_atendimento_odontologico_exame.avaliado',
)
->join('atencao_basica_cadastro_exame_solicitado_avaliado', 'atencao_basica_cadastro_exame_solicitado_avaliado.id', 'atencao_basica_atendimento_odontologico_exame.exame_id')
->where('atencao_basica_atendimento_odontologico_exame.atendimento_odontologico_id', $atendimento->id)
->get()
->map(fn ($q) => [
'exame' => [
'id' => $q->exame_id,
'codigo_esus' => $q->exame_codigo_esus,
'codigo_procedimento' => $q->exame_codigo_procedimento,
'descricao' => $q->exame_descricao,
],
'solicitado' => $q->solicitado,
'avaliado' => $q->avaliado,
]);
}
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
);
}
}
private static function saveExames($atendimento, $exames)
{
AtendimentoOdontologicoExame::where('atendimento_odontologico_id', $atendimento->id)->delete();
foreach ($exames as $exame) {
AtendimentoOdontologicoExame::create([
'atendimento_odontologico_id' => $atendimento->id,
'exame_id' => $exame['exame_id'],
'solicitado' => $exame['solicitado'],
'avaliado' => $exame['avaliado'],
]);
}
}
private static function validate($params)
{
return Validator::make($params, [
'usuario_id' => [
'required',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'paciente_id' => [
'required',
'integer',
Rule::exists(Paciente::class, 'id'),
],
'data_atendimento' => [
'required',
'date',
],
'turno_id' => [
'required',
'integer',
Rule::exists(Turno::class, 'id'),
],
'local_atendimento_id' => [
'required',
'integer',
Rule::exists(LocalAtendimento::class, 'id'),
],
'tipo_atendimento_id' => [
'required',
'integer',
Rule::exists(TipoAtendimento::class, 'id'),
],
'tipo_consulta_id' => [
'nullable',
'integer',
Rule::exists(TipoConsulta::class, 'id'),
],
'necessidades_especiais' => [
'boolean',
],
'gestante' => [
'boolean',
],
'equipe_id' => [
'required',
'integer',
Rule::exists(Equipe::class, 'id'),
],
])->validate();
}
public static function destroy($id)
{
$atendimento = AtendimentoOdontologico::find($id);
if($atendimento->exportado || $atendimento->usuarioExportacao) {
throw new ExportedException;
}
if($atendimento->problemasCondicoes) {
throw new FichaGeradaException;
}
else {
if($atendimento->fornecimento) {
Fornecimento::where('atendimento_odontologico_id', $id)->delete();
}
if($atendimento->vigilancia) {
VigilanciaBucal::where('atendimento_odontologico_id', $id)->delete();
}
if($atendimento->condutaEncaminhamento) {
CondutaEncaminhamento::where('atendimento_odontologico_id', $id)->delete();
}
if($atendimento->procedimento) {
Procedimento::where('atendimento_odontologico_id', $id)->delete();
}
AtendimentoOdontologico::where('id', $id)->delete();
}
}
private static function getPermissoesAtualizacaoCadastroPaciente()
{
$parametrizacao = CnsService::getParametrizacao();
if (!is_null($parametrizacao)) {
$lotacao = self::getCurrentLotacao();
return DB::table('cadastro_parametrizacao_permissao_usuario')
->select([
'municipe',
'provisorio',
'outro_municipio',
])
->where('infraestrutura_id', $lotacao->infraestrutura_id)
->where('usuario_id', $lotacao->usuario_id)
->get()
->first();
}
return null;
}
}