# Contratos HTTP Zod v4 es la fuente de verdad de los DTOs de entrada y salida. Inferir todos sus tipos mediante z.infer; no escribir interfaces equivalentes. Ubicación: modules//src/common/dto/request y response. Crear shared solo cuando haya subcontratos estables usados por varias operaciones. Los nombres expresan recurso y acción: GetHealthRequestSchema, GetHealthRequestDTO, GetHealthResponseSchema y GetHealthResponseDTO. Distinguir campo omitido, null, cadena vacía y colección vacía. Evitar default y transform en contratos de negocio salvo una necesidad justificada. Usar schemas semánticos para UUID y timestamps ISO. Los decimales exactos viajan como cadenas. La route valida la entrada una vez; el controller no repite Zod. El navegador valida la respuesta externa antes de consumirla. Los builders de respuesta se tipan con el DTO inferido exacto; no duplican interfaces Snapshot. Son deterministas y no contienen lógica de negocio ni acceso a repositorios.