+34. ✅ Módulo "Análisis de manos" — fase 1: Worksheet desde `.txt` (6ª ruta `/analisis` con icono `FileSearch` en sidebar, range-independent) · objetivo: convertir una mano real jugada en un estudio estructurado apoyado en las 17 calcs, SIN reconstruir herramientas que el usuario ya tiene (replayer de PokerTracker, Flopzilla) — la equity la sigue trayendo de Flopzilla y la tipea · **34a** `src/utils/handHistory.ts` parser tolerante del formato iPoker (cartas palo-primero `[HJ S9]`, suits H/S/C/**D** → ♥♠♣♦, rango `10`→`T`; motor de pot por contribución corrida — `potBefore` por decisión es lo que siembra las calcs; `Decision`/`StreetData`/`ParsedHand`; héroe del `Dealt to`, board acumulado, showdown) · `src/utils/spotCalc.ts` `suggestCalcForDecision(decision, hand)` mapea cada jugada del héroe a la calc adecuada con **seeds enriquecidos** (cada seed lleva pot/bet/currentPot/loseAmount + potTurn/betTurn/betRiver para que TODA alternativa reciba datos, no solo la primaria — fix tras feedback) + `barrelPairSeed` reconstruye la línea de 2 barriles en ambas direcciones + `flopzillaInputsFor(mode)` lista qué inputs trae el usuario de Flopzilla por calc; reglas: bet→bluff-ev (o double-barrel si hay barrel en calle siguiente), allin→all-in-ev, call→call-vs-raise, **check en river→check-vs-bet/check-ev** (check behind vs valuebet fino) · `CalcMode`+`CALC_GROUPS`+`CALC_META` extraídos a `src/modules/calculators/calcMeta.ts` compartido · verificado con node: hero J♥9♠, board A♥7♥9♣3♥8♠, pots 70/140/350 · **34b** `CardFace` extendido a ♦ (aditivo, deck 4 colores ♠slate/♥rojo/♦azul/♣verde, no afecta al trainer que solo usa 3) · `src/modules/analysis/` BoardCards (reusa CardFace) · InlineCalc (switch CalcMode→componente sembrado) · HandWorksheet (cabecera con cartas+stacks+toggle Fichas↔BB, calles con board+badge de pot ámbar, decisiones con monto en chip ámbar + sizing `% pot`, botón Analizar inline con chips de calc + `DataSourceLegend` verde/ámbar que indica qué está cargado de la mano y qué ingresar de Flopzilla, notas por mano, showdown) · AnalysisPage (textarea + "Cargar ejemplo" + parse tolerante con banner suave de errores) · 8 calcs ganan props `initial*` opcionales (`?: string | undefined` por exactOptionalPropertyTypes) backward-compatible — `/calculadoras` queda idéntico, render con `key={decision.id}-${mode}` para re-sembrar al cambiar · ruta + nav · **34c** SEO: `sitemap.xml` `/analisis/` priority 0.7 + pre-render en `deploy.yml` + canonical self-referente en AnalysisPage · HomePage `ModuleCard` "Análisis de manos" + FAQ "¿Cómo analizo una mano que jugué?" (JSX + `aPlain` sincronizados) · **34d** (`47e6b16`) parser generalizado a **GGPoker/PokerStars** (formato que exporta PT4) además de iPoker, sin romperlo: cartas order-agnostic (`[Js Td]` rango+palo-min vs `[HJ S9]` palo-may+rango — el palo es el char en {s,h,c,d}), board acumulado (parsea todos los grupos `[...]` y reemplaza/concatena según `BOARD_SIZE` de la calle — GG repite todo el board, iPoker solo la nueva), header `Poker Hand #` + ciegas de `Level1(10/20)`, botón desde `Seat #N is the button`, all-in flag + `Uncalled bet (X) returned to` (resta del pot), shows inline del runout + summary GG `Seat N: name (pos) showed [..] won (X)` + `collected X from pot` · worksheet: call preflop que enfrenta raise (call>BB) ahora analizable + board final en Showdown · **34e** (`a73daaa`) tercer dialecto **Winamax**: acciones SIN dos puntos (`Atenea. posts small blind 40` — se prueba `Nombre: verbo` y se acepta el colon solo si lo sigue un verbo conocido, porque las descripciones traen `" : "` tipo `Two pairs : 5 and 4`; fallback a match anclado al verbo), header `Winamax …` con ciegas en `(40/80)` (parse genérico de parénthesis-slash), botón en `Table:`, board pegado `[4d Js Td][7c]`, `collected X from main/side pot`, `won X` sin paréntesis, shows con desc en paréntesis · **3 salas soportadas: iPoker + GGPoker/Stars + Winamax** · próxima fase elegida por el usuario: Modo Workbook con drills, empezando por "¿Qué calculadora?" (reusa `spotCalc.ts`)
0 commit comments