72 lines
2.3 KiB
PHP
72 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Rules\AtencaoBasica\Exportacao;
|
|
|
|
use App\Enums\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
|
|
use App\Enums\AtencaoBasica\VisitaDomiciliar\MotivoVisita;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use Illuminate\Contracts\Validation\Rule;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class MotivoVisitaIsValid implements Rule
|
|
{
|
|
public function passes($attribute, $value)
|
|
{
|
|
return self::isValid($value);
|
|
}
|
|
|
|
public static function isValid($value)
|
|
{
|
|
|
|
$motivoVisita = DB::table('atencao_basica_visita_domiciliar_motivo_visita')
|
|
->where('visita_domiciliar_id', $value->id)
|
|
->whereNotIn('motivo_visita_id', [
|
|
MotivoVisita::CADASTRAMENTO_ATUALIZACAO,
|
|
MotivoVisita::ACAO_EDUCATIVA,
|
|
MotivoVisita::IMOVEL_COM_FOCO,
|
|
MotivoVisita::ACAO_MECANICA,
|
|
MotivoVisita::TRATAMENTO_FOCAL,
|
|
MotivoVisita::CONVITE_PARA_ATIVIDADES_COLETIVAS_CAMPANHA_DE_SAUDE,
|
|
MotivoVisita::ORIENTACAO_PREVENCAO,
|
|
MotivoVisita::OUTROS,
|
|
])
|
|
->get();
|
|
|
|
if ($motivoVisita->isNotEmpty()) {
|
|
|
|
return self::getTipoImovelValido($value->imovel_tipo_codigo_esus) ? true : false;
|
|
}
|
|
|
|
$motivoVisita = DB::table('atencao_basica_visita_domiciliar_motivo_visita')
|
|
->where('visita_domiciliar_id', $value->id)
|
|
->whereIn('motivo_visita_id', [
|
|
MotivoVisita::GESTANTE,
|
|
MotivoVisita::PUERPERA,
|
|
])
|
|
->get();
|
|
|
|
if ($motivoVisita->isNotEmpty()) {
|
|
|
|
return $value->paciente_sexo_id === Sexo::FEMININO ? true : false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function message()
|
|
{
|
|
return 'Motivo inválido.';
|
|
}
|
|
|
|
private static function getTipoImovelValido($tipoImovelId) {
|
|
|
|
return $tipoImovelId == ImovelTipo::DOMICILIO
|
|
|| $tipoImovelId == ImovelTipo::ABRIGO
|
|
|| $tipoImovelId == ImovelTipo::INSTITUICAO_LONGA_PERMANENCIA_IDOSOS
|
|
|| $tipoImovelId == ImovelTipo::UNIDADE_PRISIONAL
|
|
|| $tipoImovelId == ImovelTipo::UNIDADE_MEDIDA_SOCIO_EDUCATIVA
|
|
|| $tipoImovelId == ImovelTipo::DELEGACIA
|
|
|| $tipoImovelId == ImovelTipo::OUTROS;
|
|
}
|
|
}
|