diff --git a/api-gateway/scripts/sync-estatus-maestro.py b/api-gateway/scripts/sync-estatus-maestro.py new file mode 100644 index 0000000..3b8b9f8 --- /dev/null +++ b/api-gateway/scripts/sync-estatus-maestro.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +"""Sync de estatus del Reporte Maestro (Enkontrol) -> board Unidades de Monday (18427678487). + +Idempotente: lee reference/maestro/maestro-unidades.json, consulta el board y solo +muta items cuyo label de 'Disponibilidad' difiera del status_maestro. Excluye: + - unidades sin codigo_nuestro (sin match en nuestro inventario) + - unidades con baja_confianza_status (apartado sin fec_liberacion) + - items ya en el status correcto + +Uso: + MONDAY_API_KEY=... python3 sync-estatus-maestro.py # aplica cambios + MONDAY_API_KEY=... python3 sync-estatus-maestro.py --dry-run # solo reporta + +La API key también se toma de frasa-ecosystem/.env si no está en el entorno. +Rate limit: ~0.4s entre mutaciones, retry con backoff ante 429/5xx. +SIN PII: solo códigos de unidad y status. +""" +import json, os, sys, time, urllib.request, urllib.error + +BOARD_ID = 18427678487 +COL_STATUS = 'color_mm6edzbb' # 'Disponibilidad' +COL_DESARROLLO = 'text_mm6ehqqb' +API = 'https://api.monday.com/v2' +DRY = '--dry-run' in sys.argv + +ROOT = os.path.dirname(os.path.abspath(__file__)) +MAESTRO_JSON = os.path.join(ROOT, '../../reference/maestro/maestro-unidades.json') + + +def load_key(): + key = os.environ.get('MONDAY_API_KEY') + if key: + return key + env = os.path.join(ROOT, '../../.env') + for line in open(env): + if line.startswith('MONDAY_API_KEY='): + return line.strip().split('=', 1)[1].strip().strip('"').strip("'") + sys.exit('MONDAY_API_KEY no encontrada') + + +KEY = load_key() + + +def gql(query, variables=None, reintentos=3): + body = json.dumps({'query': query, 'variables': variables or {}}).encode() + for intento in range(reintentos + 1): + if intento: + time.sleep(0.5 * 2 ** (intento - 1)) + req = urllib.request.Request(API, data=body, headers={ + 'Content-Type': 'application/json', 'Authorization': KEY, 'API-Version': '2024-10'}) + try: + res = json.load(urllib.request.urlopen(req)) + except urllib.error.HTTPError as e: + if e.code in (429, 500, 502, 503) and intento < reintentos: + continue + raise + if res.get('errors'): + if intento < reintentos: + continue + raise RuntimeError(res['errors']) + return res['data'] + raise RuntimeError('Monday no respondió') + + +def fetch_items(): + items, cursor = [], None + while True: + q = ('query($cursor: String) { boards(ids: %d) { items_page(limit: 200, cursor: $cursor) ' + '{ cursor items { id name column_values(ids: ["%s", "%s"]) { id text } } } } }' + % (BOARD_ID, COL_STATUS, COL_DESARROLLO)) + page = gql(q, {'cursor': cursor})['boards'][0]['items_page'] + items += page['items'] + cursor = page['cursor'] + if not cursor or not page['items']: + break + time.sleep(0.4) + return {(next(c['text'] for c in i['column_values'] if c['id'] == COL_DESARROLLO), i['name']): { + 'id': i['id'], + 'status': next(c['text'] for c in i['column_values'] if c['id'] == COL_STATUS)} + for i in items} + + +def set_status(item_id, label): + q = ('mutation($b: ID!, $i: ID!, $v: JSON!) { ' + 'change_column_value(board_id: $b, item_id: $i, column_id: "%s", value: $v) { id } }' % COL_STATUS) + gql(q, {'b': str(BOARD_ID), 'i': str(item_id), 'v': json.dumps({'label': label})}) + + +def main(): + maestro = json.load(open(MAESTRO_JSON)) + board = fetch_items() + cambios, omitidos = [], [] + for r in maestro: + code = r['codigo_nuestro'] + if not code or r['baja_confianza_status']: + continue + item = board.get((r['desarrollo'], code)) + if not item: + omitidos.append((code, 'no existe en el board')) + continue + if item['status'] != r['status_maestro']: + cambios.append({'item_id': item['id'], 'codigo': code, + 'de': item['status'], 'a': r['status_maestro'], + 'etapa': r['etapa_maestro'], 'fec': r['fec_ultima_etapa']}) + print(f'{len(cambios)} cambios pendientes, {len(omitidos)} omitidos') + aplicados = 0 + for c in cambios: + print(f" {c['codigo']}: {c['de']} -> {c['a']} ({c['etapa']} {c['fec'] or ''})" + + (' [dry-run]' if DRY else '')) + if not DRY: + set_status(c['item_id'], c['a']) + aplicados += 1 + time.sleep(0.4) + if not DRY: + print(f'{aplicados} items actualizados en Monday') + for code, motivo in omitidos: + print(f' omitido {code}: {motivo}') + + +if __name__ == '__main__': + main() diff --git a/apps/cotizador/src/data/unidades-atelier.ts b/apps/cotizador/src/data/unidades-atelier.ts index 5919369..3f14d29 100644 --- a/apps/cotizador/src/data/unidades-atelier.ts +++ b/apps/cotizador/src/data/unidades-atelier.ts @@ -12,7 +12,7 @@ export const UNIDADES_ATELIER: Unidad[] = [ { codigo: 'ATELIER-6', modelo: 'SOHO', desarrollo: 'ATELIER', fechaEntrega: '2026-02-07', supEstacionamiento: null, supConstruccion: 52.309, supExcedente: 4.326, precioSinAcabados: 2666831, precioConAcabados: 2666831, precioLista: 2666831, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: 'E-B', manzana: 32, lote: 1, cajones: '1 C-INT' } }, { codigo: 'ATELIER-7', modelo: 'SOHO', desarrollo: 'ATELIER', fechaEntrega: '2026-02-07', supEstacionamiento: null, supConstruccion: 52.309, supExcedente: 4.324, precioSinAcabados: 2373713, precioConAcabados: 2373713, precioLista: 2373713, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: 'E-B', manzana: 32, lote: 1, cajones: '1 C-INT' } }, { codigo: 'ATELIER-8', modelo: 'SOHO', desarrollo: 'ATELIER', fechaEntrega: '2026-02-07', supEstacionamiento: null, supConstruccion: 52.059, supExcedente: 4.22, precioSinAcabados: 2327169, precioConAcabados: 2327169, precioLista: 2327169, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: 'E-B', manzana: 32, lote: 1, cajones: '1 C-INT' } }, - { codigo: 'ATELIER-9', modelo: 'TRIBECA', desarrollo: 'ATELIER', fechaEntrega: '2026-02-07', supEstacionamiento: null, supConstruccion: 82.828, supExcedente: 27.913, precioSinAcabados: 4451040, precioConAcabados: 4451040, precioLista: 4451040, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: '2R-B', manzana: 32, lote: 1, cajones: '1 C-EXT' } }, + { codigo: 'ATELIER-9', modelo: 'TRIBECA', desarrollo: 'ATELIER', fechaEntrega: '2026-02-07', supEstacionamiento: null, supConstruccion: 82.828, supExcedente: 27.913, precioSinAcabados: 4451040, precioConAcabados: 4451040, precioLista: 4451040, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: '2R-B', manzana: 32, lote: 1, cajones: '1 C-EXT' } }, { codigo: 'ATELIER-10', modelo: 'TRIBECA', desarrollo: 'ATELIER', fechaEntrega: '2026-01-21', supEstacionamiento: null, supConstruccion: 83.348, supExcedente: 16.065, precioSinAcabados: 3997500, precioConAcabados: 3997500, precioLista: 3997500, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: '2R-C', manzana: 32, lote: 1, cajones: '1 C-EXT' } }, { codigo: 'ATELIER-11', modelo: 'SOHO', desarrollo: 'ATELIER', fechaEntrega: '2026-01-15', supEstacionamiento: null, supConstruccion: 52.194, supExcedente: 4.219, precioSinAcabados: 2304339, precioConAcabados: 2304339, precioLista: 2304339, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: 'E-A', manzana: 32, lote: 1, cajones: '1 C-INT' } }, { codigo: 'ATELIER-12', modelo: 'SOHO', desarrollo: 'ATELIER', fechaEntrega: '2026-01-27', supEstacionamiento: null, supConstruccion: 52.526, supExcedente: 4.461, precioSinAcabados: 2281538, precioConAcabados: 2281538, precioLista: 2281538, status: 'ESCRITURADO', mesesParaFirma: null, extras: { prototipo: 'E-B', manzana: 32, lote: 1, cajones: '1 C-INT' } }, diff --git a/apps/cotizador/src/data/unidades-estanza.ts b/apps/cotizador/src/data/unidades-estanza.ts index e3acd4f..1b4e3d5 100644 --- a/apps/cotizador/src/data/unidades-estanza.ts +++ b/apps/cotizador/src/data/unidades-estanza.ts @@ -36,7 +36,7 @@ export const UNIDADES_ESTANZA: Unidad[] = [ { codigo: 'ESTANZA-30', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2516765, precioConAcabados: 2516765, precioLista: 2516765, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-31', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: 18.296, precioSinAcabados: 2521121, precioConAcabados: 2521121, precioLista: 2521121, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-32', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2412850, precioConAcabados: 2412850, precioLista: 2412850, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, - { codigo: 'ESTANZA-33', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2388920, precioConAcabados: 2388920, precioLista: 2388920, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, + { codigo: 'ESTANZA-33', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2388920, precioConAcabados: 2388920, precioLista: 2388920, status: 'VENDIDO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-34', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2537697, precioConAcabados: 2537697, precioLista: 2537697, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-35', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2380999, precioConAcabados: 2380999, precioLista: 2380999, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-36', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2380999, precioConAcabados: 2380999, precioLista: 2380999, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, @@ -45,11 +45,11 @@ export const UNIDADES_ESTANZA: Unidad[] = [ { codigo: 'ESTANZA-39', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2485590, precioConAcabados: 2485590, precioLista: 2485590, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-40', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2506594, precioConAcabados: 2506594, precioLista: 2506594, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-41', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2388920, precioConAcabados: 2388920, precioLista: 2388920, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, - { codigo: 'ESTANZA-42', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2515999, precioConAcabados: 2515999, precioLista: 2515999, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, + { codigo: 'ESTANZA-42', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2515999, precioConAcabados: 2515999, precioLista: 2515999, status: 'VENDIDO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-43', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2443465, precioConAcabados: 2443465, precioLista: 2443465, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-44', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2287855, precioConAcabados: 2287855, precioLista: 2287855, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-45', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2269258, precioConAcabados: 2269258, precioLista: 2269258, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, - { codigo: 'ESTANZA-46', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: 6.3751, precioSinAcabados: 2581017, precioConAcabados: 2581017, precioLista: 2581017, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, + { codigo: 'ESTANZA-46', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: 6.3751, precioSinAcabados: 2581017, precioConAcabados: 2581017, precioLista: 2581017, status: 'VENDIDO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-47', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: 27.7262, precioSinAcabados: 2752486, precioConAcabados: 2752486, precioLista: 2752486, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-48', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2581017, precioConAcabados: 2581017, precioLista: 2581017, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-49', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2516765, precioConAcabados: 2516765, precioLista: 2516765, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, @@ -64,7 +64,7 @@ export const UNIDADES_ESTANZA: Unidad[] = [ { codigo: 'ESTANZA-58', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2529223, precioConAcabados: 2529223, precioLista: 2529223, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-59', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2388920, precioConAcabados: 2388920, precioLista: 2388920, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-60', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2558590, precioConAcabados: 2558590, precioLista: 2558590, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, - { codigo: 'ESTANZA-61', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2345652, precioConAcabados: 2345652, precioLista: 2345652, status: 'DISPONIBLE', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, + { codigo: 'ESTANZA-61', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2345652, precioConAcabados: 2345652, precioLista: 2345652, status: 'APARTADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-62', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2537697, precioConAcabados: 2537697, precioLista: 2537697, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-63', modelo: 'DUPLO A', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.06, supExcedente: null, precioSinAcabados: 2248242, precioConAcabados: 2248242, precioLista: 2248242, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, { codigo: 'ESTANZA-64', modelo: 'DUPLO B', desarrollo: 'ESTANZA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.18, supExcedente: null, precioSinAcabados: 2457269, precioConAcabados: 2457269, precioLista: 2457269, status: 'ESCRITURADO', mesesParaFirma: null, extras: { manzana: 92, lote: 32, cajones: 1 } }, diff --git a/apps/cotizador/src/data/unidades-senda.ts b/apps/cotizador/src/data/unidades-senda.ts index a99b74b..69449ef 100644 --- a/apps/cotizador/src/data/unidades-senda.ts +++ b/apps/cotizador/src/data/unidades-senda.ts @@ -4,7 +4,7 @@ import type { Unidad } from '../types' // Generado desde reference/cotizadores/SENDA.json (NO editar a mano; regenerar con scripts/generar-seeds.py). // Precio único por unidad: precioSinAcabados/precioConAcabados replican precioLista. export const UNIDADES_SENDA: Unidad[] = [ - { codigo: 'SENDA-411-1-2', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-11-07', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2287000, precioConAcabados: 2287000, precioLista: 2287000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, + { codigo: 'SENDA-411-1-2', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-11-07', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2287000, precioConAcabados: 2287000, precioLista: 2287000, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-401-26-10', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-02', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, { codigo: 'SENDA-401-26-11', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-09', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, { codigo: 'SENDA-401-26-12', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-16', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2468483, precioConAcabados: 2468483, precioLista: 2468483, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, @@ -23,7 +23,7 @@ export const UNIDADES_SENDA: Unidad[] = [ { codigo: 'SENDA-401-26-1', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-10-24', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, { codigo: 'SENDA-401-3-7', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 401, lote: 3, cajones: 2 } }, { codigo: 'SENDA-401-26-9', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-26', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2450000, precioConAcabados: 2450000, precioLista: 2450000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, - { codigo: 'SENDA-401-3-3', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 401, lote: 3, cajones: 2 } }, + { codigo: 'SENDA-401-3-3', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 401, lote: 3, cajones: 2 } }, { codigo: 'SENDA-401-3-8', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2750000, precioConAcabados: 2750000, precioLista: 2750000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 401, lote: 3, cajones: 2 } }, { codigo: 'SENDA-401-26-8', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-19', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 401, lote: 26, cajones: 1 } }, { codigo: 'SENDA-411-1-4', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-11-21', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2287000, precioConAcabados: 2287000, precioLista: 2287000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, @@ -32,11 +32,11 @@ export const UNIDADES_SENDA: Unidad[] = [ { codigo: 'SENDA-409-1-4', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-09-18', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-409-1-5', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-09-25', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-409-1-6', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-02', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, - { codigo: 'SENDA-409-1-7', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-09', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, + { codigo: 'SENDA-409-1-7', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-09', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-409-1-8', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-16', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-411-1-13', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-23', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, - { codigo: 'SENDA-409-1-10', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-30', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'BLOQUEADO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, - { codigo: 'SENDA-409-1-11', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-11-06', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, + { codigo: 'SENDA-409-1-10', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-30', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, + { codigo: 'SENDA-409-1-11', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-11-06', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-409-2-1', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-12-04', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 2, cajones: 2 } }, { codigo: 'SENDA-409-1-13', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2029-04-09', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'BLOQUEADO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 409, lote: 1, cajones: 1 } }, { codigo: 'SENDA-409-1-14', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2029-04-02', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'BLOQUEADO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 409, lote: 1, cajones: 1 } }, @@ -115,18 +115,18 @@ export const UNIDADES_SENDA: Unidad[] = [ { codigo: 'SENDA-409-1-1', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-08-28', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2750000, precioConAcabados: 2750000, precioLista: 2750000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-411-1-1', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-10-24', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2326593, precioConAcabados: 2326593, precioLista: 2326593, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-409-1-12', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-11-13', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, - { codigo: 'SENDA-410-1-15A', modelo: 'ESMERALDA PA', desarrollo: 'SENDA', fechaEntrega: '2027-05-15', supEstacionamiento: null, supConstruccion: 55.78, supExcedente: null, precioSinAcabados: 0, precioConAcabados: 0, precioLista: null, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'DUPLO', manzana: 410, lote: 1, cajones: 1 } }, + { codigo: 'SENDA-410-1-15A', modelo: 'ESMERALDA PA', desarrollo: 'SENDA', fechaEntrega: '2027-05-15', supEstacionamiento: null, supConstruccion: 55.78, supExcedente: null, precioSinAcabados: 0, precioConAcabados: 0, precioLista: null, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'DUPLO', manzana: 410, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-3', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-11-14', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-11', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-09', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-6', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-05', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-7', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-12', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, - { codigo: 'SENDA-411-1-8', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-19', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, + { codigo: 'SENDA-411-1-8', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-19', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-9', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2026-12-26', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-401-3-4', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 401, lote: 3, cajones: 2 } }, { codigo: 'SENDA-409-1-9', modelo: 'SANTIAGO', desarrollo: 'SENDA', fechaEntrega: '2027-10-23', supEstacionamiento: null, supConstruccion: 63.95, supExcedente: null, precioSinAcabados: 2700000, precioConAcabados: 2700000, precioLista: 2700000, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'LAUREL', manzana: 409, lote: 1, cajones: 2 } }, { codigo: 'SENDA-411-1-10', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-01-02', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-14', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-04-17', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, - { codigo: 'SENDA-411-1-23', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-02-13', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, + { codigo: 'SENDA-411-1-23', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-02-13', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'APARTADO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-16', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-04-03', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-15', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-04-10', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'VENDIDO', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, { codigo: 'SENDA-411-1-17', modelo: 'HIMALAYA', desarrollo: 'SENDA', fechaEntrega: '2027-03-27', supEstacionamiento: null, supConstruccion: 69.33, supExcedente: null, precioSinAcabados: 2451750, precioConAcabados: 2451750, precioLista: 2451750, status: 'DISPONIBLE', mesesParaFirma: null, extras: { prototipo: 'UNE-C', manzana: 411, lote: 1, cajones: 1 } }, diff --git a/apps/cotizador/src/data/unidades-solana.ts b/apps/cotizador/src/data/unidades-solana.ts index 352c682..dbfa5df 100644 --- a/apps/cotizador/src/data/unidades-solana.ts +++ b/apps/cotizador/src/data/unidades-solana.ts @@ -5,7 +5,7 @@ import type { Unidad } from '../types' // Precio único por unidad: precioSinAcabados/precioConAcabados replican precioLista. export const UNIDADES_SOLANA: Unidad[] = [ { codigo: 'SOLANA-1A', modelo: 'PANORAMA', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.33, supExcedente: 33.8094, precioSinAcabados: 2990445, precioConAcabados: 2990445, precioLista: 2990445, status: 'ESCRITURADO', mesesParaFirma: 3, extras: { prototipo: 'UNE-C', etapa: 'SOLANA I', cajones: 2 } }, - { codigo: 'SOLANA-2A', modelo: 'PANORAMA', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.33, supExcedente: 4.95, precioSinAcabados: 2767518, precioConAcabados: 2767518, precioLista: 2767518, status: 'VENDIDO', mesesParaFirma: 2, extras: { prototipo: 'UNE-C', etapa: 'SOLANA I', cajones: 2 } }, + { codigo: 'SOLANA-2A', modelo: 'PANORAMA', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.33, supExcedente: 4.95, precioSinAcabados: 2767518, precioConAcabados: 2767518, precioLista: 2767518, status: 'APARTADO', mesesParaFirma: 2, extras: { prototipo: 'UNE-C', etapa: 'SOLANA I', cajones: 2 } }, { codigo: 'SOLANA-3A', modelo: 'MIRADOR', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.33, supExcedente: 26.647, precioSinAcabados: 2922847, precioConAcabados: 2922847, precioLista: 2922847, status: 'ESCRITURADO', mesesParaFirma: 3, extras: { prototipo: 'UNE-C', etapa: 'SOLANA I', cajones: 1 } }, { codigo: 'SOLANA-4A', modelo: 'MIRADOR', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 69.33, supExcedente: 27.815, precioSinAcabados: 2952847, precioConAcabados: 2952847, precioLista: 2952847, status: 'ESCRITURADO', mesesParaFirma: 4, extras: { prototipo: 'UNE-C', etapa: 'SOLANA I', cajones: 1 } }, { codigo: 'SOLANA-5A', modelo: 'MIRADOR', desarrollo: 'SOLANA', fechaEntrega: null, supEstacionamiento: null, supConstruccion: 63.83, supExcedente: 22.067, precioSinAcabados: 3400000, precioConAcabados: 3400000, precioLista: 3400000, status: 'ESCRITURADO', mesesParaFirma: 4, extras: { prototipo: 'LAUREL', etapa: 'SOLANA I', cajones: 1 } }, diff --git a/apps/cotizador/src/data/unidades.ts b/apps/cotizador/src/data/unidades.ts index f91ec7b..87a7379 100644 --- a/apps/cotizador/src/data/unidades.ts +++ b/apps/cotizador/src/data/unidades.ts @@ -8,12 +8,12 @@ import { UNIDADES_SOLANA } from './unidades-solana' export const UNIDADES_SEED: Unidad[] = [ { codigo: 'U-101', modelo: '2RA', fechaEntrega: '2027-10-08', supEstacionamiento: 28.62, supConstruccion: 69.485, supExcedente: 21.336, precioSinAcabados: 4415000, precioConAcabados: 4579000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, - { codigo: 'U-102', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, + { codigo: 'U-102', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'APARTADO', desarrollo: 'DIAGONAL' }, { codigo: 'U-103', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, { codigo: 'U-104', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, { codigo: 'U-105', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, { codigo: 'U-106', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.132, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, - { codigo: 'U-107', modelo: '2RA', fechaEntrega: '2027-10-08', supEstacionamiento: 28.62, supConstruccion: 69.485, supExcedente: 20.842, precioSinAcabados: 4415000, precioConAcabados: 4579000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, + { codigo: 'U-107', modelo: '2RA', fechaEntrega: '2027-10-08', supEstacionamiento: 28.62, supConstruccion: 69.485, supExcedente: 20.842, precioSinAcabados: 4415000, precioConAcabados: 4579000, status: 'APARTADO', desarrollo: 'DIAGONAL' }, { codigo: 'U-108', modelo: '2RA', fechaEntrega: '2027-10-08', supEstacionamiento: 28.62, supConstruccion: 69.485, supExcedente: 18.97, precioSinAcabados: 4415000, precioConAcabados: 4579000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, { codigo: 'U-109', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.13, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, { codigo: 'U-110', modelo: '1R', fechaEntrega: '2027-10-08', supEstacionamiento: 14.31, supConstruccion: 47.87, supExcedente: 9.13, precioSinAcabados: 3107108.39, precioConAcabados: 3269000, status: 'DISPONIBLE', desarrollo: 'DIAGONAL' }, diff --git a/apps/cotizador/src/lib/filtros.test.ts b/apps/cotizador/src/lib/filtros.test.ts index cff6f25..4d65baf 100644 --- a/apps/cotizador/src/lib/filtros.test.ts +++ b/apps/cotizador/src/lib/filtros.test.ts @@ -4,9 +4,12 @@ import { UNIDADES_SEED } from '../data/unidades' import type { Unidad } from '../types' describe('filtrarUnidades', () => { + // U-102 y U-107 están APARTADO en el seed (maestro Enkontrol ago-2026) + const DISPONIBLES_SEED = UNIDADES_SEED.filter((u) => u.status === 'DISPONIBLE') + it('sin texto devuelve todas las unidades disponibles', () => { - expect(filtrarUnidades(UNIDADES_SEED, '')).toHaveLength(UNIDADES_SEED.length) - expect(filtrarUnidades(UNIDADES_SEED, ' ')).toHaveLength(UNIDADES_SEED.length) + expect(filtrarUnidades(UNIDADES_SEED, '')).toHaveLength(DISPONIBLES_SEED.length) + expect(filtrarUnidades(UNIDADES_SEED, ' ')).toHaveLength(DISPONIBLES_SEED.length) }) it('excluye unidades no disponibles', () => { @@ -15,7 +18,7 @@ describe('filtrarUnidades', () => { { ...UNIDADES_SEED[0], codigo: 'U-999', status: 'APARTADA' }, ] const resultado = filtrarUnidades(conApartada, '') - expect(resultado).toHaveLength(UNIDADES_SEED.length) + expect(resultado).toHaveLength(DISPONIBLES_SEED.length) expect(resultado.every((u) => u.status === 'DISPONIBLE')).toBe(true) }) @@ -31,10 +34,11 @@ describe('filtrarUnidades', () => { }) it('filtra por precio', () => { - // '45' aparece en 4,579,000 (U-101, U-107, U-108, U-114) y 4,450,000 (U-303, U-304, U-307, U-308) + // '45' aparece en 4,579,000 (U-101, U-108, U-114) y 4,450,000 (U-303, U-304, U-307, U-308) + // (U-107 también cuesta 4,579,000 pero está APARTADO y no se lista) const resultado = filtrarUnidades(UNIDADES_SEED, '45') expect(resultado.map((u) => u.codigo).sort()).toEqual( - ['U-101', 'U-107', 'U-108', 'U-114', 'U-303', 'U-304', 'U-307', 'U-308'].sort(), + ['U-101', 'U-108', 'U-114', 'U-303', 'U-304', 'U-307', 'U-308'].sort(), ) })