CULTIVA IA SaaS Platform — Refactoring: moment.js → date-fns + extracción de descuentos
| Función | Archivo antiguo | Archivo nuevo | Tipo cambio | Contratos identificados |
|---|---|---|---|---|
calculateMonthlyCost() |
pricing.ts:14 | pricing.ts:12 | date-fns | Misma firma, parsing interno cambiado |
applyDiscount() |
pricing.ts:67 | discounts.ts:8 | extraído | Firma idéntica, re-exportada desde pricing |
calculateProrate() |
pricing.ts:112 | pricing.ts:58 | interno | Lógica de redondeo revisada (potencial riesgo) |
getNextBillingDate() |
pricing.ts:178 | pricing.ts:89 | date-fns | addMonths/addYears, DST boundary crítico |
formatPriceDisplay() |
pricing.ts:241 | pricing.ts:134 | interno | Intl.NumberFormat, sin dependencias de momento |
validateDiscountCode() |
— | discounts.ts:45 | nuevo | Extraído de lógica inline en applyDiscount |
⚠️ Paths sin cobertura identificados: calculateProrate (prorrateo mid-cycle), getNextBillingDate (DST + leap years), applyDiscount (códigos inválidos, expirados), formatPriceDisplay (locales: es-ES, en-US, de-DE)
pricing.ts:- const rounded = Math.floor(dailyRate * days * 100) / 100;+ const rounded = Math.round(dailyRate * days * 100) / 100;Math.floor → Math.round en pricing.ts:72 (commit de fix en la misma rama)src/services/__tests__/pricing.regression.test.tsvitest run --reporter=verbose pricing.regression