diff --git a/cron/generateData.php b/cron/generateData.php
index 1c3ae42..fbc3adb 100644
--- a/cron/generateData.php
+++ b/cron/generateData.php
@@ -29,6 +29,8 @@
   "Metropolità Nord" => "MetropolitaNord",
 ];
 
+// Funció per obtenir el nombre de casos nous al dia originalDay+translation
+// a partir de les dades de la regió sanitaria (dataRegio).
 function getSumDay($originalDay, $translation, &$dataRegio) {
   if ($translation >= 0)
     $day = (clone $originalDay)->add(new DateInterval("P".abs($translation)."D"));
@@ -43,12 +45,14 @@
   return 0;
 }
 
+// Funció per fer una consulta a la taula de dades
 function query($soql) {
   $url = "https://analisi.transparenciacatalunya.cat/resource/xuwf-dxjd.json?\$query=".urlencode($soql);
   $raw = file_get_contents($url);
   return json_decode($raw, true);
 }
 
+// Demanem una llista del nombre de casos cada dia a cada regió sanitària
 $data = query("SELECT data, regiosanitariadescripcio AS regio, sum(numcasos) AS sum_numcasos
 WHERE
   resultatcoviddescripcio = 'Positiu PCR' AND
@@ -56,6 +60,8 @@
 GROUP BY regiosanitariadescripcio, data
 ORDER BY data ASC, regiosanitariadescripcio");
 
+// Fem un array que tindrà com a elements un array per cada regió amb el
+// contingut de totes les files d'aquella regió
 $dataPerRegio = [];
 foreach ($data as $row) {
   if (!isset($dataPerRegio[$row["regio"]])) $dataPerRegio[$row["regio"]] = [];
@@ -63,9 +69,13 @@
 }
 
 $summary = [];
-foreach ($dataPerRegio as $regio => $dataRegio) {
+foreach ($dataPerRegio as $regio => $dataRegio) { // Per a cada regió
+  if (!in_array($regio, array_keys($CODENAME)))
+    die("[fatal error] No tenim contemplada la regió '".$regio."'.\n");
+
   $summary[$regio] = [];
 
+  // Veiem quin és el primer i l'últim dia de la sèrie
   $oldestDay = new DateTime("today");
   $newestDay = new DateTime();
   $newestDay->setTimestamp(0);
@@ -76,13 +86,32 @@
     if ($date > $newestDay) $newestDay = $date;
   }
 
+  // Si l'últim dia és avui, posem que sigui ahir, perquè no volem informació
+  // incompleta sobre avui.
+  if ($oldestDay == (new DateTime("today")))
+    $oldestDay = new DateTime("yesterday");
+
+  // Ara calculem les rhos.
   $rhos = [];
 
-  for ($currentDate = (clone $oldestDay)->add(new DateInterval("P7D")); $currentDate < $newestDay; $currentDate->add(new DateInterval("P1D"))) {
-    $den = getSumDay($currentDate, -4, $dataRegio) + getSumDay($currentDate, -5, $dataRegio) + getSumDay($currentDate, -6, $dataRegio);
-    if ($den == 0) continue;
+  // Considerem cada dia a partir de 6 dies després del primer dia, i fins al
+  // dia anterior a l'últim dia (extrems inclosos)
+  for ($currentDate = (clone $oldestDay)->add(new DateInterval("P6D"));
+  $currentDate < $newestDay;
+  $currentDate->add(new DateInterval("P1D"))) {
+    // Calculem la rho (velocitat reproductiva efectiva) per aquell dia.
+    // Fórmula: https://biocomsc.upc.edu/en/shared/avaluacio_risc.pdf
+    $num = getSumDay($currentDate, 1, $dataRegio) +
+           getSumDay($currentDate, 0, $dataRegio) +
+           getSumDay($currentDate, -1, $dataRegio);
 
-    $rho = (getSumDay($currentDate, 1, $dataRegio) + getSumDay($currentDate, 0, $dataRegio) + getSumDay($currentDate, -1, $dataRegio))/($den);
+    $den = getSumDay($currentDate, -4, $dataRegio) +
+           getSumDay($currentDate, -5, $dataRegio) +
+           getSumDay($currentDate, -6, $dataRegio);
+
+    if ($num != 0 && $den == 0) continue;
+
+    $rho = ($num == 0 ? 0 : $num/$den);
 
     $rhos[] = [
       "data" => $currentDate->format("c"),
@@ -90,15 +119,23 @@
     ];
   }
 
-  for ($currentDate = (clone $oldestDay)->add(new DateInterval("P14D")); $currentDate < $newestDay; $currentDate->add(new DateInterval("P1D"))) {
+  // Considerem cada dia a partir de 13 dies després del primer dia, i fins el
+  // dia anterior a l'últim dia (extrems inclosos)
+  for ($currentDate = (clone $oldestDay)->add(new DateInterval("P13D"));
+    $currentDate < $newestDay;
+    $currentDate->add(new DateInterval("P1D"))) {
+    // Calculem Rho_7 i IA_14
+    // Rho_7(t) := \sum_{i=0}^{7} Rho(t - i)
+    // IA_14(t) := \sum_{i=0}^{14} N(t - i),
+    //   on N(j) és el nombre de casos nous confirmats per PCR el dia j.
     $sum = 0;
 
-    $p14Date = (clone $currentDate)->sub(new DateInterval("P14D"));
-    $p7Date = (clone $currentDate)->sub(new DateInterval("P7D"));
+    $p13Date = (clone $currentDate)->sub(new DateInterval("P13D"));
+    $p6Date = (clone $currentDate)->sub(new DateInterval("P6D"));
 
     foreach ($dataRegio as $row) {
       $date = new DateTime($row["data"]);
-      if ($date >= $p14Date && $date < $currentDate) {
+      if ($date >= $p13Date && $date <= $currentDate) {
         $sum += $row["sum_numcasos"];
       }
     }
@@ -108,22 +145,28 @@
 
     foreach ($rhos as $row) {
       $date = new DateTime($row["data"]);
-      if ($date >= $p7Date && $date < $currentDate) {
+      if ($date >= $p6Date && $date <= $currentDate) {
         ++$rhoCount;
         $rhoAverage += $row["rho"];
       }
     }
 
-    $rhoAverage /= $rhoCount;
+    // Si no hem trobat rhos (rhoCount == 0) és perquè el numerador no era 0
+    // però el denominador era sempre 0 al calcular les rhos. Aleshores, tot i
+    // que no poguem calcular la rho_7 a causa de no poder calcular les rho_t
+    // individuals, aquest fet ens indica que el creixement ha sigut altíssim,
+    // i per tant posem una rho_7 de 1000000000, que se surt de la gràfica.
+    $rhoAverage = ($rhoCount == 0 ? 1000000000 : $rhoAverage/$rhoCount);
 
     $summary[$regio][] = [
       "data" => $currentDate->format("d/m/y"),
-      "ia14" => (isset($HABITANTS[$regio]) ? $sum*(1e5/$HABITANTS[$regio]) : null),
+      "ia14" => $sum*(1e5/$HABITANTS[$regio]),
       "rho7" => $rhoAverage
     ];
   }
 }
 
+// Posem les dades a diversos fitxers per tal que les pugui llegir el gnuplot
 foreach ($summary as $regio => $summaryRegio) {
   $file = fopen("/tmp/covid19graphgenerator-".$CODENAME[$regio].".dat", "w");
 
