Documentación

Guía técnica del Observatorio de Valores Inmobiliarios. Arquitectura, modelo de datos y API REST.

¿Qué es OMI?

Plataforma geoespacial para organismos públicos que trabajan con valores inmobiliarios.

OMI (Observatorio de Valores Inmobiliarios) es una plataforma web diseñada para la recolección, validación y análisis de datos inmobiliarios georreferenciados. Está orientada a organismos de catastro, tribunales de tasaciones y entidades que necesitan mantener bases de datos de valores de mercado actualizadas.

Características principales:

  • Mapa interactivo — Visualización de observaciones sobre OpenStreetMap con clusters y filtros
  • Geocoding integrado — Búsqueda de direcciones con Google Places API
  • Flujo de validación — Estados de observación con historial de cambios
  • Multi-proyecto — Datos aislados por jurisdicción con configuración independiente
  • Control de acceso — Roles granulares por proyecto (admin, editor, viewer)
  • Catálogos configurables — Tipos de propiedad, monedas, estados y más

Stack Técnico

Tecnologías utilizadas en el desarrollo de OMI.

Nuxt 4

Framework fullstack con SSR, API routes y auto-imports

Nuxt UI v4

Componentes accesibles con Tailwind CSS theming

Leaflet

Mapas interactivos con OpenStreetMap y clustering

PostgreSQL

Base de datos relacional con soporte geoespacial

Drizzle ORM

TypeScript ORM con migraciones y queries tipadas

TypeScript

Tipado estricto end-to-end, cliente y servidor

Modelo de Datos

Estructura de la base de datos y relaciones entre entidades.

Entidades principales

Proyectos

Unidad de organización principal. Cada proyecto representa una jurisdicción o zona geográfica con su propia configuración de mapa (centro, zoom) y equipo de usuarios.

Observaciones

Registro de un valor inmobiliario georreferenciado. Incluye datos del inmueble (superficie, tipo), valor de mercado, ubicación (lat/lng) y estado de validación. Cada observación pertenece a un proyecto.

Usuarios

Usuarios del sistema con email y contraseña. Un usuario puede tener diferentes roles en diferentes proyectos (ej: admin en Proyecto A, viewer en Proyecto B).

Catálogos

Tablas de lookup para normalizar datos. Incluyen tipo de propiedad, moneda, origen del valor, estado legal, conservación, destino, tipo de barrio, afectación, forma del lote y posición en manzana.

Tablas auxiliares de observación

1:1
observation_location

Datos de ubicación: padrón, tipo de barrio, forma del lote, posición en manzana

1:1
observation_building

Datos de edificación: superficie construida, ambientes, antigüedad, estado de conservación

1:1
observation_rural

Datos rurales: uso principal, superficies por cultivo, sistema de riego

1:N
observation_status_history

Historial de cambios de estado con usuario, fecha y motivo

Estados de Observación

Flujo de validación de las observaciones inmobiliarias.
CargadoPosicionadoRevisiónCompletadoOutlierEliminado
Cargadocargado

Observación recién creada, datos básicos ingresados

Posicionadoposicionado

Ubicación geográfica verificada y confirmada

Revisiónrevision

En proceso de validación por un revisor

Completadocompletado

Datos validados y aprobados para uso

Outlieroutlier

Marcado como valor atípico/anómalo

Eliminadoeliminado

Soft delete, no visible en queries normales

Roles y Permisos

Control de acceso granular por proyecto.

Super Admin

super_admin

Acceso total al sistema. Gestiona usuarios, proyectos y configuración global.

Project Admin

project_admin

Administra un proyecto específico. Puede gestionar usuarios del proyecto y validar observaciones.

Editor

editor

Carga y edita observaciones. No puede validar ni eliminar observaciones de otros.

Viewer

viewer

Solo lectura. Puede ver el mapa y exportar datos públicos.

Catálogos

Tablas de lookup para normalización de datos.
TipoDescripciónEjemplos
property_typeTipo de propiedadCasa, Departamento, Terreno, Local comercial
currencyMonedaARS, USD, EUR
value_originOrigen del valorTasación, Publicación, Escritura
legal_statusEstado legalEscriturado, Posesión, Boleto
conservation_stateEstado de conservaciónNuevo, Bueno, Regular, Malo
destinationDestinoVivienda, Comercial, Industrial
neighborhood_typeTipo de barrioResidencial, Mixto, Comercial
affectationAfectaciónNinguna, Patrimonio, Expropiación
shape_typeForma del loteRegular, Irregular, Esquina
block_positionPosición en manzanaMedianero, Esquina, Interno
source_typeTipo de fuenteInmobiliaria, Particular, Gobierno

API Endpoints

Endpoints REST disponibles para integración.
POST/api/auth/loginIniciar sesión con email y password
GET/api/auth/meObtener usuario actual y sus proyectos Auth
POST/api/auth/logoutCerrar sesión Auth
GET/api/projectsListar proyectos del usuario actual Auth
GET/api/projects/{id}/observationsObtener observaciones de un proyecto (GeoJSON) Auth
POST/api/projects/{id}/observationsCrear nueva observación Auth
PATCH/api/projects/{id}/observations/{obsId}Actualizar observación existente Auth
DELETE/api/projects/{id}/observations/{obsId}Eliminar observación (soft delete) Auth
GET/api/catalogs/{type}Obtener catálogo por tipo Auth
GET/api/admin/usersListar usuarios (solo admin) Auth
POST/api/admin/usersCrear usuario (solo admin) Auth
PATCH/api/admin/users/{id}Actualizar usuario (solo admin) Auth
DELETE/api/admin/users/{id}Eliminar usuario (solo admin) Auth

Todos los endpoints con Auth requieren una sesión activa. La autenticación se maneja con cookies de sesión (nuxt-auth-utils).