developmentStats — los números calculados del desarrollo
Cuando el objeto es un desarrollo, la respuesta trae un bloque developmentStats con los
indicadores agregados de sus unidades: cuántas hay y en qué estado, cuánto se comercializó separando
venta de alquiler, los m² disponibles, el precio por moneda y la distribución por tipología.
Son los mismos números que mostramos en nuestro panel de desarrollos. No tenés que recorrer las
unidades ni calcular nada: viene resuelto, en verify, en el POST, en el PUT y en el GET.
1. No confundirlo con canonical.development
Son dos bloques distintos, y la diferencia es de quién es cada uno:
canonical.development | lo que mandaste, tal cual. El eco de tu objeto |
developmentStats | lo que calculamos sobre tus unidades |
Por eso no está adentro de canonical: ahí sólo va tu objeto, verbatim.
2. El bloque, completo
{
"units": {
"total": 4,
"available": 1,
"sold": 1,
"rented": 1,
"reserved": 1,
"suspended": 0,
"withOperation": 3,
"availabilityRate": 25
},
"sale": { "units": 3, "commercialized": 2, "rate": 67 },
"rent": { "units": 1, "commercialized": 1, "rate": 100 },
"otherOperation": { "units": 0 },
"buildingArea": {
"unit": "m2",
"total": 220,
"available": 62,
"unavailable": 158,
"sold": 48,
"rented": 48,
"reserved": 62
},
"prices": {
"mixedCurrencies": true,
"byCurrency": {
"USD": { "units": 3, "from": 85000, "to": 120000, "total": 325000 },
"ARS": { "units": 1, "from": 450000, "to": 450000, "total": 450000 }
}
},
"typology": {
"byAmbiences": { "2": 2, "3": 2 },
"byRooms": { "1": 2, "2": 2 },
"byBuildingArea": { "48": 2, "62": 2 },
"byLandArea": { "70": 4 }
}
}
Los nombres son los mismos que vos posteás: tus m² cubiertos son buildingArea, tus dormitorios son
rooms, tus m² totales son landArea. No hay un vocabulario nuevo que aprender.
3. units — cuántas y en qué estado
| Campo | Qué es |
|---|---|
total | Cuántas unidades tiene el desarrollo |
available | Disponibles: ninguno de los cuatro estados de abajo |
sold · rented · reserved · suspended | Vendidas, alquiladas, reservadas, suspendidas |
withOperation | Unidades con al menos uno de esos cuatro estados |
availabilityRate | available / total, porcentaje entero |
withOperationcuenta unidades, no estados: una unidad vendida y reservada cuenta una. Por esoavailable + withOperationsiempre datotal, y los disponibles nunca dan negativo.
4. 🔴 sale y rent — venta y alquiler se miden SEPARADO
Es la parte que más conviene entender, porque es donde un promedio único miente.
Venta y alquiler son negocios distintos y no se promedian. Cada uno se mide contra su propio universo, y el evento que cuenta como comercializada es distinto:
| Universo | Se comercializa cuando está… | |
|---|---|---|
sale | las unidades en venta | vendida o reservada |
rent | las unidades en alquiler | alquilada o reservada |
En el ejemplo de arriba, el alquiler está colocado al 100 % y la venta al 67 %. Un promedio único diría "75 %" y no diría nada de ninguno de los dos negocios.
rate: null no es 0
| Valor | Significa |
|---|---|
0 | hay unidades de esa operación y no se colocó ninguna |
null | no hay unidades de esa operación: la pregunta no aplica |
Un desarrollo de puros alquileres devuelve "sale": { "units": 0, "commercialized": 0, "rate": null } —
no un 0 % de ventas que no existen.
otherOperation
Las unidades en permuta, traspaso, compartir o remate no entran en ninguna de las dos tasas: no son
venta ni alquiler. Se cuentan aparte para que sale.units + rent.units + otherOperation.units dé siempre
el total y ninguna unidad desaparezca.
5. buildingArea — los metros cuadrados cubiertos
| Campo | Qué es |
|---|---|
unit | La unidad de medida. Siempre m2 |
total | Los m² cubiertos de todas las unidades, sumados |
available | total − unavailable |
unavailable | Los que no están disponibles: vendido, reservado o alquilado |
sold · rented · reserved | Los de cada estado |
unavailablees un o, no una suma: los m² de una unidad vendida y reservada se descuentan una vez. Por esosold + rented + reservedpuede dar más queunavailable, yavailablenunca da negativo.
6. 🔴 prices — siempre por moneda
Un desarrollo puede tener unidades en monedas distintas, y eso es normal. Así que el precio se devuelve siempre desglosado:
| Campo | Qué es |
|---|---|
byCurrency.{MONEDA}.units | Cuántas unidades usan esa moneda |
byCurrency.{MONEDA}.from | El precio más bajo en esa moneda — el "desde" del desarrollo |
byCurrency.{MONEDA}.to | El más alto — el "hasta" |
byCurrency.{MONEDA}.total | La suma en esa moneda |
mixedCurrencies | true si hay más de una |
No devolvemos un total que cruce monedas. Un rango que mezcla dólares con pesos no es un dato degradado: es un dato falso. Si querés un total único, convertí vos con la cotización que uses — es una decisión tuya, no nuestra.
⚠️ Una unidad con precio pero sin moneda declarada no entra al desglose: no le inventamos una.
7. typology — la distribución de las unidades
Cuántas unidades hay de cada configuración. Son mapas: la clave es el valor y el valor es cuántas unidades.
| Mapa | Agrupa por |
|---|---|
byAmbiences | cantidad de ambientes (ambiences) |
byRooms | cantidad de dormitorios (rooms) |
byBuildingArea | m² cubiertos (buildingArea) |
byLandArea | m² totales (landArea) |
"byAmbiences": { "2": 18, "3": 22 } se lee: 18 unidades de 2 ambientes y 22 de 3.
No tienen techo: si tenés unidades de 9 ambientes, aparece la clave "9". Y una configuración que
ninguna unidad tiene no aparece — no sale como 0.
Recordá el cruce de nombres de nuestro modelo, el mismo que en una propiedad suelta:
ambiencesson los ambientes yroomslos dormitorios.
8. Un desarrollo sin unidades
El bloque sale igual, con los contadores en cero, los mapas vacíos y las dos tasas en null. No es lo
mismo que ausente: te está diciendo que el desarrollo existe y todavía no tiene unidades cargadas, que
es un estado normal.
El bloque no aparece cuando el objeto no es un desarrollo.
9. Y después
El objeto JSON del desarrollo — cómo se declara, y las reglas de las unidades
Verificar y dar de alta un desarrollo — el flujo y qué validamos
GET /properties — consultar un desarrollo ya cargado