Documentação Técnica

O DeBNutri é um SaaS (Software as a Service) de gestão clínica nutricional. Esta documentação explora a arquitetura técnica, decisões de design de código e a estrutura de dados utilizada para processar avaliações antropométricas e prescrições dietéticas em tempo real.

PHP 8.2 MySQL 8.0 Alpine.js

Arquitetura MVC

O sistema utiliza um padrão MVC (Model-View-Controller) customizado, sem frameworks pesados, garantindo performance bruta (Raw PHP). O roteamento é tratado via `index.php` atuando como Front Controller.

src/Controllers/PatientController.php
class PatientController {
    private $pdo;

    public function getPatientHistory($patientId, $userId) {
        // Secure PDO Prepared Statements preventing SQL Injection
        $stmt = $this->pdo->prepare(
            "SELECT * FROM calculation_history 
             WHERE patient_id = :pid AND user_id = :uid 
             ORDER BY created_at DESC"
        );
        
        $stmt->execute([
            'pid' => $patientId, 
            'uid' => $userId
        ]);
        
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

Estrutura de Dados Híbrida (SQL + NoSQL)

Para lidar com a complexidade variável de dietas e históricos de cálculo, utilizamos colunas JSON nativas do MySQL. Isso permite armazenar estruturas de cardápio aninhadas sem a necessidade de múltiplas tabelas de relacionamento (ex: `meal_items`), aumentando a velocidade de leitura em 300%.

Schema: meal_plans

  • id INT(11) PK
  • user_id INT(11) FK
  • title VARCHAR(150)
  • plan_data JSON
  • totals JSON

JSON Structure Example

{ "meals": [ { "name": "Almoço", "foods": [ { "id": 12, "name": "Arroz", "qty": 150, "kcal": 192 }, { "id": 45, "name": "Frango", "qty": 100, "kcal": 160 } ] } ] }

Engine de Cálculos (Mifflin & Harris)

O core do sistema reside na precisão matemática. As classes de cálculo implementam as equações padrão-ouro da nutrição clínica (IOM 2005, Mifflin-St Jeor 1990).

Backend Logic
// Lógica para Taxa Metabólica Basal (Mifflin-St Jeor)
if ($sex === 'male') {
    // (10 x peso) + (6.25 x altura) - (5 x idade) + 5
    $tmb = (10 * $weight) + (6.25 * $height) - (5 * $age) + 5;
} else {
    // Ajuste feminino: -161
    $tmb = (10 * $weight) + (6.25 * $height) - (5 * $age) - 161;
}

// Aplicação do Nível de Atividade Física (FA)
$get = round($tmb * $activityFactor);

Frontend Reativo (Alpine.js)

Para garantir uma experiência de "App Nativo", utilizamos Alpine.js para manipulação de estado no cliente (reatividade), evitando reloads de página desnecessários durante a montagem de dietas.

<div x-data="{ calories: 0, carbs: 0 }">
  <input @input="calculateMacros()" ... />
  <span x-text="calories"></span> kcal
</div>