This commit is contained in:
37
api/app/Services/Geral/AgeService.php
Normal file
37
api/app/Services/Geral/AgeService.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Geral;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class AgeService
|
||||
{
|
||||
public static function getFormattedAge(DateTime $dateOfBirth, DateTime $dateToCalc = null)
|
||||
{
|
||||
$age = AgeService::getAge($dateOfBirth, $dateToCalc);
|
||||
|
||||
$yearsText = $age->years > 1 ? 'anos' : 'ano';
|
||||
$monthsText = $age->months > 1 ? 'meses' : 'mês';
|
||||
$daysText = $age->days > 1 ? 'dias' : 'dia';
|
||||
|
||||
return "{$age->years} {$yearsText} e "
|
||||
. "{$age->months} {$monthsText} e "
|
||||
. "{$age->days} {$daysText}";
|
||||
}
|
||||
|
||||
public static function getAge(DateTime $dateOfBirth, DateTime $dateToCalc = null)
|
||||
{
|
||||
if (is_null($dateToCalc)) {
|
||||
$dateToCalc = new DateTime('today');
|
||||
}
|
||||
|
||||
|
||||
$interval = $dateOfBirth->diff($dateToCalc);
|
||||
|
||||
return (object) [
|
||||
'years' => $interval->y,
|
||||
'months' => $interval->m,
|
||||
'days' => $interval->d
|
||||
];
|
||||
}
|
||||
}
|
||||
104
api/app/Services/Geral/CiapService.php
Normal file
104
api/app/Services/Geral/CiapService.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Geral;
|
||||
|
||||
use App\Enums\Geral\CiapCondicaoAvaliada;
|
||||
use App\Enums\Geral\GrupoCiap;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CiapService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$notShowAll = is_null(request()->get('show_all')) || DataUtil::isStringFalse(request()->get('show_all'));
|
||||
|
||||
$excludedValues = [
|
||||
CiapCondicaoAvaliada::ASMA,
|
||||
CiapCondicaoAvaliada::DENGUE,
|
||||
CiapCondicaoAvaliada::DESNUTRICAO,
|
||||
CiapCondicaoAvaliada::DIABETES,
|
||||
CiapCondicaoAvaliada::DPOC,
|
||||
CiapCondicaoAvaliada::DST,
|
||||
CiapCondicaoAvaliada::HANSENIASE,
|
||||
CiapCondicaoAvaliada::HIPERTENSAO_ARTERIAL,
|
||||
CiapCondicaoAvaliada::OBESIDADE,
|
||||
CiapCondicaoAvaliada::PRE_NATAL,
|
||||
CiapCondicaoAvaliada::PUERICULTURA,
|
||||
CiapCondicaoAvaliada::PUERPERIO,
|
||||
CiapCondicaoAvaliada::RASTREAMENTO_DE_RISCO_CARDIOVASCULAR,
|
||||
CiapCondicaoAvaliada::REABILITACAO,
|
||||
CiapCondicaoAvaliada::TABAGISMO,
|
||||
CiapCondicaoAvaliada::TUBERCULOSE,
|
||||
CiapCondicaoAvaliada::USUARIO_DE_ALCOOL,
|
||||
CiapCondicaoAvaliada::USUARIO_DE_OUTRAS_DROGAS,
|
||||
];
|
||||
|
||||
if (request()->ciap_id) {
|
||||
$excludedValues[] = request()->ciap_id;
|
||||
}
|
||||
|
||||
$ciap = DB::table('geral_ciap')
|
||||
->select(
|
||||
'geral_ciap.codigo',
|
||||
'geral_ciap.id',
|
||||
'geral_ciap.descricao',
|
||||
'geral_ciap_cid.codigo_cid',
|
||||
'geral_ciap.sexo_id',
|
||||
'geral_ciap.grupo_id',
|
||||
'sigtap.cid.id as cid_id',
|
||||
'sigtap.cid.codigo as cid_codigo',
|
||||
'sigtap.cid.nome as cid_nome',
|
||||
)
|
||||
->leftJoin('geral_ciap_cid', 'geral_ciap_cid.codigo_ciap', 'geral_ciap.codigo')
|
||||
->leftJoin('sigtap.cid', 'sigtap.cid.codigo', 'geral_ciap_cid.codigo_cid')
|
||||
->when($notShowAll, fn ($q) => $q
|
||||
->whereNotIn('geral_ciap.id', $excludedValues)
|
||||
->whereNotIn('geral_ciap.grupo_id', [GrupoCiap::PROCEDIMENTOS])
|
||||
)
|
||||
->when(request()->sexo_id, function ($query, $sexo_id) {
|
||||
$query->where(function ($subquery) use ($sexo_id) {
|
||||
$subquery->where('geral_ciap.sexo_id', $sexo_id)->orWhereNull('geral_ciap.sexo_id');
|
||||
});
|
||||
})
|
||||
->when(is_array(request()->not_in), fn ($q) => $q->whereNotIn('geral_ciap.codigo', request()->not_in));
|
||||
|
||||
if (request()->query('cid_id')) {
|
||||
|
||||
$ciap->where(function ($query) {
|
||||
|
||||
$cidCodigo = Cid::findOrFail(request()->query('cid_id'))->codigo;
|
||||
|
||||
$query->whereExists(function($query) use ($cidCodigo) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('geral_ciap_cid')
|
||||
->whereColumn('geral_ciap_cid.codigo_ciap', 'geral_ciap.codigo')
|
||||
->where('codigo_cid', $cidCodigo);
|
||||
})
|
||||
->orWhereNotExists(function($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('geral_ciap_cid')
|
||||
->whereColumn('geral_ciap_cid.codigo_ciap', 'geral_ciap.codigo');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return $ciap;
|
||||
}
|
||||
|
||||
public static function index()
|
||||
{
|
||||
return DB::table('geral_ciap as ciap')
|
||||
->when(request()->codigo, fn ($q, $codigo) => $q->where('ciap.codigo', $codigo))
|
||||
->select(
|
||||
'ciap.id',
|
||||
'ciap.codigo',
|
||||
'ciap.descricao',
|
||||
'ciap.grupo_id',
|
||||
'ciap.sexo_id'
|
||||
)
|
||||
->get();
|
||||
}
|
||||
}
|
||||
30
api/app/Services/Geral/GestacaoService.php
Normal file
30
api/app/Services/Geral/GestacaoService.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Geral;
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
class GestacaoService
|
||||
{
|
||||
private const SEMANAS_PREVISTAS_PARTO = 40;
|
||||
|
||||
public static function getIdadeGestacional(Carbon $dataUltimaMenstruacao) : array
|
||||
{
|
||||
$dias = $dataUltimaMenstruacao->diffInDays(new Carbon);
|
||||
$semanasTotais = $dias / 7;
|
||||
$semanasCompletas = floor($semanasTotais);
|
||||
$porcentagemDiasDaSemana = $semanasTotais - $semanasCompletas;
|
||||
$diasTotais = $porcentagemDiasDaSemana * 7;
|
||||
$diasCompletos = floor($diasTotais);
|
||||
|
||||
return [
|
||||
'semanas' => (int) $semanasCompletas,
|
||||
'dias' => (int) $diasCompletos,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getDataPrevistaParto(Carbon $dataUltimaMenstruacao) : Carbon
|
||||
{
|
||||
return $dataUltimaMenstruacao->addWeeks(self::SEMANAS_PREVISTAS_PARTO);
|
||||
}
|
||||
}
|
||||
32
api/app/Services/Geral/ImcService.php
Normal file
32
api/app/Services/Geral/ImcService.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Geral;
|
||||
|
||||
use App\Enums\Cadastro\UnidadeMedida;
|
||||
use App\Models\Geral\InterpretacaoImc;
|
||||
use App\Utils\ConversaoUnidadeMedidaUtil;
|
||||
|
||||
class ImcService
|
||||
{
|
||||
public static function calculate($unidadeMedidaMassaId, $massa, $unidadeMedidaAlturaId, $altura) : array
|
||||
{
|
||||
if ($unidadeMedidaMassaId == UnidadeMedida::GRAMAS) {
|
||||
|
||||
$massa = ConversaoUnidadeMedidaUtil::gramasParaQuilogramas($massa);
|
||||
}
|
||||
|
||||
if ($unidadeMedidaAlturaId == UnidadeMedida::CENTIMETROS) {
|
||||
|
||||
$altura = ConversaoUnidadeMedidaUtil::centimetrosParaMetros($altura);
|
||||
}
|
||||
|
||||
$imc = number_format($altura == 0 ? 0 : ($massa / ($altura * $altura)), 1, '.', '');
|
||||
$interpretacao = InterpretacaoImc::where('min', '<=', $imc)->where('max', '>=', $imc)->first();
|
||||
|
||||
return [
|
||||
'imc' => $imc,
|
||||
'classificacao' => $interpretacao->classificacao ?? null,
|
||||
'grau_obesidade' => $interpretacao->grau_obesidade ?? null,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user