feat(inventario): sincronización de estatus con reporte maestro Enkontrol (AGO26)
- 16 unidades actualizadas en Monday y en seeds del cotizador: apartados recientes (DIAGONAL U-102/U-107, SENDA, ESTANZA-61, SOLANA-2A), escrituradas (ATELIER-9), ventas confirmadas (ESTANZA-33/42/46, SENDA 409-1-10) - Script idempotente sync-estatus-maestro.py + análisis reproducible (reference/, sin PII) - Tests cotizador 61/61 verdes
This commit is contained in:
121
api-gateway/scripts/sync-estatus-maestro.py
Normal file
121
api-gateway/scripts/sync-estatus-maestro.py
Normal file
@@ -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()
|
||||
@@ -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' } },
|
||||
|
||||
@@ -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 } },
|
||||
|
||||
@@ -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 } },
|
||||
|
||||
@@ -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 } },
|
||||
|
||||
@@ -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' },
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user