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,410 @@
<?php
namespace App\Enums\Ambulatorio;
use Illuminate\Support\Facades\DB;
final class LocalAnatomicoRegiao
{
private const chaveLocalSafecare = [
'head' => 1,
'forehead' => 1,
'nose' => 1,
'chin' => 1,
'right_cheek' => 1,
'left_cheek' => 1,
'neck' => 2,
'right_deltoid' => 3,
'left_deltoid' => 3,
'right_chest' => 3,
'left_chest' => 3,
'abdomen' => 3,
'right_abdomen' => 3,
'left_abdomen' => 3,
'sacral' => 3,
'back_body_right' => 4,
'back_body_left' => 4,
'trapezius_right' => 4,
'trapezius_left' => 4,
'glute_right' => 4,
'glute_left' => 4,
'popliteal_right' => 4,
'popliteal_left' => 4,
'calf_right' => 4,
'calf_left' => 4,
'right_arm' => 5,
'left_arm' => 5,
'right_forearm' => 5,
'left_forearm' => 5,
'right_hand' => 5,
'left_hand' => 5,
'pinky' => 6,
'ring' => 6,
'middle' => 6,
'index' => 6,
'thumb' => 6,
'palm' => 6,
'right_pinky' => 6,
'right_ring' => 6,
'right_middle' => 6,
'right_index' => 6,
'right_thumb' => 6,
'right_palm' => 6,
'right_thigh' => 7,
'left_thigh' => 7,
'right_knee' => 7,
'left_knee' => 7,
'right_tibial' => 7,
'left_tibial' => 7,
'right_shin' => 7,
'left_shin' => 7,
'right_foot' => 7,
'left_foot' => 7,
'big_toe' => 8,
'second_toe' => 8,
'middle_toe' => 8,
'fourth_toe' => 8,
'little_toe' => 8,
'sole' => 8,
'right_big_toe' => 8,
'right_second_toe' => 8,
'right_middle_toe' => 8,
'right_fourth_toe' => 8,
'right_little_toe' => 8,
'right_sole' => 8,
'medial_forefoot' => 9,
'central_forefoot' => 9,
'distal_forefoot' => 9,
'plantar_arch' => 9,
'central_midfoot' => 9,
'distal_midfoot' => 9,
'medial_hindfoot' => 9,
'central_hindfoot' => 9,
'distal_hindfoot' => 9,
'right_heel' => 10,
'left_heel' => 10,
'right_achilles_tendon' => 10,
'left_achilles_tendon' => 10,
'right_external_malleolus' => 11,
'left_external_malleolus' => 11,
'right_external_arch' => 11,
'left_external_arch' => 11,
'right_external_metatarsal' => 11,
'left_external_metatarsal' => 11,
'side_head' => 12,
'side_neck' => 12,
'side_abdomen' => 12,
'side_sacral' => 12,
'side_trochanter1' => 12,
'side_trochanter2' => 12,
'side_malleolus' => 12,
'side_right_deltoid' => 13,
'side_right_arm' => 13,
'side_right_forearm' => 13,
'side_right_hand' => 13,
'side_right_chest' => 13,
'side_right_thigh' => 13,
'side_right_shin' => 13,
'side_right_foot' => 13,
'side_left_deltoid' => 14,
'side_left_arm' => 14,
'side_left_forearm' => 14,
'side_left_hand' => 14,
'side_left_chest' => 14,
'side_left_thigh' => 14,
'side_left_shin' => 14,
'side_left_foot' => 14,
'trochanter1' => 15,
'trochanter2' => 15,
'malleolus' => 15,
'upper_left' => 16,
'upper_right' => 16,
'lower_left' => 16,
'lower_right' => 16,
'left_foot_subarea_1' => 17,
'left_foot_subarea_2' => 17,
'left_foot_subarea_3' => 17,
'left_foot_subarea_4' => 17,
'left_foot_subarea_5' => 17,
'left_foot_subarea_6' => 17,
'left_foot_subarea_7' => 17,
'left_foot_subarea_8' => 17,
'left_foot_subarea_9' => 17,
'left_foot_subarea_10' => 17,
'left_foot_subarea_11' => 17,
'left_foot_subarea_12' => 17,
'left_foot_subarea_13' => 17,
'left_foot_subarea_14' => 17,
'left_foot_subarea_15' => 17,
'right_foot_subarea_1' => 18,
'right_foot_subarea_2' => 18,
'right_foot_subarea_3' => 18,
'right_foot_subarea_4' => 18,
'right_foot_subarea_5' => 18,
'right_foot_subarea_6' => 18,
'right_foot_subarea_7' => 18,
'right_foot_subarea_8' => 18,
'right_foot_subarea_9' => 18,
'right_foot_subarea_10' => 18,
'right_foot_subarea_11' => 18,
'right_foot_subarea_12' => 18,
'right_foot_subarea_13' => 18,
'right_foot_subarea_14' => 18,
'right_foot_subarea_15' => 18,
];
private const chaveTraduzida = [
'cabeca' => 'head',
'testa' => 'forehead',
'nariz' => 'nose',
'queixo' => 'chin',
'bochecha direita' => 'right_cheek',
'bochecha esquerda' => 'left_cheek',
'pescoco' => 'neck',
'deltoide direito' => 'right_deltoid',
'deltoide esquerdo' => 'left_deltoid',
'peito direito' => 'right_chest',
'peito esquerdo' => 'left_chest',
'abdomen' => 'abdomen',
'abdomen direito' => 'right_abdomen',
'abdomen esquerdo' => 'left_abdomen',
'sacral' => 'sacral',
'dorso direito' => 'back_body_right',
'dorso esquerdo' => 'back_body_left',
'trapezio direito' => 'trapezius_right',
'trapezio esquerdo' => 'trapezius_left',
'gluteo direito' => 'glute_right',
'gluteo esquerdo' => 'glute_left',
'poplitea direita' => 'popliteal_right',
'poplitea esquerda' => 'popliteal_left',
'panturrilha direita' => 'calf_right',
'panturrilha esquerda' => 'calf_left',
'braco direito' => 'right_arm',
'braco esquerdo' => 'left_arm',
'antebraco direito' => 'right_forearm',
'antebraco esquerdo' => 'left_forearm',
'mao direita' => 'right_hand',
'mao esquerda' => 'left_hand',
'minimo esquerdo' => 'pinky',
'anelar esquerdo' => 'ring',
'medio esquerdo' => 'middle',
'indicador esquerdo' => 'index',
'polegar esquerdo' => 'thumb',
'palma esquerda' => 'palm',
'minimo direito' => 'right_pinky',
'anelar direito' => 'right_ring',
'medio direito' => 'right_middle',
'indicador direito' => 'right_index',
'polegar direito' => 'right_thumb',
'palma direita' => 'right_palm',
'coxa direita' => 'right_thigh',
'coxa esquerda' => 'left_thigh',
'joelho direito' => 'right_knee',
'joelho esquerdo' => 'left_knee',
'tibial direita' => 'right_tibial',
'tibial esquerda' => 'left_tibial',
'canela direita' => 'right_shin',
'canela esquerda' => 'left_shin',
'pe direito' => 'right_foot',
'pe esquerdo' => 'left_foot',
'dedo 1 esquerdo' => 'big_toe',
'dedo 2 esquerdo' => 'second_toe',
'terceiro dedo esquerdo' => 'middle_toe',
'dedo 4 esquerdo' => 'fourth_toe',
'dedo 5 esquerdo' => 'little_toe',
'planta do pe esquerda' => 'sole',
'dedo 1 direito' => 'right_big_toe',
'dedo 2 direito' => 'right_second_toe',
'dedo 3 direito' => 'right_middle_toe',
'dedo 4 direito' => 'right_fourth_toe',
'dedo 5 direito' => 'right_little_toe',
'planta do pe direita' => 'right_sole',
'antepe medial' => 'medial_forefoot',
'antepe central' => 'central_forefoot',
'antepe distal' => 'distal_forefoot',
'arco plantar' => 'plantar_arch',
'mediope central' => 'central_midfoot',
'mediope distal' => 'distal_midfoot',
'retrope medial' => 'medial_hindfoot',
'retrope central' => 'central_hindfoot',
'retrope distal' => 'distal_hindfoot',
'calcanhar direito' => 'right_heel',
'calcanhar esquerdo' => 'left_heel',
'tendao de aquiles direito' => 'right_achilles_tendon',
'tendao de aquiles esquerdo' => 'left_achilles_tendon',
'maleolo externo direito' => 'right_external_malleolus',
'maleolo externo esquerdo' => 'left_external_malleolus',
'arco externo direito' => 'right_external_arch',
'arco externo esquerdo' => 'left_external_arch',
'metatarso externo direito' => 'right_external_metatarsal',
'metatarso externo esquerdo' => 'left_external_metatarsal',
'cabeca lateral' => 'side_head',
'pescoco lateral' => 'side_neck',
'abdomen lateral' => 'side_abdomen',
'sacral lateral' => 'side_sacral',
'trocanter 1 lateral' => 'side_trochanter1',
'trocanter 2 lateral' => 'side_trochanter2',
'maleolo lateral' => 'side_malleolus',
'deltoide direito lateral' => 'side_right_deltoid',
'braco direito lateral' => 'side_right_arm',
'antebraco direito lateral' => 'side_right_forearm',
'mao direita lateral' => 'side_right_hand',
'peito direito lateral' => 'side_right_chest',
'coxa direita lateral' => 'side_right_thigh',
'canela direita lateral' => 'side_right_shin',
'pe direito lateral' => 'side_right_foot',
'deltoide esquerdo lateral' => 'side_left_deltoid',
'braco esquerdo lateral' => 'side_left_arm',
'antebraco esquerdo lateral' => 'side_left_forearm',
'mao esquerda lateral' => 'side_left_hand',
'peito esquerdo lateral' => 'side_left_chest',
'coxa esquerda lateral' => 'side_left_thigh',
'canela esquerda lateral' => 'side_left_shin',
'pe esquerdo lateral' => 'side_left_foot',
'trocanter 1' => 'trochanter1',
'trocanter 2' => 'trochanter2',
'maleolo' => 'malleolus',
'superior esquerdo' => 'upper_left',
'superior direito' => 'upper_right',
'inferior esquerdo' => 'lower_left',
'inferior direito' => 'lower_right',
'subarea 1 do pe esquerdo' => 'left_foot_subarea_1',
'subarea 2 do pe esquerdo' => 'left_foot_subarea_2',
'subarea 3 do pe esquerdo' => 'left_foot_subarea_3',
'subarea 4 do pe esquerdo' => 'left_foot_subarea_4',
'subarea 5 do pe esquerdo' => 'left_foot_subarea_5',
'subarea 6 do pe esquerdo' => 'left_foot_subarea_6',
'subarea 7 do pe esquerdo' => 'left_foot_subarea_7',
'subarea 8 do pe esquerdo' => 'left_foot_subarea_8',
'subarea 9 do pe esquerdo' => 'left_foot_subarea_9',
'subarea 10 do pe esquerdo' => 'left_foot_subarea_10',
'subarea 11 do pe esquerdo' => 'left_foot_subarea_11',
'subarea 12 do pe esquerdo' => 'left_foot_subarea_12',
'subarea 13 do pe esquerdo' => 'left_foot_subarea_13',
'subarea 14 do pe esquerdo' => 'left_foot_subarea_14',
'subarea 15 do pe esquerdo' => 'left_foot_subarea_15',
'subarea 1 do pe direito' => 'right_foot_subarea_1',
'subarea 2 do pe direito' => 'right_foot_subarea_2',
'subarea 3 do pe direito' => 'right_foot_subarea_3',
'subarea 4 do pe direito' => 'right_foot_subarea_4',
'subarea 5 do pe direito' => 'right_foot_subarea_5',
'subarea 6 do pe direito' => 'right_foot_subarea_6',
'subarea 7 do pe direito' => 'right_foot_subarea_7',
'subarea 8 do pe direito' => 'right_foot_subarea_8',
'subarea 9 do pe direito' => 'right_foot_subarea_9',
'subarea 10 do pe direito' => 'right_foot_subarea_10',
'subarea 11 do pe direito' => 'right_foot_subarea_11',
'subarea 12 do pe direito' => 'right_foot_subarea_12',
'subarea 13 do pe direito' => 'right_foot_subarea_13',
'subarea 14 do pe direito' => 'right_foot_subarea_14',
'subarea 15 do pe direito' => 'right_foot_subarea_15',
];
public static function fromKey(?string $key, ?int $localAnatomicoId = null): ?int
{
if ($key === null) {
return null;
}
$key = self::normalizeKey($key);
$query = DB::table('cadastro_local_anatomico_regiao')
->where('key', $key);
if ($localAnatomicoId !== null) {
$query->where('local_anatomico_id', $localAnatomicoId);
} else {
$hint = self::chaveLocalSafecare[$key] ?? null;
if ($hint !== null) {
$query->where('local_anatomico_id', $hint);
}
}
$row = $query->first(['id']);
return $row ? (int) $row->id : null;
}
public static function fromDescricao(?string $descricao, ?int $localAnatomicoId = null): ?int
{
if ($descricao === null) {
return null;
}
$norm = self::normalize($descricao);
$key = self::chaveTraduzida[$norm] ?? null;
if ($key === null) {
return null;
}
return self::fromKey($key, $localAnatomicoId);
}
public static function localAnatomicoIdForKey(string $key): ?int
{
$key = self::normalizeKey($key);
return self::chaveLocalSafecare[$key] ?? null;
}
public static function normalize(string $text): string
{
$text = trim(mb_strtolower($text));
$text = str_replace(
['á','à','ã','â','ä','é','è','ê','ë','í','ì','î','ï','ó','ò','õ','ô','ö','ú','ù','û','ü','ç','́','’',"'",'º','ª'],
['a','a','a','a','a','e','e','e','e','i','i','i','i','o','o','o','o','o','u','u','u','u','c','','','','',''],
$text
);
return preg_replace('/\s+/', ' ', $text);
}
public static function normalizeKey(string $key): string
{
$key = trim(mb_strtolower($key));
$key = preg_replace('/\s+/', '_', $key);
return $key;
}
}