Skip to content

0047. No extraer un componente de tabla compartido para ResumenTable/SectorTable

Estado

Aceptada

Contexto

En el code review de cierre de dashboard-produccion (2026-07-17) se marcó como hallazgo que ResumenTable (dashboard de producción, features/dashboard-produccion/components/) duplica estructura con SectorTable (reporte semanal, features/reportes/): ambas renderizan una fila por piscina con columnas numéricas formateadas de forma similar.

La tarea limpieza-cosmetica (2026-07-17) resolvió la parte real de la duplicación: extrajo los helpers de formato (dash(), pct()) a shared/lib/format.ts y las etiquetas de estado de ciclo a shared/lib/cycle-status.ts, consumidos por ambos componentes. Quedó pendiente en el backlog evaluar si además convenía extraer la estructura de tabla a un componente compartido.

Decisión

No extraer un componente de tabla compartido. ResumenTable tiene 14 columnas (incluye Sector, es un resumen agregado) y SectorTable tiene 20 columnas (peso anterior, alimentación, desviación referencial vs real) — el solapamiento es de formato de celda (ya resuelto vía shared/lib/format.ts), no de estructura. Forzar un componente genérico hoy (vía render-props o config de columnas) sería over-engineering para dos consumidores que ya divergen en casi un tercio de sus columnas.

Se reevalúa esta decisión si aparece un tercer módulo con el mismo patrón de "una fila por piscina" — recién con tres consumidores reales vale la pena generalizar (regla de tres).

Consecuencias

  • ResumenTable.tsx y SectorTable.tsx siguen siendo componentes independientes, cada uno en su feature.
  • Un cambio de columna en uno no arriesga romper al otro por acoplamiento accidental.
  • Si en el futuro se agrega un tercer listado "una fila por piscina" (ej. un módulo nuevo de reportes), extraer entonces shared/components/PoolRowTable (o similar) tomando las tres implementaciones reales como referencia, no de antemano.

Referencias

  • Tarea limpieza-cosmetica (2026-07-17) — extrajo dash/pct/CYCLE_STATUS_LABELS.
  • Tarea unificar-format-helpers (2026-07-20) — cierra formalmente este hallazgo.
  • camaroneras_admin/src/features/dashboard-produccion/components/ResumenTable.tsx
  • camaroneras_admin/src/features/reportes/ (SectorTable)
  • ADR-0017 — cada feature es isla; este ADR aplica el mismo criterio a nivel de componente de tabla, no solo de import.