feat: marcar varios lotes escribiendolos, no de a uno

Cada toque redibuja la lista en un mensaje nuevo: seis lotes eran seis
mensajes. Ahora se puede escribir "1a, 2b 5c" y quedan marcados de una. Suma a
lo ya tocado en vez de reemplazarlo, asi las dos formas conviven.

Compara sin acentos ni mayusculas y acepta el lote solo o con la finca delante.
Si dos fincas tienen un "1A" no adivina: exige el nombre completo. Y lo que no
reconoce lo dice —marcar cinco de seis en silencio registraria un ciclo de
menos sin que nadie se entere.

Se separa por comas y se prueba el segmento entero antes de partirlo por
espacios: al reves, "RETIRO 1A" se rompia en dos y no matcheaba nada.

Descartado "marcar todos": nunca se abren todos los lotes de una finca.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-20 23:11:47 -05:00
co-authored by Claude Sonnet 4.6
parent 52dbd1e203
commit dd894e5aab
2 changed files with 99 additions and 1 deletions
+18 -1
View File
@@ -146,6 +146,22 @@ check('y la página 2 alcanza el lote 12', isset(filasDe($r)['12']));
$r = NormalBot::processInteractive($co, $ctx, '__mas'); // vuelve: no hay página 3
$r = NormalBot::processInteractive($co, $ctx, '__mas');
// Escribir varios de una: seis toques eran seis mensajes
$r = NormalBot::process($co, $ctx, '3a, 4a 5a');
$filas = filasDe($r);
check('escribir marca varios en un solo mensaje',
str_contains($filas['__listo'] ?? '', '(5)'));
// El contador no depende de la pagina que se este viendo
check('suma a lo tocado en vez de reemplazarlo: 2 + 3 = 5',
str_contains($filas['__listo'] ?? '', '(5)'));
WhatsAppSender::$enviados = [];
$r = NormalBot::process($co, $ctx, '6a, 9z9z');
check('lo que no reconoce lo avisa, no lo ignora',
str_contains(WhatsAppSender::$enviados[0]['text'] ?? '', '"9z9z"'));
check('y marca igual lo que sí entendió',
str_contains(filasDe($r)['__listo'] ?? '', '(6)'));
$r = NormalBot::processInteractive($co, $ctx, '__listo');
check('resumen final', isset(filasDe($r)['__cap_confirm']));
@@ -153,7 +169,8 @@ capturas();
NormalBot::processInteractive($co, $ctx, '__cap_confirm');
$post = array_values(array_filter(capturas(), fn($c) => str_contains($c['peticion'] ?? '', 'ciclos_')))[0] ?? null;
check('la URL resolvió el tipo elegido', $post['peticion'] ?? null, 'ciclos_cosecha_up');
check('lote_ids como arreglo', $post['body']['lote_ids'] ?? null, ['1', '2']);
check('lote_ids lleva los tocados y los escritos',
$post['body']['lote_ids'] ?? null, ['1', '2', '3', '4', '5', '6']);
check('con la acción y la fecha',
[$post['body']['accion'] ?? null, $post['body']['fecha'] ?? null], ['apertura', $hoy]);