feat: Fase 3 con campos condicionales; fix del monitor del ERP

Cosecha, polinizacion y fertilizacion en un solo flujo en vez de tres: skip_if
muestra el producto solo a las dos que lo llevan y el pase solo a polinizacion.
El lote se pregunta antes que el producto porque la dosis depende de los dos —
sale de la fertilizacion que se autorizo en su modulo, no la elige el usuario.

ErpMonitor construia api_base_url + /health, que no existe en el ERP: la ruta
correcta es ?peticion=ping y la URL sale de company_endpoints como el resto. Por
eso el panel mostraba el ERP caido. Tampoco mandaba el Bearer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-19 21:01:38 -05:00
co-authored by Claude Sonnet 4.6
parent 8399a86972
commit 42adeb64d0
3 changed files with 156 additions and 3 deletions
+19 -3
View File
@@ -17,9 +17,24 @@ class ErpMonitor
public static function check(array $company): array
{
$baseUrl = rtrim($company['api_base_url'] ?? '', '/');
$healthUrl = $baseUrl !== '' ? $baseUrl . '/health' : '';
// El ERP no expone /health sino ?peticion=ping, y la URL sale de
// company_endpoints como el resto de las llamadas: api_base_url no
// sirve para esto. Sin esto el panel mostraba el ERP siempre caído.
$apiKey = $company['api_key'] ?? '';
$healthUrl = '';
try {
$stmt = db()->prepare(
"SELECT url FROM company_endpoints WHERE company_id = ? AND endpoint_key = ? AND is_active = 1 LIMIT 1"
);
$stmt->execute([(int)$company['id'], 'numeros_dn']);
$url = (string)($stmt->fetchColumn() ?: '');
if ($url !== '') {
// Cualquier endpoint sirve de referencia; se reemplaza por ping
$healthUrl = preg_replace('/peticion=[^&]*/', 'peticion=ping', $url);
}
} catch (\PDOException $e) {
$healthUrl = '';
}
if ($healthUrl === '') {
return [
@@ -27,7 +42,7 @@ class ErpMonitor
'company_name' => $company['name'] ?? '',
'status' => 'unknown',
'latency_ms' => null,
'error' => 'Sin URL configurada',
'error' => 'Sin endpoint registrado para esta empresa',
'last_check' => date('Y-m-d H:i:s'),
];
}
@@ -40,6 +55,7 @@ class ErpMonitor
CURLOPT_TIMEOUT => 10,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'X-API-Key: ' . $apiKey,
'User-Agent: bot-palmas360-monitor/1.0',
],