Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
docuneo:programma_npt [2025/07/31 22:11] neoadmindocuneo:programma_npt [2025/08/02 21:46] (versione attuale) neoadmin
Linea 3: Linea 3:
     <meta charset="UTF-8">     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Programma NPT Neonatale v2.0 con BUN</title>+    <title>Programma NPT Neonatale v3.0 - Versione Unificata</title
 +    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
     <style>     <style>
         body {         body {
Linea 26: Linea 27:
             border-bottom: 3px solid #3498db;             border-bottom: 3px solid #3498db;
             padding-bottom: 10px;             padding-bottom: 10px;
 +        }
 +
 +        .version-info {
 +            text-align: center;
 +            font-size: 12px;
 +            color: #7f8c8d;
 +            margin-bottom: 20px;
         }         }
  
Linea 210: Linea 218:
  
         .hidden {         .hidden {
-            display: none !important;+            display: none;
         }         }
  
-        .visible { +        /* CSS TAB ORIZZONTALI CORRETTI */
-            display: block !important; +
-        } +
- +
-        /* CSS TAB ORIZZONTALI */+
         .tabs {         .tabs {
             display: flex;             display: flex;
Linea 226: Linea 230:
  
         .tab {         .tab {
-            padding: 10px 20px;+            padding: 8px 15px;
             background-color: #ecf0f1;             background-color: #ecf0f1;
             border: 1px solid #ddd;             border: 1px solid #ddd;
Linea 234: Linea 238:
             transition: all 0.3s ease;             transition: all 0.3s ease;
             text-align: center;             text-align: center;
-            min-width: 120px;+            min-width: 100px;
             flex: 1;             flex: 1;
-            max-width: 200px;+            max-width: 160px; 
 +            font-size: 12px;
         }         }
  
Linea 311: Linea 316:
         }         }
  
-        /* STILI PER IL REPORT NPT */ +        .config-table 
-        .npt-report +            width100%
-            backgroundwhite+            border-collapsecollapse
-            padding20px+            margin15px 0;
-            font-familyArial, sans-serif;+
             font-size: 12px;             font-size: 12px;
-            line-height: 1.4; 
-            max-width: 800px; 
-            margin: 0 auto; 
-            border: 1px solid #ddd; 
         }         }
  
-        .report-header { +        .config-table th, .config-table td 
-            display: flex; +            border: 1px solid #ddd
-            justify-content: space-between; +            padding: 6px
-            align-items: center; +            text-aligncenter;
-            border-bottom2px solid #333+
-            padding-bottom10px+
-            margin-bottom20px;+
         }         }
  
-        .report-header-left +        .config-table th 
-            flex1;+            background-color: #34495e; 
 +            colorwhite;
         }         }
  
-        .report-header-right +        .config-table input 
-            width: 100px; +            width: 60px; 
-            height: 60px; +            padding3px
-            background-color#e8f4f8+            border: 1px solid #ddd
-            border: 1px solid #ccc+            border-radius3px;
-            display: flex; +
-            align-itemscenter; +
-            justify-content: center; +
-            font-size: 10px; +
-            color: #666;+
         }         }
  
-        .report-title { +        .component-name {
-            font-size: 14px;+
             font-weight: bold;             font-weight: bold;
-            margin-bottom5px;+            background-color#f8f9fa; 
 +            text-align: left !important;
         }         }
  
-        .report-subtitle +        /* SEZIONE NUOVA PER TAB 5 CONFIGURAZIONE AVANZATA */ 
-            font-size11px+        .config-advanced 
-            color: #666+            background-color#f8f9fa
-            margin-bottom15px;+            border2px solid #17a2b8
 +            border-radius: 10px; 
 +            padding: 20px; 
 +            margin20px 0;
         }         }
  
-        .report-section +        .config-advanced h3 { 
-            margin-bottom: 20px;+            color: #0c5460; 
 +            margin-top: 0; 
 +            border-bottom: 2px solid #17a2b8; 
 +            padding-bottom: 10px;
         }         }
  
-        .report-section-title { +        .monitoring-table {
-            background-color: #333; +
-            color: white; +
-            padding: 5px 10px; +
-            font-weight: bold; +
-            font-size: 12px; +
-            margin-bottom: 0; +
-        } +
- +
-        .report-table {+
             width: 100%;             width: 100%;
             border-collapse: collapse;             border-collapse: collapse;
-            font-size: 11px;+            margin: 15px 0; 
 +            font-size: 12px;
         }         }
  
-        .report-table td { +        .monitoring-table th, .monitoring-table td { 
-            padding: 3px 8px; +            border: 1px solid #17a2b8; 
-            border-bottom: 1px solid #ddd+            padding: 8px
-            vertical-align: top;+            text-align: left;
         }         }
  
-        .report-table .label-col +        .monitoring-table th 
-            width200px+            background-color#17a2b8
-            font-weightnormal;+            colorwhite;
         }         }
  
-        .report-table .value-col +        .alert-critical 
-            text-alignright;+            background-color: #721c24; 
 +            color: white; 
 +            padding: 15px; 
 +            border-radius: 5px; 
 +            margin15px 0;
             font-weight: bold;             font-weight: bold;
         }         }
  
-        .composition-table +        /* REPORT SECTION */ 
-            width100%+        .report-output 
-            border-collapsecollapse+            border2px solid #3498db
-            font-size11px+            border-radius10px
-            margin-top: 0;+            padding30px
 +            margin-top: 30px; 
 +            background-color: white; 
 +            font-family: 'Times New Roman', serif; 
 +            line-height: 1.6;
         }         }
  
-        .composition-table th { +        .medical-header {
-            background-color: #f0f0f0; +
-            padding: 5px 8px;+
             text-align: center;             text-align: center;
-            font-weightbold+            border-bottom3px solid #2c3e50
-            border1px solid #ddd;+            padding-bottom15px; 
 +            margin-bottom: 25px;
         }         }
  
-        .composition-table td +        .medical-header h1 
-            padding3px 8px+            font-size24px
-            border1px solid #ddd+            color: #2c3e50
-            text-alignright;+            margin5px 0;
         }         }
  
-        .composition-table .component-name-col +        .medical-header h2 
-            text-alignleft !important+            font-size: 18px; 
-            width60%;+            color#34495e
 +            margin3px 0;
         }         }
  
-        .composition-total +        .medical-header p 
-            background-color: #f8f8f8+            font-size: 14px; 
-            font-weightbold;+            color: #7f8c8d
 +            margin2px 0;
         }         }
  
-        .elements-table +        .no-print {  
-            width100%; +            displayblock
-            border-collapse: collapse; +
-            font-size: 11px; +
-            margin-top: 0; +
-        } +
- +
-        .elements-table td { +
-            padding: 3px 8px; +
-            border-bottom: 1px solid #ddd; +
-        } +
- +
-        .elements-table .element-name { +
-            width: 200px; +
-        } +
- +
-        .elements-table .element-value { +
-            text-align: right; +
-            font-weight: bold; +
-            width: 80px; +
-        } +
- +
-        .elements-table .element-unit { +
-            text-align: left; +
-            width: 40px; +
-            font-size: 10px; +
-        } +
- +
-        .report-footer { +
-            margin-top: 30px; +
-            padding-top: 10px; +
-            border-top: 1px solid #ddd; +
-            font-size: 10px; +
-            color: #666; +
-            text-align: center;+
         }         }
  
         @media print {         @media print {
-            .npt-report +            .no-print {  
-                box-shadow: none+                display: none !important
-                border: none; +
-                margin: 0; +
-                padding: 15px;+
             }             }
-             +            body {  
-            .button +                backgroundwhite
-                displaynone;+
             }             }
-             +            .container {  
-            .tabs, .tab-content:not(.active) +                box-shadow: none; 
-                display: none !important;+
             }             }
         }         }
     </style>     </style>
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> 
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> 
 </head> </head>
 <body> <body>
  
 <div class="container"> <div class="container">
-    <h1>Programma NPT Neonatale v2.0</h1>+    <h1>Programma NPT Neonatale v3.0 - Versione Unificata</h1
 +    <div class="version-info"> 
 +        <strong>Versione:</strong> 3.0 UNIFIED | <strong>Data creazione:</strong> 02 Agosto 2025 | <strong>Ora:</strong> 20:00 | <strong>Sistema:</strong> NPT Calculator Advanced UNIFIED 
 +    </div>
          
-    <!-- TAB ORIZZONTALI -->+    <!-- TAB ORIZZONTALI CORRETTI -->
     <div class="tabs">     <div class="tabs">
         <div class="tab active" onclick="showTab('patient-data')">         <div class="tab active" onclick="showTab('patient-data')">
-            <span style="font-size: 18px;">1</span><br>Dati Paziente+            <span style="font-size: 16px;">1</span><br>Dati Paziente
         </div>         </div>
 +        
 +        <!-- SEZIONE CONFIGURAZIONE COMPONENTI (DA VERSIONE 17) -->
         <div class="tab" onclick="showTab('enteral')">         <div class="tab" onclick="showTab('enteral')">
-            <span style="font-size: 18px;">2</span><br>Nutrizione Enterale+            <span style="font-size: 16px;">2</span><br>Nutrizione Enterale
         </div>         </div>
         <div class="tab" onclick="showTab('nutrition-calc')">         <div class="tab" onclick="showTab('nutrition-calc')">
-            <span style="font-size: 18px;">3</span><br>Calcolo Fabbisogni+            <span style="font-size: 16px;">3</span><br>Calcolo Fabbisogni
         </div>         </div>
         <div class="tab" onclick="showTab('parenteral')">         <div class="tab" onclick="showTab('parenteral')">
-            <span style="font-size: 18px;">4</span><br>Nutrizione Parenterale+            <span style="font-size: 16px;">4</span><br>Nutrizione Parenterale 
 +        </div> 
 +        <div class="tab" onclick="showTab('report')"> 
 +            <span style="font-size: 16px;">5</span><br>Report Finale
         </div>         </div>
         <div class="tab" onclick="showTab('config')">         <div class="tab" onclick="showTab('config')">
-            <span style="font-size: 18px;">5</span><br>Configurazione+            <span style="font-size: 16px;">6</span><br>Configurazione
         </div>         </div>
     </div>     </div>
  
-    <!-- TAB 1: DATI PAZIENTE -->+    <!-- TAB 1: DATI PAZIENTE (VERSIONE 17 ORIGINALE) -->
     <div id="patient-data" class="tab-content active">     <div id="patient-data" class="tab-content active">
         <div class="info">         <div class="info">
Linea 524: Linea 492:
                         <label for="prescribingDoctor">Medico prescrittore:</label>                         <label for="prescribingDoctor">Medico prescrittore:</label>
                         <select id="prescribingDoctor" style="width: 200px;">                         <select id="prescribingDoctor" style="width: 200px;">
-                            <option value="">Seleziona medico</option> +                            <!-- Popolato dinamicamente -->
-                            <option value="dr_bellu">Dr. Roberto Bellù</option> +
-                            <option value="dr_condo">Dr.ssa Manuela Condò</option> +
-                            <option value="dr_maccioni">Dr.ssa Carla Maccioni</option> +
-                            <option value="dr_meroni">Dr.ssa Federica Meroni</option> +
-                            <option value="dr_calzatini">Dr. Francesco Calzatini</option> +
-                            <option value="dr_ferrari">Dr.ssa Elisabetta Ferrari</option>+
                         </select>                         </select>
                     </div>                     </div>
Linea 559: Linea 521:
                     <div class="input-group">                     <div class="input-group">
                         <label for="currentWeight">Peso attuale (g):</label>                         <label for="currentWeight">Peso attuale (g):</label>
-                        <input type="number" id="currentWeight" min="400" max="5000" value="3550">+                        <input type="number" id="currentWeight" min="400" max="5000" value="1000">
                     </div>                     </div>
                     <div class="input-group">                     <div class="input-group">
Linea 612: Linea 574:
     </div>     </div>
  
-    <!-- TAB 2: NUTRIZIONE ENTERALE -->+    <!-- TAB 2: NUTRIZIONE ENTERALE (VERSIONE 17 ORIGINALE) -->
     <div id="enteral" class="tab-content">     <div id="enteral" class="tab-content">
         <div class="info">         <div class="info">
Linea 711: Linea 673:
     </div>     </div>
  
-    <!-- TAB 3: CALCOLO FABBISOGNI -->+    <!-- TAB 3: CALCOLO FABBISOGNI (VERSIONE 17 ORIGINALE COMPLETA) -->
     <div id="nutrition-calc" class="tab-content">     <div id="nutrition-calc" class="tab-content">
         <div class="info">         <div class="info">
Linea 841: Linea 803:
     </div>     </div>
  
-    <!-- TAB 4: NUTRIZIONE PARENTERALE -->+    <!-- TAB 4: NUTRIZIONE PARENTERALE (VERSIONE 17 ORIGINALE) -->
     <div id="parenteral" class="tab-content">     <div id="parenteral" class="tab-content">
         <div class="info">         <div class="info">
Linea 883: Linea 845:
             <div id="preparationTable"></div>             <div id="preparationTable"></div>
                          
-            <div style="margin-top: 30px; padding: 15px; background-color: #f0f8ff; border-left: 4px solid #3498db; border-radius: 5px;"> +            <div style="margin-top: 20px;"> 
-                <h3 style="color: #2c3e50; margin-top: 0;">📋 Report Professionali</h3> +                <button class="button" onclick="generatePDF('foglio_lavoro')">📄 Genera PDF FOGLIO DI LAVORO</button> 
-                <p style="margin-bottom: 15px;">Genera i report in formato ospedaliero per stampa e archiviazione:</p> +                <button class="button" onclick="generatePDF('report_parenterale')" style="margin-left: 10px;">📄 Genera PDF REPORT PARENTERALE</button>
-                <div style="display: flex; gap: 10px; flex-wrap: wrap;"> +
-                    <button id="generateWorkReportBtn" class="button" onclick="generateAndShowWorkReport()" style="background-color: #27ae60;">Genera Foglio di Lavoro</button> +
-                    <button id="generateFinalReportBtn" class="button" onclick="generateAndShowFinalReport()" style="background-color: #3498db;">Genera Report Parenterale</button> +
-                    <button id="printReportBtn" class="button secondary hidden" onclick="printCurrentReport()" style="margin-left: 10px;">Stampa Report Attivo</button> +
-                    <button id="savePdfBtn" class="button hidden" onclick="saveReportAsPDF()" style="background-color: #e74c3c; margin-left: 10px;">💾 Salva PDF</button+
-                </div>+
             </div>             </div>
-             
-            <div id="nptWorkReport" class="hidden" style="margin-top: 20px;"></div> 
-            <div id="nptFinalReport" class="hidden" style="margin-top: 20px;"></div> 
         </div>         </div>
     </div>     </div>
  
-    <!-- TAB 5: CONFIGURAZIONE --> +    <!-- TAB 5: REPORT FINALE (SPOSTATO DA TAB 6) --> 
-    <div id="config" class="tab-content">+    <div id="report" class="tab-content">
         <div class="info">         <div class="info">
-            <strong>CONFIGURAZIONE COMPONENTI</strong><br> +            <strong>PASSO 5 - REPORT FINALE</strong><br> 
-            <strong>Sistema:</strong> NPT Calculator v2.0 - Database completo componenti nutrizionali+            <strong>Obiettivo:</strong> Generare la documentazione completa per prescrizione e preparazione
         </div>         </div>
                  
 +        <div class="section no-print">
 +            <h2>Genera Documentazione</h2>
 +            <button class="button" onclick="generatePrescription()">Genera Prescrizione Medica</button>
 +            <button class="button" onclick="generateWorksheet()">Genera Ricetta Preparazione</button>
 +            <button class="button secondary" onclick="window.print()">Stampa Pagina</button>
 +        </div>
 +        
 +        <div id="reportOutput"></div>
 +    </div>
 +
 +    <!-- TAB 6: CONFIGURAZIONE (SPOSTATO DA TAB 5) -->
 +    <div id="config" class="tab-content">
 +        <div class="info">
 +            <strong>CONFIGURAZIONE COMPLETA</strong><br>
 +            <strong>Sistema:</strong> NPT Calculator v3.0 - Database completo componenti + configurazione clinica avanzata
 +        </div>
         <div class="section">         <div class="section">
             <h2>Parametri Sistema</h2>             <h2>Parametri Sistema</h2>
Linea 912: Linea 881:
                     <div class="input-group">                     <div class="input-group">
                         <label for="deflectorVolume">Volume deflussore (ml):</label>                         <label for="deflectorVolume">Volume deflussore (ml):</label>
-                        <input type="number" id="deflectorVolume" min="0" max="100" step="5" value="30">+                        <input type="number" id="deflectorVolume" min="0" max="100" step="5" value="30" oninput="markConfigChanged('system')">
                     </div>                     </div>
                     <div class="info" style="margin-top: 10px; font-size: 12px;">                     <div class="info" style="margin-top: 10px; font-size: 12px;">
Linea 926: Linea 895:
             </div>             </div>
         </div>         </div>
 +        
         <div class="section">         <div class="section">
             <h2>Formule Enterali (Valori per 100ml)</h2>             <h2>Formule Enterali (Valori per 100ml)</h2>
             <div style="overflow-x: auto;">             <div style="overflow-x: auto;">
-                <table class="results-table" style="font-size: 12px;">+                <table class="config-table">
                     <thead>                     <thead>
                         <tr>                         <tr>
Linea 943: Linea 912:
                             <th>Magnesio<br>(mg)</th>                             <th>Magnesio<br>(mg)</th>
                             <th>Energia<br>(kcal)</th>                             <th>Energia<br>(kcal)</th>
 +                            <th>Azioni</th>
                         </tr>                         </tr>
                     </thead>                     </thead>
-                    <tbody>+                    <tbody id="enteralConfigTable"> 
 +                        <!-- Popolato dinamicamente --> 
 +                    </tbody> 
 +                </table> 
 +            </div> 
 +            <div class="form-row"> 
 +                <div class="form-col"> 
 +                    <button id="updateEnteralBtn" class="button" onclick="updateEnteralConfig()">Aggiorna Formule Enterali</button> 
 +                </div> 
 +                <div class="form-col"> 
 +                    <button class="button secondary" onclick="showAddEnteralForm()">Aggiungi Nuova Formula</button> 
 +                </div> 
 +            </div> 
 +        </div> 
 + 
 +        <div class="section"> 
 +            <h2>Fortificanti in Polvere (Valori per 100g)</h2> 
 +            <div style="overflow-x: auto;"> 
 +                <table class="config-table"> 
 +                    <thead>
                         <tr>                         <tr>
-                            <td><strong>Latte Materno</strong></td+                            <th style="min-width: 180px;">Fortificante</th
-                            <td>1.2</td> +                            <th>Proteine<br>(g)</th
-                            <td>7.0</td+                            <th>Carboidrati<br>(g)</th
-                            <td>4.0</td> +                            <th>Lipidi<br>(g)</th
-                            <td>0.007</td+                            <th>Sodio<br>(mEq)</th
-                            <td>0.035</td> +                            <th>Potassio<br>(mEq)</th
-                            <td>28.0</td+                            <th>Calcio<br>(mg)</th
-                            <td>15.0</td> +                            <th>Fosforo<br>(mg)</th
-                            <td>3.0</td+                            <th>Magnesio<br>(mg)</th
-                            <td>67</td> +                            <th>Energia<br>(kcal)</th
-                        </tr> +                            <th style="min-width: 200px;">Note</th
-                        <tr+                            <th>Azioni</th>
-                            <td><strong>Latte Materno + Prenidina FM85</strong></td+
-                            <td>2.6</td> +
-                            <td>7.4</td+
-                            <td>4.25</td> +
-                            <td>0.009</td+
-                            <td>0.050</td> +
-                            <td>63.0</td> +
-                            <td>35.0</td> +
-                            <td>4.5</td> +
-                            <td>87</td> +
-                        </tr> +
-                        <tr> +
-                            <td><strong>Nestle NAN Supreme Pro 1</strong></td> +
-                            <td>1.3</td> +
-                            <td>7.6</td> +
-                            <td>3.5</td> +
-                            <td>0.024</td> +
-                            <td>0.075</td> +
-                            <td>44.1</td> +
-                            <td>24.4</td> +
-                            <td>6.56</td> +
-                            <td>67</td> +
-                        </tr> +
-                        <tr> +
-                            <td><strong>Humana 1</strong></td> +
-                            <td>1.4</td> +
-                            <td>7.6</td> +
-                            <td>3.2</td> +
-                            <td>0.020</td> +
-                            <td>0.070</td> +
-                            <td>59.0</td> +
-                            <td>33.0</td> +
-                            <td>5.0</td> +
-                            <td>67</td> +
-                        </tr> +
-                        <tr> +
-                            <td><strong>BBmilk Zero</strong></td> +
-                            <td>1.8</td> +
-                            <td>7.8</td> +
-                            <td>3.6</td> +
-                            <td>0.022</td> +
-                            <td>0.075</td> +
-                            <td>65.0</td> +
-                            <td>36.0</td> +
-                            <td>6.0</td> +
-                            <td>70</td> +
-                        </tr> +
-                        <tr> +
-                            <td><strong>BBmilk PDF</strong></td> +
-                            <td>1.7</td> +
-                            <td>7.9</td> +
-                            <td>3.7</td> +
-                            <td>0.025</td> +
-                            <td>0.078</td> +
-                            <td>68.0</td> +
-                            <td>38.0</td+
-                            <td>6.5</td+
-                            <td>71</td>+
                         </tr>                         </tr>
 +                    </thead>
 +                    <tbody id="fortifierConfigTable">
                         <tr>                         <tr>
-                            <td><strong>Nestle PreNan POST</strong></td> +                            <td class="component-name">Prenidina FM85</td> 
-                            <td>2.0</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_protein" value="14" step="0.1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>8.2</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_carbs" value="4" step="0.1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>4.0</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_lipids" value="2.5" step="0.1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>0.030</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_sodium" value="2" step="0.1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>0.085</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_potassium" value="15" step="0.1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>75.0</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_calcium" value="3500" step="1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>42.0</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_phosphorus" value="2000" step="1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>7.5</td> +                            <td><input type="number" id="fortifier_prenidina_fm85_magnesium" value="150" step="1" oninput="markConfigChanged('fortifier')"></td> 
-                            <td>73</td+                            <td><input type="number" id="fortifier_prenidina_fm85_energy" value="400" step="1" oninput="markConfigChanged('fortifier')"></td> 
-                        </tr> +                            <td style="font-size: 11px; color: #7f8c8d;">Fortificante latte materno<br><em>Dose: 1-4g/100ml</em></td> 
-                        <tr+                            <td><button class="button secondary" onclick="removeFortifier('prenidina_fm85')" style="padding: 5px 10px; font-size: 12px;">Rimuovi</button></td>
-                            <td><strong>Alfare</strong></td> +
-                            <td>1.9</td> +
-                            <td>7.1</td> +
-                            <td>3.4</td> +
-                            <td>0.015</td> +
-                            <td>0.050</td> +
-                            <td>52.0</td> +
-                            <td>35.0</td> +
-                            <td>5.5</td> +
-                            <td>67</td+
-                        </tr> +
-                        <tr+
-                            <td><strong>Infatrini</strong></td> +
-                            <td>2.6</td> +
-                            <td>10.8</td> +
-                            <td>5.4</td> +
-                            <td>0.028</td> +
-                            <td>0.082</td> +
-                            <td>85.0</td> +
-                            <td>58.0</td> +
-                            <td>9.2</td> +
-                            <td>101</td>+
                         </tr>                         </tr>
                     </tbody>                     </tbody>
                 </table>                 </table>
             </div>             </div>
-            <div class="infostyle="margin-top: 15px;"> +            <div class="form-row"
-                <strong>ℹ️ Informazioni:</strongQuesti valori sono configurati nel database e vengono utilizzati per i calcoli nutrizionali. Sono basati su letteratura e schede tecniche ufficiali.+                <div class="form-col"
 +                    <button id="updateFortifierBtn" class="button" onclick="updateFortifierConfig()">Aggiorna Fortificanti</button
 +                </div> 
 +                <div class="form-col"> 
 +                    <button class="button secondary" onclick="showAddFortifierForm()">Aggiungi Nuovo Fortificante</button> 
 +                </div>
             </div>             </div>
         </div>         </div>
Linea 1065: Linea 981:
             <h2>Componenti Parenterali (Valori per 100ml)</h2>             <h2>Componenti Parenterali (Valori per 100ml)</h2>
             <div style="overflow-x: auto;">             <div style="overflow-x: auto;">
-                <table class="results-table" style="font-size: 12px;">+                <table class="config-table">
                     <thead>                     <thead>
                         <tr>                         <tr>
-                            <th style="min-width: 200px;">Componente</th>+                            <th style="min-width: 180px;">Componente</th> 
 +                            <th>Proteine<br>(g)</th> 
 +                            <th>Carboidrati<br>(g)</th> 
 +                            <th>Lipidi<br>(g)</th> 
 +                            <th>Sodio<br>(mEq)</th> 
 +                            <th>Potassio<br>(mEq)</th>
                             <th>Calcio<br>(mg)</th>                             <th>Calcio<br>(mg)</th>
                             <th>Fosforo<br>(mg)</th>                             <th>Fosforo<br>(mg)</th>
                             <th>Magnesio<br>(mEq)</th>                             <th>Magnesio<br>(mEq)</th>
-                            <th>Sodio<br>(mEq)</th> +                            <th>Energia<br>(kcal)</th> 
-                            <th>Potassio<br>(mEq)</th> +                            <th>Acqua<br>(ml)</th> 
-                            <th style="min-width: 250px;">Descrizione</th>+                            <th style="min-width: 200px;">Descrizione e Note</th> 
 +                            <th>Azioni</th>
                         </tr>                         </tr>
                     </thead>                     </thead>
-                    <tbody>+                    <tbody id="parenteralConfigTable"> 
 +                        <!-- Popolato dinamicamente --> 
 +                    </tbody> 
 +                </table> 
 +            </div> 
 +            <div class="form-row"> 
 +                <div class="form-col"> 
 +                    <button id="updateParenteralBtn" class="button" onclick="updateParenteralConfig()">Aggiorna Componenti Parenterali</button> 
 +                </div> 
 +                <div class="form-col"> 
 +                    <button class="button secondary" onclick="showAddParenteralForm()">Aggiungi Nuovo Componente</button> 
 +                </div> 
 +            </div> 
 +        </div> 
 + 
 +        <div class="section"> 
 +            <h2>Lista Medici Prescrittori</h2> 
 +            <div class="info" style="margin-bottom: 15px;"> 
 +                <strong>🩺 CONFIGURAZIONE MEDICI</strong><br> 
 +                Gestisci la lista dei medici prescrittori. Le modifiche si applicano automaticamente alla dropdown del TAB 1. 
 +            </div> 
 +            <div style="overflow-x: auto;"> 
 +                <table class="config-table"> 
 +                    <thead>
                         <tr>                         <tr>
-                            <td><strong>Calcio Gluconato 10%</strong></td+                            <th style="min-width: 120px;">Nome</th
-                            <td>840</td+                            <th style="min-width: 120px;">Cognome</th
-                            <td>0</td+                            <th style="min-width: 80px;">Titolo</th
-                            <td>0</td+                            <th style="min-width: 250px;">Nome Completo (Visualizzato)</th
-                            <td>0</td> +                            <th>Azioni</th>
-                            <td>0</td> +
-                            <td>1g/10mL, 0.44 mEq/mL - Sale di calcio organico</td>+
                         </tr>                         </tr>
 +                    </thead>
 +                    <tbody id="doctorsConfigTable">
 +                        <!-- Popolato dinamicamente -->
 +                    </tbody>
 +                </table>
 +            </div>
 +            <div class="form-row">
 +                <div class="form-col">
 +                    <button id="updateDoctorsBtn" class="button" onclick="updateDoctorsConfig()">Aggiorna Lista Medici</button>
 +                </div>
 +                <div class="form-col">
 +                    <button class="button secondary" onclick="showAddDoctorForm()">Aggiungi Nuovo Medico</button>
 +                </div>
 +            </div>
 +        </div>
 +
 +        <!-- SEZIONE CONFIGURAZIONE CLINICA AVANZATA (NOVITÀ) -->
 +        <div class="config-advanced">
 +            <h3>🔬 CONFIGURAZIONE CLINICA AVANZATA</h3>
 +            
 +            <div class="section">
 +                <h2>Parametri Elettroliti e Controlli</h2>
 +                <div class="form-row">
 +                    <div class="form-col">
 +                        <div class="input-group">
 +                            <label for="calciumReq">Calcio standard (mg/kg/die):</label>
 +                            <input type="number" id="calciumReq" min="0" max="200" value="160">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Range: 120-200</span>
 +                        </div>
 +                        <div class="input-group">
 +                            <label for="phosphorusReq">Fosforo standard (mg/kg/die):</label>
 +                            <input type="number" id="phosphorusReq" min="0" max="100" value="84">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Range: 60-120</span>
 +                        </div>
 +                        <div class="input-group">
 +                            <label for="magnesiumReq">Magnesio standard (mEq/kg/die):</label>
 +                            <input type="number" id="magnesiumReq" min="0" max="2" step="0.1" value="0.6">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Range: 0.3-1.0</span>
 +                        </div>
 +                    </div>
 +                    <div class="form-col">
 +                        <div class="input-group">
 +                            <label for="maxGIR">GIR massimo (mg/kg/min):</label>
 +                            <input type="number" id="maxGIR" min="5" max="20" step="0.1" value="12.0">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Limite sicurezza</span>
 +                        </div>
 +                        <div class="input-group">
 +                            <label for="maxLipids">Lipidi massimi (g/kg/die):</label>
 +                            <input type="number" id="maxLipids" min="1" max="4" step="0.1" value="3.0">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Limite sicurezza</span>
 +                        </div>
 +                        <div class="input-group">
 +                            <label for="maxProtein">Proteine massime (g/kg/die):</label>
 +                            <input type="number" id="maxProtein" min="3" max="6" step="0.1" value="4.5">
 +                            <span style="margin-left: 10px; font-size: 12px; color: #666;">Limite sicurezza</span>
 +                        </div>
 +                    </div>
 +                </div>
 +                <button class="button" onclick="updateClinicalConfig()">AGGIORNA PARAMETRI CLINICI</button>
 +            </div>
 +
 +            <div class="section">
 +                <h2>Piano di Monitoraggio Automatico</h2>
 +                <table class="monitoring-table">
 +                    <thead>
                         <tr>                         <tr>
-                            <td><strong>Esafosfina</strong></td+                            <th>Controllo</th
-                            <td>0</td+                            <th>Frequenza</th
-                            <td>1600</td+                            <th>Range Normale</th
-                            <td>0</td> +                            <th>Azione se Fuori Range</th>
-                            <td>130</td> +
-                            <td>0</td> +
-                            <td>5g/50mL - Glicerofosfato di sodio</td>+
                         </tr>                         </tr>
 +                    </thead>
 +                    <tbody>
                         <tr>                         <tr>
-                            <td><strong>Magnesio Solfato</strong></td> +                            <td><strong>Glicemia</strong></td> 
-                            <td>0</td> +                            <td>Ogni 6-8h</td> 
-                            <td>0</td> +                            <td>70-110 mg/dL</td> 
-                            <td>800</td> +                            <td>Aggiustare velocità glucosio</td>
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>2g/10mL, 1.6 mEq/mL - Elettrolita essenziale</td>+
                         </tr>                         </tr>
                         <tr>                         <tr>
-                            <td><strong>Sodio Cloruro</strong></td> +                            <td><strong>Elettroliti</strong></td> 
-                            <td>0</td> +                            <td>Ogni 24-48h</td> 
-                            <td>0</td> +                            <td>Na: 135-145, K: 3.5-5.0</td> 
-                            <td>0</td> +                            <td>Modificare apporti NPT</td>
-                            <td>1000</td> +
-                            <td>0</td> +
-                            <td>3mEq/mL - Prima scelta per sodio</td>+
                         </tr>                         </tr>
                         <tr>                         <tr>
-                            <td><strong>Sodio Acetato</strong></td> +                            <td><strong>BUN/Creatinina</strong></td> 
-                            <td>0</td> +                            <td>Ogni 48h</td> 
-                            <td>0</td> +                            <td>BUN: 9-14 mg/dL</td> 
-                            <td>0</td> +                            <td>Aggiustare proteine</td>
-                            <td>667</td> +
-                            <td>0</td> +
-                            <td>2 mEq/mL - Alcalinizzante per acidosi</td>+
                         </tr>                         </tr>
                         <tr>                         <tr>
-                            <td><strong>Potassio Cloruro</strong></td> +                            <td><strong>Trigliceridi</strong></td> 
-                            <td>0</td> +                            <td>2 volte/settimana</td> 
-                            <td>0</td> +                            <td>&lt; 150 mg/dL</td> 
-                            <td>0</td> +                            <td>Ridurre lipidi se &gt; 200</td>
-                            <td>0</td> +
-                            <td>1000</td> +
-                            <td>2 mEq/mL - Max vel. 0.5 mEq/kg/h</td>+
                         </tr>                         </tr>
                         <tr>                         <tr>
-                            <td><strong>Trophamine 6%</strong></td> +                            <td><strong>Funzione epatica</strong></td> 
-                            <td>0</td> +                            <td>Settimanale</td> 
-                            <td>0</td> +                            <td>AST/ALT normali</td> 
-                            <td>0</td> +                            <td>Valutare sospensione NPT</td>
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>Aminoacidi pediatrici - 6g/100mL</td> +
-                        </tr> +
-                        <tr> +
-                            <td><strong>Intralipid 20%</strong></td> +
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>0</td> +
-                            <td>Emulsione lipidica - 20g/100mL</td>+
                         </tr>                         </tr>
                     </tbody>                     </tbody>
                 </table>                 </table>
             </div>             </div>
-            <div class="infostyle="margin-top: 15px;"> + 
-                <strong>ℹ️ Informazioni:</strong> Concentrazioni standard utilizzate per i calcoli elettrolitici. I valori sono basati su preparazioni farmaceutiche standard.+            <div class="section"
 +                <h2>⚠️ ALERT AUTOMATICI</h2> 
 +                <div class="alert-critical"> 
 +                    <strong>INTERRUZIONE IMMEDIATA NPT SE:</strong><br> 
 +                    • Glicemia > 250 mg/dL o < 40 mg/dL<br> 
 +                    • Trigliceridi > 400 mg/dL<br> 
 +                    • AST/ALT > 3x valore normale<br> 
 +                    • Segni di sepsi cateter-correlata<br> 
 +                    • Edema importante con bilancio positivo > 20 ml/kg/die 
 +                </div> 
 +                 
 +                <div class="warning"> 
 +                    <strong>AGGIUSTAMENTI NECESSARI SE:</strong><br> 
 +                    • GIR > 12 mg/kg/min → Ridurre glucosio<br> 
 +                    • BUN > 20 mg/dL → Ridurre proteine<br> 
 +                    • BUN < 5 mg/dL → Aumentare proteine<br> 
 +                    • Trigliceridi 200-400 mg/dL → Ridurre/sospendere lipidi<br> 
 +                    • Ipernatremia → Ridurre sodio, aumentare liquidi liberi 
 +                </div>
             </div>             </div>
-        </div> 
  
-        <div class="section"> +            <div class="section"> 
-            <h2>Lista Medici Prescrittori</h2> +                <h2>Impostazioni Ospedale</h2> 
-            <div class="infostyle="margin-bottom: 15px;"> +                <div class="form-row"
-                <strong>🩺 Database Medici:</strongLista dei medici autorizzati alla prescrizione NPT. Questi nomi appaiono nella dropdown del TAB 1. +                    <div class="form-col"> 
-            </div+                        <div class="input-group"> 
-            <div style="overflow-x: auto;"+                            <label for="hospitalName">Nome Ospedale:</label
-                <table class="results-table" style="font-size12px;"> +                            <input type="textid="hospitalName" value="ASST LECCO" style="width250px;"> 
-                    <thead+                        </div
-                        <tr+                        <div class="input-group"
-                            <th>Nome</th+                            <label for="departmentName">Dipartimento:</label
-                            <th>Cognome</th+                            <input type="text" id="departmentName" value="S.C. Neonatologia e TIN" style="width: 250px;"> 
-                            <th>Titolo</th+                        </div> 
-                            <th>Nome Completo (Visualizzato)</th+                        <div class="input-group"
-                        </tr+                            <label for="directorName">Direttore:</label
-                    </thead+                            <input type="text" id="directorName" value="Dott. Roberto Bellù" style="width: 250px;"
-                    <tbody+                        </div
-                        <tr><td>Roberto</td><td>Bellù</td><td>Dr.</td><td><strong>Dr. Roberto Bellù</strong></td></tr+                    </div
-                        <tr><td>Manuela</td><td>Condò</td><td>Dr.ssa</td><td><strong>Dr.ssa Manuela Condò</strong></td></tr+                    <div class="form-col"
-                        <tr><td>Carla</td><td>Maccioni</td><td>Dr.ssa</td><td><strong>Dr.ssa Carla Maccioni</strong></td></tr+                        <div class="input-group"> 
-                        <tr><td>Federica</td><td>Meroni</td><td>Dr.ssa</td><td><strong>Dr.ssa Federica Meroni</strong></td></tr+                            <label for="autoSave">Salvataggio automatico:</label> 
-                        <tr><td>Francesco</td><td>Calzatini</td><td>Dr.</td><td><strong>Dr. Francesco Calzatini</strong></td></tr+                            <select id="autoSave"> 
-                        <tr><td>Elisabetta</td><td>Ferrari</td><td>Dr.ssa</td><td><strong>Dr.ssa Elisabetta Ferrari</strong></td></tr+                                <option value="true">Attivo</option> 
-                    </tbody> +                                <option value="false">Disattivo</option> 
-                </table>+                            </select
 +                        </div
 +                        <div class="input-group"> 
 +                            <label for="decimalPlaces">Cifre decimali:</label> 
 +                            <select id="decimalPlaces"> 
 +                                <option value="1">1 cifra</option> 
 +                                <option value="2" selected>2 cifre</option> 
 +                                <option value="3">3 cifre</option
 +                            </select
 +                        </div> 
 +                    </div> 
 +                </div
 +                <button class="button secondary" onclick="resetConfiguration()">RESET CONFIGURAZIONE</button
 +                <button class="button" onclick="saveConfiguration()">SALVA CONFIGURAZIONE</button>
             </div>             </div>
         </div>         </div>
  
-        <div class="section"> +        <div id="configResults" class="results hidden"> 
-            <h2>Informazioni Sistema</h2+            <h3>Stato Configurazione v3.0</h3
-            <div class="info"> +            <div id="configInfo"></div>
-                <strong>📊 NPT Calculator v2.0 - Stato Sistema</strong><br> +
-                <strong>• Database Formule:</strong> 9 formule enterali configurate<br> +
-                <strong>• Database Componenti:</strong> 8 componenti parenterali configurati<br> +
-                <strong>• Medici Prescrittori:</strong> 6 medici autorizzati<br> +
-                <strong>• Algoritmi:</strong> Calcoli BUN, fasi nutrizionali, elettroliti automatici<br> +
-                <strong>• Report:</strong> Foglio di lavoro + Report parenterale completo<br> +
-                <strong>• Ultimo Aggiornamento:</strong> Luglio 2025 +
-            </div>+
         </div>         </div>
     </div>     </div>
Linea 1201: Linea 1206:
  
 <script> <script>
-// DATI NUTRIZIONALI COMPLETI+// DATI NUTRIZIONALI COMPLETI (DA VERSIONE 17)
 const formulaData = { const formulaData = {
     maternal: { name: "Latte Materno", protein: 1.2, carbs: 7.0, lipids: 4.0, sodium: 0.007, potassium: 0.035, calcium: 28.0, phosphorus: 15.0, magnesium: 3.0, energy: 67 },     maternal: { name: "Latte Materno", protein: 1.2, carbs: 7.0, lipids: 4.0, sodium: 0.007, potassium: 0.035, calcium: 28.0, phosphorus: 15.0, magnesium: 3.0, energy: 67 },
Linea 1214: Linea 1219:
 }; };
  
-// CONFIGURAZIONI PARENTERALI COMPLETE+// CONFIGURAZIONI PARENTERALI COMPLETE (DA VERSIONE 17)
 const parenteralConfig = { const parenteralConfig = {
 +    trophamine: {
 +        name: "Trophamine 6%",
 +        protein: 6.0, carbs: 0, lipids: 0, sodium: 0, potassium: 0,
 +        calcium: 0, phosphorus: 0, magnesium: 0, energy: 24, water: 94,
 +        description: "Soluzione di aminoacidi pediatrica",
 +        notes: "Soluzione sterile per uso endovenoso. Osmolarità: ~360 mOsm/L"
 +    },
 +    intralipid: {
 +        name: "Intralipid 20%",
 +        protein: 0, carbs: 0, lipids: 20.0, sodium: 0, potassium: 0,
 +        calcium: 0, phosphorus: 0, magnesium: 0, energy: 200, water: 80,
 +        description: "Emulsione lipidica endovenosa",
 +        notes: "Fornisce acidi grassi essenziali. Max 4g/kg/die"
 +    },
 +    glucose50: {
 +        name: "Glucosio 50%",
 +        protein: 0, carbs: 50.0, lipids: 0, sodium: 0, potassium: 0,
 +        calcium: 0, phosphorus: 0, magnesium: 0, energy: 200, water: 50,
 +        description: "Soluzione glucosata molto ipertonica",
 +        notes: "Osmolarità: ~2800 mOsm/L. Solo per alte concentrazioni"
 +    },
     ca_gluconato: {     ca_gluconato: {
-        name: "Calcio Gluconato 10%", +        name: "Calcio Gluconato 10% (1g/10mL, 0.44 mEq/mL)", 
-        calcium840phosphorus: 0, magnesium: 0, sodium: 0, potassium: 0, +        protein0carbs: 0, lipids: 0, sodium: 0, potassium: 0, 
-        protein0carbs: 0, lipids: 0, energy: 0, water: 90+        calcium840phosphorus: 0, magnesium: 0, energy: 0, water: 90
 +        description: "Sale di calcio organico", 
 +        notes: "8.4 mg Ca/ml. Non precipita con fosfati"
     },     },
     esafosfina: {     esafosfina: {
-        name: "Esafosfina", +        name: "Esafosfina (5g/50mL)", 
-        calcium: 0, phosphorus1600magnesium: 0, sodium: 130, potassium: 0, +        protein: 0, carbs0lipids: 0, sodium: 130, potassium: 0, 
-        protein: 0, carbs0lipids: 0, energy: 0, water: 98+        calcium: 0, phosphorus1600magnesium: 0, energy: 0, water: 98
 +        description: "Glicerofosfato di sodio", 
 +        notes: "16 mg P/ml + 1.3 mEq Na/ml. Fosforo organico"
     },     },
     mg_sulfate: {     mg_sulfate: {
-        name: "Magnesio Solfato", +        name: "Magnesio Solfato (2g/10ml, 1.6 mEq/mL)", 
-        calcium: 0, phosphorus: 0, magnesium800, sodium: 0, potassium: 0, +        protein: 0, carbs: 0, lipids0, sodium: 0, potassium: 0, 
-        protein: 0, carbs: 0, lipids0, energy: 0, water: 99+        calcium: 0, phosphorus: 0, magnesium800, energy: 0, water: 99
 +        description: "Elettrolita essenziale", 
 +        notes: "8 mEq Mg/ml. Cofattore enzimatico"
     },     },
     nacl: {     nacl: {
-        name: "Sodio Cloruro", +        name: "Sodio Cloruro (3mEq/mL)", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 1000, potassium: 0, +        protein: 0, carbs: 0, lipids: 0, sodium: 1000, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99+        calcium: 0, phosphorus: 0, magnesium: 0, energy: 0, water: 99
 +        description: "Elettrolita essenziale", 
 +        notes: "10 mEq Na/ml. Prima scelta per supplementazione sodio"
     },     },
     sodium_acetate: {     sodium_acetate: {
-        name: "Sodio Acetato", +        name: "Sodio Acetato (2 mEq/mL)", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 667, potassium: 0, +        protein: 0, carbs: 0, lipids: 0, sodium: 667, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99+        calcium: 0, phosphorus: 0, magnesium: 0, energy: 0, water: 99
 +        description: "Elettrolita alcalinizzante", 
 +        notes: "6.67 mEq Na/ml. Per acidosi: pH < 7.25 o BE < -4"
     },     },
     kcl: {     kcl: {
-        name: "Potassio Cloruro", +        name: "Potassio Cloruro (2 mEq/mL)", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 0, potassium: 1000, +        protein: 0, carbs: 0, lipids: 0, sodium: 0, potassium: 1000
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99+        calcium: 0, phosphorus: 0, magnesium: 0, energy: 0, water: 99, 
 +        description: "Elettrolita essenziale", 
 +        notes: "10 mEq K/ml. Max velocità infusione: 0.5 mEq/kg/h" 
 +    }, 
 +    carnitene: { 
 +        name: "Carnitene (100 mg/ml)"
 +        protein: 0, carbs: 0, lipids: 0, sodium: 0, potassium: 0, 
 +        calcium: 0, phosphorus: 0, magnesium: 0, energy: 0, water: 99
 +        carnitine: 10000, // 100 mg/ml = 10000 mg/100ml 
 +        description: "L-Carnitina per NPT prolungata", 
 +        notes: "100 mg/ml. Indicata per NPT > 1 mese. Dose: 5 mg/kg/die" 
 +    } 
 +}; 
 + 
 +// Database fortificanti dinamico 
 +let fortifierData = { 
 +    prenidina_fm85:
 +        name: "Prenidina FM85", 
 +        protein: 14, carbs: 4, lipids: 2.5, sodium: 2, potassium: 15, 
 +        calcium: 3500, phosphorus: 2000, magnesium: 150, energy: 400, 
 +        dose: "1-4g/100ml"
     }     }
 }; };
  
-// Database medici +// Database medici dinamico 
-const doctorsData = {+let doctorsData = {
     dr_bellu: { name: "Roberto", surname: "Bellù", title: "Dr.", fullName: "Dr. Roberto Bellù" },     dr_bellu: { name: "Roberto", surname: "Bellù", title: "Dr.", fullName: "Dr. Roberto Bellù" },
     dr_condo: { name: "Manuela", surname: "Condò", title: "Dr.ssa", fullName: "Dr.ssa Manuela Condò" },     dr_condo: { name: "Manuela", surname: "Condò", title: "Dr.ssa", fullName: "Dr.ssa Manuela Condò" },
Linea 1255: Linea 1311:
     dr_meroni: { name: "Federica", surname: "Meroni", title: "Dr.ssa", fullName: "Dr.ssa Federica Meroni" },     dr_meroni: { name: "Federica", surname: "Meroni", title: "Dr.ssa", fullName: "Dr.ssa Federica Meroni" },
     dr_calzatini: { name: "Francesco", surname: "Calzatini", title: "Dr.", fullName: "Dr. Francesco Calzatini" },     dr_calzatini: { name: "Francesco", surname: "Calzatini", title: "Dr.", fullName: "Dr. Francesco Calzatini" },
-    dr_ferrari: { name: "Elisabetta", surname: "Ferrari", title: "Dr.ssa", fullName: "Dr.ssa Elisabetta Ferrari" }+    dr_ferrari: { name: "Elisabetta", surname: "Ferrari", title: "Dr.ssa", fullName: "Dr.ssa Elisabetta Ferrari" }, 
 +    dr_ferendeles: { name: "Francesca", surname: "Ferendeles", title: "Dr.ssa", fullName: "Dr.ssa Francesca Ferendeles" }, 
 +    dr_fumagalli_l: { name: "Letizia", surname: "Fumagalli", title: "Dr.ssa", fullName: "Dr.ssa Letizia Fumagalli" }, 
 +    dr_fumagalli_m: { name: "Mara", surname: "Fumagalli", title: "Dr.ssa", fullName: "Dr.ssa Mara Fumagalli" }, 
 +    dr_corno: { name: "Federica", surname: "Corno", title: "Dr.ssa", fullName: "Dr.ssa Federica Corno" }, 
 +    dr_evasi: { name: "Veronica", surname: "Evasi", title: "Dr.ssa", fullName: "Dr.ssa Veronica Evasi" }, 
 +    dr_cereda: { name: "Lidia", surname: "Cereda", title: "Dr.ssa", fullName: "Dr.ssa Lidia Cereda" }, 
 +    dr_ceccon: { name: "Chiara", surname: "Ceccon", title: "Dr.ssa", fullName: "Dr.ssa Chiara Ceccon" }, 
 +    dr_nava: { name: "Chiara", surname: "Nava", title: "Dr.ssa", fullName: "Dr.ssa Chiara Nava" }, 
 +    dr_terenzi: { name: "Francesca", surname: "Terenzi", title: "Dr.ssa", fullName: "Dr.ssa Francesca Terenzi" }, 
 +    dr_raffa: { name: "Milena", surname: "Raffa", title: "Dr.ssa", fullName: "Dr.ssa Milena Raffa" }, 
 +    dr_aquisti: { name: "Giulia", surname: "Aquisti", title: "Dr.ssa", fullName: "Dr.ssa Giulia Aquisti" }
 }; };
  
Linea 1261: Linea 1328:
 let patientData = {}; let patientData = {};
 let enteralData = null; let enteralData = null;
-window.currentActiveReport = null;+let currentRequirements = null;
  
-// INIZIALIZZAZIONE +// CONFIGURAZIONE CLINICA AVANZATA (NUOVO) 
-document.addEventListener('DOMContentLoaded', function() { +let clinicalConfig = { 
-    // Imposta data odierna +    calciumReq: 160, 
-    const today new Date().toISOString().split('T')[0]+    phosphorusReq: 84, 
-    document.getElementById('prescriptionDate').value = today+    magnesiumReq: 0.6, 
-});+    maxGIR: 12.0, 
 +    maxLipids: 3.0, 
 +    maxProtein: 4.5, 
 +    hospitalName: "ASST LECCO", 
 +    departmentName: "S.C. Neonatologia e TIN", 
 +    directorName: "Dott. Roberto Bellù" 
 +}; 
 + 
 +// FUNZIONE RESET PULSANTE FABBISOGNI 
 +function resetNutritionButton() { 
 +    const nutritionBtn = document.getElementById('calculateNutritionBtn'); 
 +    if (nutritionBtn) { 
 +        nutritionBtn.className = 'button calculate-nutrition-pending'; 
 +        nutritionBtn.innerHTML = 'RICALCOLA FABBISOGNI'; 
 +         
 +        // Nascondi i risultati precedenti 
 +        const nutritionResults = document.getElementById('nutritionResults'); 
 +        if (nutritionResults) { 
 +            nutritionResults.classList.add('hidden'); 
 +        } 
 +         
 +        // Reset anche il pulsante NPT perché i fabbisogni sono cambiati 
 +        resetParenteralButton(); 
 +    
 +
 + 
 +// FUNZIONE RESET PULSANTE PARENTERALE 
 +function resetParenteralButton() { 
 +    const parenteralBtn document.getElementById('calculateParenteralBtn')
 +    if (parenteralBtn) { 
 +        parenteralBtn.className = 'button'; 
 +        parenteralBtn.innerHTML = 'CALCOLA NPT AUTOMATICA'; 
 +         
 +        // Reset anche i campi visualizzati 
 +        document.getElementById('calculatedTotalVolume').value = "Premere 'Calcola NPT'"; 
 +        document.getElementById('suggestedGlucose').value = "Premere 'Calcola NPT'"
 +        document.getElementById('calculatedProteinVol').value = "--"
 +        document.getElementById('calculatedLipidVol').value = "--"; 
 +         
 +        // Nascondi i risultati precedenti 
 +        const parenteralResults = document.getElementById('parenteralResults'); 
 +        if (parenteralResults) { 
 +            parenteralResults.classList.add('hidden'); 
 +        } 
 +    } 
 +}
  
-// FUNZIONE TAB+// FUNZIONE CORRETTA PER CAMBIO TAB
 function showTab(tabId) { function showTab(tabId) {
-    // Rimuovi classe active da tutti i contenuti+    // Nascondi tutti i contenuti dei tab
     document.querySelectorAll('.tab-content').forEach(content => {     document.querySelectorAll('.tab-content').forEach(content => {
         content.classList.remove('active');         content.classList.remove('active');
     });     });
          
-    // Rimuovi classe active da tutte le tab+    // Rimuovi classe active da tutti i tab
     document.querySelectorAll('.tab').forEach(tab => {     document.querySelectorAll('.tab').forEach(tab => {
         tab.classList.remove('active');         tab.classList.remove('active');
     });     });
          
-    // Mostra il contenuto selezionato+    // Mostra il contenuto del tab selezionato
     const targetContent = document.getElementById(tabId);     const targetContent = document.getElementById(tabId);
     if (targetContent) {     if (targetContent) {
Linea 1288: Linea 1400:
     }     }
          
-    // Attiva la tab cliccata +    // Trova e attiva il tab cliccato 
-    event.target.closest('.tab').classList.add('active');+    const clickedTab = event.target.closest('.tab')
 +    if (clickedTab) { 
 +        clickedTab.classList.add('active'); 
 +    } 
 +     
 +    // Popola le tabelle di configurazione quando si apre il TAB 6 (ora config) 
 +    if (tabId === 'config') { 
 +        setTimeout(() => { 
 +            populateEnteralConfigTable(); 
 +            populateParenteralConfigTable(); 
 +            populateDoctorsConfigTable(); 
 +        }, 100); 
 +    } 
 +
 + 
 +// FUNZIONE GESTIONE CARTELLA CLINICA 
 +function setupMedicalRecordField() { 
 +    const medicalRecordInput = document.getElementById('medicalRecord'); 
 +    const currentYear = new Date().getFullYear().toString(); 
 +     
 +    // Imposta il valore iniziale con l'anno corrente 
 +    if (!medicalRecordInput.value) { 
 +        medicalRecordInput.value = currentYear; 
 +    } 
 +     
 +    // Gestisce l'input per mantenere sempre l'anno all'inizio 
 +    medicalRecordInput.addEventListener('input', function(e) { 
 +        let value = e.target.value.replace(/\D/g, ''); // Solo numeri 
 +         
 +        // Se l'utente cerca di cancellare l'anno, lo ripristina 
 +        if (value.length < 4 || !value.startsWith(currentYear)) { 
 +            value = currentYear + value.slice(4); 
 +        } 
 +         
 +        // Limita a 10 cifre totali 
 +        if (value.length > 10) { 
 +            value = value.slice(0, 10); 
 +        } 
 +         
 +        e.target.value = value; 
 +    }); 
 +     
 +    // Quando il campo ottiene il focus, posiziona il cursore dopo l'anno 
 +    medicalRecordInput.addEventListener('focus', function(e) { 
 +        if (e.target.value === currentYear) { 
 +            // Posiziona il cursore alla fine 
 +            setTimeout(() => { 
 +                e.target.setSelectionRange(4, 4); 
 +            }, 0); 
 +        } 
 +    }); 
 +     
 +    // Suggerimento visivo 
 +    medicalRecordInput.addEventListener('blur', function(e) { 
 +        if (e.target.value === currentYear) { 
 +            e.target.placeholder = currentYear + '000001'; 
 +        } 
 +    }); 
 +
 + 
 +function updateDoctorsDropdown() { 
 +    const prescribingDoctorSelect = document.getElementById('prescribingDoctor'); 
 +    if (!prescribingDoctorSelect) return; 
 +     
 +    const currentValue = prescribingDoctorSelect.value; 
 +    prescribingDoctorSelect.innerHTML = '<option value="">Seleziona medico</option>'; 
 +     
 +    Object.keys(doctorsData).forEach(function(key) { 
 +        const doctor = doctorsData[key]; 
 +        const option = document.createElement('option'); 
 +        option.value = key; 
 +        option.textContent = doctor.fullName; 
 +        prescribingDoctorSelect.appendChild(option); 
 +    }); 
 +     
 +    // Ripristina il valore precedente se esiste ancora 
 +    if (currentValue && doctorsData[currentValue]) { 
 +        prescribingDoctorSelect.value = currentValue; 
 +    }
 } }
  
-// FUNZIONE CALCOLO FASE+// FUNZIONE CALCOLO FASE NUTRIZIONALE (DA VERSIONE 17)
 function calculatePhase() { function calculatePhase() {
     const medicalRecord = document.getElementById('medicalRecord').value;     const medicalRecord = document.getElementById('medicalRecord').value;
-    const birthWeight = parseInt(document.getElementById('birthWeight').value); +    const phaseBirthWeight = parseInt(document.getElementById('birthWeight').value); 
-    const currentWeight = parseInt(document.getElementById('currentWeight').value);+    const phaseCurrentWeight = parseInt(document.getElementById('currentWeight').value);
     const daysOfLife = parseInt(document.getElementById('daysOfLife').value);     const daysOfLife = parseInt(document.getElementById('daysOfLife').value);
     const bun = document.getElementById('bun').value;     const bun = document.getElementById('bun').value;
Linea 1305: Linea 1495:
     const diuresis = document.getElementById('diuresis').value;     const diuresis = document.getElementById('diuresis').value;
     const prescriptionDate = document.getElementById('prescriptionDate').value;     const prescriptionDate = document.getElementById('prescriptionDate').value;
-    const prescribingDoctor = document.getElementById('prescribingDoctor').value;+    const prescribingDoctorValue = document.getElementById('prescribingDoctor').value
 +     
 +    // Trova il nome completo del medico 
 +    const doctorFullName = prescribingDoctorValue && doctorsData[prescribingDoctorValue] ?  
 +                          doctorsData[prescribingDoctorValue].fullName : '';
          
     patientData = {     patientData = {
         medicalRecord: medicalRecord,         medicalRecord: medicalRecord,
-        birthWeight: birthWeight,  +        birthWeight: phaseBirthWeight,  
-        currentWeight: currentWeight+        currentWeight: phaseCurrentWeight
         daysOfLife: daysOfLife,         daysOfLife: daysOfLife,
         bun: bun,         bun: bun,
Linea 1319: Linea 1513:
         diuresis: diuresis,         diuresis: diuresis,
         prescriptionDate: prescriptionDate,         prescriptionDate: prescriptionDate,
-        prescribingDoctor: prescribingDoctor+        prescribingDoctor: prescribingDoctorValue, 
 +        prescribingDoctorName: doctorFullName
     };     };
          
Linea 1333: Linea 1528:
         if (bunValue < 9) {         if (bunValue < 9) {
             bunStatus = 'Basso - Aumentare proteine';             bunStatus = 'Basso - Aumentare proteine';
-            bunWarning = 'BUN basso: considerare aumento proteine';+            bunWarning = 'BUN basso: considerare aumento fortificazione proteica (+1%)';
         } else if (bunValue > 14) {         } else if (bunValue > 14) {
             bunStatus = 'Elevato - Ridurre proteine';             bunStatus = 'Elevato - Ridurre proteine';
-            bunWarning = 'BUN elevato: ridurre proteine';+            bunWarning = 'BUN elevato: ridurre fortificazione proteica (-1%)';
         } else {         } else {
             bunStatus = 'Normale (9-14 mg/dL)';             bunStatus = 'Normale (9-14 mg/dL)';
Linea 1342: Linea 1537:
     } else {     } else {
         bunStatus = 'Non inserito';         bunStatus = 'Non inserito';
 +    }
 +    
 +    // Analisi altri parametri
 +    let otherWarnings = [];
 +    
 +    if (glucose && glucose !== '') {
 +        const glucoseValue = parseFloat(glucose);
 +        if (glucoseValue < 70) {
 +            otherWarnings.push('⚠️ Ipoglicemia: considerare riduzione velocità glucosio');
 +        } else if (glucoseValue > 150) {
 +            otherWarnings.push('⚠️ Iperglicemia: ridurre concentrazione glucosio NPT');
 +        }
 +    }
 +    
 +    if (sodium && sodium !== '') {
 +        const sodiumValue = parseFloat(sodium);
 +        if (sodiumValue < 135) {
 +            otherWarnings.push('⚠️ Iponatremia: aumentare sodio in NPT');
 +        } else if (sodiumValue > 145) {
 +            otherWarnings.push('⚠️ Ipernatremia: ridurre sodio, aumentare liquidi');
 +        }
 +    }
 +    
 +    if (ph && ph !== '') {
 +        const phValue = parseFloat(ph);
 +        if (phValue < 7.35) {
 +            otherWarnings.push('⚠️ Acidosi: valutare bicarbonato o ridurre cloruri');
 +        } else if (phValue > 7.45) {
 +            otherWarnings.push('⚠️ Alcalosi: ridurre bicarbonato, aumentare cloruri');
 +        }
 +    }
 +    
 +    if (baseExcess && baseExcess !== '') {
 +        const beValue = parseFloat(baseExcess);
 +        if (beValue < -4) {
 +            otherWarnings.push('⚠️ BE < -4: Acidosi metabolica - Considera Sodio Acetato in NPT');
 +        } else if (beValue > 2) {
 +            otherWarnings.push('⚠️ BE > +2: Alcalosi metabolica - Ridurre bicarbonato');
 +        }
 +    }
 +    
 +    // Raccomandazione combinata pH + BE per Sodio Acetato
 +    if (ph && baseExcess) {
 +        const phValue = parseFloat(ph);
 +        const beValue = parseFloat(baseExcess);
 +        if (phValue < 7.25 || beValue < -4) {
 +            otherWarnings.push('🧪 RACCOMANDAZIONE: Usa Sodio Acetato invece di NaCl in NPT');
 +        }
 +    }
 +    
 +    if (diuresis && diuresis !== '') {
 +        const diuresisValue = parseFloat(diuresis);
 +        if (diuresisValue < 1) {
 +            otherWarnings.push('⚠️ Oliguria: ridurre liquidi, controllare funzione renale');
 +        } else if (diuresisValue > 3) {
 +            otherWarnings.push('⚠️ Poliuria: aumentare liquidi, controllare osmolarità');
 +        }
     }     }
          
Linea 1351: Linea 1603:
         phaseInfoHtml += '<p><strong>Cartella:</strong> ' + medicalRecord + '</p>';         phaseInfoHtml += '<p><strong>Cartella:</strong> ' + medicalRecord + '</p>';
     }     }
-    phaseInfoHtml += '<p><strong>Peso:</strong> ' + currentWeight + 'g (nascita: ' + birthWeight + 'g)</p>';+    phaseInfoHtml += '<p><strong>Peso:</strong> ' + phaseCurrentWeight + 'g (nascita: ' + phaseBirthWeight + 'g)</p>';
     phaseInfoHtml += '<p><strong>Giorni di vita:</strong> ' + daysOfLife + '</p>';     phaseInfoHtml += '<p><strong>Giorni di vita:</strong> ' + daysOfLife + '</p>';
     phaseInfoHtml += '<p><strong>Fase nutrizionale:</strong> ' + phase + '</p>';     phaseInfoHtml += '<p><strong>Fase nutrizionale:</strong> ' + phase + '</p>';
Linea 1359: Linea 1611:
     if (patientData.bun) {     if (patientData.bun) {
         phaseInfoHtml += '<p><strong>BUN:</strong> ' + patientData.bun + ' mg/dL (' + bunStatus + ')</p>';         phaseInfoHtml += '<p><strong>BUN:</strong> ' + patientData.bun + ' mg/dL (' + bunStatus + ')</p>';
 +    }
 +    if (patientData.glucose) {
 +        const gluStatus = parseFloat(patientData.glucose) >= 70 && parseFloat(patientData.glucose) <= 110 ? 'Normale' : 'Fuori range';
 +        phaseInfoHtml += '<p><strong>Glicemia:</strong> ' + patientData.glucose + ' mg/dL (' + gluStatus + ')</p>';
 +    }
 +    if (patientData.sodium) {
 +        const naStatus = parseFloat(patientData.sodium) >= 135 && parseFloat(patientData.sodium) <= 145 ? 'Normale' : 'Fuori range';
 +        phaseInfoHtml += '<p><strong>Natremia:</strong> ' + patientData.sodium + ' mEq/L (' + naStatus + ')</p>';
 +    }
 +    if (patientData.ph) {
 +        const phStatus = parseFloat(patientData.ph) >= 7.35 && parseFloat(patientData.ph) <= 7.45 ? 'Normale' : 'Fuori range';
 +        phaseInfoHtml += '<p><strong>pH:</strong> ' + patientData.ph + ' (' + phStatus + ')</p>';
 +    }
 +    if (patientData.baseExcess) {
 +        const beStatus = parseFloat(patientData.baseExcess) >= -4 && parseFloat(patientData.baseExcess) <= 2 ? 'Normale' : 'Fuori range';
 +        phaseInfoHtml += '<p><strong>BE:</strong> ' + patientData.baseExcess + ' mEq/L (' + beStatus + ')</p>';
 +    }
 +    if (patientData.diuresis) {
 +        const diuStatus = parseFloat(patientData.diuresis) >= 1 && parseFloat(patientData.diuresis) <= 3 ? 'Normale' : 'Fuori range';
 +        phaseInfoHtml += '<p><strong>Diuresi:</strong> ' + patientData.diuresis + ' mL/kg/die (' + diuStatus + ')</p>';
     }     }
     phaseInfoHtml += '</div>';     phaseInfoHtml += '</div>';
Linea 1365: Linea 1637:
     if (bunWarning) {     if (bunWarning) {
         phaseInfoHtml += '<div class="info"><strong>Nota BUN:</strong> ' + bunWarning + '</div>';         phaseInfoHtml += '<div class="info"><strong>Nota BUN:</strong> ' + bunWarning + '</div>';
 +    }
 +    
 +    if (otherWarnings.length > 0) {
 +        phaseInfoHtml += '<div class="warning"><strong>Avvertenze Cliniche:</strong><br>' + otherWarnings.join('<br>') + '</div>';
     }     }
          
Linea 1375: Linea 1651:
     document.getElementById('calculatePhaseBtn').innerHTML = 'FASE CALCOLATA ✓';     document.getElementById('calculatePhaseBtn').innerHTML = 'FASE CALCOLATA ✓';
          
 +    // Aggiorna il suggerimento sodio se il TAB 3 è già stato visitato
     updateSodiumRecommendation();     updateSodiumRecommendation();
 +    
 +    // RESET anche il pulsante NPT
 +    resetParenteralButton();
 } }
  
-function updateSodiumRecommendation() { +// FUNZIONE AGGIORNAMENTO OPZIONI FORTIFICANTE
-    // Implementazione vuota per ora +
-+
- +
-// FUNZIONE FORTIFICANTE+
 function updateFortifierOptions() { function updateFortifierOptions() {
     const formulaType = document.getElementById('formulaType').value;     const formulaType = document.getElementById('formulaType').value;
     const fortifierSection = document.getElementById('fortifierSection');     const fortifierSection = document.getElementById('fortifierSection');
 +    const fortifierSelect = document.getElementById('fortifierType');
          
     if (formulaType === 'maternal') {     if (formulaType === 'maternal') {
         fortifierSection.classList.remove('hidden');         fortifierSection.classList.remove('hidden');
 +        
 +        fortifierSelect.innerHTML = '<option value="none">Nessun fortificante</option>';
 +        Object.keys(fortifierData).forEach(function(key) {
 +            const option = document.createElement('option');
 +            option.value = key;
 +            option.textContent = fortifierData[key].name;
 +            fortifierSelect.appendChild(option);
 +        });
     } else {     } else {
         fortifierSection.classList.add('hidden');         fortifierSection.classList.add('hidden');
 +        fortifierSelect.value = 'none';
     }     }
 } }
  
 +// FUNZIONE AGGIORNAMENTO DISPLAY CONCENTRAZIONE
 function updateConcentrationDisplay() { function updateConcentrationDisplay() {
     const concentration = document.getElementById('fortifierConcentration').value;     const concentration = document.getElementById('fortifierConcentration').value;
Linea 1399: Linea 1686:
 } }
  
-// FUNZIONE CALCOLO ENTERALE+// FUNZIONE CALCOLO NUTRIZIONE ENTERALE (DA VERSIONE 17)
 function calculateEnteral() { function calculateEnteral() {
-    if (!patientData.birthWeight) { +    // Controlla se i dati di base sono presenti 
-        alert('Prima inserire i dati del paziente nel TAB 1');+    const enteralCurrentWeight = parseInt(document.getElementById('currentWeight').value); 
 +    const enteralBirthWeight = parseInt(document.getElementById('birthWeight').value); 
 +     
 +    if (!enteralCurrentWeight || !enteralBirthWeight) { 
 +        alert('Prima inserire peso attuale e peso alla nascita nel TAB 1');
         return;         return;
 +    }
 +    
 +    // Aggiorna patientData se non è stato ancora fatto
 +    if (!patientData.currentWeight) {
 +        patientData.currentWeight = enteralCurrentWeight;
 +        patientData.birthWeight = enteralBirthWeight;
     }     }
          
Linea 1437: Linea 1734:
         const volumePerKg = (dailyVolume / currentWeight) * 1000;         const volumePerKg = (dailyVolume / currentWeight) * 1000;
                  
 +        // Calcoli finali per kg di peso
         enteralData = {         enteralData = {
             volume: dailyVolume,             volume: dailyVolume,
Linea 1456: Linea 1754:
         tableHtml += '<strong>Volume latte:</strong> ' + dailyVolume + ' ml (' + volumePerKg.toFixed(1) + ' ml/kg/die)<br>';         tableHtml += '<strong>Volume latte:</strong> ' + dailyVolume + ' ml (' + volumePerKg.toFixed(1) + ' ml/kg/die)<br>';
         if (additionalFluids > 0) {         if (additionalFluids > 0) {
-            tableHtml += '<strong>Altri liquidi:</strong> ' + additionalFluids + ' ml<br>';+            tableHtml += '<strong>Altri liquidi:</strong> ' + additionalFluids + ' ml (' + ((additionalFluids/currentWeight)*1000).toFixed(1) + ' ml/kg/die)<br>';
             tableHtml += '<strong>💧 TOTALE LIQUIDI:</strong> ' + totalFluids + ' ml (' + totalFluidsPerKg.toFixed(1) + ' ml/kg/die)';             tableHtml += '<strong>💧 TOTALE LIQUIDI:</strong> ' + totalFluids + ' ml (' + totalFluidsPerKg.toFixed(1) + ' ml/kg/die)';
         } else {         } else {
Linea 1476: Linea 1774:
     document.getElementById('enteralResults').classList.remove('hidden');     document.getElementById('enteralResults').classList.remove('hidden');
          
 +    // Aggiorna il pulsante a verde
     const enteralBtn = document.getElementById('calculateEnteralBtn');     const enteralBtn = document.getElementById('calculateEnteralBtn');
     if (enteralBtn) {     if (enteralBtn) {
Linea 1481: Linea 1780:
         enteralBtn.innerHTML = 'Apporti Enterali Calcolati ✓';         enteralBtn.innerHTML = 'Apporti Enterali Calcolati ✓';
     }     }
 +    
 +    // RESET del pulsante Fabbisogni quando si modificano gli apporti enterali
 +    resetNutritionButton();
 } }
  
-// FUNZIONE CARICAMENTO VALORI DEFAULT+// FUNZIONE CARICAMENTO VALORI STANDARD (DA VERSIONE 17)
 function loadNutritionDefaults() { function loadNutritionDefaults() {
-    if (!patientData.birthWeight) { +    // Controlla se i dati di base sono presenti 
-        alert('Prima inserire i dati del paziente nel TAB 1');+    const defaultsCurrentWeight = parseInt(document.getElementById('currentWeight').value); 
 +    const defaultsBirthWeight = parseInt(document.getElementById('birthWeight').value); 
 +    const defaultsDaysOfLife = parseInt(document.getElementById('daysOfLife').value); 
 +     
 +    if (!defaultsCurrentWeight || !defaultsBirthWeight || !defaultsDaysOfLife) { 
 +        alert('Prima inserire peso attuale, peso alla nascita e giorni di vita nel TAB 1');
         return;         return;
 +    }
 +    
 +    // Aggiorna patientData se non è stato ancora fatto
 +    if (!patientData.currentWeight) {
 +        patientData.currentWeight = defaultsCurrentWeight;
 +        patientData.birthWeight = defaultsBirthWeight;
 +        patientData.daysOfLife = defaultsDaysOfLife;
     }     }
          
     const targetDay = parseInt(document.getElementById('targetDay').value);     const targetDay = parseInt(document.getElementById('targetDay').value);
-    const birthWeight = patientData.birthWeight;+    const patientBirthWeightForCalculation = patientData.birthWeight;
          
     const weightCategorySelect = document.getElementById('weightCategory');     const weightCategorySelect = document.getElementById('weightCategory');
-    let selectedCategory = weightCategorySelect.value || (birthWeight <= 1500 ? '≤1500g' : '>1500g');+    let selectedCategory = weightCategorySelect.value || (patientBirthWeightForCalculation <= 1500 ? '≤1500g' : '>1500g');
     weightCategorySelect.value = selectedCategory;     weightCategorySelect.value = selectedCategory;
          
Linea 1520: Linea 1834:
     document.getElementById('reqCarbs').value = plan.carbs;     document.getElementById('reqCarbs').value = plan.carbs;
     document.getElementById('reqLipids').value = plan.lipids;     document.getElementById('reqLipids').value = plan.lipids;
-    document.getElementById('reqCalcium').value = targetDay > 3 ? 160 : 0; +     
-    document.getElementById('reqPhosphorus').value = targetDay > 3 ? 84 : 0; +    // Usa configurazione clinica per elettroliti 
-    document.getElementById('reqMagnesium').value = targetDay > 3 ? 0.: 0;+    document.getElementById('reqCalcium').value = targetDay > 3 ? clinicalConfig.calciumReq : 0; 
 +    document.getElementById('reqPhosphorus').value = targetDay > 3 ? clinicalConfig.phosphorusReq : 0; 
 +    document.getElementById('reqMagnesium').value = targetDay > 3 ? clinicalConfig.magnesiumReq : 0;
     document.getElementById('reqSodium').value = targetDay > 2 ? 2.0 : 0;     document.getElementById('reqSodium').value = targetDay > 2 ? 2.0 : 0;
     document.getElementById('reqPotassium').value = targetDay > 2 ? 1.5 : 0;     document.getElementById('reqPotassium').value = targetDay > 2 ? 1.5 : 0;
          
-    // Vitamine/oligoelementi +    // Gestione automatica tipo di sodio basata sui parametri clinici 
-    const currentWeight = patientData.currentWeight; +    const sodiumSelect = document.getElementById('sodiumType'); 
-    const enteralVolumePerKg = enteralData ? (enteralData.totalFluids / currentWeight * 1000) : 0;+    if (patientData.ph || patientData.baseExcess) { 
 +        const ph = patientData.ph ? parseFloat(patientData.ph) : null; 
 +        const be = patientData.baseExcess ? parseFloat(patientData.baseExcess) : null; 
 +         
 +        // Auto-seleziona Sodio Acetato se acidosi 
 +        if ((ph && ph < 7.30) || (be && be < -4)) { 
 +            sodiumSelect.value = 'sodium_acetate'; 
 +        } else { 
 +            sodiumSelect.value = 'nacl'; 
 +        } 
 +    } 
 +     
 +    // Aggiorna il suggerimento sodio 
 +    updateSodiumRecommendation(); 
 +     
 +    // Gestione vitamine/oligoelementi con controllo enterale 
 +    const patientCurrentWeight = patientData.currentWeight; 
 +    const enteralVolumePerKg = enteralData ? (enteralData.totalFluids / patientCurrentWeight * 1000) : 0;
          
     if (targetDay >= 3 && enteralVolumePerKg < 100) {     if (targetDay >= 3 && enteralVolumePerKg < 100) {
Linea 1535: Linea 1868:
         document.getElementById('reqPeditrace').value = 1.0;         document.getElementById('reqPeditrace').value = 1.0;
     } else {     } else {
 +        // Mantieni i valori a zero se prima del 3° giorno o se enterale ≥100 ml/kg/die
         document.getElementById('reqVitalipid').value = 0;         document.getElementById('reqVitalipid').value = 0;
         document.getElementById('reqSoluvit').value = 0;         document.getElementById('reqSoluvit').value = 0;
Linea 1540: Linea 1874:
     }     }
          
-    document.getElementById('reqCarnitine').value = 0;+    document.getElementById('reqCarnitine').value = 0; // La carnitina verrà gestita separatamente
          
-    const loadBtn = document.getElementById('loadDefaultsBtn')+    document.getElementById('loadDefaultsBtn').className = 'button load-defaults-completed'; 
-    if (loadBtn) { +    document.getElementById('loadDefaultsBtn').innerHTML = 'Valori Caricati ✓'; 
-        loadBtn.className = 'button load-defaults-completed'; +     
-        loadBtn.innerHTML = 'Valori Standard Caricati ✓'; +    // RESET del pulsante Fabbisogni quando si modificano i valori standard 
-    }+    resetNutritionButton();
 } }
  
 +// FUNZIONE AGGIORNAMENTO UNITÀ CARBOIDRATI
 function updateCarbUnit() { function updateCarbUnit() {
     const unit = document.getElementById('carbUnit').value;     const unit = document.getElementById('carbUnit').value;
Linea 1563: Linea 1898:
         carbInput.setAttribute('step', '0.1');         carbInput.setAttribute('step', '0.1');
     }     }
 +    
 +    // Reset fabbisogni quando si cambia unità
 +    resetNutritionButton();
 } }
  
 +// FUNZIONE AGGIORNAMENTO CATEGORIA PESO
 function updateWeightCategory() { function updateWeightCategory() {
-    // Placeholder+    // Reset fabbisogni quando si cambia categoria peso 
 +    resetNutritionButton();
 } }
  
 +// FUNZIONE AGGIORNAMENTO TIPO SODIO
 function updateSodiumChoice() { function updateSodiumChoice() {
-    // Placeholder+    // Resetta i fabbisogni quando si cambia il tipo di sodio 
 +    resetNutritionButton(); 
 +
 + 
 +// FUNZIONE AGGIORNAMENTO SUGGERIMENTO SODIO 
 +function updateSodiumRecommendation() { 
 +    const sodiumSelect = document.getElementById('sodiumType'); 
 +    const recommendationDiv = document.getElementById('sodiumRecommendation'); 
 +     
 +    if (!patientData.ph && !patientData.baseExcess) { 
 +        // Nessun dato clinico disponibile 
 +        recommendationDiv.classList.add('hidden'); 
 +        return; 
 +    } 
 +     
 +    const ph = patientData.ph ? parseFloat(patientData.ph) : null; 
 +    const be = patientData.baseExcess ? parseFloat(patientData.baseExcess) : null; 
 +     
 +    // Logica di raccomandazione 
 +    let needsAcetate = false; 
 +    let reason = ''; 
 +     
 +    if (ph && ph < 7.30) { 
 +        needsAcetate = true; 
 +        reason = 'pH < 7.30 (acidosi)'; 
 +    } else if (be && be < -4) { 
 +        needsAcetate = true; 
 +        reason = 'BE < -4 mEq/L (acidosi metabolica)'; 
 +    } else if (ph && be && (ph < 7.30 || be < -4)) { 
 +        needsAcetate = true; 
 +        reason = 'pH < 7.30 o BE < -4 (acidosi)'; 
 +    } 
 +     
 +    if (needsAcetate) { 
 +        // Suggerisci Sodio Acetato 
 +        if (sodiumSelect.value === 'nacl') { 
 +            // L'utente ha selezionato NaCl ma dovrebbe usare Acetato 
 +            recommendationDiv.innerHTML = '<div class="warning" style="padding: 8px; font-size: 12px;">'
 +                '<strong>⚠️ RACCOMANDAZIONE CLINICA:</strong><br>'
 +                'In base ai parametri clinici (' + reason + '), si raccomanda <strong>Sodio Acetato</strong> invece di Sodio Cloruro per effetto alcalinizzante.'
 +                '</div>'; 
 +            recommendationDiv.classList.remove('hidden'); 
 +        } else { 
 +            // L'utente ha già selezionato Acetato - mostra conferma 
 +            recommendationDiv.innerHTML = '<div class="info" style="padding: 8px; font-size: 12px;">'
 +                '<strong>✅ SCELTA APPROPRIATA:</strong><br>'
 +                'Sodio Acetato è indicato per i parametri clinici attuali (' + reason + ').'
 +                '</div>'; 
 +            recommendationDiv.classList.remove('hidden'); 
 +        } 
 +    } else { 
 +        // Parametri normali 
 +        if (sodiumSelect.value === 'sodium_acetate') { 
 +            // L'utente ha selezionato Acetato ma i parametri sono normali 
 +            recommendationDiv.innerHTML = '<div class="info" style="padding: 8px; font-size: 12px;">'
 +                '<strong>ℹ️ NOTA:</strong><br>'
 +                'I parametri clinici sono nella norma. Sodio Cloruro potrebbe essere sufficiente, ma Sodio Acetato è comunque sicuro.'
 +                '</div>'; 
 +            recommendationDiv.classList.remove('hidden'); 
 +        } else { 
 +            // Tutto normale 
 +            recommendationDiv.classList.add('hidden'); 
 +        } 
 +    }
 } }
  
-// FUNZIONE CALCOLO FABBISOGNI+// FUNZIONE CALCOLO FABBISOGNI NUTRIZIONALI (DA VERSIONE 17)
 function calculateNutrition() { function calculateNutrition() {
-    if (!patientData.birthWeight) { +    // Controlla se i dati di base sono presenti 
-        alert('Prima inserire i dati del paziente nel TAB 1');+    const nutritionCurrentWeight = parseInt(document.getElementById('currentWeight').value); 
 +    const nutritionBirthWeight = parseInt(document.getElementById('birthWeight').value); 
 +     
 +    if (!nutritionCurrentWeight || !nutritionBirthWeight) { 
 +        alert('Prima inserire peso attuale e peso alla nascita nel TAB 1');
         return;         return;
 +    }
 +    
 +    // Aggiorna patientData se non è stato ancora fatto
 +    if (!patientData.currentWeight) {
 +        patientData.currentWeight = nutritionCurrentWeight;
 +        patientData.birthWeight = nutritionBirthWeight;
     }     }
          
Linea 1601: Linea 2015:
         (requirements.carbs * 1440 / 1000) : requirements.carbs;         (requirements.carbs * 1440 / 1000) : requirements.carbs;
          
-    const currentWeight = patientData.currentWeight;+    const patientCurrentWeight = patientData.currentWeight
 +    const enteralVolumePerKg = enteralData ? (enteralData.totalFluids / patientCurrentWeight * 1000) : 0;
          
     const enteralProtein = enteralData ? enteralData.protein : 0;     const enteralProtein = enteralData ? enteralData.protein : 0;
Linea 1674: Linea 2089:
     document.getElementById('calculateNutritionBtn').className = 'button calculate-nutrition-completed';     document.getElementById('calculateNutritionBtn').className = 'button calculate-nutrition-completed';
     document.getElementById('calculateNutritionBtn').innerHTML = 'FABBISOGNI CALCOLATI ✓';     document.getElementById('calculateNutritionBtn').innerHTML = 'FABBISOGNI CALCOLATI ✓';
 +    
 +    // RESET del pulsante NPT quando si modificano i fabbisogni
 +    resetParenteralButton();
 } }
  
-// FUNZIONE CALCOLO ELETTROLITI AGGIUNTIVI+// FUNZIONE CALCOLO ELETTROLITI AGGIUNTIVI (DA VERSIONE 17)
 function calculateElectrolyteAdditions(calciumNeeded, phosphorusNeeded, magnesiumNeeded, sodiumNeeded, potassiumNeeded, currentWeightKg) { function calculateElectrolyteAdditions(calciumNeeded, phosphorusNeeded, magnesiumNeeded, sodiumNeeded, potassiumNeeded, currentWeightKg) {
     const additions = {     const additions = {
Linea 1686: Linea 2104:
         kcl: 0,         kcl: 0,
         totalVolume: 0,         totalVolume: 0,
-        providedCalcium: 0, 
-        providedPhosphorus: 0, 
-        providedMagnesium: 0, 
-        providedSodium: 0, 
-        providedPotassium: 0, 
         sodiumSource: 'nacl'         sodiumSource: 'nacl'
     };     };
          
 +    // Determina il tipo di sodio da utilizzare
     const sodiumTypeSelect = document.getElementById('sodiumType');     const sodiumTypeSelect = document.getElementById('sodiumType');
     const selectedSodiumType = sodiumTypeSelect ? sodiumTypeSelect.value : 'nacl';     const selectedSodiumType = sodiumTypeSelect ? sodiumTypeSelect.value : 'nacl';
     additions.sodiumSource = selectedSodiumType;     additions.sodiumSource = selectedSodiumType;
          
-    const totalCalciumNeeded = calciumNeeded * currentWeightKg; +    // Calcola fabbisogni totali per paziente 
-    const totalPhosphorusNeeded = phosphorusNeeded * currentWeightKg; +    const totalCalciumNeeded = calciumNeeded * currentWeightKg; // mg 
-    const totalMagnesiumNeeded = magnesiumNeeded * currentWeightKg; +    const totalPhosphorusNeeded = phosphorusNeeded * currentWeightKg; // mg 
-    const totalSodiumNeeded = sodiumNeeded * currentWeightKg; +    const totalMagnesiumNeeded = magnesiumNeeded * currentWeightKg; // mEq 
-    const totalPotassiumNeeded = potassiumNeeded * currentWeightKg;+    const totalSodiumNeeded = sodiumNeeded * currentWeightKg; // mEq 
 +    const totalPotassiumNeeded = potassiumNeeded * currentWeightKg; // mEq
          
     // Calcio Gluconato 10% (840 mg Ca/100ml)     // Calcio Gluconato 10% (840 mg Ca/100ml)
     if (totalCalciumNeeded > 0) {     if (totalCalciumNeeded > 0) {
         additions.ca_gluconato = totalCalciumNeeded / (parenteralConfig.ca_gluconato.calcium / 100);         additions.ca_gluconato = totalCalciumNeeded / (parenteralConfig.ca_gluconato.calcium / 100);
-        additions.providedCalcium = totalCalciumNeeded; 
     }     }
          
     // Esafosfina (1600 mg P/100ml + 130 mEq Na/100ml)     // Esafosfina (1600 mg P/100ml + 130 mEq Na/100ml)
 +    let sodiumFromEsafosfina = 0;
     if (totalPhosphorusNeeded > 0) {     if (totalPhosphorusNeeded > 0) {
         additions.esafosfina = totalPhosphorusNeeded / (parenteralConfig.esafosfina.phosphorus / 100);         additions.esafosfina = totalPhosphorusNeeded / (parenteralConfig.esafosfina.phosphorus / 100);
-        additions.providedPhosphorus = totalPhosphorusNeeded; +        sodiumFromEsafosfina = (additions.esafosfina * parenteralConfig.esafosfina.sodium / 100);
-        additions.providedSodium += (additions.esafosfina * parenteralConfig.esafosfina.sodium / 100);+
     }     }
          
Linea 1720: Linea 2134:
     if (totalMagnesiumNeeded > 0) {     if (totalMagnesiumNeeded > 0) {
         additions.mg_sulfate = totalMagnesiumNeeded / (parenteralConfig.mg_sulfate.magnesium / 100);         additions.mg_sulfate = totalMagnesiumNeeded / (parenteralConfig.mg_sulfate.magnesium / 100);
-        additions.providedMagnesium = totalMagnesiumNeeded; 
     }     }
          
-    // Sodio rimanente +    // Sodio rimanente (dopo quello da Esafosfina) 
-    const remainingSodium = Math.max(0, totalSodiumNeeded - additions.providedSodium);+    const remainingSodium = Math.max(0, totalSodiumNeeded - sodiumFromEsafosfina);
          
     if (remainingSodium > 0) {     if (remainingSodium > 0) {
Linea 1734: Linea 2147:
             additions.nacl = remainingSodium / concentrationNaCl;             additions.nacl = remainingSodium / concentrationNaCl;
         }         }
-        additions.providedSodium += remainingSodium; 
     }     }
          
Linea 1740: Linea 2152:
     if (totalPotassiumNeeded > 0) {     if (totalPotassiumNeeded > 0) {
         additions.kcl = totalPotassiumNeeded / (parenteralConfig.kcl.potassium / 100);         additions.kcl = totalPotassiumNeeded / (parenteralConfig.kcl.potassium / 100);
-        additions.providedPotassium = totalPotassiumNeeded; 
     }     }
          
 +    // Volume totale degli elettroliti
     additions.totalVolume = additions.ca_gluconato + additions.esafosfina + additions.mg_sulfate + additions.nacl + additions.sodium_acetate + additions.kcl;     additions.totalVolume = additions.ca_gluconato + additions.esafosfina + additions.mg_sulfate + additions.nacl + additions.sodium_acetate + additions.kcl;
          
Linea 1748: Linea 2160:
 } }
  
-// FUNZIONE CALCOLO NPT PARENTERALE+// FUNZIONE CALCOLO NPT PARENTERALE (DA VERSIONE 17 CON CONTROLLI CLINICI)
 function calculateParenteral() { function calculateParenteral() {
     if (!window.residualNeeds) {     if (!window.residualNeeds) {
Linea 1755: Linea 2167:
     }     }
          
-    const currentWeight = patientData.currentWeight; +    const parentCurrentWeight = patientData.currentWeight; 
-    const currentWeightKg = currentWeight / 1000;+    const currentWeightKg = parentCurrentWeight / 1000;
     const residualNeeds = window.residualNeeds;     const residualNeeds = window.residualNeeds;
          
 +    // CONTROLLI DI SICUREZZA BASATI SU CONFIGURAZIONE CLINICA
 +    const gir = (residualNeeds.carbs * 1000) / 1440; // mg/kg/min
 +    let alerts = [];
 +    
 +    if (gir > clinicalConfig.maxGIR) {
 +        alerts.push('⚠️ GIR > ' + clinicalConfig.maxGIR + ' mg/kg/min - Rischio iperglicemia');
 +    }
 +    if (residualNeeds.lipids > clinicalConfig.maxLipids) {
 +        alerts.push('⚠️ Lipidi > ' + clinicalConfig.maxLipids + ' g/kg/die - Monitorare trigliceridi');
 +    }
 +    if (residualNeeds.protein > clinicalConfig.maxProtein) {
 +        alerts.push('⚠️ Proteine > ' + clinicalConfig.maxProtein + ' g/kg/die - Monitorare BUN');
 +    }
 +    
 +    // Volume totale residuo richiesto
     const totalVolume = Math.round(residualNeeds.liquids * currentWeightKg);     const totalVolume = Math.round(residualNeeds.liquids * currentWeightKg);
          
 +    // CALCOLA ELETTROLITI AGGIUNTIVI
     const electrolyteAdditions = calculateElectrolyteAdditions(     const electrolyteAdditions = calculateElectrolyteAdditions(
         residualNeeds.calcium,         residualNeeds.calcium,
Linea 1770: Linea 2198:
     );     );
          
 +    // Volume proteine (Trophamine 6%)
     const proteinVolume = Math.round((residualNeeds.protein * currentWeightKg * 100) / 6);     const proteinVolume = Math.round((residualNeeds.protein * currentWeightKg * 100) / 6);
 +    
 +    // Volume lipidi (Intralipid 20%)
     const lipidVolume = Math.round((residualNeeds.lipids * currentWeightKg * 100) / 20);     const lipidVolume = Math.round((residualNeeds.lipids * currentWeightKg * 100) / 20);
          
 +    // Volume vitamine/oligoelementi/carnitina
     const vitaminsVolume = (residualNeeds.vitalipid * currentWeightKg) + (residualNeeds.soluvit * currentWeightKg) + (residualNeeds.peditrace * currentWeightKg);     const vitaminsVolume = (residualNeeds.vitalipid * currentWeightKg) + (residualNeeds.soluvit * currentWeightKg) + (residualNeeds.peditrace * currentWeightKg);
     const carnitineVolume = residualNeeds.carnitine > 0 ? (residualNeeds.carnitine * currentWeightKg) / 100 : 0;     const carnitineVolume = residualNeeds.carnitine > 0 ? (residualNeeds.carnitine * currentWeightKg) / 100 : 0;
          
-    const neededGlucose = residualNeeds.carbs * currentWeightKg; +    // CALCOLO CON GLUCOSIO 50% + ACQUA BIDISTILLATA 
-    const glucose50Volume = (neededGlucose * 100) / 50;+    const neededGlucose = residualNeeds.carbs * currentWeightKg; // grammi totali di glucosio 
 +    const glucose50Volume = (neededGlucose * 100) / 50; // ml di glucosio 50% necessari
          
 +    // Volume utilizzato
     const usedVolume = proteinVolume + lipidVolume + vitaminsVolume + carnitineVolume + glucose50Volume + electrolyteAdditions.totalVolume;     const usedVolume = proteinVolume + lipidVolume + vitaminsVolume + carnitineVolume + glucose50Volume + electrolyteAdditions.totalVolume;
 +    
 +    // Volume rimanente = Acqua Bidistillata
     const waterVolume = totalVolume - usedVolume;     const waterVolume = totalVolume - usedVolume;
-     
-    let glucoseMessage = ''; 
-     
-    if (waterVolume < 0) { 
-        glucoseMessage = '<div class="warning"><strong>ERRORE CALCOLO:</strong><br>' + 
-                        '• Volume totale richiesto: ' + totalVolume + ' ml<br>' + 
-                        '• Volume utilizzato: ' + usedVolume.toFixed(1) + ' ml<br>' + 
-                        '• Acqua rimanente: ' + waterVolume.toFixed(1) + ' ml (NEGATIVO!)<br><br>' + 
-                        '<strong>SOLUZIONE:</strong> Aumentare il volume totale NPT.</div>'; 
-         
-        document.getElementById('calculatedTotalVolume').value = totalVolume + ' ml (ERRORE)'; 
-        document.getElementById('suggestedGlucose').value = 'Errore - Volume insufficiente'; 
-        document.getElementById('calculatedProteinVol').value = proteinVolume + ' ml'; 
-        document.getElementById('calculatedLipidVol').value = lipidVolume + ' ml'; 
-         
-        document.getElementById('parenteralTable').innerHTML = glucoseMessage; 
-        document.getElementById('parenteralResults').classList.remove('hidden'); 
-        return; 
-    } 
-     
-    if (neededGlucose <= 0) { 
-        glucoseMessage = '<div class="info"><strong>GLUCOSIO DA ENTERALE:</strong><br>' + 
-                        '• Tutto il glucosio necessario proviene dall\'alimentazione enterale<br>' + 
-                        '• Non necessario glucosio in NPT</div>'; 
-         
-        document.getElementById('suggestedGlucose').value = 'Non necessario (enterale sufficiente)'; 
-    } else { 
-        glucoseMessage = '<div class="info"><strong>CALCOLO GLUCOSIO:</strong><br>' + 
-                        '• Glucosio necessario: ' + neededGlucose.toFixed(1) + 'g<br>' + 
-                        '• Glucosio 50%: ' + glucose50Volume.toFixed(1) + 'ml<br>' + 
-                        '• Acqua bidistillata: ' + waterVolume.toFixed(1) + 'ml<br>' + 
-                        '• <strong>Concentrazione finale: ' + ((neededGlucose * 100) / totalVolume).toFixed(1) + '%</strong></div>'; 
-         
-        document.getElementById('suggestedGlucose').value = 'Glucosio 50% + Acqua'; 
-    } 
          
     document.getElementById('calculatedTotalVolume').value = totalVolume + ' ml';     document.getElementById('calculatedTotalVolume').value = totalVolume + ' ml';
 +    document.getElementById('suggestedGlucose').value = 'Glucosio 50% + Acqua + Elettroliti';
     document.getElementById('calculatedProteinVol').value = proteinVolume + ' ml';     document.getElementById('calculatedProteinVol').value = proteinVolume + ' ml';
     document.getElementById('calculatedLipidVol').value = lipidVolume + ' ml';     document.getElementById('calculatedLipidVol').value = lipidVolume + ' ml';
          
-    let resultHtml = glucoseMessage;+    let resultHtml = '<div class="info">'; 
 +    resultHtml += '<strong>NPT v3.0 UNIFIED - SISTEMA COMPLETO CON CONTROLLI CLINICI</strong><br>'; 
 +    resultHtml += '<strong>Peso:</strong> ' + parentCurrentWeight + 'g<br>'; 
 +    resultHtml += '<strong>GIR:</strong> ' + gir.toFixed(1) + ' mg/kg/min<br>'; 
 +    resultHtml += '<strong>Enterale:</strong> ' + (enteralData ? enteralData.totalFluids : 0) + ' ml (' + (enteralData ? (enteralData.totalFluids/currentWeightKg).toFixed(1) : 0) + ' ml/kg/die)<br>'; 
 +    if (enteralData && enteralData.additionalFluids > 0) { 
 +        resultHtml += '<strong>→ Latte:</strong> ' + (enteralData.volume || 0) + ' ml, <strong>Altri liquidi:</strong> ' + enteralData.additionalFluids + ' ml<br>'; 
 +    } 
 +    resultHtml += '</div>';
          
-    resultHtml += '<div class="info">'; +    // MOSTRA ALERT CLINICI SE PRESENTI 
-    resultHtml += '<strong>NPT v2.0 - COMPOSIZIONE COMPLETA</strong><br>'; +    if (alerts.length > 0) { 
-    resultHtml += '<strong>Peso:</strong> ' + currentWeight + 'g<br>'; +        resultHtml += '<div class="alert-critical"><strong>ALERT CLINICI:</strong><br>'alerts.join('<br>'+ '</div>'; 
-    resultHtml += '<strong>Enterale:</strong> ' + (enteralData ? enteralData.totalFluids : 0) + ml<br>'+    }
-    resultHtml +'</div>';+
          
     resultHtml += '<table class="results-table">';     resultHtml += '<table class="results-table">';
Linea 1837: Linea 2246:
          
     resultHtml += '<tr><td><strong>Trophamine 6%</strong></td><td><strong>' + proteinVolume.toFixed(1) + '</strong></td></tr>';     resultHtml += '<tr><td><strong>Trophamine 6%</strong></td><td><strong>' + proteinVolume.toFixed(1) + '</strong></td></tr>';
-    resultHtml += '<tr><td><strong>Intralipid 20%</strong></td><td><strong>'Math.max(0, lipidVolume).toFixed(1) + '</strong></td></tr>';+    resultHtml += '<tr><td><strong>Intralipid 20%</strong></td><td><strong>' + lipidVolume.toFixed(1) + '</strong></td></tr>';
          
 +    // ELETTROLITI AGGIUNTIVI
     if (electrolyteAdditions.ca_gluconato > 0) {     if (electrolyteAdditions.ca_gluconato > 0) {
         resultHtml += '<tr><td><strong>Calcio Gluconato 10% (1g/10mL, 0.44 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.ca_gluconato.toFixed(1) + '</strong></td></tr>';         resultHtml += '<tr><td><strong>Calcio Gluconato 10% (1g/10mL, 0.44 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.ca_gluconato.toFixed(1) + '</strong></td></tr>';
Linea 1846: Linea 2256:
     }     }
     if (electrolyteAdditions.mg_sulfate > 0) {     if (electrolyteAdditions.mg_sulfate > 0) {
-        resultHtml += '<tr><td><strong>Magnesio Solfato (2g/10mL, 1.6 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</strong></td></tr>';+        resultHtml += '<tr><td><strong>Magnesio Solfato (2g/10ml, 1.6 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</strong></td></tr>';
     }     }
     if (electrolyteAdditions.nacl > 0) {     if (electrolyteAdditions.nacl > 0) {
Linea 1858: Linea 2268:
     }     }
          
 +    // VITAMINE
     if (residualNeeds.vitalipid > 0) {     if (residualNeeds.vitalipid > 0) {
         const vitalipidVolume = residualNeeds.vitalipid * currentWeightKg;         const vitalipidVolume = residualNeeds.vitalipid * currentWeightKg;
Linea 1871: Linea 2282:
     }     }
          
 +    // CARNITINA
     if (residualNeeds.carnitine > 0) {     if (residualNeeds.carnitine > 0) {
-        resultHtml += '<tr><td><strong>Carnitene</strong></td><td><strong>' + carnitineVolume.toFixed(1) + '</strong></td></tr>';+        resultHtml += '<tr><td><strong>Carnitene (100 mg/ml)</strong></td><td><strong>' + carnitineVolume.toFixed(1) + '</strong></td></tr>';
     }     }
          
 +    // ACQUA BIDISTILLATA
     if (waterVolume > 0) {     if (waterVolume > 0) {
         resultHtml += '<tr><td><strong>Acqua Bidistillata</strong></td><td><strong>' + waterVolume.toFixed(1) + '</strong></td></tr>';         resultHtml += '<tr><td><strong>Acqua Bidistillata</strong></td><td><strong>' + waterVolume.toFixed(1) + '</strong></td></tr>';
Linea 1884: Linea 2297:
     document.getElementById('parenteralTable').innerHTML = resultHtml;     document.getElementById('parenteralTable').innerHTML = resultHtml;
          
-    // PREPARAZIONE CON DEFLUSSORE+    // CREAZIONE RICETTA PER PREPARAZIONE
     const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value) || 30;     const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value) || 30;
     const totalVolumeWithDeflector = totalVolume + deflectorVolume;     const totalVolumeWithDeflector = totalVolume + deflectorVolume;
 +    const ratio = totalVolumeWithDeflector / totalVolume;
          
     let preparationHtml = '<div class="info">';     let preparationHtml = '<div class="info">';
-    preparationHtml += '<strong>📋 RICETTA PREPARAZIONE (Deflussore: ' + deflectorVolume + ' ml)</strong><br>';+    preparationHtml += '<strong>📋 RICETTA PER PREPARAZIONE (Volume deflussore: ' + deflectorVolume + ' ml)</strong><br>';
     preparationHtml += '• <strong>Volume prescrizione:</strong> ' + totalVolume + ' ml<br>';     preparationHtml += '• <strong>Volume prescrizione:</strong> ' + totalVolume + ' ml<br>';
 +    preparationHtml += '• <strong>Volume deflussore:</strong> +' + deflectorVolume + ' ml<br>';
     preparationHtml += '• <strong>Volume totale preparazione:</strong> ' + totalVolumeWithDeflector + ' ml';     preparationHtml += '• <strong>Volume totale preparazione:</strong> ' + totalVolumeWithDeflector + ' ml';
     preparationHtml += '</div>';     preparationHtml += '</div>';
          
     preparationHtml += '<table class="results-table">';     preparationHtml += '<table class="results-table">';
-    preparationHtml += '<tr><th>Componente</th><th>Prescrizione (ml)</th><th>Preparazione (ml)</th></tr>'+    preparationHtml += '<tr><th>Componente</th><th>Volume Prescrizione (ml)</th><th>Volume Preparazione (ml)</th></tr>';
-     +
-    const ratio = totalVolumeWithDeflector / totalVolume;+
          
     if (neededGlucose > 0) {     if (neededGlucose > 0) {
Linea 1904: Linea 2317:
          
     preparationHtml += '<tr><td><strong>Trophamine 6%</strong></td><td>' + proteinVolume.toFixed(1) + '</td><td><strong>' + (proteinVolume * ratio).toFixed(1) + '</strong></td></tr>';     preparationHtml += '<tr><td><strong>Trophamine 6%</strong></td><td>' + proteinVolume.toFixed(1) + '</td><td><strong>' + (proteinVolume * ratio).toFixed(1) + '</strong></td></tr>';
-    preparationHtml += '<tr><td><strong>Intralipid 20%</strong></td><td>'Math.max(0, lipidVolume).toFixed(1) + '</td><td><strong>' + (Math.max(0, lipidVolume* ratio).toFixed(1) + '</strong></td></tr>';+    preparationHtml += '<tr><td><strong>Intralipid 20%</strong></td><td>' + lipidVolume.toFixed(1) + '</td><td><strong>' + (lipidVolume * ratio).toFixed(1) + '</strong></td></tr>';
          
     if (electrolyteAdditions.ca_gluconato > 0) {     if (electrolyteAdditions.ca_gluconato > 0) {
Linea 1913: Linea 2326:
     }     }
     if (electrolyteAdditions.mg_sulfate > 0) {     if (electrolyteAdditions.mg_sulfate > 0) {
-        preparationHtml += '<tr><td><strong>Magnesio Solfato (2g/10mL, 1.6 mEq/mL)</strong></td><td>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.mg_sulfate * ratio).toFixed(1) + '</strong></td></tr>';+        preparationHtml += '<tr><td><strong>Magnesio Solfato (2g/10ml, 1.6 mEq/mL)</strong></td><td>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.mg_sulfate * ratio).toFixed(1) + '</strong></td></tr>';
     }     }
     if (electrolyteAdditions.nacl > 0) {     if (electrolyteAdditions.nacl > 0) {
Linea 1925: Linea 2338:
     }     }
          
 +    // VITAMINE con denominazioni complete
     if (residualNeeds.vitalipid > 0) {     if (residualNeeds.vitalipid > 0) {
         const vitalipidVolume = residualNeeds.vitalipid * currentWeightKg;         const vitalipidVolume = residualNeeds.vitalipid * currentWeightKg;
Linea 1938: Linea 2352:
     }     }
          
 +    // CARNITINA con denominazione completa
     if (residualNeeds.carnitine > 0) {     if (residualNeeds.carnitine > 0) {
         preparationHtml += '<tr><td><strong>Carnitene (100 mg/ml)</strong></td><td>' + carnitineVolume.toFixed(1) + '</td><td><strong>' + (carnitineVolume * ratio).toFixed(1) + '</strong></td></tr>';         preparationHtml += '<tr><td><strong>Carnitene (100 mg/ml)</strong></td><td>' + carnitineVolume.toFixed(1) + '</td><td><strong>' + (carnitineVolume * ratio).toFixed(1) + '</strong></td></tr>';
Linea 1952: Linea 2367:
     document.getElementById('parenteralResults').classList.remove('hidden');     document.getElementById('parenteralResults').classList.remove('hidden');
          
-    // Salva i dati per report +    document.getElementById('calculateParenteralBtn').className = 'button config-update-completed'; 
-    window.nptCalculationData = { +    document.getElementById('calculateParenteralBtn').innerHTML = 'NPT CALCOLATA ✓'; 
-        currentWeight, currentWeightKg, totalVolume, electrolyteAdditions+     
-        proteinVolume, lipidVolume, vitaminsVolumecarnitineVolume+    // Salva i dati per il report 
-        glucose50VolumewaterVolumeneededGlucoseresidualNeeds+    window.nptCalculation = { 
 +        totalVolume: totalVolume, 
 +        waterVolume: waterVolume, 
 +        glucose50Volume: glucose50Volume
 +        proteinVolume: proteinVolume, 
 +        lipidVolume: lipidVolume, 
 +        gir: gir, 
 +        neededGlucose: neededGlucose
 +        electrolyteAdditions: electrolyteAdditions, 
 +        vitaminsVolume: vitaminsVolume, 
 +        carnitineVolume: carnitineVolume, 
 +        deflectorVolume: deflectorVolume
     };     };
-     
-    const parenteralBtn = document.getElementById('calculateParenteralBtn'); 
-    if (parenteralBtn) { 
-        parenteralBtn.className = 'button config-update-completed'; 
-        parenteralBtn.innerHTML = 'NPT CALCOLATA ✓'; 
-    } 
 } }
  
-// FUNZIONI REPORT +// FUNZIONI CONFIGURAZIONE (DA VERSIONE 17) 
-function generateAndShowWorkReport() { +function populateEnteralConfigTable() { 
-    if (!window.nptCalculationData) { +    const tbody = document.getElementById('enteralConfigTable'); 
-        alert('Prima calcolare la NPT!'); +    if (!tbody) return;
-        return; +
-    }+
          
-    const reportHtml generateWorkReportHTML()+    tbody.innerHTML ''
-    document.getElementById('nptWorkReport').innerHTML reportHtml+    Object.keys(formulaData).forEach(key => { 
-    document.getElementById('nptWorkReport').classList.remove('hidden'); +        const formula formulaData[key]
-    document.getElementById('nptFinalReport').classList.add('hidden'); +        const row = tbody.insertRow(); 
-    document.getElementById('printReportBtn').classList.remove('hidden'); +        row.innerHTML = '<td class="component-name">+ formula.name + '</td>'
-    document.getElementById('savePdfBtn').classList.remove('hidden'); +            '<td><input type="number" id="config_' + key + '_protein" value="' + formula.protein + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>' + 
-    window.currentActiveReport = 'work'+            '<td><input type="number" id="config_' + key + '_carbs" value="' + formula.carbs + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>'
-     +            '<td><input type="number" id="config_' + key + '_lipids" value="' + formula.lipids + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>' + 
-    const generateBtn document.getElementById('generateWorkReportBtn'); +            '<td><input type="number" id="config_' + key + '_sodium" value="' + formula.sodium + '" step="0.001" oninput="markConfigChanged(\'enteral\')"></td>'
-    generateBtn.innerHTML = 'Foglio di Lavoro Generato ✓'+            '<td><input type="number" id="config_' + key + '_potassium" value="' + formula.potassium + '" step="0.001" oninput="markConfigChanged(\'enteral\')"></td>' + 
-    generateBtn.className = 'button config-update-completed';+            '<td><input type="number" id="config_' + key + '_calcium" value="' + formula.calcium + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>'
 +            '<td><input type="number" id="config_' + key + '_phosphorus" value="' + formula.phosphorus + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>' + 
 +            '<td><input type="number" id="config_+ key + '_magnesium" value="' + formula.magnesium + '" step="0.1" oninput="markConfigChanged(\'enteral\')"></td>' + 
 +            '<td><input type="number" id="config_+ key + '_energy" value="' + formula.energy + '" step="1" oninput="markConfigChanged(\'enteral\')"></td>'
 +            '<td><button class="button secondary" onclick="removeEnteralFormula(\'' + key + '\')" style="padding: 5px 10px; font-size: 12px;">Rimuovi</button></td>'
 +    });
 } }
  
-function generateAndShowFinalReport() { +function populateParenteralConfigTable() { 
-    if (!window.nptCalculationData) { +    const tbody = document.getElementById('parenteralConfigTable'); 
-        alert('Prima calcolare la NPT!'); +    if (!tbody) return;
-        return; +
-    }+
          
-    const reportHtml generateFinalReportHTML()+    tbody.innerHTML ''
-    document.getElementById('nptFinalReport').innerHTML reportHtml+    Object.keys(parenteralConfig).forEach(function(key) { 
-    document.getElementById('nptFinalReport').classList.remove('hidden'); +        const component parenteralConfig[key]
-    document.getElementById('nptWorkReport').classList.add('hidden'); +        const row = tbody.insertRow(); 
-    document.getElementById('printReportBtn').classList.remove('hidden'); +        row.innerHTML = '<td class="component-name">+ component.name + '</td>'
-    document.getElementById('savePdfBtn').classList.remove('hidden'); +            '<td><input type="number" id="config_' + key + '_protein" value="' + component.protein + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
-    window.currentActiveReport = 'final'; +            '<td><input type="number" id="config_' + key + '_carbs" value="' + component.carbs + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>'
-     +            '<td><input type="number" id="config_' + key + '_lipids" value="' + component.lipids + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
-    const generateBtn document.getElementById('generateFinalReportBtn'); +            '<td><input type="number" id="config_' + key + '_sodium" value="' + component.sodium + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>'
-    generateBtn.innerHTML = 'Report Parenterale Generato ✓'; +            '<td><input type="number" id="config_' + key + '_potassium" value="' + component.potassium + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
-    generateBtn.className = 'button config-update-completed';+            '<td><input type="number" id="config_' + key + '_calcium" value="' + component.calcium + '" step="1" oninput="markConfigChanged(\'parenteral\')"></td>'
 +            '<td><input type="number" id="config_' + key + '_phosphorus" value="' + component.phosphorus + '" step="1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
 +            '<td><input type="number" id="config_' + key + '_magnesium" value="' + component.magnesium + '" step="0.1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
 +            '<td><input type="number" id="config_' + key + '_energy" value="' + component.energy + '" step="1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
 +            '<td><input type="number" id="config_' + key + '_water" value="' + component.water + '" step="1" oninput="markConfigChanged(\'parenteral\')"></td>' + 
 +            '<td style="font-size: 11px; color: #7f8c8d; max-width: 200px;">+ (component.description || 'Componente') + '<br><em>' + (component.notes || 'Note') + '</em></td>'
 +            '<td><button class="button secondary" onclick="removeParenteralComponent(\'' + key + '\')" style="padding: 5px 10px; font-size: 12px;">Rimuovi</button></td>'
 +    });
 } }
  
-function generateWorkReportHTML() { +function populateDoctorsConfigTable() { 
-    const data window.nptCalculationData; +    const tbody = document.getElementById('doctorsConfigTable'); 
-    const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value) || 30+    if (!tbody) return;
-    const totalVolumeWithDeflector = data.totalVolume + deflectorVolume; +
-    const ratio = totalVolumeWithDeflector / data.totalVolume;+
          
-    const today new Date()+    tbody.innerHTML ''
-    const dateStr = today.toLocaleDateString('it-IT'); +    Object.keys(doctorsData).forEach(key => { 
-     +        const doctor = doctorsData[key]; 
-    const doctorName patientData.prescribingDoctor ?  +        const row tbody.insertRow(); 
-        doctorsData[patientData.prescribingDoctor]?.fullName || 'N/A' : 'N/A'+        row.innerHTML = '<td><input type="textid="doctor_' + key + '_name" value="'doctor.name + 'style="width100px;" oninput="markConfigChanged(\'doctors\')"></td>' + 
-     +            '<td><input type="textid="doctor_' + key + '_surnamevalue="'doctor.surname + '" style="width: 100px;" oninput="markConfigChanged(\'doctors\')"></td>'
-    const infusionRate (data.totalVolume / 24).toFixed(2); +            '<td><select id="doctor_' + key + '_titlestyle="width70px;" oninput="markConfigChanged(\'doctors\')">' + 
-    const finalConcentration = data.neededGlucose > 0 ? (data.neededGlucose * 100) / data.totalVolume : 0; +                '<option value="Dr."' + (doctor.title === 'Dr.' selected''') + '>Dr.</option>' + 
-    const estimatedOsmolarity = (finalConcentration * 55).toFixed(0); +                '<option value="Dr.ssa"' + (doctor.title === 'Dr.ssaselected''') + '>Dr.ssa</option>' + 
-     +                '<option value="Prof."' + (doctor.title === 'Prof.' selected''') + '>Prof.</option>' + 
-    let html = '<div class="npt-report">'; +                '<option value="Prof.ssa"' + (doctor.title === 'Prof.ssaselected''') + '>Prof.ssa</option>' + 
-     +            '</select></td>' + 
-    // Header +            '<td style="font-weight: bold; color: #2c3e50;">'doctor.fullName + '</td>' + 
-    html += '<div class="report-header">'; +            '<td><button class="button secondaryonclick="removeDoctor(\''key + '\')" style="padding: 5px 10pxfont-size: 12px;">Rimuovi</button></td>'; 
-    html += '<div class="report-header-left">'+    });
-    html +'<div style="font-weight: bold; font-size: 13px;">CALCOLO NUTRIZIONALE PARENTERALE Data: ' + dateStr + '</div>'; +
-    html += '<div style="font-size11px; color: #666;">FOGLIO DI LAVORO</div>'; +
-    html += '</div>'+
-    html += '<div class="report-header-right">LOGO OSPEDALE</div>'+
-    html += '</div>'; +
-     +
-    // Info Paziente +
-    html += '<div class="report-section">'; +
-    html += '<div class="report-section-title">INFO Paziente</div>'; +
-    html += '<table class="report-table">'+
-    html +'<tr><td class="label-col">Medico Prescrittore</td><td class="value-col">' + doctorName + '</td></tr>'; +
-    html += '<tr><td class="label-col">Data Prescrizione</td><td class="value-col">' + dateStr + '</td></tr>'; +
-    html += '<tr><td class="label-col">Paziente</td><td class="value-col">'(patientData.medicalRecord || 'N/A'+ '</td></tr>'; +
-    html += '<tr><td class="label-col">Giorni di Vita</td><td class="value-col">' + patientData.daysOfLife + '</td></tr>'; +
-    html += '<tr><td class="label-col">Peso (g)</td><td class="value-col">' + data.currentWeight + '</td></tr>'; +
-    html += '</table>'; +
-    html += '</div>'; +
-     +
-    // Composizione +
-    html += '<div class="report-section">'; +
-    html += '<div class="report-section-title">Composizione Parenterale (numero sacche1)</div>'; +
-    html += '<table class="composition-table">'; +
-    html += '<tr><th class="component-name-col"></th><th>Teorici</th><th>Con Deflussore</th><th></th></tr>'; +
-     +
-    if (data.waterVolume > 0) { +
-        html += '<tr><td class="component-name-col">Acqua bidistillata</td><td>+ data.waterVolume.toFixed(2+ '</td><td>' + (data.waterVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.glucose50Volume > 0) { +
-        html += '<tr><td class="component-name-col">glucosata 50% (parenterale)</td><td>' + data.glucose50Volume.toFixed(2) + '</td><td>' + (data.glucose50Volume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.ca_gluconato > 0) { +
-        html +'<tr><td class="component-name-col">Calcio gluconato (1g/10mL,0,44mEq/mL)</td><td>+ data.electrolyteAdditions.ca_gluconato.toFixed(2) + '</td><td>+ (data.electrolyteAdditions.ca_gluconato * ratio).toFixed(2) + '</td><td>ml</td></tr>'+
-    } +
-    if (data.electrolyteAdditions.nacl > 0+
-        html +'<tr><td class="component-name-col">Sodio cloruro (3mEq/mL)</td><td>' + data.electrolyteAdditions.nacl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.nacl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.sodium_acetate > 0) { +
-        html += '<tr><td class="component-name-col">Sodio acetato (2mEq/mL)</td><td>' + data.electrolyteAdditions.sodium_acetate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.sodium_acetate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.kcl > 0) { +
-        html +'<tr><td class="component-name-col">Potassio cloruro (2mEq/mL)</td><td>+ data.electrolyteAdditions.kcl.toFixed(2) + '</td><td>+ (data.electrolyteAdditions.kcl * ratio).toFixed(2) + '</td><td>ml</td></tr>'+
-    } +
-    if (data.electrolyteAdditions.mg_sulfate > 0+
-        html +'<tr><td class="component-name-col">Magnesio solfato (2g/10mL,1.6mEq/mL)</td><td>' + data.electrolyteAdditions.mg_sulfate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.mg_sulfate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.carnitineVolume > 0) { +
-        html += '<tr><td class="component-name-col">Carnitene f</td><td>' + data.carnitineVolume.toFixed(2) + '</td><td>' + (data.carnitineVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-     +
-    html +'<tr><td class="component-name-col">Trophamine 6%</td><td>+ data.proteinVolume.toFixed(2) + '</td><td>+ (data.proteinVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'+
-     +
-    if (data.electrolyteAdditions.esafosfina > 0+
-        html +'<tr><td class="component-name-col">Esafosfina f 5g</td><td>' + data.electrolyteAdditions.esafosfina.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.esafosfina * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.residualNeeds.peditrace > 0) { +
-        const peditraceVolume = data.residualNeeds.peditrace * data.currentWeightKg; +
-        html += '<tr><td class="component-name-col">Peditrace</td><td>' + peditraceVolume.toFixed(2) + '</td><td>' + (peditraceVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.residualNeeds.soluvit > 0) { +
-        const soluvitVolume data.residualNeeds.soluvit * data.currentWeightKg; +
-        html +'<tr><td class="component-name-col">Soluvit</td><td>+ soluvitVolume.toFixed(2) + '</td><td>+ (soluvitVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'+
-    } +
-    if (data.residualNeeds.vitalipid > 0+
-        const vitalipidVolume = data.residualNeeds.vitalipid * data.currentWeightKg; +
-        html +'<tr><td class="component-name-col">Vitalipid N</td><td>' + vitalipidVolume.toFixed(2) + '</td><td>' + (vitalipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-     +
-    html += '<tr><td class="component-name-col">Intralipid 20%</td><td>' + Math.max(0, data.lipidVolume).toFixed(2) + '</td><td>'(Math.max(0, data.lipidVolume) * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-     +
-    // Totali +
-    html += '<tr class="composition-total"><td class="component-name-col"><strong>Totale</strong></td><td><strong>' + data.totalVolume.toFixed(2) + '</strong></td><td><strong>' + totalVolumeWithDeflector.toFixed(2) + '</strong></td><td><strong>ml</strong></td></tr>'+
-    html += '<tr><td class="component-name-col"><strong>Deflussore</strong></td><td><strong>' + deflectorVolume + '</strong></td><td><strong>-</strong></td><td><strong>ml</strong></td></tr>'; +
-    html += '<tr><td class="component-name-col"><strong>Velocità infusione</strong></td><td><strong>' + infusionRate + '</strong></td><td><strong>-</strong></td><td><strong>ml/h</strong></td></tr>'; +
-    html += '<tr><td class="component-name-col"><strong>Osmolarità Totale</strong></td><td><strong>' + estimatedOsmolarity + '</strong></td><td><strong>-</strong></td><td><strong>mOsm/ml</strong></td></tr>'; +
-    html += '</table>'; +
-    html += '</div>'; +
-     +
-    html += '<div class="report-footer">'; +
-    html += 'NPT Calculator v2.0 - Foglio di Lavoro generato il ' + new Date().toLocaleString('it-IT'); +
-    html += '</div>'; +
-     +
-    html += '</div>'; +
-     +
-    return html;+
 } }
  
-function generateFinalReportHTML() { +function markConfigChanged(configType) { 
-    const data window.nptCalculationData+    let buttonId ''
-    const deflectorVolume parseInt(document.getElementById('deflectorVolume').value) || 30; +    let buttonText = '';
-    const totalVolumeWithDeflector = data.totalVolume + deflectorVolume; +
-    const ratio = totalVolumeWithDeflector / data.totalVolume;+
          
-    const today = new Date()+    switch(configType{ 
-    const dateStr = today.toLocaleDateString('it-IT'); +        case 'enteral': 
-     +            buttonId = 'updateEnteralBtn'; 
-    const medicalRecord = patientData.medicalRecord || 'N/A'; +            buttonText = 'SALVA MODIFICHE ENTERALI'; 
-    const birthDate = patientData.prescriptionDate ?  +            break
-        new Date(new Date(patientData.prescriptionDate).getTime() - (patientData.daysOfLife * 24 * 60 * 60 * 1000)).toLocaleDateString('it-IT':  +        case 'parenteral': 
-        'N/A'; +            buttonId = 'updateParenteralBtn'; 
-    const doctorName patientData.prescribingDoctor ?  +            buttonText = 'SALVA MODIFICHE PARENTERALI'; 
-        doctorsData[patientData.prescribingDoctor]?.fullName || 'N/A' : 'N/A'; +            break
-     +        case 'fortifier': 
-    const infusionRate = (data.totalVolume / 24).toFixed(2); +            buttonId = 'updateFortifierBtn'; 
-    const finalConcentration = data.neededGlucose > 0 ? (data.neededGlucose * 100) / data.totalVolume : 0; +            buttonText = 'SALVA MODIFICHE FORTIFICANTI'; 
-    const estimatedOsmolarity = (finalConcentration * 55 + data.electrolyteAdditions.totalVolume * 10).toFixed(0); +            break
-     +        case 'doctors': 
-    let html = '<div class="npt-report">'; +            buttonId = 'updateDoctorsBtn'; 
-     +            buttonText = 'SALVA MODIFICHE MEDICI'; 
-    // INTESTAZIONE +            break
-    html += '<div class="report-header">'+        case 'system': 
-    html += '<div class="report-header-left">'+            buttonId = 'updateSystemBtn'; 
-    html += '<div style="font-weightbold; font-size: 13px;">Dipartimento Area della Donna e Materno Infantile</div>'; +            buttonText = 'SALVA PARAMETRI SISTEMA'; 
-    html += '<div style="font-size: 11px; color: #666;">S.C. Neonatologia e Terapia Intensiva Neonatale</div>'; +            break;
-    html += '</div>'; +
-    html += '<div class="report-header-right">LOGO OSPEDALE</div>'+
-    html += '</div>'+
-     +
-    html += '<div class="report-title">CALCOLO NUTRIZIONALE PARENTERALE Data' + dateStr + '</div>'; +
-    html += '<div class="report-subtitle">REPORT PARENTERALE</div>'; +
-     +
-    // INFO PAZIENTE +
-    html += '<div class="report-section">'; +
-    html += '<div class="report-section-title">INFO Paziente</div>'; +
-    html += '<table class="report-table">'; +
-    html += '<tr><td class="label-col">Medico Prescrittore</td><td class="value-col">' + doctorName + '</td></tr>'; +
-    html += '<tr><td class="label-col">Data Prescrizione</td><td class="value-col">' + dateStr + '</td></tr>'; +
-    html += '<tr><td class="label-col">Data Somministrazione</td><td class="value-col">' + dateStr + '</td></tr>'; +
-    html += '<tr><td class="label-col">Paziente</td><td class="value-col">' + medicalRecord + '</td></tr>'; +
-    html += '<tr><td class="label-col">Data di Nascita</td><td class="value-col">' + birthDate + '</td></tr>'; +
-    html += '<tr><td class="label-col">Giorni di Vita</td><td class="value-col">' + patientData.daysOfLife + '</td></tr>'; +
-    html += '<tr><td class="label-col">Peso (g)</td><td class="value-col">' + data.currentWeight + '</td></tr>'; +
-    html += '</table>'; +
-    html += '</div>'; +
-     +
-    // LISTA APPORTI ENTERALI +
-    html += '<div class="report-section">'; +
-    html += '<div class="report-section-title">Lista Degli Apporti per la Giornata Corrente</div>'; +
-    if (enteralData && enteralData.volume > 0) { +
-        const formulaName = document.getElementById('formulaType').value; +
-        const formulaDisplayName formulaData[formulaName]?.name || 'Formula enterale'; +
-        html += '<table class="report-table">'; +
-        html += '<tr><td class="label-col">Apporto</td><td style="text-align: center; width: 60px;"><strong>Quant.</strong></td><td style="text-align: left;"><strong>Somministrazione</strong></td></tr>'+
-        html += '<tr><td class="label-col">+ formulaDisplayName + '</td><td style="text-aligncenter;">' + enteralData.volume + '</td><td style="text-align: left;">oro-naso-gastrica intermittente</td></tr>'; +
-        html += '</table>'; +
-    } else { +
-        html += '<table class="report-table">'; +
-        html += '<tr><td class="label-col">Apporto</td><td style="text-align: center; width: 60px;"><strong>Quant.</strong></td><td style="text-align: left;"><strong>Somministrazione</strong></td></tr>'; +
-        html += '<tr><td class="label-col">Nessun apporto enterale</td><td style="text-align: center;">-</td><td style="text-align: left;">-</td></tr>'; +
-        html += '</table>';+
     }     }
-    html += '</div>'; 
          
-    // COMPOSIZIONE PARENTERALE +    const button document.getElementById(buttonId); 
-    html +'<div class="report-section">'; +    if (button) { 
-    html += '<div class="report-section-title">Composizione Parenterale (numero sacche: 1)</div>'; +        button.className = 'button config-update-pending'
-    html += '<table class="composition-table">'; +        button.innerHTML = buttonText;
-    html += '<tr><th class="component-name-col"></th><th>Teorici</th><th>Con Deflussore</th><th></th></tr>'; +
-     +
-    // Componenti con ordine identico al foglio di lavoro +
-    if (data.waterVolume > 0) { +
-        html += '<tr><td class="component-name-col">Acqua bidistillata</td><td>+ data.waterVolume.toFixed(2) + '</td><td>' + (data.waterVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>';+
     }     }
-    if (data.glucose50Volume > 0) { 
-        html += '<tr><td class="component-name-col">glucosata 50% (parenterale)</td><td>' + data.glucose50Volume.toFixed(2) + '</td><td>' + (data.glucose50Volume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.ca_gluconato > 0) { 
-        html += '<tr><td class="component-name-col">Calcio gluconato (1g/10mL,0,44mEq/mL)</td><td>' + data.electrolyteAdditions.ca_gluconato.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.ca_gluconato * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.nacl > 0) { 
-        html += '<tr><td class="component-name-col">Sodio cloruro (3mEq/mL)</td><td>' + data.electrolyteAdditions.nacl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.nacl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.kcl > 0) { 
-        html += '<tr><td class="component-name-col">Potassio cloruro (2mEq/mL)</td><td>' + data.electrolyteAdditions.kcl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.kcl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.mg_sulfate > 0) { 
-        html += '<tr><td class="component-name-col">Magnesio solfato (2g/10mL,1.6mEq/mL)</td><td>' + data.electrolyteAdditions.mg_sulfate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.mg_sulfate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.carnitineVolume > 0) { 
-        html += '<tr><td class="component-name-col">Carnitene f</td><td>' + data.carnitineVolume.toFixed(2) + '</td><td>' + (data.carnitineVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.proteinVolume > 0) { 
-        html += '<tr><td class="component-name-col">Trophamine 6%</td><td>' + data.proteinVolume.toFixed(2) + '</td><td>' + (data.proteinVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.esafosfina > 0) { 
-        html += '<tr><td class="component-name-col">Esafosfina f 5g</td><td>' + data.electrolyteAdditions.esafosfina.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.esafosfina * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.peditrace > 0) { 
-        const peditraceVolume = data.residualNeeds.peditrace * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Peditrace</td><td>' + peditraceVolume.toFixed(2) + '</td><td>' + (peditraceVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.soluvit > 0) { 
-        const soluvitVolume = data.residualNeeds.soluvit * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Soluvit</td><td>' + soluvitVolume.toFixed(2) + '</td><td>' + (soluvitVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.vitalipid > 0) { 
-        const vitalipidVolume = data.residualNeeds.vitalipid * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Vitalipid N</td><td>' + vitalipidVolume.toFixed(2) + '</td><td>' + (vitalipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    // Gestione valore negativo per Intralipid 
-    const displayLipidVolume = data.lipidVolume < 0 ? 0 : data.lipidVolume; 
-    html += '<tr><td class="component-name-col">Intralipid 20%</td><td>' + displayLipidVolume.toFixed(2) + '</td><td>' + (displayLipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-     
-    // Totali 
-    html += '<tr class="composition-total"><td class="component-name-col"><strong>Totale</strong></td><td><strong>' + data.totalVolume.toFixed(2) + '</strong></td><td><strong>' + totalVolumeWithDeflector.toFixed(2) + '</strong></td><td><strong>ml</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Deflussore</strong></td><td><strong>' + deflectorVolume + '</strong></td><td><strong>-</strong></td><td><strong>ml</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Velocità infusione</strong></td><td><strong>' + infusionRate + '</strong></td><td><strong>-</strong></td><td><strong>ml/h</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Osmolarità Totale</strong></td><td><strong>' + estimatedOsmolarity + '</strong></td><td><strong>-</strong></td><td><strong>mOsm/ml</strong></td></tr>'; 
-    html += '</table>'; 
-    html += '</div>'; 
-     
-    // TOTALE ELEMENTI PRO KILO 
-    html += '<div class="report-section">'; 
-    html += '<div class="report-section-title">Totale Elementi Pro Kilo</div>'; 
-    html += '<table class="elements-table">'; 
-     
-    // Calcoli degli elementi totali (enterale + parenterale) 
-    const totalLiquids = (enteralData ? enteralData.totalFluids : 0) + data.totalVolume; 
-    const totalLiquidsPerKg = (totalLiquids / data.currentWeightKg).toFixed(2); 
-     
-    const totalProtein = (enteralData ? enteralData.protein * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.protein * data.currentWeightKg / 1000); 
-    const totalLipids = (enteralData ? enteralData.lipids * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.lipids * data.currentWeightKg / 1000); 
-    const totalCarbs = (enteralData ? enteralData.carbs * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.carbs * data.currentWeightKg / 1000); 
-    const totalCalcium = (enteralData ? enteralData.calcium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.calcium * data.currentWeightKg / 1000); 
-    const totalPhosphorus = (enteralData ? enteralData.phosphorus * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.phosphorus * data.currentWeightKg / 1000); 
-    const totalSodium = (enteralData ? enteralData.sodium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.sodium * data.currentWeightKg / 1000); 
-    const totalPotassium = (enteralData ? enteralData.potassium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.potassium * data.currentWeightKg / 1000); 
-    const totalMagnesium = (enteralData ? enteralData.magnesium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.magnesium * data.currentWeightKg / 1000); 
-    const totalCarnitine = data.residualNeeds.carnitine * data.currentWeightKg / 1000; 
-     
-    const totalEnergy = (enteralData ? enteralData.energy * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.energy * data.currentWeightKg / 1000); 
-    const totalNonProteinEnergy = totalEnergy - (totalProtein * 4); 
-    const glucoseMgKgMin = ((totalCarbs * 1000) / 1440).toFixed(3); 
-     
-    html += '<tr><td class="element-name">liquidi</td><td class="element-value">' + totalLiquidsPerKg + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Proteine</td><td class="element-value">' + (totalProtein * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Lipidi</td><td class="element-value">' + (totalLipids * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Glucidi</td><td class="element-value">' + (totalCarbs * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Calcio</td><td class="element-value">' + (totalCalcium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Fosforo</td><td class="element-value">' + (totalPhosphorus * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Sodio</td><td class="element-value">' + (totalSodium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Potassio</td><td class="element-value">' + (totalPotassium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Magnesio</td><td class="element-value">' + (totalMagnesium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Carnitina</td><td class="element-value">' + (totalCarnitine * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Oligoelementi</td><td class="element-value">' + (data.residualNeeds.peditrace * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Vit. idrosolubili</td><td class="element-value">' + (data.residualNeeds.soluvit * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Vit. liposolubili</td><td class="element-value">' + (data.residualNeeds.vitalipid * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr style="border-top: 2px solid #333;"><td class="element-name"><strong>KCal Totali</strong></td><td class="element-value"><strong>' + (totalEnergy * 1000 / data.currentWeightKg).toFixed(2) + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '<tr><td class="element-name"><strong>KCal non proteiche</strong></td><td class="element-value"><strong>' + (totalNonProteinEnergy * 1000 / data.currentWeightKg).toFixed(2) + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '<tr><td class="element-name"><strong>Glucosio (mg/Kg al minuto)</strong></td><td class="element-value"><strong>' + glucoseMgKgMin + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '</table>'; 
-    html += '</div>'; 
-     
-    html += '<div class="report-footer">'; 
-    html += 'NPT Calculator v2.0 - Report Parenterale generato il ' + new Date().toLocaleString('it-IT'); 
-    html += '</div>'; 
-     
-    html += '</div>'; 
-     
-    return html; 
 } }
  
-function printCurrentReport() { +function updateEnteralConfig() {  
-    const reportContent window.currentActiveReport === 'work' ?  +    let changesCount 0;
-        document.getElementById('nptWorkReport').innerHTML : +
-        document.getElementById('nptFinalReport').innerHTML;+
          
-    const reportTitle = window.currentActiveReport === 'work' ?  +    Object.keys(formulaData).forEach(key => { 
-        'Foglio di Lavoro NPT' : 'Report Parenterale NPT'; +        const oldValues Object.assign({}, formulaData[key]);
-     +
-    const printWindow = window.open('', '_blank')+
-     +
-    printWindow.document.write(+
-        <!DOCTYPE html> +
-        <html> +
-        <head> +
-            <title>${reportTitle}</title> +
-            <style> +
-                body { margin: 0; padding: 15px; font-family: Arial, sans-serif; } +
-                ${document.querySelector('style').textContent} +
-            </style> +
-        </head> +
-        <body> +
-            ${reportContent} +
-        </body> +
-        </html> +
-    `); +
-     +
-    printWindow.document.close(); +
-    printWindow.print(); +
-+
- +
-function updateSystemConfig() { +
-    const updateBtn document.getElementById('updateSystemBtn'); +
-    updateBtn.className = 'button config-update-completed'; +
-    updateBtn.innerHTML = 'Parametri Sistema Aggiornati ✓'; +
-     +
-    setTimeout(() => { +
-        updateBtn.className = 'button'; +
-        updateBtn.innerHTML = 'Aggiorna Parametri Sistema'; +
-    }, 3000)+
-+
- +
-// FUNZIONE SALVATAGGIO PDF +
-async function saveReportAsPDF() { +
-    if (!window.currentActiveReport || !window.nptCalculationData) { +
-        alert('Prima genera un report!'); +
-        return; +
-    } +
-     +
-    try { +
-        // Mostra messaggio di caricamento +
-        const savePdfBtn = document.getElementById('savePdfBtn'); +
-        const originalText = savePdfBtn.innerHTML; +
-        savePdfBtn.innerHTML = '⏳ Generando PDF...'; +
-        savePdfBtn.disabled = true;+
                  
-        // Seleziona il report attivo +        const proteinEl = document.getElementById('config_+ key + '_protein'); 
-        const reportElement window.currentActiveReport === 'work' ?  +        if (proteinEl) { 
-            document.getElementById('nptWorkReport') :  +            formulaData[key].protein parseFloat(proteinEl.value); 
-            document.getElementById('nptFinalReport'); +            formulaData[key].carbs = parseFloat(document.getElementById('config_+ key + '_carbs').value); 
-         +            formulaData[key].lipids parseFloat(document.getElementById('config_' + key + '_lipids').value); 
-        const reportTitle window.currentActiveReport === 'work' +            formulaData[key].sodium = parseFloat(document.getElementById('config_+ key + '_sodium').value); 
-            'Foglio_di_Lavoro'Report_Parenterale'+            formulaData[key].potassium parseFloat(document.getElementById('config_+ key + '_potassium').value)
-         +            formulaData[key].calcium parseFloat(document.getElementById('config_+ key + '_calcium').value); 
-        // Genera il nome file con data e cartella +            formulaData[key].phosphorus parseFloat(document.getElementById('config_+ key + '_phosphorus').value); 
-        const today = new Date(); +            formulaData[key].magnesium parseFloat(document.getElementById('config_' + key + '_magnesium').value)
-        const dateStr today.toISOString().split('T')[0].replace(/-/g, ''); +            formulaData[key].energy parseFloat(document.getElementById('config_+ key + '_energy').value); 
-        const medicalRecord patientData.medicalRecord || 'SENZA_CARTELLA'; +             
-        const fileName = `NPT_${reportTitle}_${medicalRecord}_${dateStr}.pdf`; +            if (JSON.stringify(oldValues!== JSON.stringify(formulaData[key])) 
-         +                changesCount++
-        // Configurazione html2canvas per qualità migliore +            }
-        const canvas await html2canvas(reportElement,+
-            scale: 2, // Migliore qualità +
-            useCORS: true, +
-            backgroundColor: '#ffffff'+
-            width: reportElement.offsetWidth, +
-            height: reportElement.offsetHeight, +
-            scrollX: 0, +
-            scrollY: 0 +
-        }); +
-         +
-        // Crea PDF con dimensioni A4 +
-        const { jsPDF } = window.jspdf; +
-        const pdf new jsPDF(+
-            orientation: 'portrait'+
-            unit: 'mm'+
-            format: 'a4' +
-        }); +
-         +
-        // Calcola dimensioni per adattare alla pagina A4 +
-        const imgWidth = 210; // A4 width in mm +
-        const pageHeight = 297; // A4 height in mm +
-        const imgHeight = (canvas.height * imgWidth/ canvas.width+
-         +
-        let heightLeft imgHeight; +
-        let position = 0; +
-         +
-        // Aggiungi l'immagine al PDF +
-        pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); +
-        heightLeft -= pageHeight; +
-         +
-        // Se il contenuto è più lungo di una pagina, aggiungi pagine +
-        while (heightLeft >= 0) { +
-            position = heightLeft - imgHeight; +
-            pdf.addPage()+
-            pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); +
-            heightLeft -= pageHeight;+
         }         }
-         +    }); 
-        // Aggiungi metadati al PDF +     
-        pdf.setProperties(+    const button = document.getElementById('updateEnteralBtn'); 
-            title: `NPT Calculator - ${reportTitle}`, +    if (button{ 
-            subject: 'Calcolo Nutrizionale Parenterale'+        button.className = 'button config-update-completed'; 
-            author: 'NPT Calculator v2.0', +        button.innerHTML = 'ENTERALI SALVATE ✓ (' + changesCount + ' modifiche)';
-            keywords: 'NPT, Nutrizione Parenterale, Neonatologia', +
-            creator: 'NPT Calculator v2.0' +
-        }); +
-         +
-        // Salva il PDF +
-        pdf.save(fileName)+
-         +
-        // Ripristina il pulsante +
-        savePdfBtn.innerHTML = '✅ PDF Salvato!'; +
-        savePdfBtn.style.backgroundColor = '#27ae60'; +
-        +
         setTimeout(() => {         setTimeout(() => {
-            savePdfBtn.innerHTML originalText+            button.className 'button'
-            savePdfBtn.style.backgroundColor = '#e74c3c'+            button.innerHTML = 'Aggiorna Formule Enterali';
-            savePdfBtn.disabled = false;+
         }, 3000);         }, 3000);
-         
-        // Mostra messaggio di conferma 
-        const confirmationMsg = document.createElement('div'); 
-        confirmationMsg.innerHTML = ` 
-            <div style="position: fixed; top: 20px; right: 20px; background: #27ae60; color: white;  
-                        padding: 15px 20px; border-radius: 5px; z-index: 10000; box-shadow: 0 4px 12px rgba(0,0,0,0.3);"> 
-                <strong>✅ PDF Salvato!</strong><br> 
-                File: ${fileName}<br> 
-                <small>Il file è stato salvato nella cartella Download</small> 
-            </div> 
-        `; 
-        document.body.appendChild(confirmationMsg); 
-         
-        setTimeout(() => { 
-            document.body.removeChild(confirmationMsg); 
-        }, 5000); 
-         
-    } catch (error) { 
-        console.error('Errore durante il salvataggio PDF:', error); 
-        alert('Errore durante il salvataggio del PDF. Riprova o usa la funzione Stampa.'); 
-         
-        // Ripristina il pulsante in caso di errore 
-        const savePdfBtn = document.getElementById('savePdfBtn'); 
-        savePdfBtn.innerHTML = '💾 Salva PDF'; 
-        savePdfBtn.disabled = false; 
     }     }
 } }
  
-</script> +function updateParenteralConfig() {  
-</body> +    let changesCount = 0; 
-</html><!DOCTYPE html> +     
-<html lang="it"> +    Object.keys(parenteralConfig).forEach(function(key) { 
-<head> +        const oldValues = Object.assign({}, parenteralConfig[key])
-    <meta charset="UTF-8"> +         
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"> +        const proteinEl = document.getElementById('config_' + key + '_protein'); 
-    <title>Programma NPT Neonatale v2.0 con BUN</title> +        if (proteinEl) 
-    <style> +            parenteralConfig[key].protein = parseFloat(proteinEl.value)
-        body { +            parenteralConfig[key].carbs = parseFloat(document.getElementById('config_' + key + '_carbs').value)
-            font-family: Arial, sans-serif; +            parenteralConfig[key].lipids = parseFloat(document.getElementById('config_' + key + '_lipids').value)
-            margin: 0; +            parenteralConfig[key].sodium = parseFloat(document.getElementById('config_' + key + '_sodium').value)
-            padding: 20px; +            parenteralConfig[key].potassium = parseFloat(document.getElementById('config_' + key + '_potassium').value)
-            background-color: #f5f5f5; +            parenteralConfig[key].calcium = parseFloat(document.getElementById('config_' + key + '_calcium').value)
-        } +            parenteralConfig[key].phosphorus = parseFloat(document.getElementById('config_' + key + '_phosphorus').value)
- +            parenteralConfig[key].magnesium = parseFloat(document.getElementById('config_' + key + '_magnesium').value)
-        .container { +            parenteralConfig[key].energy = parseFloat(document.getElementById('config_' + key + '_energy').value)
-            max-width: 1200px; +            parenteralConfig[key].water = parseFloat(document.getElementById('config_' + key + '_water').value);
-            margin: 0 auto; +
-            background: white; +
-            padding: 20px; +
-            border-radius: 10px; +
-            box-shadow: 0 2px 10px rgba(0,0,0,0.1)+
-        } +
- +
-        h1 { +
-            text-align: center; +
-            color: #2c3e50; +
-            border-bottom: 3px solid #3498db; +
-            padding-bottom: 10px; +
-        } +
- +
-        .section { +
-            margin: 20px 0; +
-            padding: 15px; +
-            border: 1px solid #ddd; +
-            border-radius: 5px; +
-            background-color: #f9f9f9; +
-        } +
- +
-        .section h2 { +
-            color: #34495e; +
-            margin-top: 0; +
-            border-bottom: 2px solid #3498db; +
-            padding-bottom: 5px; +
-        } +
- +
-        .input-group { +
-            margin: 10px 0; +
-            display: flex; +
-            align-items: center; +
-        } +
- +
-        .input-group label { +
-            display: inline-block; +
-            width: 220px; +
-            font-weight: bold; +
-            color: #2c3e50; +
-        } +
- +
-        .input-group input.input-group select { +
-            padding: 8px; +
-            border: 1px solid #ddd; +
-            border-radius: 4px; +
-            width: 150px; +
-            font-size: 14px+
-        +
- +
-        .input-group input:focus, .input-group select:focus { +
-            outline: none; +
-            border-color: #3498db; +
-            box-shadow: 0 0 5px rgba(52, 152, 219, 0.3); +
-        +
- +
-        .button +
-            background-color: #3498db; +
-            color: white; +
-            padding: 12px 24px; +
-            border: none; +
-            border-radius: 5px; +
-            cursor: pointer; +
-            font-size: 16px; +
-            margin: 10px 5px; +
-            transition: background-color 0.3s; +
-        } +
- +
-        .button:hover { +
-            background-color: #2980b9; +
-        } +
- +
-        .button.secondary { +
-            background-color: #95a5a6; +
-        } +
- +
-        .button.secondary:hover { +
-            background-color: #7f8c8d; +
-        } +
- +
-        .results { +
-            margin-top: 20px+
-            padding: 15px; +
-            background-color: #e8f6f3; +
-            border-left: 4px solid #27ae60; +
-            border-radius: 5px; +
-        } +
- +
-        .results h3 { +
-            color: #27ae60; +
-            margin-top: 0; +
-        } +
- +
-        .results-table { +
-            width: 100%; +
-            border-collapse: collapse; +
-            margin: 10px 0; +
-        } +
- +
-        .results-table th, .results-table td { +
-            border: 1px solid #ddd+
-            padding: 8px; +
-            text-align: left; +
-        } +
- +
-        .results-table th { +
-            background-color: #3498db; +
-            color: white; +
-        } +
- +
-        .results-table tr:nth-child(even+
-            background-color: #f2f2f2; +
-        } +
- +
-        .warning { +
-            background-color: #fff3cd+
-            color: #856404; +
-            padding: 15px; +
-            border-radius: 5px; +
-            border-left: 4px solid #ffc107; +
-            margin: 10px 0; +
-            font-weight: bold; +
-        } +
- +
-        .error { +
-            background-color: #f8d7da; +
-            color: #721c24; +
-            padding: 10px; +
-            border-radius: 5px; +
-            border-left: 4px solid #dc3545; +
-            margin: 10px 0; +
-        } +
- +
-        .info { +
-            background-color: #d1ecf1; +
-            color: #0c5460; +
-            padding: 10px; +
-            border-radius: 5px; +
-            border-left: 4px solid #17a2b8; +
-            margin: 10px 0; +
-        } +
- +
-        .phase-indicator { +
-            display: inline-block+
-            padding: 5px 10px; +
-            border-radius: 15px; +
-            font-size: 12px; +
-            font-weight: bold; +
-            margin-left: 10px; +
-        } +
- +
-        .phase-transizione { +
-            background-color: #fff3cd; +
-            color: #856404; +
-        } +
- +
-        .phase-stabilizzazione { +
-            background-color: #d1ecf1; +
-            color: #0c5460; +
-        } +
- +
-        .phase-crescita { +
-            background-color: #d4edda+
-            color: #155724; +
-        } +
- +
-        .nutrition-table { +
-            width: 100%; +
-            border-collapse: collapse; +
-            margin: 15px 0; +
-            font-size: 13px; +
-        } +
- +
-        .nutrition-table th, .nutrition-table td { +
-            border: 1px solid #ddd+
-            padding: 8px; +
-            text-align: center; +
-        } +
- +
-        .nutrition-table th { +
-            background-color: #34495e; +
-            color: white; +
-        } +
- +
-        .day-column { +
-            background-color: #ecf0f1; +
-            font-weight: bold; +
-        } +
- +
-        .day-column.energy-highlight { +
-            background-color: #3498db !important+
-            color: white !important; +
-            font-weight: bold; +
-        } +
- +
-        .hidden { +
-            display: none !important; +
-        } +
- +
-        .visible { +
-            display: block !important; +
-        } +
- +
-        /* CSS TAB ORIZZONTALI */ +
-        .tabs { +
-            display: flex; +
-            margin-bottom: 20px; +
-            border-bottom: 1px solid #ddd; +
-            gap: 5px; +
-        } +
- +
-        .tab { +
-            padding: 10px 20px; +
-            background-color: #ecf0f1; +
-            border: 1px solid #ddd; +
-            border-bottom: none; +
-            cursor: pointer; +
-            border-radius: 5px 5px 0 0; +
-            transition: all 0.3s ease; +
-            text-align: center; +
-            min-width: 120px; +
-            flex: 1; +
-            max-width: 200px; +
-        } +
- +
-        .tab:hover { +
-            background-color: #d5dbdb; +
-        } +
- +
-        .tab.active { +
-            background-color: #3498db; +
-            color: white; +
-            border-color: #3498db; +
-            border-bottom: 1px solid #3498db; +
-        } +
- +
-        .tab-content { +
-            display: none; +
-        } +
- +
-        .tab-content.active { +
-            display: block; +
-        } +
- +
-        .form-row { +
-            display: flex; +
-            flex-wrap: wrap; +
-            gap: 20px; +
-            margin: 15px 0; +
-        } +
- +
-        .form-col { +
-            flex: 1; +
-            min-width: 300px; +
-        } +
- +
-        .highlight { +
-            background-color: #e8f6f3; +
-            font-weight: bold; +
-        } +
- +
-        .energy-highlight { +
-            background-color: #2c3e50 !important; +
-            color: white !important; +
-            font-weight: bold; +
-        } +
- +
-        .load-defaults-pending { +
-            background-color: #3498db; +
-        } +
- +
-        .load-defaults-completed { +
-            background-color: #27ae60 !important; +
-        } +
- +
-        .calculate-nutrition-pending { +
-            background-color: #e74c3c; +
-        } +
- +
-        .calculate-nutrition-completed { +
-            background-color: #27ae60 !important; +
-        } +
- +
-        .calculate-phase-pending { +
-            background-color: #e74c3c; +
-        } +
- +
-        .config-update-pending { +
-            background-color: #e74c3c !important; +
-            color: white !important; +
-        } +
- +
-        .config-update-completed { +
-            background-color: #27ae60 !important; +
-            color: white !important; +
-        } +
- +
-        /* STILI PER IL REPORT NPT */ +
-        .npt-report { +
-            background: white; +
-            padding: 20px; +
-            font-family: Arial, sans-serif; +
-            font-size: 12px; +
-            line-height: 1.4; +
-            max-width: 800px; +
-            margin: 0 auto; +
-            border: 1px solid #ddd; +
-        } +
- +
-        .report-header { +
-            display: flex; +
-            justify-content: space-between; +
-            align-items: center; +
-            border-bottom: 2px solid #333; +
-            padding-bottom: 10px; +
-            margin-bottom: 20px; +
-        } +
- +
-        .report-header-left { +
-            flex: 1; +
-        } +
- +
-        .report-header-right { +
-            width: 100px; +
-            height: 60px; +
-            background-color: #e8f4f8; +
-            border: 1px solid #ccc; +
-            display: flex; +
-            align-items: center; +
-            justify-content: center; +
-            font-size: 10px; +
-            color: #666; +
-        } +
- +
-        .report-title { +
-            font-size: 14px; +
-            font-weight: bold; +
-            margin-bottom: 5px; +
-        } +
- +
-        .report-subtitle { +
-            font-size: 11px; +
-            color: #666; +
-            margin-bottom: 15px; +
-        } +
- +
-        .report-section { +
-            margin-bottom: 20px; +
-        } +
- +
-        .report-section-title { +
-            background-color: #333; +
-            color: white; +
-            padding: 5px 10px; +
-            font-weight: bold; +
-            font-size: 12px; +
-            margin-bottom: 0; +
-        } +
- +
-        .report-table { +
-            width: 100%; +
-            border-collapse: collapse; +
-            font-size: 11px; +
-        } +
- +
-        .report-table td { +
-            padding: 3px 8px; +
-            border-bottom: 1px solid #ddd; +
-            vertical-align: top; +
-        } +
- +
-        .report-table .label-col { +
-            width: 200px; +
-            font-weight: normal; +
-        } +
- +
-        .report-table .value-col { +
-            text-align: right+
-            font-weight: bold; +
-        } +
- +
-        .composition-table { +
-            width: 100%; +
-            border-collapse: collapse; +
-            font-size: 11px; +
-            margin-top: 0; +
-        } +
- +
-        .composition-table th { +
-            background-color: #f0f0f0; +
-            padding: 5px 8px; +
-            text-align: center; +
-            font-weight: bold; +
-            border: 1px solid #ddd; +
-        } +
- +
-        .composition-table td { +
-            padding: 3px 8px; +
-            border: 1px solid #ddd; +
-            text-align: right; +
-        } +
- +
-        .composition-table .component-name-col { +
-            text-align: left !important; +
-            width: 60%; +
-        } +
- +
-        .composition-total { +
-            background-color: #f8f8f8; +
-            font-weight: bold; +
-        } +
- +
-        .elements-table { +
-            width: 100%; +
-            border-collapse: collapse; +
-            font-size: 11px; +
-            margin-top: 0; +
-        } +
- +
-        .elements-table td { +
-            padding: 3px 8px; +
-            border-bottom: 1px solid #ddd; +
-        } +
- +
-        .elements-table .element-name { +
-            width: 200px; +
-        } +
- +
-        .elements-table .element-value +
-            text-align: right; +
-            font-weight: bold; +
-            width: 80px; +
-        } +
- +
-        .elements-table .element-unit { +
-            text-align: left; +
-            width: 40px; +
-            font-size: 10px; +
-        } +
- +
-        .report-footer { +
-            margin-top: 30px; +
-            padding-top: 10px; +
-            border-top: 1px solid #ddd; +
-            font-size: 10px; +
-            color: #666; +
-            text-align: center; +
-        } +
- +
-        @media print { +
-            .npt-report { +
-                box-shadow: none; +
-                border: none; +
-                margin: 0; +
-                padding: 15px; +
-            } +
-             +
-            .button { +
-                display: none; +
-            }+
                          
-            .tabs, .tab-content:not(.active) { +            if (JSON.stringify(oldValues) !== JSON.stringify(parenteralConfig[key])) { 
-                display: none !important;+                changesCount++;
             }             }
         }         }
-    </style> 
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> 
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> 
-</head> 
-<body> 
- 
-<div class="container"> 
-    <h1>Programma NPT Neonatale v2.0</h1> 
-     
-    <!-- TAB ORIZZONTALI --> 
-    <div class="tabs"> 
-        <div class="tab active" onclick="showTab('patient-data')"> 
-            <span style="font-size: 18px;">1</span><br>Dati Paziente 
-        </div> 
-        <div class="tab" onclick="showTab('enteral')"> 
-            <span style="font-size: 18px;">2</span><br>Nutrizione Enterale 
-        </div> 
-        <div class="tab" onclick="showTab('nutrition-calc')"> 
-            <span style="font-size: 18px;">3</span><br>Calcolo Fabbisogni 
-        </div> 
-        <div class="tab" onclick="showTab('parenteral')"> 
-            <span style="font-size: 18px;">4</span><br>Nutrizione Parenterale 
-        </div> 
-        <div class="tab" onclick="showTab('config')"> 
-            <span style="font-size: 18px;">5</span><br>Configurazione 
-        </div> 
-    </div> 
- 
-    <!-- TAB 1: DATI PAZIENTE --> 
-    <div id="patient-data" class="tab-content active"> 
-        <div class="info"> 
-            <strong>PASSO 1 - DATI PAZIENTE</strong><br> 
-            <strong>Obiettivo:</strong> Inserire i dati antropometrici ed ematochimici del neonato 
-        </div> 
-        <div class="section"> 
-            <h2>Dati Prescrizione</h2> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="prescriptionDate">Data di prescrizione:</label> 
-                        <input type="date" id="prescriptionDate" style="width: 180px;"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="prescribingDoctor">Medico prescrittore:</label> 
-                        <select id="prescribingDoctor" style="width: 200px;"> 
-                            <option value="">Seleziona medico</option> 
-                            <option value="dr_bellu">Dr. Roberto Bellù</option> 
-                            <option value="dr_condo">Dr.ssa Manuela Condò</option> 
-                            <option value="dr_maccioni">Dr.ssa Carla Maccioni</option> 
-                            <option value="dr_meroni">Dr.ssa Federica Meroni</option> 
-                            <option value="dr_calzatini">Dr. Francesco Calzatini</option> 
-                            <option value="dr_ferrari">Dr.ssa Elisabetta Ferrari</option> 
-                        </select> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="info" style="margin-top: 0; font-size: 13px;"> 
-                        <strong>Info Prescrizione:</strong><br> 
-                        • La data viene impostata automaticamente ad oggi<br> 
-                        • Selezionare il medico responsabile della prescrizione<br> 
-                        • Questi dati appariranno nel riepilogo finale 
-                    </div> 
-                </div> 
-            </div> 
-        </div> 
-         
-        <div class="section"> 
-            <h2>Dati Paziente</h2> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="medicalRecord">N° Cartella Clinica:</label> 
-                        <input type="text" id="medicalRecord" maxlength="10" placeholder="2025000001" style="width: 120px; font-family: monospace;"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="birthWeight">Peso alla nascita (g):</label> 
-                        <input type="number" id="birthWeight" min="400" max="5000" value="1000"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="currentWeight">Peso attuale (g):</label> 
-                        <input type="number" id="currentWeight" min="400" max="5000" value="3550"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="daysOfLife">Giorni di vita:</label> 
-                        <input type="number" id="daysOfLife" min="1" max="365" value="9"> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="bun">BUN - Azotemia (mg/dL):</label> 
-                        <input type="number" id="bun" min="5" max="100" step="1" placeholder="8-25 normale"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="glucose">Glicemia (mg/dL):</label> 
-                        <input type="number" id="glucose" min="40" max="400" step="1" placeholder="70-110 normale"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="sodium">Natremia (mEq/L):</label> 
-                        <input type="number" id="sodium" min="120" max="160" step="1" placeholder="135-145 normale"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="ph">pH ematico:</label> 
-                        <input type="number" id="ph" min="7.0" max="7.6" step="0.01" placeholder="7.35-7.45 normale"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="baseExcess">BE - Base Excess (mEq/L):</label> 
-                        <input type="number" id="baseExcess" min="-15" max="10" step="0.1" placeholder="-4 +2 normale"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="diuresis">Diuresi (mL/kg/die):</label> 
-                        <input type="number" id="diuresis" min="0" max="10" step="0.1" placeholder="1-3 normale"> 
-                    </div> 
-                    <div class="info"> 
-                        <strong>Range Normali:</strong><br> 
-                        <strong>BUN:</strong> 9-14 mg/dL<br> 
-                        <strong>Glicemia:</strong> 70-110 mg/dL<br> 
-                        <strong>Natremia:</strong> 135-145 mEq/L<br> 
-                        <strong>pH:</strong> 7.35-7.45<br> 
-                        <strong>BE:</strong> -4 a +2 mEq/L<br> 
-                        <strong>Diuresi:</strong> 1-3 mL/kg/die 
-                    </div> 
-                </div> 
-            </div> 
-             
-            <button id="calculatePhaseBtn" class="button calculate-phase-pending" onclick="calculatePhase()">CALCOLA FASE NUTRIZIONALE</button> 
-        </div> 
- 
-        <div id="phaseResults" class="results hidden"> 
-            <h3>Fase Nutrizionale Attuale</h3> 
-            <div id="phaseInfo"></div> 
-        </div> 
-    </div> 
- 
-    <!-- TAB 2: NUTRIZIONE ENTERALE --> 
-    <div id="enteral" class="tab-content"> 
-        <div class="info"> 
-            <strong>PASSO 2 - NUTRIZIONE ENTERALE E LIQUIDI</strong><br> 
-            <strong>Obiettivo:</strong> Calcolare i nutrienti e liquidi forniti dalla nutrizione enterale e altri apporti 
-        </div> 
-         
-        <div class="section"> 
-            <h2>Altri Liquidi per Via Parenterale o Enterale</h2> 
-            <div class="warning"> 
-                <strong>💧 LIQUIDI AGGIUNTIVI:</strong> Inserire qui liquidi diversi dal latte (soluzioni, farmaci, flebo) 
-            </div> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="additionalFluids">Volume altri liquidi (ml/die):</label> 
-                        <input type="number" id="additionalFluids" min="0" max="500" value="0" step="5"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="fluidType">Tipo di liquido:</label> 
-                        <select id="fluidType"> 
-                            <option value="saline">Soluzione fisiologica</option> 
-                            <option value="glucose5">Glucosio 5%</option> 
-                            <option value="glucose10">Glucosio 10%</option> 
-                            <option value="drugs">Farmaci in soluzione</option> 
-                            <option value="other">Altri liquidi</option> 
-                        </select> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="fluidRoute">Via di somministrazione:</label> 
-                        <select id="fluidRoute"> 
-                            <option value="iv">Endovenosa</option> 
-                            <option value="oral">Orale</option> 
-                            <option value="ng">Sonda nasogastrica</option> 
-                        </select> 
-                    </div> 
-                    <div class="info" style="margin-top: 10px; font-size: 12px;"> 
-                        <strong>Esempi:</strong><br> 
-                        • Antibiotici in soluzione<br> 
-                        • Flebo di mantenimento<br> 
-                        • Soluzioni elettrolitiche 
-                    </div> 
-                </div> 
-            </div> 
-        </div> 
-         
-        <div class="section"> 
-            <h2>Tipo di Latte e Volume</h2> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="formulaType">Tipo di latte:</label> 
-                        <select id="formulaType" onchange="updateFortifierOptions()"> 
-                            <option value="none">Nessun apporto enterale</option> 
-                            <option value="maternal">Latte materno</option> 
-                            <option value="maternal_fortified">Latte materno + Prenidina FM85</option> 
-                            <option value="nan_supreme">Nestle NAN Supreme Pro 1</option> 
-                            <option value="humana1">Humana 1</option> 
-                            <option value="bbmilk_zero">BBmilk Zero</option> 
-                            <option value="bbmilk_pdf">BBmilk PDF</option> 
-                            <option value="prenan">Nestle PreNan POST</option> 
-                            <option value="alfare">Alfare</option> 
-                            <option value="infatrini">Infatrini</option> 
-                        </select> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="dailyVolume">Volume giornaliero (ml):</label> 
-                        <input type="number" id="dailyVolume" min="0" max="300" value="0"> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div id="fortifierSection" class="hidden"> 
-                        <h4>Fortificazione Aggiuntiva</h4> 
-                        <div class="input-group"> 
-                            <label for="fortifierType">Tipo fortificante:</label> 
-                            <select id="fortifierType"> 
-                                <option value="none">Nessun fortificante</option> 
-                            </select> 
-                        </div> 
-                        <div class="input-group"> 
-                            <label for="fortifierConcentration">Concentrazione (%):</label> 
-                            <input type="range" id="fortifierConcentration" min="2" max="6" step="1" value="2" oninput="updateConcentrationDisplay()"> 
-                            <span id="concentrationValue" style="margin-left: 10px; font-weight: bold;">2%</span> 
-                        </div> 
-                    </div> 
-                </div> 
-            </div> 
- 
-            <button id="calculateEnteralBtn" class="button calculate-nutrition-pending" onclick="calculateEnteral()">Calcola Apporti Enterali</button> 
-        </div> 
- 
-        <div id="enteralResults" class="results hidden"> 
-            <h3>Apporti Nutrizionali da Nutrizione Enterale</h3> 
-            <div id="enteralTable"></div> 
-        </div> 
-    </div> 
- 
-    <!-- TAB 3: CALCOLO FABBISOGNI --> 
-    <div id="nutrition-calc" class="tab-content"> 
-        <div class="info"> 
-            <strong>PASSO 3 - DETERMINAZIONE FABBISOGNI</strong><br> 
-            <strong>Obiettivo:</strong> Determinare i fabbisogni nutrizionali totali del neonato 
-        </div> 
-        <div class="section"> 
-            <h2>Determinazione Fabbisogni</h2> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="targetDay">Giornata di vita:</label> 
-                        <input type="number" id="targetDay" min="1" max="30" value="9" readonly style="background-color: #f0f0f0;"> 
-                    </div> 
-                    <button id="loadDefaultsBtn" class="button load-defaults-pending" onclick="loadNutritionDefaults()">Carica Valori Standard</button> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="weightCategory">Categoria peso:</label> 
-                        <select id="weightCategory" onchange="updateWeightCategory()"> 
-                            <option value="">Seleziona categoria</option> 
-                            <option value="≤1500g">≤1500g (ELBW/VLBW)</option> 
-                            <option value=">1500g">>1500g (Peso normale)</option> 
-                        </select> 
-                    </div> 
-                    <button id="calculateNutritionBtn" class="button calculate-nutrition-pending" onclick="calculateNutrition()">CALCOLA FABBISOGNI</button> 
-                </div> 
-            </div> 
-             
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="reqLiquids">Liquidi (ml/kg/die):</label> 
-                        <input type="number" id="reqLiquids" min="0" max="250" step="5" value="120"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqProtein">Proteine (g/kg/die):</label> 
-                        <input type="number" id="reqProtein" min="0" max="8" step="0.1" value="3.0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="carbUnit">Unità glucidi:</label> 
-                        <select id="carbUnit" onchange="updateCarbUnit()"> 
-                            <option value="g">g/kg/die</option> 
-                            <option value="mg">mg/kg/min</option> 
-                        </select> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqCarbs" id="carbLabel">Glucidi (g/kg/die):</label> 
-                        <input type="number" id="reqCarbs" min="0" max="20" step="0.1" value="6.0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqLipids">Lipidi (g/kg/die):</label> 
-                        <input type="number" id="reqLipids" min="0" max="5" step="0.1" value="1.0"> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="reqCalcium">Calcio elementare (mg/kg/die):</label> 
-                        <input type="number" id="reqCalcium" min="0" max="200" step="5" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqPhosphorus">Fosforo (mg/kg/die):</label> 
-                        <input type="number" id="reqPhosphorus" min="0" max="100" step="2" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqMagnesium">Magnesio (mEq/kg/die):</label> 
-                        <input type="number" id="reqMagnesium" min="0" max="10" step="0.1" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqSodium">Sodio (mEq/kg/die):</label> 
-                        <input type="number" id="reqSodium" min="0" max="10" step="0.1" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="sodiumType">Tipo di sodio:</label> 
-                        <select id="sodiumType" onchange="updateSodiumChoice()"> 
-                            <option value="nacl">Sodio Cloruro (NaCl)</option> 
-                            <option value="sodium_acetate">Sodio Acetato (alcalinizzante)</option> 
-                        </select> 
-                    </div> 
-                    <div id="sodiumRecommendation" class="hidden" style="margin-top: 5px;"> 
-                        <!-- Popolato dinamicamente --> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqPotassium">Potassio (mEq/kg/die):</label> 
-                        <input type="number" id="reqPotassium" min="0" max="5" step="0.1" value="0"> 
-                    </div> 
-                </div> 
-            </div> 
-             
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <h4>Vitamine e Oligoelementi (dal 3° giorno)</h4> 
-                    <div class="input-group"> 
-                        <label for="reqVitalipid">Vitalipid (ml/kg/die):</label> 
-                        <input type="number" id="reqVitalipid" min="0" max="10" step="0.5" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqSoluvit">Soluvit (ml/kg/die):</label> 
-                        <input type="number" id="reqSoluvit" min="0" max="5" step="0.5" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqPeditrace">Peditrace (ml/kg/die):</label> 
-                        <input type="number" id="reqPeditrace" min="0" max="10" step="0.5" value="0"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="reqCarnitine">Carnitina (mg/kg/die):</label> 
-                        <input type="number" id="reqCarnitine" min="0" max="20" step="1" value="0"> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="info" style="margin-top: 0; font-size: 13px;"> 
-                        <strong>Regole Vitamine/Oligoelementi:</strong><br> 
-                        <strong>• Dal 3° giorno:</strong> Vitalipid 4 ml/kg/die, Soluvit 1 ml/kg/die, Peditrace 1 ml/kg/die<br> 
-                        <strong>• Sospensione automatica:</strong> Se enterale ≥100 ml/kg/die<br> 
-                        <strong>• Modificabili manualmente:</strong> Campi editabili per personalizzazione<br><br> 
-                        <strong>Regole Carnitina:</strong><br> 
-                        <strong>• NPT > 1 mese:</strong> Carnitina 5 mg/kg/die<br> 
-                        <strong>• NPT < 1 mese:</strong> Non necessaria<br> 
-                        <strong>• Fonte:</strong> Carnitene (100 mg/ml) 
-                    </div> 
-                </div> 
-            </div> 
-        </div> 
- 
-        <div id="nutritionResults" class="results hidden"> 
-            <h3>Fabbisogni Nutrizionali Totali vs Enterali</h3> 
-            <div id="nutritionTable"></div> 
-        </div> 
-    </div> 
- 
-    <!-- TAB 4: NUTRIZIONE PARENTERALE --> 
-    <div id="parenteral" class="tab-content"> 
-        <div class="info"> 
-            <strong>PASSO 4 - NUTRIZIONE PARENTERALE (FINALE)</strong><br> 
-            <strong>Obiettivo:</strong> Definire la composizione della sacca NPT 
-        </div> 
-        <div class="section"> 
-            <h2>Composizione NPT Automatica</h2> 
-             
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="calculatedTotalVolume">Volume totale (ml):</label> 
-                        <input type="text" id="calculatedTotalVolume" readonly style="background-color: #e8f6f3; font-weight: bold;" value="Premere 'Calcola NPT'"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="suggestedGlucose">Glucosio (%):</label> 
-                        <input type="text" id="suggestedGlucose" readonly style="background-color: #e8f6f3; font-weight: bold;" value="Premere 'Calcola NPT'"> 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="calculatedProteinVol">Trophamine (ml):</label> 
-                        <input type="text" id="calculatedProteinVol" readonly style="background-color: #f0f0f0;" value="--"> 
-                    </div> 
-                    <div class="input-group"> 
-                        <label for="calculatedLipidVol">Intralipid (ml):</label> 
-                        <input type="text" id="calculatedLipidVol" readonly style="background-color: #f0f0f0;" value="--"> 
-                    </div> 
-                </div> 
-            </div> 
- 
-            <button id="calculateParenteralBtn" class="button" onclick="calculateParenteral()">CALCOLA NPT AUTOMATICA</button> 
-        </div> 
- 
-        <div id="parenteralResults" class="results hidden"> 
-            <h3>Prescrizione parenterale</h3> 
-            <div id="parenteralTable"></div> 
-             
-            <h3 style="margin-top: 30px;">Ricetta per Preparazione (include volume deflussore)</h3> 
-            <div id="preparationTable"></div> 
-             
-            <div style="margin-top: 30px; padding: 15px; background-color: #f0f8ff; border-left: 4px solid #3498db; border-radius: 5px;"> 
-                <h3 style="color: #2c3e50; margin-top: 0;">📋 Report Professionali</h3> 
-                <p style="margin-bottom: 15px;">Genera i report in formato ospedaliero per stampa e archiviazione:</p> 
-                <div style="display: flex; gap: 10px; flex-wrap: wrap;"> 
-                    <button id="generateWorkReportBtn" class="button" onclick="generateAndShowWorkReport()" style="background-color: #27ae60;">Genera Foglio di Lavoro</button> 
-                    <button id="generateFinalReportBtn" class="button" onclick="generateAndShowFinalReport()" style="background-color: #3498db;">Genera Report Parenterale</button> 
-                    <button id="printReportBtn" class="button secondary hidden" onclick="printCurrentReport()" style="margin-left: 10px;">Stampa Report Attivo</button> 
-                    <button id="savePdfBtn" class="button hidden" onclick="saveReportAsPDF()" style="background-color: #e74c3c; margin-left: 10px;">💾 Salva PDF</button> 
-                </div> 
-            </div> 
-             
-            <div id="nptWorkReport" class="hidden" style="margin-top: 20px;"></div> 
-            <div id="nptFinalReport" class="hidden" style="margin-top: 20px;"></div> 
-        </div> 
-    </div> 
- 
-    <!-- TAB 5: CONFIGURAZIONE --> 
-    <div id="config" class="tab-content"> 
-        <div class="info"> 
-            <strong>CONFIGURAZIONE COMPONENTI</strong><br> 
-            <strong>Sistema:</strong> NPT Calculator v2.0 - Database completo componenti nutrizionali 
-        </div> 
-         
-        <div class="section"> 
-            <h2>Parametri Sistema</h2> 
-            <div class="form-row"> 
-                <div class="form-col"> 
-                    <div class="input-group"> 
-                        <label for="deflectorVolume">Volume deflussore (ml):</label> 
-                        <input type="number" id="deflectorVolume" min="0" max="100" step="5" value="30"> 
-                    </div> 
-                    <div class="info" style="margin-top: 10px; font-size: 12px;"> 
-                        <strong>Info Volume Deflussore:</strong><br> 
-                        • Volume perso nel deflussore durante la preparazione<br> 
-                        • Viene aggiunto automaticamente alla ricetta di preparazione<br> 
-                        • Valore standard: 30 ml (modificabile) 
-                    </div> 
-                </div> 
-                <div class="form-col"> 
-                    <button id="updateSystemBtn" class="button" onclick="updateSystemConfig()">Aggiorna Parametri Sistema</button> 
-                </div> 
-            </div> 
-        </div> 
- 
-        <div class="section"> 
-            <h2>Formule Enterali (Valori per 100ml)</h2> 
-            <div style="overflow-x: auto;"> 
-                <table class="results-table" style="font-size: 12px;"> 
-                    <thead> 
-                        <tr> 
-                            <th style="min-width: 180px;">Formula</th> 
-                            <th>Proteine<br>(g)</th> 
-                            <th>Carboidrati<br>(g)</th> 
-                            <th>Lipidi<br>(g)</th> 
-                            <th>Sodio<br>(mEq)</th> 
-                            <th>Potassio<br>(mEq)</th> 
-                            <th>Calcio<br>(mg)</th> 
-                            <th>Fosforo<br>(mg)</th> 
-                            <th>Magnesio<br>(mg)</th> 
-                            <th>Energia<br>(kcal)</th> 
-                        </tr> 
-                    </thead> 
-                    <tbody> 
-                        <tr> 
-                            <td><strong>Latte Materno</strong></td> 
-                            <td>1.2</td> 
-                            <td>7.0</td> 
-                            <td>4.0</td> 
-                            <td>0.007</td> 
-                            <td>0.035</td> 
-                            <td>28.0</td> 
-                            <td>15.0</td> 
-                            <td>3.0</td> 
-                            <td>67</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Latte Materno + Prenidina FM85</strong></td> 
-                            <td>2.6</td> 
-                            <td>7.4</td> 
-                            <td>4.25</td> 
-                            <td>0.009</td> 
-                            <td>0.050</td> 
-                            <td>63.0</td> 
-                            <td>35.0</td> 
-                            <td>4.5</td> 
-                            <td>87</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Nestle NAN Supreme Pro 1</strong></td> 
-                            <td>1.3</td> 
-                            <td>7.6</td> 
-                            <td>3.5</td> 
-                            <td>0.024</td> 
-                            <td>0.075</td> 
-                            <td>44.1</td> 
-                            <td>24.4</td> 
-                            <td>6.56</td> 
-                            <td>67</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Humana 1</strong></td> 
-                            <td>1.4</td> 
-                            <td>7.6</td> 
-                            <td>3.2</td> 
-                            <td>0.020</td> 
-                            <td>0.070</td> 
-                            <td>59.0</td> 
-                            <td>33.0</td> 
-                            <td>5.0</td> 
-                            <td>67</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>BBmilk Zero</strong></td> 
-                            <td>1.8</td> 
-                            <td>7.8</td> 
-                            <td>3.6</td> 
-                            <td>0.022</td> 
-                            <td>0.075</td> 
-                            <td>65.0</td> 
-                            <td>36.0</td> 
-                            <td>6.0</td> 
-                            <td>70</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>BBmilk PDF</strong></td> 
-                            <td>1.7</td> 
-                            <td>7.9</td> 
-                            <td>3.7</td> 
-                            <td>0.025</td> 
-                            <td>0.078</td> 
-                            <td>68.0</td> 
-                            <td>38.0</td> 
-                            <td>6.5</td> 
-                            <td>71</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Nestle PreNan POST</strong></td> 
-                            <td>2.0</td> 
-                            <td>8.2</td> 
-                            <td>4.0</td> 
-                            <td>0.030</td> 
-                            <td>0.085</td> 
-                            <td>75.0</td> 
-                            <td>42.0</td> 
-                            <td>7.5</td> 
-                            <td>73</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Alfare</strong></td> 
-                            <td>1.9</td> 
-                            <td>7.1</td> 
-                            <td>3.4</td> 
-                            <td>0.015</td> 
-                            <td>0.050</td> 
-                            <td>52.0</td> 
-                            <td>35.0</td> 
-                            <td>5.5</td> 
-                            <td>67</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Infatrini</strong></td> 
-                            <td>2.6</td> 
-                            <td>10.8</td> 
-                            <td>5.4</td> 
-                            <td>0.028</td> 
-                            <td>0.082</td> 
-                            <td>85.0</td> 
-                            <td>58.0</td> 
-                            <td>9.2</td> 
-                            <td>101</td> 
-                        </tr> 
-                    </tbody> 
-                </table> 
-            </div> 
-            <div class="info" style="margin-top: 15px;"> 
-                <strong>ℹ️ Informazioni:</strong> Questi valori sono configurati nel database e vengono utilizzati per i calcoli nutrizionali. Sono basati su letteratura e schede tecniche ufficiali. 
-            </div> 
-        </div> 
- 
-        <div class="section"> 
-            <h2>Componenti Parenterali (Valori per 100ml)</h2> 
-            <div style="overflow-x: auto;"> 
-                <table class="results-table" style="font-size: 12px;"> 
-                    <thead> 
-                        <tr> 
-                            <th style="min-width: 200px;">Componente</th> 
-                            <th>Calcio<br>(mg)</th> 
-                            <th>Fosforo<br>(mg)</th> 
-                            <th>Magnesio<br>(mEq)</th> 
-                            <th>Sodio<br>(mEq)</th> 
-                            <th>Potassio<br>(mEq)</th> 
-                            <th style="min-width: 250px;">Descrizione</th> 
-                        </tr> 
-                    </thead> 
-                    <tbody> 
-                        <tr> 
-                            <td><strong>Calcio Gluconato 10%</strong></td> 
-                            <td>840</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>1g/10mL, 0.44 mEq/mL - Sale di calcio organico</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Esafosfina</strong></td> 
-                            <td>0</td> 
-                            <td>1600</td> 
-                            <td>0</td> 
-                            <td>130</td> 
-                            <td>0</td> 
-                            <td>5g/50mL - Glicerofosfato di sodio</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Magnesio Solfato</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>800</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>2g/10mL, 1.6 mEq/mL - Elettrolita essenziale</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Sodio Cloruro</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>1000</td> 
-                            <td>0</td> 
-                            <td>3mEq/mL - Prima scelta per sodio</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Sodio Acetato</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>667</td> 
-                            <td>0</td> 
-                            <td>2 mEq/mL - Alcalinizzante per acidosi</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Potassio Cloruro</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>1000</td> 
-                            <td>2 mEq/mL - Max vel. 0.5 mEq/kg/h</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Trophamine 6%</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>Aminoacidi pediatrici - 6g/100mL</td> 
-                        </tr> 
-                        <tr> 
-                            <td><strong>Intralipid 20%</strong></td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>0</td> 
-                            <td>Emulsione lipidica - 20g/100mL</td> 
-                        </tr> 
-                    </tbody> 
-                </table> 
-            </div> 
-            <div class="info" style="margin-top: 15px;"> 
-                <strong>ℹ️ Informazioni:</strong> Concentrazioni standard utilizzate per i calcoli elettrolitici. I valori sono basati su preparazioni farmaceutiche standard. 
-            </div> 
-        </div> 
- 
-        <div class="section"> 
-            <h2>Lista Medici Prescrittori</h2> 
-            <div class="info" style="margin-bottom: 15px;"> 
-                <strong>🩺 Database Medici:</strong> Lista dei medici autorizzati alla prescrizione NPT. Questi nomi appaiono nella dropdown del TAB 1. 
-            </div> 
-            <div style="overflow-x: auto;"> 
-                <table class="results-table" style="font-size: 12px;"> 
-                    <thead> 
-                        <tr> 
-                            <th>Nome</th> 
-                            <th>Cognome</th> 
-                            <th>Titolo</th> 
-                            <th>Nome Completo (Visualizzato)</th> 
-                        </tr> 
-                    </thead> 
-                    <tbody> 
-                        <tr><td>Roberto</td><td>Bellù</td><td>Dr.</td><td><strong>Dr. Roberto Bellù</strong></td></tr> 
-                        <tr><td>Manuela</td><td>Condò</td><td>Dr.ssa</td><td><strong>Dr.ssa Manuela Condò</strong></td></tr> 
-                        <tr><td>Carla</td><td>Maccioni</td><td>Dr.ssa</td><td><strong>Dr.ssa Carla Maccioni</strong></td></tr> 
-                        <tr><td>Federica</td><td>Meroni</td><td>Dr.ssa</td><td><strong>Dr.ssa Federica Meroni</strong></td></tr> 
-                        <tr><td>Francesco</td><td>Calzatini</td><td>Dr.</td><td><strong>Dr. Francesco Calzatini</strong></td></tr> 
-                        <tr><td>Elisabetta</td><td>Ferrari</td><td>Dr.ssa</td><td><strong>Dr.ssa Elisabetta Ferrari</strong></td></tr> 
-                    </tbody> 
-                </table> 
-            </div> 
-        </div> 
- 
-        <div class="section"> 
-            <h2>Informazioni Sistema</h2> 
-            <div class="info"> 
-                <strong>📊 NPT Calculator v2.0 - Stato Sistema</strong><br> 
-                <strong>• Database Formule:</strong> 9 formule enterali configurate<br> 
-                <strong>• Database Componenti:</strong> 8 componenti parenterali configurati<br> 
-                <strong>• Medici Prescrittori:</strong> 6 medici autorizzati<br> 
-                <strong>• Algoritmi:</strong> Calcoli BUN, fasi nutrizionali, elettroliti automatici<br> 
-                <strong>• Report:</strong> Foglio di lavoro + Report parenterale completo<br> 
-                <strong>• Ultimo Aggiornamento:</strong> Luglio 2025 
-            </div> 
-        </div> 
-    </div> 
-</div> 
- 
-<script> 
-// DATI NUTRIZIONALI COMPLETI 
-const formulaData = { 
-    maternal: { name: "Latte Materno", protein: 1.2, carbs: 7.0, lipids: 4.0, sodium: 0.007, potassium: 0.035, calcium: 28.0, phosphorus: 15.0, magnesium: 3.0, energy: 67 }, 
-    maternal_fortified: { name: "Latte Materno + Prenidina FM85", protein: 2.6, carbs: 7.4, lipids: 4.25, sodium: 0.009, potassium: 0.050, calcium: 63.0, phosphorus: 35.0, magnesium: 4.5, energy: 87 }, 
-    nan_supreme: { name: "Nestle NAN Supreme Pro 1", protein: 1.3, carbs: 7.6, lipids: 3.5, sodium: 0.024, potassium: 0.0745, calcium: 44.1, phosphorus: 24.4, magnesium: 6.56, energy: 67 }, 
-    humana1: { name: "Humana 1", protein: 1.4, carbs: 7.6, lipids: 3.2, sodium: 0.020, potassium: 0.070, calcium: 59.0, phosphorus: 33.0, magnesium: 5.0, energy: 67 }, 
-    bbmilk_zero: { name: "BBmilk Zero", protein: 1.8, carbs: 7.8, lipids: 3.6, sodium: 0.022, potassium: 0.075, calcium: 65.0, phosphorus: 36.0, magnesium: 6.0, energy: 70 }, 
-    bbmilk_pdf: { name: "BBmilk PDF", protein: 1.7, carbs: 7.9, lipids: 3.7, sodium: 0.025, potassium: 0.078, calcium: 68.0, phosphorus: 38.0, magnesium: 6.5, energy: 71 }, 
-    prenan: { name: "Nestle PreNan POST", protein: 2.0, carbs: 8.2, lipids: 4.0, sodium: 0.030, potassium: 0.085, calcium: 75.0, phosphorus: 42.0, magnesium: 7.5, energy: 73 }, 
-    alfare: { name: "Alfare", protein: 1.9, carbs: 7.1, lipids: 3.4, sodium: 0.015, potassium: 0.050, calcium: 52.0, phosphorus: 35.0, magnesium: 5.5, energy: 67 }, 
-    infatrini: { name: "Infatrini", protein: 2.6, carbs: 10.8, lipids: 5.4, sodium: 0.028, potassium: 0.082, calcium: 85.0, phosphorus: 58.0, magnesium: 9.2, energy: 101 } 
-}; 
- 
-// CONFIGURAZIONI PARENTERALI COMPLETE 
-const parenteralConfig = { 
-    ca_gluconato: { 
-        name: "Calcio Gluconato 10%", 
-        calcium: 840, phosphorus: 0, magnesium: 0, sodium: 0, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 90 
-    }, 
-    esafosfina: { 
-        name: "Esafosfina", 
-        calcium: 0, phosphorus: 1600, magnesium: 0, sodium: 130, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 98 
-    }, 
-    mg_sulfate: { 
-        name: "Magnesio Solfato", 
-        calcium: 0, phosphorus: 0, magnesium: 800, sodium: 0, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99 
-    }, 
-    nacl: { 
-        name: "Sodio Cloruro", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 1000, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99 
-    }, 
-    sodium_acetate: { 
-        name: "Sodio Acetato", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 667, potassium: 0, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99 
-    }, 
-    kcl: { 
-        name: "Potassio Cloruro", 
-        calcium: 0, phosphorus: 0, magnesium: 0, sodium: 0, potassium: 1000, 
-        protein: 0, carbs: 0, lipids: 0, energy: 0, water: 99 
-    } 
-}; 
- 
-// Database medici 
-const doctorsData = { 
-    dr_bellu: { name: "Roberto", surname: "Bellù", title: "Dr.", fullName: "Dr. Roberto Bellù" }, 
-    dr_condo: { name: "Manuela", surname: "Condò", title: "Dr.ssa", fullName: "Dr.ssa Manuela Condò" }, 
-    dr_maccioni: { name: "Carla", surname: "Maccioni", title: "Dr.ssa", fullName: "Dr.ssa Carla Maccioni" }, 
-    dr_meroni: { name: "Federica", surname: "Meroni", title: "Dr.ssa", fullName: "Dr.ssa Federica Meroni" }, 
-    dr_calzatini: { name: "Francesco", surname: "Calzatini", title: "Dr.", fullName: "Dr. Francesco Calzatini" }, 
-    dr_ferrari: { name: "Elisabetta", surname: "Ferrari", title: "Dr.ssa", fullName: "Dr.ssa Elisabetta Ferrari" } 
-}; 
- 
-// VARIABILI GLOBALI 
-let patientData = {}; 
-let enteralData = null; 
-window.currentActiveReport = null; 
- 
-// INIZIALIZZAZIONE 
-document.addEventListener('DOMContentLoaded', function() { 
-    // Imposta data odierna 
-    const today = new Date().toISOString().split('T')[0]; 
-    document.getElementById('prescriptionDate').value = today; 
-}); 
- 
-// FUNZIONE TAB 
-function showTab(tabId) { 
-    // Rimuovi classe active da tutti i contenuti 
-    document.querySelectorAll('.tab-content').forEach(content => { 
-        content.classList.remove('active'); 
     });     });
          
-    // Rimuovi classe active da tutte le tab +    const button = document.getElementById('updateParenteralBtn')
-    document.querySelectorAll('.tab').forEach(tab => +    if (button) 
-        tab.classList.remove('active')+        button.className = 'button config-update-completed'; 
-    }); +        button.innerHTML = 'PARENTERALI SALVATE ✓ (' + changesCount + ' modifiche)'
-     +        setTimeout(() => 
-    // Mostra il contenuto selezionato +            button.className = 'button'; 
-    const targetContent = document.getElementById(tabId); +            button.innerHTML = 'Aggiorna Componenti Parenterali'
-    if (targetContent) { +        }, 3000);
-        targetContent.classList.add('active');+
     }     }
-     
-    // Attiva la tab cliccata 
-    event.target.closest('.tab').classList.add('active'); 
 } }
  
-// FUNZIONE CALCOLO FASE +function updateFortifierConfig() {  
-function calculatePhase() { +    // Aggiorna Prenidina FM85 predefinita 
-    const medicalRecord = document.getElementById('medicalRecord').value+    const proteinEl = document.getElementById('fortifier_prenidina_fm85_protein'); 
-    const birthWeight = parseInt(document.getElementById('birthWeight').value); +    if (proteinEl) { 
-    const currentWeight parseInt(document.getElementById('currentWeight').value); +        fortifierData.prenidina_fm85.protein = parseFloat(proteinEl.value); 
-    const daysOfLife parseInt(document.getElementById('daysOfLife').value); +        fortifierData.prenidina_fm85.carbs parseFloat(document.getElementById('fortifier_prenidina_fm85_carbs').value); 
-    const bun = document.getElementById('bun').value; +        fortifierData.prenidina_fm85.lipids parseFloat(document.getElementById('fortifier_prenidina_fm85_lipids').value); 
-    const glucose = document.getElementById('glucose').value; +        fortifierData.prenidina_fm85.sodium parseFloat(document.getElementById('fortifier_prenidina_fm85_sodium').value)
-    const sodium = document.getElementById('sodium').value; +        fortifierData.prenidina_fm85.potassium parseFloat(document.getElementById('fortifier_prenidina_fm85_potassium').value)
-    const ph = document.getElementById('ph').value; +        fortifierData.prenidina_fm85.calcium parseFloat(document.getElementById('fortifier_prenidina_fm85_calcium').value)
-    const baseExcess = document.getElementById('baseExcess').value; +        fortifierData.prenidina_fm85.phosphorus parseFloat(document.getElementById('fortifier_prenidina_fm85_phosphorus').value)
-    const diuresis = document.getElementById('diuresis').value; +        fortifierData.prenidina_fm85.magnesium parseFloat(document.getElementById('fortifier_prenidina_fm85_magnesium').value)
-    const prescriptionDate = document.getElementById('prescriptionDate').value; +        fortifierData.prenidina_fm85.energy parseFloat(document.getElementById('fortifier_prenidina_fm85_energy').value);
-    const prescribingDoctor = document.getElementById('prescribingDoctor').value; +
-     +
-    patientData +
-        medicalRecord: medicalRecord, +
-        birthWeight: birthWeight,  +
-        currentWeight: currentWeight,  +
-        daysOfLife: daysOfLife, +
-        bun: bun, +
-        glucose: glucose, +
-        sodium: sodium, +
-        ph: ph, +
-        baseExcess: baseExcess, +
-        diuresis: diuresis, +
-        prescriptionDate: prescriptionDate, +
-        prescribingDoctor: prescribingDoctor +
-    }; +
-     +
-    document.getElementById('targetDay').value = daysOfLife; +
-     +
-    let phase = daysOfLife <= 5 ? 'Transizione' : daysOfLife <= 14 ? 'Stabilizzazione' : 'Crescita'; +
-    let bunStatus = ''; +
-    let bunWarning = ''; +
-     +
-    // Analisi BUN +
-    if (bun && bun !== ''+
-        const bunValue = parseFloat(bun); +
-        if (bunValue < 9) { +
-            bunStatus = 'Basso - Aumentare proteine'; +
-            bunWarning = 'BUN basso: considerare aumento proteine'; +
-        } else if (bunValue > 14) { +
-            bunStatus = 'Elevato - Ridurre proteine'; +
-            bunWarning = 'BUN elevato: ridurre proteine'; +
-        } else { +
-            bunStatus = 'Normale (9-14 mg/dL)'; +
-        } +
-    } else { +
-        bunStatus = 'Non inserito';+
     }     }
          
-    let phaseInfoHtml '<div class="phase-indicator phase-' + phase.toLowerCase() + '">' + phase + '</div>'; +    const button document.getElementById('updateFortifierBtn')
-    phaseInfoHtml += '<div class="form-row" style="margin-top: 15px;">'; +    if (button) { 
-    phaseInfoHtml += '<div class="form-col">'; +        button.className = 'button config-update-completed'; 
-    phaseInfoHtml +'<h4>Dati Paziente</h4>'; +        button.innerHTML = 'FORTIFICANTI SALVATE ✓'; 
-    if (medicalRecord) +        setTimeout(() => { 
-        phaseInfoHtml += '<p><strong>Cartella:</strong> + medicalRecord + '</p>';+            button.className = 'button'
 +            button.innerHTML = 'Aggiorna Fortificanti'
 +        }, 3000);
     }     }
-    phaseInfoHtml += '<p><strong>Peso:</strong> ' + currentWeight + 'g (nascita: ' + birthWeight + 'g)</p>'; 
-    phaseInfoHtml += '<p><strong>Giorni di vita:</strong> ' + daysOfLife + '</p>'; 
-    phaseInfoHtml += '<p><strong>Fase nutrizionale:</strong> ' + phase + '</p>'; 
-    phaseInfoHtml += '</div>'; 
-    phaseInfoHtml += '<div class="form-col">'; 
-    phaseInfoHtml += '<h4>Esami Ematochimici</h4>'; 
-    if (patientData.bun) { 
-        phaseInfoHtml += '<p><strong>BUN:</strong> ' + patientData.bun + ' mg/dL (' + bunStatus + ')</p>'; 
-    } 
-    phaseInfoHtml += '</div>'; 
-    phaseInfoHtml += '</div>'; 
-     
-    if (bunWarning) { 
-        phaseInfoHtml += '<div class="info"><strong>Nota BUN:</strong> ' + bunWarning + '</div>'; 
-    } 
-     
-    phaseInfoHtml += '<div class="info"><strong>Prossimo passo:</strong> Vai al TAB 2 per la nutrizione enterale</div>'; 
-     
-    document.getElementById('phaseInfo').innerHTML = phaseInfoHtml; 
-    document.getElementById('phaseResults').classList.remove('hidden'); 
-     
-    document.getElementById('calculatePhaseBtn').className = 'button config-update-completed'; 
-    document.getElementById('calculatePhaseBtn').innerHTML = 'FASE CALCOLATA ✓'; 
-     
-    updateSodiumRecommendation(); 
 } }
  
-function updateSodiumRecommendation() { +function updateDoctorsConfig() { 
-    // Implementazione vuota per ora +    let changesCount 0;
-+
- +
-// FUNZIONE FORTIFICANTE +
-function updateFortifierOptions() { +
-    const formulaType document.getElementById('formulaType').value; +
-    const fortifierSection = document.getElementById('fortifierSection');+
          
-    if (formulaType === 'maternal') { +    Object.keys(doctorsData).forEach(key =
-        fortifierSection.classList.remove('hidden')+        const oldValues Object.assign({}doctorsData[key]);
-    } else { +
-        fortifierSection.classList.add('hidden'); +
-    } +
-+
- +
-function updateConcentrationDisplay() { +
-    const concentration document.getElementById('fortifierConcentration').value; +
-    document.getElementById('concentrationValue').textContent = concentration + '%'; +
-+
- +
-// FUNZIONE CALCOLO ENTERALE +
-function calculateEnteral() { +
-    if (!patientData.birthWeight) +
-        alert('Prima inserire i dati del paziente nel TAB 1'); +
-        return; +
-    } +
-     +
-    const formulaType document.getElementById('formulaType').value; +
-    const dailyVolume = parseFloat(document.getElementById('dailyVolume').value); +
-    const additionalFluids = parseFloat(document.getElementById('additionalFluids').value) || 0; +
-     +
-    const currentWeight = patientData.currentWeight; +
-    const totalFluids = dailyVolume + additionalFluids; +
-    const totalFluidsPerKg = (totalFluids / currentWeight) * 1000; +
-     +
-    if (formulaType === 'none' || dailyVolume === 0) { +
-        enteralData = {  +
-            volume: dailyVolume +
-            additionalFluids: additionalFluids, +
-            totalFluids: totalFluids, +
-            protein: 0, carbs: 0, lipids: 0, energy: 0, +
-            sodium: 0, potassium: 0, calcium: 0, phosphorus: 0, magnesium: 0 +
-        };+
                  
-        let tableHtml = '<div class="info">'; +        const nameEl document.getElementById('doctor_+ key + '_name')
-        if (additionalFluids > 0) { +        if (nameEl) { 
-            tableHtml += '<strong>⚠️ Solo liquidi aggiuntivi:</strong> ' + additionalFluids + ' ml (+ ((additionalFluids/currentWeight)*1000).toFixed(1) + ' ml/kg/die)<br>'; +            const newName nameEl.value.trim(); 
-            tableHtml +'<strong>Nessun apporto nutrizionale dal latte</strong>'+            const newSurname = document.getElementById('doctor_' + key + '_surname').value.trim()
-        } else { +            const newTitle = document.getElementById('doctor_' + key + '_title').value
-            tableHtml += 'Nessun apporto enterale';+             
 +            doctorsData[key].name newName
 +            doctorsData[key].surname = newSurname; 
 +            doctorsData[key].title newTitle; 
 +            doctorsData[key].fullName = newTitle + ' ' + newName + ' ' + newSurname; 
 +             
 +            if (JSON.stringify(oldValues) !== JSON.stringify(doctorsData[key])) { 
 +                changesCount++; 
 +            }
         }         }
-        tableHtml += '</div>'; +    });
-         +
-        document.getElementById('enteralTable').innerHTML = tableHtml; +
-    else { +
-        const formula = formulaData[formulaType]; +
-        const volumePerKg = (dailyVolume / currentWeight* 1000; +
-         +
-        enteralData = { +
-            volume: dailyVolume, +
-            additionalFluids: additionalFluids, +
-            totalFluids: totalFluids, +
-            protein: (dailyVolume * formula.protein / 100) / (currentWeight / 1000), +
-            carbs: (dailyVolume * formula.carbs / 100) / (currentWeight / 1000), +
-            lipids: (dailyVolume * formula.lipids / 100) / (currentWeight / 1000), +
-            energy: (dailyVolume * formula.energy / 100) / (currentWeight / 1000), +
-            sodium: (dailyVolume * formula.sodium / 100) / (currentWeight / 1000), +
-            potassium: (dailyVolume * formula.potassium / 100) / (currentWeight / 1000), +
-            calcium: (dailyVolume * formula.calcium / 100) / (currentWeight / 1000), +
-            phosphorus: (dailyVolume * formula.phosphorus / 100) / (currentWeight / 1000), +
-            magnesium: (dailyVolume * formula.magnesium / 100) / (currentWeight / 1000) +
-        }; +
-         +
-        let tableHtml = '<div class="info">'; +
-        tableHtml += '<strong>Formula:</strong> ' + formula.name + '<br>'; +
-        tableHtml += '<strong>Volume latte:</strong> ' + dailyVolume + ' ml (' + volumePerKg.toFixed(1) + ' ml/kg/die)<br>'; +
-        if (additionalFluids > 0) { +
-            tableHtml += '<strong>Altri liquidi:</strong> ' + additionalFluids + ' ml<br>'; +
-            tableHtml += '<strong>💧 TOTALE LIQUIDI:</strong> ' + totalFluids + ' ml (' + totalFluidsPerKg.toFixed(1) + ' ml/kg/die)'; +
-        } else { +
-            tableHtml += '<strong>Liquidi totali:</strong> ' + totalFluids + ' ml (' + totalFluidsPerKg.toFixed(1) + ' ml/kg/die)'; +
-        } +
-        tableHtml += '</div>'; +
-         +
-        tableHtml += '<table class="results-table">'; +
-        tableHtml += '<tr><th>Nutriente</th><th>Per 100ml</th><th>Per kg/die</th><th>Unita</th></tr>'; +
-        tableHtml += '<tr><td>Proteine</td><td>' + formula.protein.toFixed(1) + '</td><td>' + enteralData.protein.toFixed(1) + '</td><td>g</td></tr>'; +
-        tableHtml += '<tr><td>Carboidrati</td><td>' + formula.carbs.toFixed(1) + '</td><td>' + enteralData.carbs.toFixed(1) + '</td><td>g</td></tr>'; +
-        tableHtml += '<tr><td>Lipidi</td><td>' + formula.lipids.toFixed(1) + '</td><td>' + enteralData.lipids.toFixed(1) + '</td><td>g</td></tr>'; +
-        tableHtml += '<tr class="energy-highlight"><td><strong>Energia</strong></td><td><strong>' + formula.energy.toFixed(0) + '</strong></td><td><strong>' + enteralData.energy.toFixed(0) + '</strong></td><td><strong>kcal</strong></td></tr>'; +
-        tableHtml += '</table>'; +
-         +
-        document.getElementById('enteralTable').innerHTML = tableHtml; +
-    }+
          
-    document.getElementById('enteralResults').classList.remove('hidden');+    updateDoctorsDropdown()
 +    populateDoctorsConfigTable();
          
-    const enteralBtn = document.getElementById('calculateEnteralBtn'); +    const button = document.getElementById('updateDoctorsBtn'); 
-    if (enteralBtn) { +    if (button) { 
-        enteralBtn.className = 'button config-update-completed'; +        button.className = 'button config-update-completed'; 
-        enteralBtn.innerHTML = 'Apporti Enterali Calcolati ✓';+        button.innerHTML = 'MEDICI SALVATI ✓ (+ changesCount + ' modifiche)'; 
 +        setTimeout(() => { 
 +            button.className = 'button'; 
 +            button.innerHTML = 'Aggiorna Lista Medici'; 
 +        }, 3000);
     }     }
 } }
  
-// FUNZIONE CARICAMENTO VALORI DEFAULT +function updateSystemConfig() { 
-function loadNutritionDefaults() { +    const button = document.getElementById('updateSystemBtn'); 
-    if (!patientData.birthWeight) { +    if (button) { 
-        alert('Prima inserire i dati del paziente nel TAB 1'); +        button.className = 'button config-update-completed'
-        return;+        button.innerHTML = 'PARAMETRI SALVATI ✓'; 
 +        setTimeout((=> { 
 +            button.className = 'button'; 
 +            button.innerHTML = 'Aggiorna Parametri Sistema'
 +        }, 3000);
     }     }
          
-    const targetDay = parseInt(document.getElementById('targetDay').value); +    resetParenteralButton();
-    const birthWeight = patientData.birthWeight; +
-     +
-    const weightCategorySelect = document.getElementById('weightCategory'); +
-    let selectedCategory = weightCategorySelect.value || (birthWeight <= 1500 ? '≤1500g' : '>1500g'); +
-    weightCategorySelect.value = selectedCategory; +
-     +
-    let plan = {}; +
-    if (selectedCategory === '≤1500g') { +
-        plan = targetDay <= 3 ? {liquids: 100, protein: 3.5, carbs: 8.0, lipids: 1.0} :  +
-                               {liquids: 140, protein: 4.0, carbs: 10.0, lipids: 2.0}; +
-    } else { +
-        plan = targetDay <= 3 ? {liquids: 120, protein: 3.0, carbs: 8.0, lipids: 2.0} :  +
-                               {liquids: 150, protein: 3.5, carbs: 12.0, lipids: 3.0}; +
-    } +
-     +
-    // Aggiustamento BUN +
-    if (patientData.bun && patientData.bun !== '') { +
-        const bunValue = parseFloat(patientData.bun); +
-        if (bunValue < 9) { +
-            plan.protein = Math.min(6.0, plan.protein + 1.0); +
-        } else if (bunValue > 14) { +
-            plan.protein = Math.max(2.0, plan.protein - 1.0); +
-        } +
-    } +
-     +
-    document.getElementById('reqLiquids').value = plan.liquids; +
-    document.getElementById('reqProtein').value = plan.protein; +
-    document.getElementById('reqCarbs').value = plan.carbs; +
-    document.getElementById('reqLipids').value = plan.lipids; +
-    document.getElementById('reqCalcium').value = targetDay > 3 ? 160 : 0; +
-    document.getElementById('reqPhosphorus').value = targetDay > 3 ? 84 : 0; +
-    document.getElementById('reqMagnesium').value = targetDay > 3 ? 0.6 : 0; +
-    document.getElementById('reqSodium').value = targetDay > 2 ? 2.0 : 0; +
-    document.getElementById('reqPotassium').value = targetDay > 2 ? 1.5 : 0; +
-     +
-    // Vitamine/oligoelementi +
-    const currentWeight = patientData.currentWeight; +
-    const enteralVolumePerKg = enteralData ? (enteralData.totalFluids / currentWeight * 1000) : 0; +
-     +
-    if (targetDay >= 3 && enteralVolumePerKg < 100) { +
-        document.getElementById('reqVitalipid').value = 4.0; +
-        document.getElementById('reqSoluvit').value = 1.0; +
-        document.getElementById('reqPeditrace').value = 1.0; +
-    } else { +
-        document.getElementById('reqVitalipid').value = 0; +
-        document.getElementById('reqSoluvit').value = 0; +
-        document.getElementById('reqPeditrace').value = 0; +
-    } +
-     +
-    document.getElementById('reqCarnitine').value = 0; +
-     +
-    const loadBtn = document.getElementById('loadDefaultsBtn'); +
-    if (loadBtn) { +
-        loadBtn.className = 'button load-defaults-completed'; +
-        loadBtn.innerHTML = 'Valori Standard Caricati ✓'; +
-    }+
 } }
  
-function updateCarbUnit() { +// FUNZIONI CONFIGURAZIONE CLINICA AVANZATA (NUOVE) 
-    const unit = document.getElementById('carbUnit').value; +function updateClinicalConfig() { 
-    const carbLabel = document.getElementById('carbLabel'); +    clinicalConfig.calciumReq parseFloat(document.getElementById('calciumReq').value)
-    const carbInput = document.getElementById('reqCarbs');+    clinicalConfig.phosphorusReq parseFloat(document.getElementById('phosphorusReq').value); 
 +    clinicalConfig.magnesiumReq parseFloat(document.getElementById('magnesiumReq').value); 
 +    clinicalConfig.maxGIR = parseFloat(document.getElementById('maxGIR').value); 
 +    clinicalConfig.maxLipids = parseFloat(document.getElementById('maxLipids').value); 
 +    clinicalConfig.maxProtein = parseFloat(document.getElementById('maxProtein').value);
          
-    if (unit === 'mg') { +    alert('Parametri clinici aggiornati:\n+ 
-        carbLabel.textContent = 'Glucidi (mg/kg/min):'; +          '• Calcio standard: ' + clinicalConfig.calciumReq + ' mg/kg/die\n+ 
-        carbInput.setAttribute('max''15'); +          '• Fosforo standard: + clinicalConfig.phosphorusReq + mg/kg/die\n+ 
-        carbInput.setAttribute('step', '0.1'); +          '• GIR massimo: + clinicalConfig.maxGIR + mg/kg/min\n+ 
-    } else { +          '• Lipidi massimi: + clinicalConfig.maxLipids + g/kg/die');
-        carbLabel.textContent = 'Glucidi (g/kg/die):'; +
-        carbInput.setAttribute('max', '20'); +
-        carbInput.setAttribute('step', '0.1'); +
-    }+
 } }
  
-function updateWeightCategory() { +function resetConfiguration() { 
-    // Placeholder +    // Reset configurazione clinica 
-+    document.getElementById('calciumReq').value = 160; 
- +    document.getElementById('phosphorusReq').value = 84; 
-function updateSodiumChoice() { +    document.getElementById('magnesiumReq').value = 0.6; 
-    // Placeholder +    document.getElementById('maxGIR').value = 12.0
-+    document.getElementById('maxLipids').value = 3.0
- +    document.getElementById('maxProtein').value = 4.5;
-// FUNZIONE CALCOLO FABBISOGNI +
-function calculateNutrition() { +
-    if (!patientData.birthWeight{ +
-        alert('Prima inserire i dati del paziente nel TAB 1'); +
-        return+
-    }+
          
-    const requirements = { +    // Reset configurazione sistema 
-        liquids: parseFloat(document.getElementById('reqLiquids').value), +    document.getElementById('deflectorVolume').value = 30; 
-        protein: parseFloat(document.getElementById('reqProtein').value), +    document.getElementById('hospitalName').value = "ASST LECCO"; 
-        carbs: parseFloat(document.getElementById('reqCarbs').value), +    document.getElementById('departmentName').value = "S.CNeonatologia e TIN"; 
-        carbUnit: document.getElementById('carbUnit').value, +    document.getElementById('directorName').value = "DottRoberto Bellù";
-        lipids: parseFloat(document.getElementById('reqLipids').value), +
-        calcium: parseFloat(document.getElementById('reqCalcium').value), +
-        phosphorus: parseFloat(document.getElementById('reqPhosphorus').value), +
-        magnesium: parseFloat(document.getElementById('reqMagnesium').value), +
-        sodium: parseFloat(document.getElementById('reqSodium').value), +
-        potassium: parseFloat(document.getElementById('reqPotassium').value), +
-        vitalipid: parseFloat(document.getElementById('reqVitalipid').value) || 0, +
-        soluvit: parseFloat(document.getElementById('reqSoluvit').value) || 0, +
-        peditrace: parseFloat(document.getElementById('reqPeditrace').value) || 0, +
-        carnitine: parseFloat(document.getElementById('reqCarnitine').value) || 0 +
-    };+
          
-    // Converti carboidrati sempre in g/kg/die per i calcoli +    // Reset configurazione clinica globale 
-    const carbsGPerKgDay requirements.carbUnit === 'mg' +    clinicalConfig { 
-        (requirements.carbs * 1440 / 1000) requirements.carbs; +        calciumReq160, 
-     +        phosphorusReq84, 
-    const currentWeight = patientData.currentWeight; +        magnesiumReq: 0.6
-     +        maxGIR12.0, 
-    const enteralProtein = enteralData ? enteralData.protein 0; +        maxLipids3.0, 
-    const enteralCarbs = enteralData ? enteralData.carbs : 0+        maxProtein4.5
-    const enteralLipids = enteralData ? enteralData.lipids : 0; +        hospitalName"ASST LECCO"
-    const enteralEnergy = enteralData ? enteralData.energy : 0; +        departmentName"S.CNeonatologia e TIN"
-     +        directorName"DottRoberto Bellù"
-    const residualProtein = Math.max(0requirements.protein - enteralProtein); +
-    const residualCarbs = Math.max(0, carbsGPerKgDay - enteralCarbs); +
-    const residualLipids = Math.max(0, requirements.lipids - enteralLipids); +
-    const totalEnergyRequirement = (requirements.protein * 4) + (carbsGPerKgDay * 4) + (requirements.lipids * 9); +
-    const residualEnergy = Math.max(0, totalEnergyRequirement - enteralEnergy); +
-     +
-    // Calcoli micronutrienti enterali +
-    const enteralCalcium = enteralData ? enteralData.calcium 0; +
-    const enteralPhosphorus = enteralData ? enteralData.phosphorus : 0; +
-    const enteralMagnesium = enteralData ? enteralData.magnesium : 0; +
-    const enteralSodium = enteralData ? enteralData.sodium : 0; +
-    const enteralPotassium = enteralData ? enteralData.potassium : 0; +
-     +
-    // Calcoli residui micronutrienti +
-    const residualCalcium = Math.max(0, requirements.calcium - enteralCalcium); +
-    const residualPhosphorus = Math.max(0, requirements.phosphorus - enteralPhosphorus); +
-    const residualMagnesium = Math.max(0, requirements.magnesium - enteralMagnesium); +
-    const residualSodium = Math.max(0, requirements.sodium - enteralSodium); +
-    const residualPotassium = Math.max(0, requirements.potassium - enteralPotassium); +
-     +
-    window.residualNeeds = { +
-        liquidsrequirements.liquids - (enteralData ? enteralData.totalFluids/patientData.currentWeight*1000 : 0)+
-        proteinresidualProtein+
-        carbsresidualCarbs+
-        lipidsresidualLipids, +
-        calcium: residualCalcium, +
-        phosphorus: residualPhosphorus, +
-        magnesium: residualMagnesium, +
-        sodium: residualSodium, +
-        potassium: residualPotassium, +
-        vitalipid: requirements.vitalipid, +
-        soluvit: requirements.soluvit+
-        peditracerequirements.peditrace, +
-        carnitine: requirements.carnitine, +
-        energy: residualEnergy, +
-        totalEnergyRequirement: totalEnergyRequirement+
     };     };
          
-    // Calcola mg/kg/min per la tabella +    alert('Configurazione ripristinata ai valori predefiniti');
-    const carbsMgPerKgMin = (carbsGPerKgDay * 1000) / 1440; +
-    const enteralCarbsMgPerKgMin = (enteralCarbs * 1000) / 1440; +
-    const residualCarbsMgPerKgMin = (residualCarbs * 1000) / 1440; +
-     +
-    let tableHtml = '<table class="nutrition-table">'+
-    tableHtml += '<tr><th>Componente</th><th>Fabbisogno</th><th>Da Enterale</th><th>Da NPT</th><th>Unità</th></tr>'; +
-    tableHtml += '<tr><td><strong>Liquidi</strong></td><td><strong>' + requirements.liquids + '</strong></td><td><strong>' + (enteralData ? (enteralData.totalFluids/patientData.currentWeight*1000).toFixed(1) : '0') + '</strong></td><td class="highlight"><strong>' + Math.max(0, requirements.liquids - (enteralData ? enteralData.totalFluids/patientData.currentWeight*1000 : 0)).toFixed(1) + '</strong></td><td><strong>ml/kg/die</strong></td></tr>'; +
-    tableHtml += '<tr><td>Proteine</td><td>' + requirements.protein + '</td><td>' + enteralProtein.toFixed(1) + '</td><td class="highlight">' + residualProtein.toFixed(1) + '</td><td>g/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Glucidi (g/kg/die)</td><td>' + carbsGPerKgDay.toFixed(1) + '</td><td>' + enteralCarbs.toFixed(1) + '</td><td class="highlight">' + residualCarbs.toFixed(1) + '</td><td>g/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Glucidi (mg/kg/min)</td><td>' + carbsMgPerKgMin.toFixed(1) + '</td><td>' + enteralCarbsMgPerKgMin.toFixed(1) + '</td><td class="highlight">' + residualCarbsMgPerKgMin.toFixed(1) + '</td><td>mg/kg/min</td></tr>'; +
-    tableHtml += '<tr><td>Lipidi</td><td>' + requirements.lipids + '</td><td>' + enteralLipids.toFixed(1) + '</td><td class="highlight">' + residualLipids.toFixed(1) + '</td><td>g/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Calcio elementare</td><td>' + requirements.calcium + '</td><td>' + enteralCalcium.toFixed(1) + '</td><td class="highlight">' + residualCalcium.toFixed(1) + '</td><td>mg/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Fosforo</td><td>' + requirements.phosphorus + '</td><td>' + enteralPhosphorus.toFixed(1) + '</td><td class="highlight">' + residualPhosphorus.toFixed(1) + '</td><td>mg/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Magnesio</td><td>' + requirements.magnesium + '</td><td>' + enteralMagnesium.toFixed(2) + '</td><td class="highlight">' + residualMagnesium.toFixed(2) + '</td><td>mEq/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Sodio</td><td>' + requirements.sodium + '</td><td>' + enteralSodium.toFixed(2) + '</td><td class="highlight">' + residualSodium.toFixed(2) + '</td><td>mEq/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Potassio</td><td>' + requirements.potassium + '</td><td>' + enteralPotassium.toFixed(2) + '</td><td class="highlight">' + residualPotassium.toFixed(2) + '</td><td>mEq/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Vitalipid</td><td>' + requirements.vitalipid + '</td><td>0</td><td class="highlight">' + requirements.vitalipid + '</td><td>ml/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Soluvit</td><td>' + requirements.soluvit + '</td><td>0</td><td class="highlight">' + requirements.soluvit + '</td><td>ml/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Peditrace</td><td>' + requirements.peditrace + '</td><td>0</td><td class="highlight">' + requirements.peditrace + '</td><td>ml/kg/die</td></tr>'; +
-    tableHtml += '<tr><td>Carnitina</td><td>' + requirements.carnitine + '</td><td>0</td><td class="highlight">' + requirements.carnitine + '</td><td>mg/kg/die</td></tr>'; +
-    tableHtml += '<tr class="day-column"><td><strong>ENERGIA TOTALE</strong></td><td><strong>' + totalEnergyRequirement.toFixed(0) + '</strong></td><td><strong>' + enteralEnergy.toFixed(0) + '</strong></td><td class="energy-highlight">' + residualEnergy.toFixed(0) + '</td><td><strong>kcal/kg/die</strong></td></tr>'; +
-    tableHtml += '</table>'; +
-     +
-    document.getElementById('nutritionTable').innerHTML = tableHtml; +
-    document.getElementById('nutritionResults').classList.remove('hidden'); +
-    document.getElementById('calculateNutritionBtn').className = 'button calculate-nutrition-completed'; +
-    document.getElementById('calculateNutritionBtn').innerHTML = 'FABBISOGNI CALCOLATI ✓';+
 } }
  
-// FUNZIONE CALCOLO ELETTROLITI AGGIUNTIVI +function saveConfiguration() { 
-function calculateElectrolyteAdditions(calciumNeeded, phosphorusNeeded, magnesiumNeeded, sodiumNeeded, potassiumNeeded, currentWeightKg) { +    const config = { 
-    const additions = { +        deflectorVolumedocument.getElementById('deflectorVolume').value
-        ca_gluconato0+        hospitalNamedocument.getElementById('hospitalName').value
-        esafosfina0+        departmentNamedocument.getElementById('departmentName').value
-        mg_sulfate0+        directorNamedocument.getElementById('directorName').value
-        nacl0+        autoSavedocument.getElementById('autoSave').value
-        sodium_acetate0+        decimalPlacesdocument.getElementById('decimalPlaces').value
-        kcl0+        clinicalConfigclinicalConfig
-        totalVolume0, +
-        providedCalcium: 0, +
-        providedPhosphorus: 0, +
-        providedMagnesium: 0, +
-        providedSodium: 0, +
-        providedPotassium: 0, +
-        sodiumSource: 'nacl'+
     };     };
          
-    const sodiumTypeSelect document.getElementById('sodiumType')+    // Aggiorna configurazione clinica 
-    const selectedSodiumType sodiumTypeSelect ? sodiumTypeSelect.value : 'nacl'+    clinicalConfig.hospitalName config.hospitalName
-    additions.sodiumSource selectedSodiumType;+    clinicalConfig.departmentName config.departmentName
 +    clinicalConfig.directorName config.directorName;
          
-    const totalCalciumNeeded = calciumNeeded * currentWeightKg; +    // Simula salvataggio configurazione 
-    const totalPhosphorusNeeded = phosphorusNeeded * currentWeightKg; +    window.savedConfig config
-    const totalMagnesiumNeeded = magnesiumNeeded * currentWeightKg; +    alert('Configurazione salvata con successo!');
-    const totalSodiumNeeded = sodiumNeeded * currentWeightKg; +
-    const totalPotassiumNeeded = potassiumNeeded * currentWeightKg; +
-     +
-    // Calcio Gluconato 10% (840 mg Ca/100ml) +
-    if (totalCalciumNeeded > 0) { +
-        additions.ca_gluconato totalCalciumNeeded / (parenteralConfig.ca_gluconato.calcium / 100); +
-        additions.providedCalcium = totalCalciumNeeded+
-    +
-     +
-    // Esafosfina (1600 mg P/100ml + 130 mEq Na/100ml) +
-    if (totalPhosphorusNeeded > 0) { +
-        additions.esafosfina = totalPhosphorusNeeded / (parenteralConfig.esafosfina.phosphorus / 100); +
-        additions.providedPhosphorus = totalPhosphorusNeeded; +
-        additions.providedSodium += (additions.esafosfina * parenteralConfig.esafosfina.sodium / 100); +
-    } +
-     +
-    // Magnesio Solfato (800 mEq Mg/100ml) +
-    if (totalMagnesiumNeeded > 0) { +
-        additions.mg_sulfate = totalMagnesiumNeeded / (parenteralConfig.mg_sulfate.magnesium / 100); +
-        additions.providedMagnesium = totalMagnesiumNeeded; +
-    } +
-     +
-    // Sodio rimanente +
-    const remainingSodium = Math.max(0, totalSodiumNeeded - additions.providedSodium); +
-     +
-    if (remainingSodium > 0) { +
-        if (selectedSodiumType === 'sodium_acetate'+
-            const concentrationSodiumAcetate = parenteralConfig.sodium_acetate.sodium / 100; +
-            additions.sodium_acetate = remainingSodium / concentrationSodiumAcetate; +
-        } else { +
-            const concentrationNaCl = parenteralConfig.nacl.sodium / 100; +
-            additions.nacl = remainingSodium / concentrationNaCl; +
-        } +
-        additions.providedSodium += remainingSodium; +
-    } +
-     +
-    // Potassio Cloruro (1000 mEq K/100ml) +
-    if (totalPotassiumNeeded > 0) { +
-        additions.kcl = totalPotassiumNeeded / (parenteralConfig.kcl.potassium / 100); +
-        additions.providedPotassium = totalPotassiumNeeded; +
-    } +
-     +
-    additions.totalVolume = additions.ca_gluconato + additions.esafosfina + additions.mg_sulfate + additions.nacl + additions.sodium_acetate + additions.kcl; +
-     +
-    return additions;+
 } }
  
-// FUNZIONE CALCOLO NPT PARENTERALE +// FUNZIONI REPORT (COMPLETE CON TUTTI GLI ELEMENTI) 
-function calculateParenteral() { +function generatePrescription() { 
-    if (!window.residualNeeds) { +    if (!window.residualNeeds || !patientData.currentWeight) { 
-        alert('Prima calcolare fabbisogni nel TAB 3');+        alert('Prima completare tutti calcoli precedenti');
         return;         return;
     }     }
          
-    const currentWeight patientData.currentWeight+    const currentDate new Date().toLocaleDateString('it-IT')
-    const currentWeightKg = currentWeight / 1000; +    const currentTime new Date().toLocaleTimeString('it-IT'); 
-    const residualNeeds = window.residualNeeds;+    const prescriptionPatientWeightKg = patientData.currentWeight / 1000; 
 +    const calc = window.nptCalculation;
          
-    const totalVolume = Math.round(residualNeeds.liquids * currentWeightKg); +    if (!calc) { 
-     +        alert('Prima calcolare la NPT nel TAB 4');
-    const electrolyteAdditions = calculateElectrolyteAdditions( +
-        residualNeeds.calcium, +
-        residualNeeds.phosphorus, +
-        residualNeeds.magnesium, +
-        residualNeeds.sodium, +
-        residualNeeds.potassium, +
-        currentWeightKg +
-    ); +
-     +
-    const proteinVolume = Math.round((residualNeeds.protein * currentWeightKg * 100) / 6); +
-    const lipidVolume = Math.round((residualNeeds.lipids * currentWeightKg * 100) / 20); +
-     +
-    const vitaminsVolume = (residualNeeds.vitalipid * currentWeightKg) + (residualNeeds.soluvit * currentWeightKg) + (residualNeeds.peditrace * currentWeightKg); +
-    const carnitineVolume = residualNeeds.carnitine > 0 ? (residualNeeds.carnitine * currentWeightKg) / 100 : 0; +
-     +
-    const neededGlucose = residualNeeds.carbs * currentWeightKg; +
-    const glucose50Volume = (neededGlucose * 100) / 50; +
-     +
-    const usedVolume = proteinVolume + lipidVolume + vitaminsVolume + carnitineVolume + glucose50Volume + electrolyteAdditions.totalVolume; +
-    const waterVolume = totalVolume - usedVolume; +
-     +
-    let glucoseMessage = ''; +
-     +
-    if (waterVolume < 0) { +
-        glucoseMessage = '<div class="warning"><strong>ERRORE CALCOLO:</strong><br>'+
-                        '• Volume totale richiesto: ' + totalVolume + ' ml<br>'+
-                        '• Volume utilizzato: ' + usedVolume.toFixed(1) + ml<br>'+
-                        '• Acqua rimanente: ' + waterVolume.toFixed(1) + ' ml (NEGATIVO!)<br><br>'+
-                        '<strong>SOLUZIONE:</strong> Aumentare il volume totale NPT.</div>'; +
-         +
-        document.getElementById('calculatedTotalVolume').value = totalVolume + ' ml (ERRORE)'; +
-        document.getElementById('suggestedGlucose').value = 'Errore - Volume insufficiente'; +
-        document.getElementById('calculatedProteinVol').value = proteinVolume + ' ml'; +
-        document.getElementById('calculatedLipidVol').value = lipidVolume + ' ml'; +
-         +
-        document.getElementById('parenteralTable').innerHTML = glucoseMessage; +
-        document.getElementById('parenteralResults').classList.remove('hidden');+
         return;         return;
     }     }
          
-    if (neededGlucose <0) { +    const birthDate new Date(); 
-        glucoseMessage = '<div class="info"><strong>GLUCOSIO DA ENTERALE:</strong><br>'+    birthDate.setDate(birthDate.getDate() - patientData.daysOfLife);
-                        '• Tutto il glucosio necessario proviene dall\'alimentazione enterale<br>'+
-                        '• Non necessario glucosio in NPT</div>'; +
-         +
-        document.getElementById('suggestedGlucose').value = 'Non necessario (enterale sufficiente)'+
-    } else { +
-        glucoseMessage = '<div class="info"><strong>CALCOLO GLUCOSIO:</strong><br>'+
-                        '• Glucosio necessario: ' + neededGlucose.toFixed(1) + 'g<br>'+
-                        '• Glucosio 50%: ' + glucose50Volume.toFixed(1+ 'ml<br>'+
-                        '• Acqua bidistillata: ' + waterVolume.toFixed(1+ 'ml<br>'+
-                        '• <strong>Concentrazione finale: ' + ((neededGlucose * 100) / totalVolume).toFixed(1) + '%</strong></div>'; +
-         +
-        document.getElementById('suggestedGlucose').value = 'Glucosio 50% + Acqua'; +
-    }+
          
-    document.getElementById('calculatedTotalVolume').value = totalVolume + ' ml'; +    const doctorName = patientData.prescribingDoctorName ||  
-    document.getElementById('calculatedProteinVol').value = proteinVolume + ml'; +                      (patientData.prescribingDoctor && doctorsData[patientData.prescribingDoctor] ?  
-    document.getElementById('calculatedLipidVol').value = lipidVolume + ' ml';+                       doctorsData[patientData.prescribingDoctor].fullName : 'Non specificato');
          
-    let resultHtml glucoseMessage;+    let html '<div class="report-output">';
          
-    resultHtml += '<div class="info">'; +    // INTESTAZIONE MEDICA ESATTA COME DA PDF 
-    resultHtml += '<strong>NPT v2.0 COMPOSIZIONE COMPLETA</strong><br>'; +    html += '<div style="display: flexjustify-content: space-betweenalign-itemscenterborder-bottom2px solid #2c3e50; padding-bottom15pxmargin-bottom: 25px;">';
-    resultHtml += '<strong>Peso:</strong> ' + currentWeight + 'g<br>'; +
-    resultHtml += '<strong>Enterale:</strong> ' + (enteralData ? enteralData.totalFluids 0) + ' ml<br>'; +
-    resultHtml += '</div>';+
          
-    resultHtml += '<table class="results-table">'; +    // PARTE SINISTRA - INFO OSPEDALE 
-    resultHtml += '<tr><th>Componente</th><th>Volume (ml)</th></tr>';+    html += '<div style="text-align: left;">'; 
 +    html += '<h2 style="margin: 0; font-size: 16px; color: #2c3e50;">Dipartimento Area della Donna e Materno Infantile</h2>'; 
 +    html += '<h3 style="margin: 5px 0; font-size: 14px; color: #34495e;">S.C. Neonatologia Terapia Intensiva Neonatale</h3>'; 
 +    html += '<p style="margin: 5px 0; font-size: 12px; color: #7f8c8d;">Direttore: ' + clinicalConfig.directorName + '</p>'; 
 +    html += '</div>';
          
-    if (neededGlucose > 0) { +    // PARTE DESTRA - LOGO ASST 
-        resultHtml += '<tr><td><strong>Glucosio 50%</strong></td><td><strong>' + glucose50Volume.toFixed(1) + '</strong></td></tr>'; +    html += '<div style="text-align: right;">'; 
-    }+    html += '<h1 style="margin: 0; font-size: 24px; color: #2c3e50; font-weight: bold;">' + clinicalConfig.hospitalName + '</h1>'; 
 +    html += '</div>';
          
-    resultHtml += '<tr><td><strong>Trophamine 6%</strong></td><td><strong>' + proteinVolume.toFixed(1) + '</strong></td></tr>'; +    html += '</div>';
-    resultHtml += '<tr><td><strong>Intralipid 20%</strong></td><td><strong>' + Math.max(0, lipidVolume).toFixed(1) + '</strong></td></tr>';+
          
-    if (electrolyteAdditions.ca_gluconato > 0) { +    // TITOLO DOCUMENTO 
-        resultHtml += '<tr><td><strong>Calcio Gluconato 10% (1g/10mL, 0.44 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.ca_gluconato.toFixed(1) + '</strong></td></tr>'; +    html += '<div style="text-align: center; margin: 20px 0;">'; 
-    +    html += '<h2 style="font-size: 18pxfont-weight: bold; color: #2c3e50; margin: 10px 0;">CALCOLO NUTRIZIONALE PARENTERALE</h2>'; 
-    if (electrolyteAdditions.esafosfina > 0) { +    html += '<p style="font-size: 14px; color: #7f8c8d; margin: 5px 0;">Data: ' + currentDate + '</p>'; 
-        resultHtml += '<tr><td><strong>Esafosfina (5g/50mL)</strong></td><td><strong>' + electrolyteAdditions.esafosfina.toFixed(1) + '</strong></td></tr>'; +    html += '</div>';
-    +
-    if (electrolyteAdditions.mg_sulfate > 0) { +
-        resultHtml += '<tr><td><strong>Magnesio Solfato (2g/10mL, 1.6 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</strong></td></tr>'; +
-    } +
-    if (electrolyteAdditions.nacl > 0) { +
-        resultHtml += '<tr><td><strong>Sodio Cloruro (3mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.nacl.toFixed(1) + '</strong></td></tr>'; +
-    +
-    if (electrolyteAdditions.sodium_acetate > 0) { +
-        resultHtml += '<tr><td><strong>Sodio Acetato (2 mEq/mL) Alcalinizzante</strong></td><td><strong>' + electrolyteAdditions.sodium_acetate.toFixed(1) + '</strong></td></tr>'; +
-    +
-    if (electrolyteAdditions.kcl > 0) { +
-        resultHtml += '<tr><td><strong>Potassio Cloruro (2 mEq/mL)</strong></td><td><strong>' + electrolyteAdditions.kcl.toFixed(1) + '</strong></td></tr>'; +
-    }+
          
-    if (residualNeeds.vitalipid > 0) { +    // DATI PAZIENTE 
-        const vitalipidVolume residualNeeds.vitalipid * currentWeightKg+    html += '<div style="background-color: #f8f9fa; padding: 15px; border-left: 4px solid #3498db; margin: 20px 0;">'; 
-        resultHtml += '<tr><td><strong>Vitalipid N Infant</strong></td><td><strong>'vitalipidVolume.toFixed(1) + '</strong></td></tr>'; +    html += '<h3 style="margin-top: 0; color: #2c3e50;">DATI PAZIENTE</h3>'; 
-    +    html +'<div style="display: flex; justify-content: space-between;">'
-    if (residualNeeds.soluvit 0) { +    html += '<div>'; 
-        const soluvitVolume residualNeeds.soluvit * currentWeightKg+    html += '<p><strong>Medico Prescrittore:</strong> ' + doctorName + '</p>'; 
-        resultHtml += '<tr><td><strong>Soluvit N</strong></td><td><strong>'soluvitVolume.toFixed(1) + '</strong></td></tr>'; +    html += '<p><strong>Data Prescrizione:</strong> ' + (patientData.prescriptionDate || currentDate) + '</p>'; 
-    +    html += '<p><strong>N° Cartella:</strong' + (patientData.medicalRecord || 'N/A') + '</p>'; 
-    if (residualNeeds.peditrace > 0) { +    html += '</div>'; 
-        const peditraceVolume = residualNeeds.peditrace * currentWeightKg; +    html +'<div>'
-        resultHtml += '<tr><td><strong>Peditrace</strong></td><td><strong>'peditraceVolume.toFixed(1) + '</strong></td></tr>'; +    html += '<p><strong>Data Nascita:</strong> ' + birthDate.toLocaleDateString('it-IT') + '</p>'; 
-    }+    html += '<p><strong>Età:</strong> ' + patientData.daysOfLife + ' giorni di vita</p>'; 
 +    html += '<p><strong>Peso:</strong> ' + patientData.currentWeight + 'g (' + prescriptionPatientWeightKg.toFixed(3) + ' kg)</p>'; 
 +    html += '</div>'; 
 +    html += '</div>'; 
 +    html += '</div>';
          
-    if (residualNeeds.carnitine > 0) { +    // COMPOSIZIONE NPT COMPLETA (TUTTI GLI ELEMENTI DAL TAB 4) 
-        resultHtml += '<tr><td><strong>Carnitene</strong></td><td><strong>'carnitineVolume.toFixed(1) + '</strong></td></tr>';+    html += '<h3 style="color: #27ae60; margin-top: 30px;">COMPOSIZIONE NPT</h3>'; 
 +    html += '<table style="width: 100%; border-collapse: collapse; margin: 20px 0; font-size: 13px;">'; 
 +    html += '<thead><tr style="background-color: #34495e; color: white;">'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">COMPONENTE</th>'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">VOLUME (ml)</th>'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">CONCENTRAZIONE</th>'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">QUANTITÀ TOTALE</th>'; 
 +    html += '</tr></thead><tbody>'; 
 +     
 +    // ACQUA BIDISTILLATA 
 +    if (calc.waterVolume > 0) { 
 +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Acqua Bidistillata</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'calc.waterVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">-</td><td style="border: 1px solid #2c3e50; padding: 10px;">-</td></tr>';
     }     }
          
-    if (waterVolume > 0) { +    // GLUCOSIO 
-        resultHtml += '<tr><td><strong>Acqua Bidistillata</strong></td><td><strong>'waterVolume.toFixed(1) + '</strong></td></tr>';+    if (calc.neededGlucose > 0) { 
 +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Glucosio</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'calc.glucose50Volume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">50%</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + calc.neededGlucose.toFixed(1) + ' g</td></tr>';
     }     }
          
-    resultHtml += '<tr class="energy-highlight"><td><strong>TOTALE NPT</strong></td><td><strong>'totalVolume.toFixed(1) + ' ml</strong></td></tr>'; +    // PROTEINE 
-    resultHtml +'</table>';+    html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Trophamine</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'calc.proteinVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">6%</td><td style="border: 1px solid #2c3e50padding: 10px;">' + (window.residualNeeds.protein * prescriptionPatientWeightKg).toFixed(1) + ' g</td></tr>';
          
-    document.getElementById('parenteralTable').innerHTML = resultHtml;+    // LIPIDI 
 +    html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Intralipid</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.lipidVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">20%</td><td style="border: 1px solid #2c3e50; padding: 10px;">+ (window.residualNeeds.lipids * prescriptionPatientWeightKg).toFixed(1) + ' g</td></tr>';
          
-    // PREPARAZIONE CON DEFLUSSORE +    // ELETTROLITI (SE PRESENTI) 
-    const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value|| 30; +    if (calc.electrolyteAdditions.ca_gluconato > 0{ 
-    const totalVolumeWithDeflector = totalVolume deflectorVolume; +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Calcio Gluconato 10%</strong></td><td style="border1px solid #2c3e50padding: 10px;"><strong>' + calc.electrolyteAdditions.ca_gluconato.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">100 mg/ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.calcium prescriptionPatientWeightKg).toFixed(1) + ' mg Ca</td></tr>';
-     +
-    let preparationHtml = '<div class="info">'; +
-    preparationHtml += '<strong>📋 RICETTA PREPARAZIONE (Deflussore: ' + deflectorVolume + ' ml)</strong><br>'; +
-    preparationHtml += '• <strong>Volume prescrizione:</strong' + totalVolume + ' ml<br>'; +
-    preparationHtml +'• <strong>Volume totale preparazione:</strong> ' + totalVolumeWithDeflector + ' ml'; +
-    preparationHtml += '</div>'; +
-     +
-    preparationHtml += '<table class="results-table">'; +
-    preparationHtml += '<tr><th>Componente</th><th>Prescrizione (ml)</th><th>Preparazione (ml)</th></tr>'+
-     +
-    const ratio = totalVolumeWithDeflector / totalVolume; +
-     +
-    if (neededGlucose > 0+
-        preparationHtml +'<tr><td><strong>Glucosio 50%</strong></td><td>' + glucose50Volume.toFixed(1) + '</td><td><strong>' + (glucose50Volume ratio).toFixed(1) + '</strong></td></tr>';+
     }     }
-     +    if (calc.electrolyteAdditions.esafosfina 0{ 
-    preparationHtml += '<tr><td><strong>Trophamine 6%</strong></td><td>' + proteinVolume.toFixed(1) + '</td><td><strong>' + (proteinVolume * ratio).toFixed(1) + '</strong></td></tr>'; +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Esafosfina</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'calc.electrolyteAdditions.esafosfina.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50padding: 10px;">100 mg P/ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.phosphorus prescriptionPatientWeightKg).toFixed(1) + ' mg P</td></tr>';
-    preparationHtml += '<tr><td><strong>Intralipid 20%</strong></td><td>' + Math.max(0, lipidVolume).toFixed(1) + '</td><td><strong>'(Math.max(0, lipidVolume) * ratio).toFixed(1) + '</strong></td></tr>'; +
-     +
-    if (electrolyteAdditions.ca_gluconato 0) { +
-        preparationHtml += '<tr><td><strong>Calcio Gluconato 10% (1g/10mL, 0.44 mEq/mL)</strong></td><td>'electrolyteAdditions.ca_gluconato.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.ca_gluconato ratio).toFixed(1) + '</strong></td></tr>';+
     }     }
-    if (electrolyteAdditions.esafosfina > 0) { +    if (calc.electrolyteAdditions.mg_sulfate > 0) { 
-        preparationHtml += '<tr><td><strong>Esafosfina (5g/50mL)</strong></td><td>' + electrolyteAdditions.esafosfina.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.esafosfina ratio).toFixed(1) + '</strong></td></tr>';+        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Magnesio Solfato</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.electrolyteAdditions.mg_sulfate.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">200 mg/ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.magnesium prescriptionPatientWeightKg).toFixed(1) + ' mEq Mg</td></tr>';
     }     }
-    if (electrolyteAdditions.mg_sulfate > 0) { +    if (calc.electrolyteAdditions.nacl > 0) { 
-        preparationHtml += '<tr><td><strong>Magnesio Solfato (2g/10mL, 1.6 mEq/mL)</strong></td><td>' + electrolyteAdditions.mg_sulfate.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.mg_sulfate ratio).toFixed(1) + '</strong></td></tr>';+        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Sodio Cloruro</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.electrolyteAdditions.nacl.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">5.85 g/100ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.sodium prescriptionPatientWeightKg).toFixed(1) + ' mEq Na</td></tr>';
     }     }
-    if (electrolyteAdditions.nacl > 0) { +    if (calc.electrolyteAdditions.sodium_acetate > 0) { 
-        preparationHtml += '<tr><td><strong>Sodio Cloruro (3mEq/mL)</strong></td><td>' + electrolyteAdditions.nacl.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.nacl ratio).toFixed(1) + '</strong></td></tr>';+        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Sodio Acetato</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.electrolyteAdditions.sodium_acetate.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">Alcalinizzante</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.sodium prescriptionPatientWeightKg).toFixed(1) + ' mEq Na</td></tr>';
     }     }
-    if (electrolyteAdditions.sodium_acetate > 0) { +    if (calc.electrolyteAdditions.kcl > 0) { 
-        preparationHtml += '<tr><td><strong>Sodio Acetato (2 mEq/mL) - Alcalinizzante</strong></td><td>' + electrolyteAdditions.sodium_acetate.toFixed(1) + '</td><td><strong>'(electrolyteAdditions.sodium_acetate * ratio).toFixed(1) + '</strong></td></tr>'; +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Potassio Cloruro</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'calc.electrolyteAdditions.kcl.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50padding: 10px;">149 mg/ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.potassium prescriptionPatientWeightKg).toFixed(1) + ' mEq K</td></tr>';
-    } +
-    if (electrolyteAdditions.kcl 0) { +
-        preparationHtml += '<tr><td><strong>Potassio Cloruro (2 mEq/mL)</strong></td><td>'electrolyteAdditions.kcl.toFixed(1) + '</td><td><strong>' + (electrolyteAdditions.kcl ratio).toFixed(1) + '</strong></td></tr>';+
     }     }
          
-    if (residualNeeds.vitalipid > 0) { +    // VITAMINE (SE PRESENTI) 
-        const vitalipidVolume = residualNeeds.vitalipid * currentWeightKg+    if (window.residualNeeds.vitalipid > 0) { 
-        preparationHtml += '<tr><td><strong>Vitalipid N Infant</strong></td><td>' + vitalipidVolume.toFixed(1) + '</td><td><strong>' + (vitalipidVolume ratio).toFixed(1) + '</strong></td></tr>';+        const vitalipidVolume = window.residualNeeds.vitalipid * prescriptionPatientWeightKg
 +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Vitalipid N Infant</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + vitalipidVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">Vitamine liposolubili</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.vitalipid prescriptionPatientWeightKg).toFixed(1) + ' ml</td></tr>';
     }     }
-    if (residualNeeds.soluvit > 0) { +    if (window.residualNeeds.soluvit > 0) { 
-        const soluvitVolume = residualNeeds.soluvit * currentWeightKg+        const soluvitVolume = window.residualNeeds.soluvit * prescriptionPatientWeightKg
-        preparationHtml += '<tr><td><strong>Soluvit N</strong></td><td>' + soluvitVolume.toFixed(1) + '</td><td><strong>' + (soluvitVolume ratio).toFixed(1) + '</strong></td></tr>';+        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Soluvit N</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + soluvitVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">Vitamine idrosolubili</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.soluvit prescriptionPatientWeightKg).toFixed(1) + ' ml</td></tr>';
     }     }
-    if (residualNeeds.peditrace > 0) { +    if (window.residualNeeds.peditrace > 0) { 
-        const peditraceVolume = residualNeeds.peditrace * currentWeightKg+        const peditraceVolume = window.residualNeeds.peditrace * prescriptionPatientWeightKg
-        preparationHtml += '<tr><td><strong>Peditrace</strong></td><td>' + peditraceVolume.toFixed(1) + '</td><td><strong>' + (peditraceVolume ratio).toFixed(1) + '</strong></td></tr>';+        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Peditrace</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + peditraceVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">Oligoelementi</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.peditrace prescriptionPatientWeightKg).toFixed(1) + ' ml</td></tr>';
     }     }
          
-    if (residualNeeds.carnitine > 0) { +    // CARNITINA (SE PRESENTE) 
-        preparationHtml += '<tr><td><strong>Carnitene (100 mg/ml)</strong></td><td>' + carnitineVolume.toFixed(1) + '</td><td><strong>' + (carnitineVolume ratio).toFixed(1) + '</strong></td></tr>';+    if (window.residualNeeds.carnitine > 0) { 
 +        const carnitineVolume = (window.residualNeeds.carnitine * prescriptionPatientWeightKg) / 100; 
 +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>Carnitene</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + carnitineVolume.toFixed(1) + '</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">100 mg/ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (window.residualNeeds.carnitine prescriptionPatientWeightKg).toFixed(1) + ' mg</td></tr>';
     }     }
          
-    if (waterVolume > 0) { +    // TOTALE 
-        preparationHtml += '<tr><td><strong>Acqua Bidistillata</strong></td><td>'waterVolume.toFixed(1) + '</td><td><strong>'(waterVolume * ratio).toFixed(1) + '</strong></td></tr>'; +    html += '<tr style="background-color: #e8f5e8; font-weight: bold; border-top: 2px solid #27ae60;"><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>TOTALE NPT</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.totalVolume + ' ml</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + (calc.totalVolume / 24).toFixed(2) + ' ml/h</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>'window.residualNeeds.energy.toFixed(0) + ' kcal</strong></td></tr>'; 
-    }+    html += '</tbody></table>';
          
-    preparationHtml += '<tr class="energy-highlight"><td><strong>TOTALE</strong></td><td><strong>' + totalVolume + ' ml</strong></td><td><strong>'totalVolumeWithDeflector + ml</strong></td></tr>'; +    // PARAMETRI CLINICI 
-    preparationHtml += '</table>';+    html += '<div style="background-color: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; padding: 15px; margin: 20px 0;">'; 
 +    html += '<h4 style="margin-top: 0; color: #856404;">PARAMETRI CLINICI</h4>'; 
 +    html += '<p><strong>GIR:</strong> ' + calc.gir.toFixed(1) + ' mg/kg/min</p>'; 
 +    html += '<p><strong>Velocità infusione:</strong> ' + (calc.totalVolume / 24).toFixed(2) + ' ml/h</p>'; 
 +    html += '<p><strong>Via di somministrazione:</strong> Accesso venoso centrale</p>'
 +    html +'<p><strong>Durata:</strong24 ore continue</p>'; 
 +    html += '</div>';
          
-    document.getElementById('preparationTable').innerHTML preparationHtml+    // FIRMA 
-    document.getElementById('parenteralResults').classList.remove('hidden');+    html += '<div style="margin-top: 40px; display: flex; justify-content: space-between;">'
 +    html +'<div style="text-align: center; width: 200px;">'
 +    html += '<p><strong>Data:</strong> + currentDate + '</p>'; 
 +    html += '<p><strong>Ora:</strong> ' + currentTime + '</p>'; 
 +    html += '</div>'; 
 +    html += '<div style="text-align: center; width: 200px;">'; 
 +    html += '<div style="border-bottom: 1px solid #2c3e50; margin-bottom: 5px; height: 40px;"></div>'; 
 +    html += '<p><strong>Medico Prescrittore</strong><br>' + doctorName + '</p>'; 
 +    html += '</div>'; 
 +    html += '</div>'; 
 +    html += '</div>';
          
-    // Salva i dati per i report +    document.getElementById('reportOutput').innerHTML = html;
-    window.nptCalculationData = { +
-        currentWeight, currentWeightKg, totalVolume, electrolyteAdditions, +
-        proteinVolume, lipidVolume, vitaminsVolume, carnitineVolume, +
-        glucose50Volume, waterVolume, neededGlucose, residualNeeds +
-    }; +
-     +
-    const parenteralBtn = document.getElementById('calculateParenteralBtn')+
-    if (parenteralBtn) { +
-        parenteralBtn.className = 'button config-update-completed'; +
-        parenteralBtn.innerHTML = 'NPT CALCOLATA ✓'; +
-    }+
 } }
  
-// FUNZIONI REPORT +function generateWorksheet() { 
-function generateAndShowWorkReport() { +    if (!window.residualNeeds || !patientData.currentWeight) { 
-    if (!window.nptCalculationData) { +        alert('Prima completare tutti i calcoli precedenti');
-        alert('Prima calcolare la NPT!');+
         return;         return;
     }     }
          
-    const reportHtml generateWorkReportHTML(); +    const calc = window.nptCalculation
-    document.getElementById('nptWorkReport').innerHTML = reportHtml; +    if (!calc) { 
-    document.getElementById('nptWorkReport').classList.remove('hidden'); +        alert('Prima calcolare la NPT nel TAB 4');
-    document.getElementById('nptFinalReport').classList.add('hidden'); +
-    document.getElementById('printReportBtn').classList.remove('hidden'); +
-    document.getElementById('savePdfBtn').classList.remove('hidden'); +
-    window.currentActiveReport = 'work'; +
-     +
-    const generateBtn = document.getElementById('generateWorkReportBtn'); +
-    generateBtn.innerHTML = 'Foglio di Lavoro Generato ✓'; +
-    generateBtn.className = 'button config-update-completed'; +
-+
- +
-function generateAndShowFinalReport() { +
-    if (!window.nptCalculationData) { +
-        alert('Prima calcolare la NPT!');+
         return;         return;
     }     }
          
-    const reportHtml generateFinalReportHTML()+    const currentDate new Date().toLocaleDateString('it-IT'); 
-    document.getElementById('nptFinalReport').innerHTML = reportHtml+    const currentTime = new Date().toLocaleTimeString('it-IT'); 
-    document.getElementById('nptFinalReport').classList.remove('hidden'); +    const worksheetPatientWeightKg = patientData.currentWeight / 1000;
-    document.getElementById('nptWorkReport').classList.add('hidden'); +
-    document.getElementById('printReportBtn').classList.remove('hidden'); +
-    document.getElementById('savePdfBtn').classList.remove('hidden'); +
-    window.currentActiveReport = 'final';+
          
-    const generateBtn document.getElementById('generateFinalReportBtn'); +    const birthDate new Date(); 
-    generateBtn.innerHTML = 'Report Parenterale Generato ✓'; +    birthDate.setDate(birthDate.getDate() - patientData.daysOfLife);
-    generateBtn.className = 'button config-update-completed'; +
-+
- +
-function generateWorkReportHTML() { +
-    const data = window.nptCalculationData; +
-    const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value|| 30; +
-    const totalVolumeWithDeflector = data.totalVolume + deflectorVolume; +
-    const ratio = totalVolumeWithDeflector / data.totalVolume;+
          
-    const today new Date()+    const deflectorVolume calc.deflectorVolume || 30; 
-    const dateStr today.toLocaleDateString('it-IT');+    const totalVolumeWithDeflector = calc.totalVolume + deflectorVolume
 +    const ratio totalVolumeWithDeflector / calc.totalVolume;
          
-    const doctorName patientData.prescribingDoctor ?  +    let html '<div class="report-output">'; 
-        doctorsData[patientData.prescribingDoctor]?.fullName || 'N/A' : 'N/A';+    html += '<div class="medical-header">'; 
 +    html += '<h1>' + clinicalConfig.hospitalName + '</h1>'; 
 +    html += '<h2>' + clinicalConfig.departmentName + '</h2>'
 +    html += '<p>Direttore: ' + clinicalConfig.directorName + '</p>'; 
 +    html += '</div>';
          
-    const infusionRate (data.totalVolume / 24).toFixed(2); +    html +'<div style="text-aligncenterfont-size: 20px; font-weight: bold; color: #2c3e50; margin: 20px 0; text-transform: uppercase;">RICETTA PER PREPARAZIONE NPT</div>';
-    const finalConcentration data.neededGlucose > 0 ? (data.neededGlucose * 100) / data.totalVolume 0; +
-    const estimatedOsmolarity = (finalConcentration * 55).toFixed(0);+
          
-    let html = '<div class="npt-report">'; +    html += '<div style="background-color: #f8f9fa; padding: 15px; border-left: 4px solid #3498db; margin: 20px 0;">'; 
-     +    html += '<h3 style="margin-top: 0; color: #2c3e50;">INFORMAZIONI PAZIENTE</h3>'; 
-    // Header +    html += '<p><strong>Data e Ora:</strong> ' + currentDate + ' ' + currentTime + '</p>'; 
-    html += '<div class="report-header">'; +    html += '<p><strong>Cartella:</strong> ' + (patientData.medicalRecord || 'N/A'+ '</p>'; 
-    html += '<div class="report-header-left">'; +    html += '<p><strong>Peso:</strong> ' + patientData.currentWeight + 'g (' + worksheetPatientWeightKg.toFixed(3) + ' kg)</p>'; 
-    html += '<div style="font-weight: bold; font-size: 13px;">CALCOLO NUTRIZIONALE PARENTERALE Data: ' + dateStr + '</div>'; +    html += '<p><strong>Giorni di vita:</strong> ' + patientData.daysOfLife + '</p>';
-    html += '<div style="font-size11px; color: #666;">FOGLIO DI LAVORO</div>'+
-    html +'</div>'; +
-    html += '<div class="report-header-right">LOGO OSPEDALE</div>';+
     html += '</div>';     html += '</div>';
          
-    // Info Paziente +    html += '<div style="background-color: #fff3cd; border: 1px solid #ffc107border-radius: 5px; padding: 15px; margin: 20px 0;">'; 
-    html += '<div class="report-section">'; +    html += '<h4 style="margin-top: 0; color: #856404;">PARAMETRI NUTRIZIONALI</h4>'; 
-    html += '<div class="report-section-title">INFO Paziente</div>'; +    html += '<p><strong>GIR:</strong> ' + calc.gir.toFixed(1) + ' mg/kg/min</p>'; 
-    html += '<table class="report-table">'; +    html += '<p><strong>Velocità infusione:</strong> ' + (calc.totalVolume 24).toFixed(2) + ' ml/h</p>'; 
-    html += '<tr><td class="label-col">Medico Prescrittore</td><td class="value-col">' + doctorName + '</td></tr>'; +    html += '<p><strong>Durata:</strong24 ore continue</p>';
-    html += '<tr><td class="label-col">Data Prescrizione</td><td class="value-col">' + dateStr + '</td></tr>'; +
-    html += '<tr><td class="label-col">Paziente</td><td class="value-col">' + (patientData.medicalRecord || 'N/A'+ '</td></tr>'; +
-    html += '<tr><td class="label-col">Giorni di Vita</td><td class="value-col">' + patientData.daysOfLife + '</td></tr>'; +
-    html += '<tr><td class="label-col">Peso (g)</td><td class="value-col">' + data.currentWeight + '</td></tr>'; +
-    html += '</table>';+
     html += '</div>';     html += '</div>';
          
-    // Composizione +    html += '<table style="width: 100%; border-collapse: collapse; margin: 20px 0; font-size: 13px;">'; 
-    html += '<div class="report-section">'; +    html += '<thead><tr style="background-color: #34495e; color: white;">'; 
-    html += '<div class="report-section-title">Composizione Parenterale (numero sacche: 1)</div>'; +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">COMPONENTE</th>'; 
-    html += '<table class="composition-table">'; +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">CONCENTRAZIONE</th>'; 
-    html += '<tr><th class="component-name-col"></th><th>Teorici</th><th>Con Deflussore</th><th></th></tr>';+    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">VOLUME PRESCRIZIONE</th>'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">VOLUME PREPARAZIONE</th>'; 
 +    html += '<th style="border: 1px solid #2c3e50; padding: 10px;">ORDINE</th>'; 
 +    html += '</tr></thead><tbody>';
          
-    if (data.waterVolume > 0) { +    html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;">Acqua Bidistillata</td><td style="border: 1px solid #2c3e50; padding: 10px;">-</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + Math.max(0, calc.waterVolume).toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">'Math.max(0, calc.waterVolume * ratio).toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;"></td></tr>'; 
-        html += '<tr><td class="component-name-col">Acqua bidistillata</td><td>' + data.waterVolume.toFixed(2) + '</td><td>' + (data.waterVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +     
-    } +    if (calc.neededGlucose > 0) { 
-    if (data.glucose50Volume > 0) { +        html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;">Glucosio</td><td style="border: 1px solid #2c3e50; padding: 10px;">50%</td><td style="border: 1px solid #2c3e50; padding: 10px;">'calc.glucose50Volume.toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (calc.glucose50Volume * ratio).toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;"></td></tr>';
-        html += '<tr><td class="component-name-col">glucosata 50% (parenterale)</td><td>' + data.glucose50Volume.toFixed(2) + '</td><td>' + (data.glucose50Volume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.ca_gluconato > 0) { +
-        html += '<tr><td class="component-name-col">Calcio gluconato (1g/10mL,0,44mEq/mL)</td><td>' + data.electrolyteAdditions.ca_gluconato.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.ca_gluconato * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.nacl > 0) { +
-        html += '<tr><td class="component-name-col">Sodio cloruro (3mEq/mL)</td><td>' + data.electrolyteAdditions.nacl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.nacl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.sodium_acetate > 0) { +
-        html += '<tr><td class="component-name-col">Sodio acetato (2mEq/mL)</td><td>' + data.electrolyteAdditions.sodium_acetate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.sodium_acetate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.kcl > 0) { +
-        html += '<tr><td class="component-name-col">Potassio cloruro (2mEq/mL)</td><td>' + data.electrolyteAdditions.kcl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.kcl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.electrolyteAdditions.mg_sulfate > 0) { +
-        html += '<tr><td class="component-name-col">Magnesio solfato (2g/10mL,1.6mEq/mL)</td><td>' + data.electrolyteAdditions.mg_sulfate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.mg_sulfate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.carnitineVolume > 0) { +
-        html += '<tr><td class="component-name-col">Carnitene f</td><td>' + data.carnitineVolume.toFixed(2) + '</td><td>' + (data.carnitineVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>';+
     }     }
          
-    html += '<tr><td class="component-name-col">Trophamine 6%</td><td>'data.proteinVolume.toFixed(2) + '</td><td>' + (data.proteinVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>';+    html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;">Trophamine</td><td style="border: 1px solid #2c3e50; padding: 10px;">6%</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + calc.proteinVolume.toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">' + (calc.proteinVolume * ratio).toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;"></td></tr>';
          
-    if (data.electrolyteAdditions.esafosfina > 0) { +    html += '<tr><td style="border: 1px solid #2c3e50; padding: 10px;">Intralipid</td><td style="border: 1px solid #2c3e50; padding: 10px;">20%</td><td style="border: 1px solid #2c3e50; padding: 10px;">'calc.lipidVolume.toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;">'(calc.lipidVolume * ratio).toFixed(1) + ' ml</td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>4° ULTIMO</strong></td></tr>';
-        html += '<tr><td class="component-name-col">Esafosfina f 5g</td><td>' + data.electrolyteAdditions.esafosfina.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.esafosfina * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.residualNeeds.peditrace > 0) { +
-        const peditraceVolume data.residualNeeds.peditrace * data.currentWeightKg; +
-        html += '<tr><td class="component-name-col">Peditrace</td><td>' + peditraceVolume.toFixed(2) + '</td><td>' + (peditraceVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.residualNeeds.soluvit > 0) { +
-        const soluvitVolume = data.residualNeeds.soluvit * data.currentWeightKg; +
-        html += '<tr><td class="component-name-col">Soluvit</td><td>' + soluvitVolume.toFixed(2) + '</td><td>' + (soluvitVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    } +
-    if (data.residualNeeds.vitalipid > 0) { +
-        const vitalipidVolume = data.residualNeeds.vitalipid * data.currentWeightKg; +
-        html += '<tr><td class="component-name-col">Vitalipid N</td><td>' + vitalipidVolume.toFixed(2) + '</td><td>' + (vitalipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; +
-    }+
          
-    html += '<tr><td class="component-name-col">Intralipid 20%</td><td>'Math.max(0, data.lipidVolume).toFixed(2) + '</td><td>'(Math.max(0, data.lipidVolume) * ratio).toFixed(2) + '</td><td>ml</td></tr>';+    html += '<tr style="background-color: #e8f5e8; font-weight: bold; border-top: 2px solid #27ae60;"><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>TOTALE</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">-</td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + calc.totalVolume + ' ml</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;"><strong>' + totalVolumeWithDeflector + ' ml</strong></td><td style="border: 1px solid #2c3e50; padding: 10px;">-</td></tr>'; 
 +    html += '</tbody></table>';
          
-    // Totali +    html += '<div style="background-color: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; padding: 15px; margin: 20px 0;">'; 
-    html += '<tr class="composition-total"><td class="component-name-col"><strong>Totale</strong></td><td><strong>' + data.totalVolume.toFixed(2) + '</strong></td><td><strong>' + totalVolumeWithDeflector.toFixed(2) + '</strong></td><td><strong>ml</strong></td></tr>'; +    html += '<h4 style="margin-top: 0; color: #856404;">AVVERTENZE</h4>'
-    html += '<tr><td class="component-name-col"><strong>Deflussore</strong></td><td><strong>' + deflectorVolume + '</strong></td><td><strong>-</strong></td><td><strong>ml</strong></td></tr>'; +    html +'<ul>'; 
-    html += '<tr><td class="component-name-col"><strong>Velocità infusione</strong></td><td><strong>' + infusionRate + '</strong></td><td><strong>-</strong></td><td><strong>ml/h</strong></td></tr>'; +    html += '<li>Preparazione sterile in cappa a flusso laminare</li>'
-    html += '<tr><td class="component-name-col"><strong>Osmolarità Totale</strong></td><td><strong>' + estimatedOsmolarity + '</strong></td><td><strong>-</strong></td><td><strong>mOsm/ml</strong></td></tr>'; +    html +'<li>Seguire rigorosamente l\'ordine di aggiunta</li>'; 
-    html += '</table>';+    html += '<li>Intralipid sempre per ultimo</li>'
 +    html +'<li>Conservare a 2-8°C, usare entro 24 ore</li>'; 
 +    html += '</ul>';
     html += '</div>';     html += '</div>';
          
-    html += '<div class="report-footer">'; +    html += '<div style="margin-top: 40px; display: flex; justify-content: space-between;">'; 
-    html += 'NPT Calculator v2.0 Foglio di Lavoro generato il ' + new Date().toLocaleString('it-IT');+    html += '<div style="text-align: center; width: 200px;">'
 +    html +'<div style="border-bottom: 1px solid #2c3e50; margin-bottom: 5px; height: 40px;"></div>'; 
 +    html += '<p><strong>Preparato da</strong><br>Farmacista</p>'; 
 +    html += '</div>'; 
 +    html += '<div style="text-align: center; width: 200px;">'; 
 +    html += '<div style="border-bottom: 1px solid #2c3e50; margin-bottom: 5px; height: 40px;"></div>'; 
 +    html += '<p><strong>Controllato da</strong><br>Infermiere</p>'; 
 +    html += '</div>';
     html += '</div>';     html += '</div>';
-     
     html += '</div>';     html += '</div>';
          
-    return html;+    document.getElementById('reportOutput').innerHTML = html;
 } }
  
-function generateFinalReportHTML() { +// FUNZIONE GENERAZIONE PDF (DA VERSIONE 17) 
-    const data = window.nptCalculationData; +function generatePDF(type) { 
-    const deflectorVolume = parseInt(document.getElementById('deflectorVolume').value) || 30+    if (!window.residualNeeds || !patientData.currentWeight) { 
-    const totalVolumeWithDeflector data.totalVolume + deflectorVolume+        alert('Prima calcolare la NPT completa'); 
-    const ratio totalVolumeWithDeflector / data.totalVolume;+        return; 
 +    } 
 + 
 +    const { jsPDF } window.jspdf
 +    const doc new jsPDF();
          
-    const today = new Date(); +    // INTESTAZIONE COMUNE 
-    const dateStr = today.toLocaleDateString('it-IT');+    doc.setFontSize(10); 
 +    doc.text(clinicalConfig.departmentName, 20, 15); 
 +    doc.text('Direttore: + clinicalConfig.directorName, 20, 20);
          
-    const medicalRecord = patientData.medicalRecord || 'N/A'; +    // Logo ASST (posizionamento approssimativo) 
-    const birthDate = patientData.prescriptionDate ?  +    doc.text(clinicalConfig.hospitalName, 170, 20);
-        new Date(new Date(patientData.prescriptionDate).getTime() - (patientData.daysOfLife * 24 * 60 * 60 * 1000)).toLocaleDateString('it-IT') :  +
-        'N/A'; +
-    const doctorName = patientData.prescribingDoctor ?  +
-        doctorsData[patientData.prescribingDoctor]?.fullName || 'N/A' : 'N/A';+
          
-    const infusionRate = (data.totalVolume / 24).toFixed(2); +    const currentDate new Date().toLocaleDateString('it-IT'); 
-    const finalConcentration = data.neededGlucose > 0 ? (data.neededGlucose * 100) / data.totalVolume 0; +    doc.text('CALCOLO NUTRIZIONALE PARENTERALE DatacurrentDate, 20, 35);
-    const estimatedOsmolarity = (finalConcentration * 55 data.electrolyteAdditions.totalVolume * 10).toFixed(0);+
          
-    let html = '<div class="npt-report">';+    if (type === 'foglio_lavoro') { 
 +        generateFoglioLavoroPDF(doc); 
 +    } else if (type === 'report_parenterale') { 
 +        generateReportParenteralePDF(doc); 
 +    }
          
-    // INTESTAZIONE +    // Salva il PDF 
-    html +'<div class="report-header">'; +    const fileName type === 'foglio_lavoro'Foglio_Lavoro_NPT.pdf' : 'Report_Parenterale_NPT.pdf'; 
-    html +'<div class="report-header-left">'+    doc.save(fileName); 
-    html += '<div style="font-weight: bold; font-size: 13px;">Dipartimento Area della Donna e Materno Infantile</div>'+
-    html += '<div style="font-size11px; color: #666;">S.C. Neonatologia e Terapia Intensiva Neonatale</div>'; + 
-    html += '</div>'+function generateFoglioLavoroPDF(doc) { 
-    html += '<div class="report-header-right">LOGO OSPEDALE</div>'; +    // Implementazione semplificata del PDF 
-    html +'</div>';+    let yPos 50;
          
-    html += '<div class="report-title">CALCOLO NUTRIZIONALE PARENTERALE Data: ' + dateStr + '</div>'; +    doc.setFontSize(12); 
-    html += '<div class="report-subtitle">REPORT PARENTERALE</div>';+    doc.text('FOGLIO DI LAVORO NPT', 20, yPos)
 +    yPos += 20;
          
-    // INFO PAZIENTE +    doc.setFontSize(10)
-    html += '<div class="report-section">'+    doc.text('Paziente' + (patientData.medicalRecord || 'N/A'), 20, yPos)
-    html += '<div class="report-section-title">INFO Paziente</div>'+    yPos += 10
-    html +'<table class="report-table">'; +    doc.text('Peso: ' + patientData.currentWeight + 'g', 20, yPos)
-    html += '<tr><td class="label-col">Medico Prescrittore</td><td class="value-col">' + doctorName + '</td></tr>'; +    yPos += 10
-    html += '<tr><td class="label-col">Data Prescrizione</td><td class="value-col">' + dateStr + '</td></tr>'+    doc.text('Giorni di vita: ' + patientData.daysOfLife, 20, yPos); 
-    html += '<tr><td class="label-col">Data Somministrazione</td><td class="value-col">' + dateStr + '</td></tr>'; +    yPos += 20;
-    html += '<tr><td class="label-col">Paziente</td><td class="value-col">' + medicalRecord + '</td></tr>'+
-    html += '<tr><td class="label-col">Data di Nascita</td><td class="value-col">' + birthDate + '</td></tr>'; +
-    html += '<tr><td class="label-col">Giorni di Vita</td><td class="value-col">' + patientData.daysOfLife + '</td></tr>'; +
-    html += '<tr><td class="label-col">Peso (g)</td><td class="value-col">' + data.currentWeight + '</td></tr>'+
-    html += '</table>'; +
-    html += '</div>';+
          
-    // LISTA APPORTI ENTERALI +    const calc window.nptCalculation
-    html +'<div class="report-section">'+    doc.text('Volume totale NPT: + calc.totalVolume + ml', 20, yPos)
-    html += '<div class="report-section-title">Lista Degli Apporti per la Giornata Corrente</div>'; +    yPos += 10
-    if (enteralData && enteralData.volume > 0) { +    doc.text('GIR: ' + calc.gir.toFixed(1) + ' mg/kg/min', 20, yPos)
-        const formulaName = document.getElementById('formulaType').value; +    yPos += 10
-        const formulaDisplayName = formulaData[formulaName]?.name || 'Formula enterale'; +    doc.text('Velocita infusione: ' + (calc.totalVolume 24).toFixed(2) + ' ml/h', 20, yPos)
-        html += '<table class="report-table">'+} 
-        html += '<tr><td class="label-col">Apporto</td><td style="text-align: center; width: 60px;"><strong>Quant.</strong></td><td style="text-align: left;"><strong>Somministrazione</strong></td></tr>'+ 
-        html += '<tr><td class="label-col">' + formulaDisplayName + '</td><td style="text-aligncenter;">' + enteralData.volume + '</td><td style="text-align: left;">oro-naso-gastrica intermittente</td></tr>'; +function generateReportParenteralePDF(doc) { 
-        html += '</table>'+    // Implementazione semplificata del PDF 
-    } else { +    let yPos = 50;
-        html += '<table class="report-table">'; +
-        html += '<tr><td class="label-col">Apporto</td><td style="text-align: center; width: 60px;"><strong>Quant.</strong></td><td style="text-alignleft;"><strong>Somministrazione</strong></td></tr>'+
-        html += '<tr><td class="label-col">Nessun apporto enterale</td><td style="text-align: center;">-</td><td style="text-align: left;">-</td></tr>'; +
-        html +'</table>'; +
-    +
-    html += '</div>';+
          
-    // COMPOSIZIONE PARENTERALE +    doc.setFontSize(12); 
-    html += '<div class="report-section">'; +    doc.text('REPORT PARENTERALE', 20, yPos)
-    html += '<div class="report-section-title">Composizione Parenterale (numero sacche: 1)</div>'+    yPos += 20;
-    html += '<table class="composition-table">'; +
-    html += '<tr><th class="component-name-col"></th><th>Teorici</th><th>Con Deflussore</th><th></th></tr>';+
          
-    // Componenti con ordine identico al foglio di lavoro +    doc.setFontSize(10); 
-    if (data.waterVolume > 0) { +    doc.text('Sistema: NPT Calculator v3.0 UNIFIED', 20, yPos); 
-        html += '<tr><td class="component-name-col">Acqua bidistillata</td><td>' + data.waterVolume.toFixed(2'</td><td>(data.waterVolume * ratio).toFixed(2'</td><td>ml</td></tr>';+    yPos += 10; 
 +    doc.text('Data: ' + new Date().toLocaleDateString('it-IT'), 20, yPos); 
 +
 + 
 +// FUNZIONI PLACEHOLDER 
 +function showAddEnteralForm() { 
 +    alert('Aggiungi nuova formula enterale - Implementazione completa nel codice sorgente'); 
 +
 + 
 +function showAddFortifierForm() 
 +    alert('Aggiungi nuovo fortificante - Implementazione completa nel codice sorgente')
 +
 + 
 +function showAddParenteralForm() { 
 +    alert('Aggiungi nuovo componente parenterale - Implementazione completa nel codice sorgente'); 
 +
 + 
 +function showAddDoctorForm() { 
 +    alert('Aggiungi nuovo medico - Implementazione completa nel codice sorgente'); 
 +
 + 
 +function removeEnteralFormula(key) { 
 +    if (confirm('Sei sicuro di voler rimuovere questa formula?')) { 
 +        alert('Rimozione formula - Implementazione completa nel codice sorgente');
     }     }
-    if (data.glucose50Volume > 0) { +
-        html += '<tr><td class="component-name-col">glucosata 50% (parenterale)</td><td>' + data.glucose50Volume.toFixed(2) + '</td><td>+ (data.glucose50Volume * ratio).toFixed(2) + '</td><td>ml</td></tr>';+ 
 +function removeParenteralComponent(key) { 
 +    if (confirm('Sei sicuro di voler rimuovere questo componente?')) { 
 +        alert('Rimozione componente - Implementazione completa nel codice sorgente');
     }     }
-    if (data.electrolyteAdditions.ca_gluconato > 0) { +
-        html += '<tr><td class="component-name-col">Calcio gluconato (1g/10mL,0,44mEq/mL)</td><td>' + data.electrolyteAdditions.ca_gluconato.toFixed(2) + '</td><td>+ (data.electrolyteAdditions.ca_gluconato * ratio).toFixed(2) + '</td><td>ml</td></tr>';+ 
 +function removeFortifier(key) { 
 +    if (confirm('Sei sicuro di voler rimuovere questo fortificante?')) { 
 +        alert('Rimozione fortificante - Implementazione completa nel codice sorgente');
     }     }
-    if (data.electrolyteAdditions.nacl > 0) { +
-        html += '<tr><td class="component-name-col">Sodio cloruro (3mEq/mL)</td><td>' + data.electrolyteAdditions.nacl.toFixed(2) + '</td><td>+ (data.electrolyteAdditions.nacl * ratio).toFixed(2) + '</td><td>ml</td></tr>';+ 
 +function removeDoctor(key) { 
 +    if (confirm('Sei sicuro di voler rimuovere questo medico?')) { 
 +        alert('Rimozione medico - Implementazione completa nel codice sorgente');
     }     }
-    if (data.electrolyteAdditions.kcl > 0) { 
-        html += '<tr><td class="component-name-col">Potassio cloruro (2mEq/mL)</td><td>' + data.electrolyteAdditions.kcl.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.kcl * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.mg_sulfate > 0) { 
-        html += '<tr><td class="component-name-col">Magnesio solfato (2g/10mL,1.6mEq/mL)</td><td>' + data.electrolyteAdditions.mg_sulfate.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.mg_sulfate * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.carnitineVolume > 0) { 
-        html += '<tr><td class="component-name-col">Carnitene f</td><td>' + data.carnitineVolume.toFixed(2) + '</td><td>' + (data.carnitineVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.proteinVolume > 0) { 
-        html += '<tr><td class="component-name-col">Trophamine 6%</td><td>' + data.proteinVolume.toFixed(2) + '</td><td>' + (data.proteinVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.electrolyteAdditions.esafosfina > 0) { 
-        html += '<tr><td class="component-name-col">Esafosfina f 5g</td><td>' + data.electrolyteAdditions.esafosfina.toFixed(2) + '</td><td>' + (data.electrolyteAdditions.esafosfina * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.peditrace > 0) { 
-        const peditraceVolume = data.residualNeeds.peditrace * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Peditrace</td><td>' + peditraceVolume.toFixed(2) + '</td><td>' + (peditraceVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.soluvit > 0) { 
-        const soluvitVolume = data.residualNeeds.soluvit * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Soluvit</td><td>' + soluvitVolume.toFixed(2) + '</td><td>' + (soluvitVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    if (data.residualNeeds.vitalipid > 0) { 
-        const vitalipidVolume = data.residualNeeds.vitalipid * data.currentWeightKg; 
-        html += '<tr><td class="component-name-col">Vitalipid N</td><td>' + vitalipidVolume.toFixed(2) + '</td><td>' + (vitalipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-    } 
-    // Gestione valore negativo per Intralipid 
-    const displayLipidVolume = data.lipidVolume < 0 ? 0 : data.lipidVolume; 
-    html += '<tr><td class="component-name-col">Intralipid 20%</td><td>' + displayLipidVolume.toFixed(2) + '</td><td>' + (displayLipidVolume * ratio).toFixed(2) + '</td><td>ml</td></tr>'; 
-     
-    // Totali 
-    html += '<tr class="composition-total"><td class="component-name-col"><strong>Totale</strong></td><td><strong>' + data.totalVolume.toFixed(2) + '</strong></td><td><strong>' + totalVolumeWithDeflector.toFixed(2) + '</strong></td><td><strong>ml</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Deflussore</strong></td><td><strong>' + deflectorVolume + '</strong></td><td><strong>-</strong></td><td><strong>ml</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Velocità infusione</strong></td><td><strong>' + infusionRate + '</strong></td><td><strong>-</strong></td><td><strong>ml/h</strong></td></tr>'; 
-    html += '<tr><td class="component-name-col"><strong>Osmolarità Totale</strong></td><td><strong>' + estimatedOsmolarity + '</strong></td><td><strong>-</strong></td><td><strong>mOsm/ml</strong></td></tr>'; 
-    html += '</table>'; 
-    html += '</div>'; 
-     
-    // TOTALE ELEMENTI PRO KILO 
-    html += '<div class="report-section">'; 
-    html += '<div class="report-section-title">Totale Elementi Pro Kilo</div>'; 
-    html += '<table class="elements-table">'; 
-     
-    // Calcoli degli elementi totali (enterale + parenterale) 
-    const totalLiquids = (enteralData ? enteralData.totalFluids : 0) + data.totalVolume; 
-    const totalLiquidsPerKg = (totalLiquids / data.currentWeightKg).toFixed(2); 
-     
-    const totalProtein = (enteralData ? enteralData.protein * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.protein * data.currentWeightKg / 1000); 
-    const totalLipids = (enteralData ? enteralData.lipids * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.lipids * data.currentWeightKg / 1000); 
-    const totalCarbs = (enteralData ? enteralData.carbs * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.carbs * data.currentWeightKg / 1000); 
-    const totalCalcium = (enteralData ? enteralData.calcium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.calcium * data.currentWeightKg / 1000); 
-    const totalPhosphorus = (enteralData ? enteralData.phosphorus * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.phosphorus * data.currentWeightKg / 1000); 
-    const totalSodium = (enteralData ? enteralData.sodium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.sodium * data.currentWeightKg / 1000); 
-    const totalPotassium = (enteralData ? enteralData.potassium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.potassium * data.currentWeightKg / 1000); 
-    const totalMagnesium = (enteralData ? enteralData.magnesium * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.magnesium * data.currentWeightKg / 1000); 
-    const totalCarnitine = data.residualNeeds.carnitine * data.currentWeightKg / 1000; 
-     
-    const totalEnergy = (enteralData ? enteralData.energy * data.currentWeightKg / 1000 : 0) + (data.residualNeeds.energy * data.currentWeightKg / 1000); 
-    const totalNonProteinEnergy = totalEnergy - (totalProtein * 4); 
-    const glucoseMgKgMin = ((totalCarbs * 1000) / 1440).toFixed(3); 
-     
-    html += '<tr><td class="element-name">liquidi</td><td class="element-value">' + totalLiquidsPerKg + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Proteine</td><td class="element-value">' + (totalProtein * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Lipidi</td><td class="element-value">' + (totalLipids * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Glucidi</td><td class="element-value">' + (totalCarbs * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">g</td></tr>'; 
-    html += '<tr><td class="element-name">Calcio</td><td class="element-value">' + (totalCalcium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Fosforo</td><td class="element-value">' + (totalPhosphorus * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Sodio</td><td class="element-value">' + (totalSodium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Potassio</td><td class="element-value">' + (totalPotassium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Magnesio</td><td class="element-value">' + (totalMagnesium * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mEq</td></tr>'; 
-    html += '<tr><td class="element-name">Carnitina</td><td class="element-value">' + (totalCarnitine * 1000 / data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">mg</td></tr>'; 
-    html += '<tr><td class="element-name">Oligoelementi</td><td class="element-value">' + (data.residualNeeds.peditrace * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Vit. idrosolubili</td><td class="element-value">' + (data.residualNeeds.soluvit * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr><td class="element-name">Vit. liposolubili</td><td class="element-value">' + (data.residualNeeds.vitalipid * data.currentWeightKg).toFixed(2) + '</td><td class="element-unit">ml</td></tr>'; 
-    html += '<tr style="border-top: 2px solid #333;"><td class="element-name"><strong>KCal Totali</strong></td><td class="element-value"><strong>' + (totalEnergy * 1000 / data.currentWeightKg).toFixed(2) + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '<tr><td class="element-name"><strong>KCal non proteiche</strong></td><td class="element-value"><strong>' + (totalNonProteinEnergy * 1000 / data.currentWeightKg).toFixed(2) + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '<tr><td class="element-name"><strong>Glucosio (mg/Kg al minuto)</strong></td><td class="element-value"><strong>' + glucoseMgKgMin + '</strong></td><td class="element-unit"><strong>-</strong></td></tr>'; 
-    html += '</table>'; 
-    html += '</div>'; 
-     
-    html += '<div class="report-footer">'; 
-    html += 'NPT Calculator v2.0 - Report Parenterale generato il ' + new Date().toLocaleString('it-IT'); 
-    html += '</div>'; 
-     
-    html += '</div>'; 
-     
-    return html; 
 } }
  
-function printCurrentReport() { +// INIZIALIZZAZIONE 
-    const reportContent = window.currentActiveReport === 'work' +document.addEventListener('DOMContentLoaded', function({ 
-        document.getElementById('nptWorkReport').innerHTML : +    console.log('NPT Calculator v3.0 UNIFIED inizializzato');
-        document.getElementById('nptFinalReport').innerHTML;+
          
-    const reportTitle window.currentActiveReport === 'work +    // Imposta la data odierna come default 
-        'Foglio di Lavoro NPT' : 'Report Parenterale NPT';+    const today new Date().toISOString().split('T')[0]; 
 +    document.getElementById('prescriptionDate').value = today;
          
-    const printWindow = window.open('', '_blank');+    // Configura il campo cartella clinica 
 +    setupMedicalRecordField();
          
-    printWindow.document.write(` +    document.getElementById('birthWeight').addEventListener('change', function() { 
-        <!DOCTYPE html> +        document.getElementById('currentWeight').value = this.value; 
-        <html> +    });
-        <head> +
-            <title>${reportTitle}</title> +
-            <style> +
-                body { margin: 0; padding: 15px; font-family: Arial, sans-serif; } +
-                ${document.querySelector('style').textContent} +
-            </style> +
-        </head> +
-        <body> +
-            ${reportContent} +
-        </body> +
-        </html> +
-    `);+
          
-    printWindow.document.close(); +    // Event listeners per resettare Fabbisogni e NPT quando si modificano i valori manualmente 
-    printWindow.print(); +    const requirementFields 
-+        'reqLiquids', 'reqProtein', 'reqCarbs', 'reqLipids',  
- +        'reqCalcium', 'reqPhosphorus', 'reqMagnesium',  
-function updateSystemConfig() { +        'reqSodium', 'reqPotassium', 'reqVitalipid', 'reqSoluvit', 'reqPeditrace', 'reqCarnitine' 
-    const updateBtn document.getElementById('updateSystemBtn'); +    ];
-    updateBtn.className = 'button config-update-completed'; +
-    updateBtn.innerHTML = 'Parametri Sistema Aggiornati ✓';+
          
-    setTimeout(() => { +    requirementFields.forEach(fieldId => { 
-        updateBtn.className 'button'+        const field document.getElementById(fieldId)
-        updateBtn.innerHTML = 'Aggiorna Parametri Sistema'; +        if (field) { 
-    }, 3000); +            field.addEventListener('input', function() { 
-+                resetNutritionButton()
- +            }); 
-// FUNZIONE SALVATAGGIO PDF +            field.addEventListener('change'function() { 
-async function saveReportAsPDF() { +                resetNutritionButton(); 
-    if (!window.currentActiveReport || !window.nptCalculationData) { +            }); 
-        alert('Prima genera un report!'); +        } 
-        return;+    }); 
 +     
 +    // Event listener per il tipo di sodio 
 +    const sodiumTypeSelect = document.getElementById('sodiumType'); 
 +    if (sodiumTypeSelect) { 
 +        sodiumTypeSelect.addEventListener('change', function() { 
 +            updateSodiumChoice(); 
 +            updateSodiumRecommendation(); 
 +        });
     }     }
          
-    try { +    // Event listener per il volume del deflussore 
-        // Mostra messaggio di caricamento +    const deflectorVolumeInput = document.getElementById('deflectorVolume'); 
-        const savePdfBtn = document.getElementById('savePdfBtn'); +    if (deflectorVolumeInput{ 
-        const originalText = savePdfBtn.innerHTML; +        deflectorVolumeInput.addEventListener('input', function() { 
-        savePdfBtn.innerHTML = '⏳ Generando PDF...'; +            resetParenteralButton();
-        savePdfBtn.disabled = true; +
-         +
-        // Seleziona il report attivo +
-        const reportElement window.currentActiveReport === 'work' ?  +
-            document.getElementById('nptWorkReport') :  +
-            document.getElementById('nptFinalReport'); +
-         +
-        const reportTitle = window.currentActiveReport === 'work' ?  +
-            'Foglio_di_Lavoro' : 'Report_Parenterale'; +
-         +
-        // Genera il nome file con data e cartella +
-        const today = new Date(); +
-        const dateStr = today.toISOString().split('T')[0].replace(/-/g, '')+
-        const medicalRecord = patientData.medicalRecord || 'SENZA_CARTELLA'; +
-        const fileName = `NPT_${reportTitle}_${medicalRecord}_${dateStr}.pdf`; +
-         +
-        // Configurazione html2canvas per qualità migliore +
-        const canvas = await html2canvas(reportElement,+
-            scale: 2, // Migliore qualità +
-            useCORS: true, +
-            backgroundColor: '#ffffff', +
-            width: reportElement.offsetWidth, +
-            height: reportElement.offsetHeight, +
-            scrollX: 0, +
-            scrollY: 0+
         });         });
-         
-        // Crea PDF con dimensioni A4 
-        const { jsPDF } = window.jspdf; 
-        const pdf = new jsPDF({ 
-            orientation: 'portrait', 
-            unit: 'mm', 
-            format: 'a4' 
-        }); 
-         
-        // Calcola dimensioni per adattare alla pagina A4 
-        const imgWidth = 210; // A4 width in mm 
-        const pageHeight = 297; // A4 height in mm 
-        const imgHeight = (canvas.height * imgWidth) / canvas.width; 
-         
-        let heightLeft = imgHeight; 
-        let position = 0; 
-         
-        // Aggiungi l'immagine al PDF 
-        pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); 
-        heightLeft -= pageHeight; 
-         
-        // Se il contenuto è più lungo di una pagina, aggiungi pagine 
-        while (heightLeft >= 0) { 
-            position = heightLeft - imgHeight; 
-            pdf.addPage(); 
-            pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); 
-            heightLeft -= pageHeight; 
-        } 
-         
-        // Aggiungi metadati al PDF 
-        pdf.setProperties({ 
-            title: `NPT Calculator - ${reportTitle}`, 
-            subject: 'Calcolo Nutrizionale Parenterale', 
-            author: 'NPT Calculator v2.0', 
-            keywords: 'NPT, Nutrizione Parenterale, Neonatologia', 
-            creator: 'NPT Calculator v2.0' 
-        }); 
-         
-        // Salva il PDF 
-        pdf.save(fileName); 
-         
-        // Ripristina il pulsante 
-        savePdfBtn.innerHTML = '✅ PDF Salvato!'; 
-        savePdfBtn.style.backgroundColor = '#27ae60'; 
-         
-        setTimeout(() => { 
-            savePdfBtn.innerHTML = originalText; 
-            savePdfBtn.style.backgroundColor = '#e74c3c'; 
-            savePdfBtn.disabled = false; 
-        }, 3000); 
-         
-        // Mostra messaggio di conferma 
-        const confirmationMsg = document.createElement('div'); 
-        confirmationMsg.innerHTML = ` 
-            <div style="position: fixed; top: 20px; right: 20px; background: #27ae60; color: white;  
-                        padding: 15px 20px; border-radius: 5px; z-index: 10000; box-shadow: 0 4px 12px rgba(0,0,0,0.3);"> 
-                <strong>✅ PDF Salvato!</strong><br> 
-                File: ${fileName}<br> 
-                <small>Il file è stato salvato nella cartella Download</small> 
-            </div> 
-        `; 
-        document.body.appendChild(confirmationMsg); 
-         
-        setTimeout(() => { 
-            document.body.removeChild(confirmationMsg); 
-        }, 5000); 
-         
-    } catch (error) { 
-        console.error('Errore durante il salvataggio PDF:', error); 
-        alert('Errore durante il salvataggio del PDF. Riprova o usa la funzione Stampa.'); 
-         
-        // Ripristina il pulsante in caso di errore 
-        const savePdfBtn = document.getElementById('savePdfBtn'); 
-        savePdfBtn.innerHTML = '💾 Salva PDF'; 
-        savePdfBtn.disabled = false; 
     }     }
-} +     
 +    // Inizializza configurazione clinica avanzata 
 +    document.getElementById('calciumReq').value = clinicalConfig.calciumReq; 
 +    document.getElementById('phosphorusReq').value = clinicalConfig.phosphorusReq; 
 +    document.getElementById('magnesiumReq').value = clinicalConfig.magnesiumReq; 
 +    document.getElementById('maxGIR').value = clinicalConfig.maxGIR; 
 +    document.getElementById('maxLipids').value = clinicalConfig.maxLipids; 
 +    document.getElementById('maxProtein').value = clinicalConfig.maxProtein; 
 +    document.getElementById('hospitalName').value = clinicalConfig.hospitalName; 
 +    document.getElementById('departmentName').value = clinicalConfig.departmentName; 
 +    document.getElementById('directorName').value = clinicalConfig.directorName; 
 +     
 +    updateFortifierOptions(); 
 +    updateDoctorsDropdown(); 
 +    console.log('NPT Calculator v3.0 UNIFIED pronto'); 
 +});
 </script> </script>
 +
 </body> </body>
 </html> </html>
docuneo/programma_npt.1753992679.txt.gz · Ultima modifica: da neoadmin