Selaa lähdekoodia

ingest updates

Benjamin Harris 2 kuukautta sitten
vanhempi
sitoutus
6e09940695
1 muutettua tiedostoa jossa 130 lisäystä ja 53 poistoa
  1. 130 53
      controllers/ollamaGenerate.php

+ 130 - 53
controllers/ollamaGenerate.php

@@ -1,4 +1,7 @@
 <?php
+error_reporting(E_ALL);
+ini_set('display_errors', 1);
+
 /**
  * controllers/ollamaGenerate.php
  *
@@ -130,7 +133,81 @@ function sv(array $spec, array $row, string $col): mixed
 $r = $row;
 $s = $spec;
 
-// ── Build comprehensive soil data block (ALL elements) ────────────────────────
+// ── Pre-compute all display values (heredocs don't support function calls) ────
+$d_ph_h2o    = fv($r['ph_h2o'],    1);  $d_ph_h2o_st  = rangeStatus($r['ph_h2o'], 6.2, 6.8);
+$d_ph_cacl2  = fv($r['ph_cacl2'],  1);
+$d_ec        = fv($r['ec'],        2);
+$d_colour    = $r['colour']  ?? 'N/A';
+$d_texture   = $r['texture'] ?? 'N/A';
+$d_gravel    = fv($r['gravel'],    1);
+$d_ocarbon   = fv($r['ocarbon'],   1);
+$d_omatter   = fv($r['omatter'],   1);
+$d_cec       = fv($r['cec'],       2);
+$d_tec       = fv($r['tec'],       2);
+$d_paramag   = fv($r['paramag'],   0);
+$d_no3       = fv($r['NO3_N'],     0);  $d_no3_st    = rangeStatus($r['NO3_N'], 10, 20);
+$d_nh3       = fv($r['NH3_N'],     0);
+$d_cn_ratio  = fv($r['c_n_ratio'], 1);
+$d_p_colwell = fv($r['p_colwell'], 0);
+$d_p_morgan  = fv($r['p_morgan'],  0);
+$d_p_mehlick = fv($r['p_mehlick'], 0);
+$d_p_bray2   = fv($r['p_bray2'],   0);
+
+// Major cations
+$d_ca_ppm    = fv($r['BS_ca_ppm'], 0);
+$d_ca_min    = fv(sv($s,$r,'ca_ppm_min'), 0);  $d_ca_max = fv(sv($s,$r,'ca_ppm_max'), 0);
+$d_ca_st     = rangeStatus($r['BS_ca_ppm'], sv($s,$r,'ca_ppm_min'), sv($s,$r,'ca_ppm_max'));
+$d_mg_ppm    = fv($r['BS_mg_ppm'], 0);
+$d_mg_min    = fv(sv($s,$r,'mg_ppm_min'), 0);  $d_mg_max = fv(sv($s,$r,'mg_ppm_max'), 0);
+$d_mg_st     = rangeStatus($r['BS_mg_ppm'], sv($s,$r,'mg_ppm_min'), sv($s,$r,'mg_ppm_max'));
+$d_k_ppm     = fv($r['BS_k_ppm'],  0);
+$d_k_min     = fv(sv($s,$r,'k_ppm_min'),  0);  $d_k_max  = fv(sv($s,$r,'k_ppm_max'),  0);
+$d_k_st      = rangeStatus($r['BS_k_ppm'],  sv($s,$r,'k_ppm_min'),  sv($s,$r,'k_ppm_max'));
+$d_na_ppm    = fv($r['BS_na_ppm'], 0);
+$d_na_min    = fv(sv($s,$r,'na_ppm_min'), 0);  $d_na_max = fv(sv($s,$r,'na_ppm_max'), 0);
+$d_na_st     = rangeStatus($r['BS_na_ppm'], sv($s,$r,'na_ppm_min'), sv($s,$r,'na_ppm_max'));
+
+// Base saturations
+$d_ca_bs     = fv($r['BS_ca2'], 2);
+$d_ca_bs_min = fv(sv($s,$r,'cabs_min'), 1);  $d_ca_bs_max = fv(sv($s,$r,'cabs_max'), 1);
+$d_ca_bs_st  = rangeStatus($r['BS_ca2'], sv($s,$r,'cabs_min'), sv($s,$r,'cabs_max'));
+$d_mg_bs     = fv($r['BS_mg2'], 2);
+$d_mg_bs_min = fv(sv($s,$r,'mgbs_min'), 1);  $d_mg_bs_max = fv(sv($s,$r,'mgbs_max'), 1);
+$d_mg_bs_st  = rangeStatus($r['BS_mg2'], sv($s,$r,'mgbs_min'), sv($s,$r,'mgbs_max'));
+$d_k_bs      = fv($r['BS_k'],   2);
+$d_k_bs_min  = fv(sv($s,$r,'kbs_min'),  1);  $d_k_bs_max  = fv(sv($s,$r,'kbs_max'),  1);
+$d_k_bs_st   = rangeStatus($r['BS_k'],   sv($s,$r,'kbs_min'),  sv($s,$r,'kbs_max'));
+$d_na_bs     = fv($r['BS_na'],  2);
+$d_na_bs_min = fv(sv($s,$r,'nabs_min'), 1);  $d_na_bs_max = fv(sv($s,$r,'nabs_max'), 1);
+$d_na_bs_st  = rangeStatus($r['BS_na'],  sv($s,$r,'nabs_min'), sv($s,$r,'nabs_max'));
+$d_ob        = fv($r['BS_ob'],  2);  $d_ob_rec = fv(sv($s,$r,'ob_rec'), 1);
+$d_h         = fv($r['BS_h'],   2);  $d_h_rec  = fv(sv($s,$r,'h_rec'),  1);
+$d_al3       = fv($r['BS_al3'], 2);
+
+// Morgans
+$d_ca_m = fv($r['ca_morgan'], 2);  $d_mg_m = fv($r['mg_morgan'], 2);
+$d_k_m  = fv($r['k_morgan'],  2);  $d_na_m = fv($r['na_morgan'], 2);
+
+// Mehlick-3
+$d_ca_me = fv($r['ca_mehlick3'], 2);  $d_mg_me = fv($r['mg_mehlick3'], 2);
+$d_k_me  = fv($r['k_mehlick3'],  2);  $d_na_me = fv($r['na_mehlick3'], 2);
+$d_al_me = fv($r['al_mehlick3'], 2);
+
+// Trace elements
+$d_s  = fv($r['s_morgan'], 2);  $d_b  = fv($r['b_cacl2'],  2);
+$d_mn = fv($r['mn_dtpa'],  2);  $d_cu = fv($r['cu_dtpa'],  2);
+$d_zn = fv($r['zn_dtpa'],  2);  $d_fe = fv($r['fe_dtpa'],  2);
+$d_fe_tot = fv($r['fe'],   2);  $d_al = fv($r['al'],       2);
+$d_si = fv($r['sl_cacl2'], 2);  $d_co = fv($r['co_dtpa'],  2);
+$d_mo = fv($r['m_dtpa'],   2);  $d_se = fv($r['se'],       2);
+
+// Ratios
+$_ca_me_v = is_numeric($r['ca_mehlick3']) ? (float)$r['ca_mehlick3'] : 0;
+$_mg_me_v = is_numeric($r['mg_mehlick3']) ? (float)$r['mg_mehlick3'] : 0;
+$d_ca_mg_ratio     = fv($_mg_me_v != 0 ? round($_ca_me_v / $_mg_me_v, 1) : null, 1);
+$d_ca_mg_ratio_rec = fv(sv($s,$r,'ca_mg_ratio'), 1);
+
+// Build comprehensive soil data block (ALL elements)
 $soilData = <<<TEXT
 =====================================
 SOIL TEST DATA — COMPLETE ANALYSIS
@@ -144,78 +221,78 @@ Lab No:       {$r['lab_no']}
 Date Sampled: {$r['date_sampled']}
 
 --- SOIL PHYSICAL / REACTION ---
-pH (H2O):                {fv($r['ph_h2o'],   1)}   [target: 6.2–6.8]  {rangeStatus($r['ph_h2o'], 6.2, 6.8)}
-pH (CaCl2):              {fv($r['ph_cacl2'], 1)}
-EC (mS/cm):              {fv($r['ec'],       2)}
-Colour:                  {$r['colour']}
-Texture:                 {$r['texture']}
-Gravel (%):              {fv($r['gravel'], 1)}
+pH (H2O):                $d_ph_h2o   [target: 6.2-6.8]  $d_ph_h2o_st
+pH (CaCl2):              $d_ph_cacl2
+EC (mS/cm):              $d_ec
+Colour:                  $d_colour
+Texture:                 $d_texture
+Gravel (%):              $d_gravel
 
 --- ORGANIC MATTER ---
-Organic Carbon (%):      {fv($r['ocarbon'], 1)}
-Organic Matter (%):      {fv($r['omatter'], 1)}
+Organic Carbon (%):      $d_ocarbon
+Organic Matter (%):      $d_omatter
 
 --- CATION EXCHANGE ---
-CEC (meq/100g):          {fv($r['cec'], 2)}
-TEC (meq/100g):          {fv($r['tec'], 2)}
-Paramagnetic:            {fv($r['paramag'], 0)}
+CEC (meq/100g):          $d_cec
+TEC (meq/100g):          $d_tec
+Paramagnetic:            $d_paramag
 
 --- NITROGEN ---
-Nitrate-N (NO3-N ppm):   {fv($r['NO3_N'],   0)}   [target: 10–20 ppm]  {rangeStatus($r['NO3_N'], 10, 20)}
-Ammonium-N (NH3-N ppm):  {fv($r['NH3_N'],   0)}
-C:N ratio:               {fv($r['c_n_ratio'], 1)}
+Nitrate-N (NO3-N ppm):   $d_no3   [target: 10-20 ppm]  $d_no3_st
+Ammonium-N (NH3-N ppm):  $d_nh3
+C:N ratio:               $d_cn_ratio
 
 --- PHOSPHORUS ---
-P Colwell (ppm):         {fv($r['p_colwell'], 0)}
-P Morgan (ppm):          {fv($r['p_morgan'],  0)}
-P Mehlick (ppm):         {fv($r['p_mehlick'], 0)}
-P Bray2 (ppm):           {fv($r['p_bray2'],   0)}
+P Colwell (ppm):         $d_p_colwell
+P Morgan (ppm):          $d_p_morgan
+P Mehlick (ppm):         $d_p_mehlick
+P Bray2 (ppm):           $d_p_bray2
 
 --- MAJOR CATIONS (ppm) ---
-Calcium Ca  (ppm):       {fv($r['BS_ca_ppm'], 0)}   [min: {fv(sv($s,$r,'ca_ppm_min'),0)}, max: {fv(sv($s,$r,'ca_ppm_max'),0)}]  {rangeStatus($r['BS_ca_ppm'], sv($s,$r,'ca_ppm_min'), sv($s,$r,'ca_ppm_max'))}
-Magnesium Mg (ppm):      {fv($r['BS_mg_ppm'], 0)}   [min: {fv(sv($s,$r,'mg_ppm_min'),0)}, max: {fv(sv($s,$r,'mg_ppm_max'),0)}]  {rangeStatus($r['BS_mg_ppm'], sv($s,$r,'mg_ppm_min'), sv($s,$r,'mg_ppm_max'))}
-Potassium K  (ppm):      {fv($r['BS_k_ppm'],  0)}   [min: {fv(sv($s,$r,'k_ppm_min'), 0)}, max: {fv(sv($s,$r,'k_ppm_max'), 0)}]  {rangeStatus($r['BS_k_ppm'],  sv($s,$r,'k_ppm_min'),  sv($s,$r,'k_ppm_max'))}
-Sodium Na    (ppm):      {fv($r['BS_na_ppm'], 0)}   [min: {fv(sv($s,$r,'na_ppm_min'),0)}, max: {fv(sv($s,$r,'na_ppm_max'),0)}]  {rangeStatus($r['BS_na_ppm'], sv($s,$r,'na_ppm_min'), sv($s,$r,'na_ppm_max'))}
+Calcium Ca  (ppm):       $d_ca_ppm   [min: $d_ca_min, max: $d_ca_max]  $d_ca_st
+Magnesium Mg (ppm):      $d_mg_ppm   [min: $d_mg_min, max: $d_mg_max]  $d_mg_st
+Potassium K  (ppm):      $d_k_ppm    [min: $d_k_min,  max: $d_k_max]   $d_k_st
+Sodium Na    (ppm):      $d_na_ppm   [min: $d_na_min, max: $d_na_max]  $d_na_st
 
 --- BASE SATURATIONS (%) ---
-Calcium  Ca (%):         {fv($r['BS_ca2'], 2)}%   [min: {fv(sv($s,$r,'cabs_min'),1)}, max: {fv(sv($s,$r,'cabs_max'),1)}]  {rangeStatus($r['BS_ca2'], sv($s,$r,'cabs_min'), sv($s,$r,'cabs_max'))}
-Magnesium Mg (%):        {fv($r['BS_mg2'], 2)}%   [min: {fv(sv($s,$r,'mgbs_min'),1)}, max: {fv(sv($s,$r,'mgbs_max'),1)}]  {rangeStatus($r['BS_mg2'], sv($s,$r,'mgbs_min'), sv($s,$r,'mgbs_max'))}
-Potassium  K  (%):       {fv($r['BS_k'],   2)}%   [min: {fv(sv($s,$r,'kbs_min'), 1)}, max: {fv(sv($s,$r,'kbs_max'), 1)}]  {rangeStatus($r['BS_k'],   sv($s,$r,'kbs_min'),  sv($s,$r,'kbs_max'))}
-Sodium     Na (%):       {fv($r['BS_na'],  2)}%   [min: {fv(sv($s,$r,'nabs_min'),1)}, max: {fv(sv($s,$r,'nabs_max'),1)}]  {rangeStatus($r['BS_na'],  sv($s,$r,'nabs_min'), sv($s,$r,'nabs_max'))}
-Other Bases (%):         {fv($r['BS_ob'],  2)}%   [recommended: {fv(sv($s,$r,'ob_rec'),1)}]
-Hydrogen    (%):         {fv($r['BS_h'],   2)}%   [recommended: {fv(sv($s,$r,'h_rec'), 1)}]
-Aluminium  Al3 (%):      {fv($r['BS_al3'], 2)}%
+Calcium  Ca (%):         $d_ca_bs%   [min: $d_ca_bs_min, max: $d_ca_bs_max]  $d_ca_bs_st
+Magnesium Mg (%):        $d_mg_bs%   [min: $d_mg_bs_min, max: $d_mg_bs_max]  $d_mg_bs_st
+Potassium  K  (%):       $d_k_bs%    [min: $d_k_bs_min,  max: $d_k_bs_max]   $d_k_bs_st
+Sodium     Na (%):       $d_na_bs%   [min: $d_na_bs_min, max: $d_na_bs_max]  $d_na_bs_st
+Other Bases (%):         $d_ob%   [recommended: $d_ob_rec]
+Hydrogen    (%):         $d_h%    [recommended: $d_h_rec]
+Aluminium  Al3 (%):      $d_al3%
 
 --- MORGANS EXTRACT (ppm) ---
-Ca Morgan:               {fv($r['ca_morgan'], 2)}
-Mg Morgan:               {fv($r['mg_morgan'], 2)}
-K  Morgan:               {fv($r['k_morgan'],  2)}
-Na Morgan:               {fv($r['na_morgan'], 2)}
+Ca Morgan:               $d_ca_m
+Mg Morgan:               $d_mg_m
+K  Morgan:               $d_k_m
+Na Morgan:               $d_na_m
 
 --- MEHLICK-3 EXTRACT (ppm) ---
-Ca Mehlick3:             {fv($r['ca_mehlick3'], 2)}
-Mg Mehlick3:             {fv($r['mg_mehlick3'], 2)}
-K  Mehlick3:             {fv($r['k_mehlick3'],  2)}
-Na Mehlick3:             {fv($r['na_mehlick3'], 2)}
-Al Mehlick3:             {fv($r['al_mehlick3'], 2)}
+Ca Mehlick3:             $d_ca_me
+Mg Mehlick3:             $d_mg_me
+K  Mehlick3:             $d_k_me
+Na Mehlick3:             $d_na_me
+Al Mehlick3:             $d_al_me
 
 --- TRACE ELEMENTS (ppm) ---
-Sulfur    S  (ppm):      {fv($r['s_morgan'], 2)}
-Boron     B  (ppm):      {fv($r['b_cacl2'],  2)}
-Manganese Mn (ppm):      {fv($r['mn_dtpa'],  2)}
-Copper    Cu (ppm):      {fv($r['cu_dtpa'],  2)}
-Zinc      Zn (ppm):      {fv($r['zn_dtpa'],  2)}
-Iron      Fe (ppm):      {fv($r['fe_dtpa'],  2)}
-Iron      Fe (total):    {fv($r['fe'],       2)}
-Aluminium Al (ppm):      {fv($r['al'],       2)}
-Silicon   Si (ppm):      {fv($r['sl_cacl2'], 2)}
-Cobalt    Co (ppm):      {fv($r['co_dtpa'],  2)}
-Molybdenum Mo (ppm):     {fv($r['m_dtpa'],   2)}
-Selenium  Se (ppm):      {fv($r['se'],       2)}
+Sulfur    S  (ppm):      $d_s
+Boron     B  (ppm):      $d_b
+Manganese Mn (ppm):      $d_mn
+Copper    Cu (ppm):      $d_cu
+Zinc      Zn (ppm):      $d_zn
+Iron      Fe (ppm):      $d_fe
+Iron      Fe (total):    $d_fe_tot
+Aluminium Al (ppm):      $d_al
+Silicon   Si (ppm):      $d_si
+Cobalt    Co (ppm):      $d_co
+Molybdenum Mo (ppm):     $d_mo
+Selenium  Se (ppm):      $d_se
 
 --- RATIOS ---
-Ca:Mg ratio:             {fv(is_numeric($r['ca_mehlick3']) && is_numeric($r['mg_mehlick3']) && (float)$r['mg_mehlick3'] != 0 ? round((float)$r['ca_mehlick3']/(float)$r['mg_mehlick3'],1) : null, 1)}   [recommended: {fv(sv($s,$r,'ca_mg_ratio'),1)}]
-C:N  ratio:              {fv($r['c_n_ratio'], 1)}
+Ca:Mg ratio:             $d_ca_mg_ratio   [recommended: $d_ca_mg_ratio_rec]
+C:N  ratio:              $d_cn_ratio
 
 TEXT;