init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View 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
];
}
}

View 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();
}
}

View 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);
}
}

View 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,
];
}
}