[ADM-008] Migrar PuntoDeVentaForm a sintaxis Zod v4 (bug preexistente) #21

Closed
opened 2026-04-18 11:37:33 +00:00 by dmolinari · 0 comments
Owner

Contexto

Durante el smoke E2E de ADM-009 (2026-04-17) se detectó que bun run build falla con errores de TypeScript en src/web/src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx. El bug preexiste en main desde ADM-008 — pasó desapercibido porque Vitest no hace type-checking (usa esbuild).

Bug

El componente usa sintaxis de Zod v3 que es inválida en v4.3.6 (la versión actual del proyecto):

// Inválido en Zod v4:
z.coerce.number({ invalid_type_error: 'Debe ser un número' })

El error exacto de TypeScript:

src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx(31,15): error TS2353:
Object literal may only specify known properties, and 'invalid_type_error' does not
exist in type '{ error?: string | $ZodErrorMap<...> | undefined; message?: string | undefined; }'.

Adicionalmente, al no tipar el genérico T, z.coerce.number() infiere ZodCoercedNumber<unknown> en lugar de ZodCoercedNumber<number>, rompiendo la compatibilidad con @hookform/resolvers y generando cascada de errores de tipo en Resolver, Control y SubmitHandler.

Fix

// v3 — inválido:
z.coerce.number({ invalid_type_error: 'Debe ser un número' })

// v4 equivalente — pasar string directo + tipo genérico explícito:
z.coerce.number<number>('Debe ser un número')

Impacto

  • main no buildea limpio hoy. Cualquier CI que corra bun run build falla.
  • Vite dev server levanta OK (usa esbuild sin typecheck) → desarrollo no se nota.
  • Vitest pasa (275/275) → tests no detectan el bug.

Referencia

ADM-009 ya migró los 4 componentes fiscales (NuevaVigenciaModal, TipoDeIvaFormModal, NuevaVigenciaIibbModal, IngresosBrutosFormModal) a sintaxis Zod v4 como parte del cleanup pre-merge. Este issue trackea el mismo fix para ADM-008 como PR independiente.

Archivos a migrar: src/web/src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx

Criterios de cierre

  • cd src/web && bun run build completa sin errores relacionados a PuntoDeVentaForm.
  • cd src/web && bun run test sigue pasando (baseline sin regresión).
  • PR independiente linked a este issue con Closes #N.
## Contexto Durante el smoke E2E de ADM-009 (2026-04-17) se detectó que `bun run build` falla con errores de TypeScript en `src/web/src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx`. El bug preexiste en `main` desde ADM-008 — pasó desapercibido porque Vitest no hace type-checking (usa esbuild). ## Bug El componente usa sintaxis de Zod v3 que es inválida en v4.3.6 (la versión actual del proyecto): ```ts // Inválido en Zod v4: z.coerce.number({ invalid_type_error: 'Debe ser un número' }) ``` El error exacto de TypeScript: ``` src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx(31,15): error TS2353: Object literal may only specify known properties, and 'invalid_type_error' does not exist in type '{ error?: string | $ZodErrorMap<...> | undefined; message?: string | undefined; }'. ``` Adicionalmente, al no tipar el genérico `T`, `z.coerce.number()` infiere `ZodCoercedNumber<unknown>` en lugar de `ZodCoercedNumber<number>`, rompiendo la compatibilidad con `@hookform/resolvers` y generando cascada de errores de tipo en `Resolver`, `Control` y `SubmitHandler`. ## Fix ```ts // v3 — inválido: z.coerce.number({ invalid_type_error: 'Debe ser un número' }) // v4 equivalente — pasar string directo + tipo genérico explícito: z.coerce.number<number>('Debe ser un número') ``` ## Impacto - `main` no buildea limpio hoy. Cualquier CI que corra `bun run build` falla. - Vite dev server levanta OK (usa esbuild sin typecheck) → desarrollo no se nota. - Vitest pasa (275/275) → tests no detectan el bug. ## Referencia ADM-009 ya migró los 4 componentes fiscales (`NuevaVigenciaModal`, `TipoDeIvaFormModal`, `NuevaVigenciaIibbModal`, `IngresosBrutosFormModal`) a sintaxis Zod v4 como parte del cleanup pre-merge. Este issue trackea el mismo fix para ADM-008 como PR independiente. Archivos a migrar: `src/web/src/features/puntos-de-venta/components/PuntoDeVentaForm.tsx` ## Criterios de cierre - [ ] `cd src/web && bun run build` completa sin errores relacionados a PuntoDeVentaForm. - [ ] `cd src/web && bun run test` sigue pasando (baseline sin regresión). - [ ] PR independiente linked a este issue con `Closes #N`.
dmolinari added the followup label 2026-04-18 11:37:33 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dmolinari/SIG-CM2.0#21