feat(cotizador): mensualidades del diferimiento = meses faltantes para la entrega estimada de la unidad (captura de obra)

This commit is contained in:
2026-09-29 20:11:24 +00:00
parent 1c1e6b04e4
commit 4e3ce67ae7
6 changed files with 84 additions and 12 deletions

View File

@@ -89,12 +89,13 @@ describe('getUnidadesLocal / getUnidadLocal', () => {
expect(senda.map((u) => u.codigo)).toEqual(['U-2', 'U-3'])
})
it('completa fechaEntrega desde la captura: entrega programada > habitabilidad > inicio de obra', async () => {
it('completa fechaEntrega desde la captura: reprogramada > programada > habitabilidad > inicio de obra', async () => {
prismaMock.unidad.findMany.mockResolvedValue([
fila({ codigo: 'U-1', desarrollo: 'DIAGONAL' }),
fila({ codigo: 'U-2', desarrollo: 'DIAGONAL' }),
fila({ codigo: 'S-1', desarrollo: 'SENDA' }),
fila({ codigo: 'S-2', desarrollo: 'SENDA' }),
fila({ codigo: 'S-3', desarrollo: 'SENDA' }),
])
prismaMock.capturaDepartamento.findMany.mockResolvedValue([
{ unidadCodigo: 'U-1', campo: 'inicio_obra_fecha', valor: '2026-01-01' },
@@ -104,11 +105,16 @@ describe('getUnidadesLocal / getUnidadLocal', () => {
// Valor vacío / no-fecha: no cuenta como dato
{ unidadCodigo: 'S-1', campo: 'entrega_programada_fecha', valor: '' },
{ unidadCodigo: 'S-2', campo: 'entrega_programada_fecha', valor: 'pendiente' },
// Reprogramada: manda sobre la programada cuando existe
{ unidadCodigo: 'U-1', campo: 'entrega_reprogramada_fecha', valor: '2028-02-15' },
// Reprogramada vacía: se ignora y gana la programada
{ unidadCodigo: 'S-3', campo: 'entrega_reprogramada_fecha', valor: '' },
{ unidadCodigo: 'S-3', campo: 'entrega_programada_fecha', valor: '2027-07-01' },
])
const todas = await getUnidadesLocal()
expect(todas.map((u) => u.fechaEntrega)).toEqual(['2027-11-20', null, '2027-05-05', null])
expect(todas.map((u) => u.fechaEntrega)).toEqual(['2028-02-15', null, '2027-05-05', null, '2027-07-01'])
expect(prismaMock.capturaDepartamento.findMany).toHaveBeenCalledWith(
expect.objectContaining({ where: { campo: { in: [...CAMPOS_FECHA_ENTREGA] } } }),
)

View File

@@ -14,12 +14,15 @@ import type { UnidadCotizable } from './cotizacion.service.js'
/**
* Campos de `CapturaDepartamento` que dan la fecha de entrega de la vivienda,
* en orden de prioridad:
* 1. `entrega_programada_fecha` — Fecha Programada Entrega Vivienda (ESCRITURACION)
* 2. `habitabilidad` — fecha de habitabilidad (OBRA), la de DIAGONAL
* 3. `inicio_obra_fecha` — último recurso (ESCRITURACION)
* en orden de prioridad (el primero con fecha válida gana):
* 1. `entrega_reprogramada_fecha` — Fecha Reprogramada Entrega (la más reciente,
* cuando obra movió la entrega es la fecha que manda)
* 2. `entrega_programada_fecha` — Fecha Programada Entrega Vivienda
* 3. `habitabilidad` — fecha de habitabilidad (OBRA), la de DIAGONAL
* 4. `inicio_obra_fecha` — último recurso (ESCRITURACION)
*/
export const CAMPOS_FECHA_ENTREGA = [
'entrega_reprogramada_fecha',
'entrega_programada_fecha',
'habitabilidad',
'inicio_obra_fecha',