{
  "openapi": "3.1.0",
  "info": {
    "title": "Comunidesk Developer Gateway",
    "version": "1.0.0",
    "description": "API del gateway Comunidesk. Autenticación OAuth2 de la app más JWT de la cuenta del usuario."
  },
  "servers": [
    {
      "url": "https://gateway.comunidesk.com",
      "description": "Gateway producción"
    }
  ],
  "tags": [
    {
      "name": "auth",
      "description": "OAuth2 de tu aplicación"
    },
    {
      "name": "me",
      "description": "Capacidades del usuario autenticado"
    },
    {
      "name": "ai",
      "description": "IA del gateway (chat, extract y proxy /api/ai/*)"
    },
    {
      "name": "flex-pro",
      "description": "Flex Pro runtime y marketplace (proxy /api/flex-pro/*)"
    },
    {
      "name": "edificios",
      "description": "Edificios — Catálogo de edificios y configuración de cobro."
    },
    {
      "name": "departamentos",
      "description": "Departamentos / Unidades — Unidades del edificio: departamento, bodega o estacionamiento."
    },
    {
      "name": "egresos",
      "description": "Egresos — Egresos y cuentas por pagar de la comunidad."
    },
    {
      "name": "gastos-comunes",
      "description": "Gastos comunes — Periodos de gasto común y prorrateo por unidad."
    },
    {
      "name": "pagos",
      "description": "Pagos (gasto común) — Pagos de gasto común por departamento."
    },
    {
      "name": "ingresos",
      "description": "Ingresos (finanzas) — Ingresos del módulo Finanzas del edificio."
    },
    {
      "name": "empleados",
      "description": "Empleados — Personal del edificio."
    },
    {
      "name": "proveedores",
      "description": "Proveedores — Proveedores y contactos del edificio."
    },
    {
      "name": "consumos",
      "description": "Consumos — Lecturas de luz, agua y gas por periodo."
    },
    {
      "name": "mantenciones",
      "description": "Mantenciones — Solicitudes y tickets de mantención."
    },
    {
      "name": "multas",
      "description": "Multas — Multas aplicadas por departamento."
    },
    {
      "name": "visitas",
      "description": "Visitas / Encomiendas — Registro de visitas y encomiendas."
    },
    {
      "name": "areas-comunes",
      "description": "Áreas comunes — Áreas comunes reservables del edificio."
    },
    {
      "name": "reservas",
      "description": "Reservas — Reservas de áreas comunes."
    },
    {
      "name": "reglamentos",
      "description": "Reglamentos — Reglamentos internos de la comunidad."
    },
    {
      "name": "documentos-legales",
      "description": "Documentos legales — Documentos legales del edificio."
    },
    {
      "name": "diario-mural",
      "description": "Diario mural — Anuncios del diario mural."
    },
    {
      "name": "comunicaciones",
      "description": "Comunicaciones — Comunicaciones enviadas a residentes."
    },
    {
      "name": "tickets",
      "description": "Tickets — Tickets de soporte y atención."
    },
    {
      "name": "votaciones",
      "description": "Votaciones — Votaciones y asambleas de la comunidad."
    },
    {
      "name": "convenios",
      "description": "Convenios de pago — Convenios de pago por deuda."
    },
    {
      "name": "cotizaciones",
      "description": "Cotizaciones — Cotizaciones de proveedores."
    },
    {
      "name": "grupos-unidades",
      "description": "Grupos de unidades — Grupos de unidades para prorrateo o cobro."
    },
    {
      "name": "inventario",
      "description": "Inventario — Inventario de bienes del edificio."
    },
    {
      "name": "aprobaciones",
      "description": "Aprobaciones — Solicitudes de aprobación internas."
    },
    {
      "name": "seguros",
      "description": "Seguros — Seguros por departamento."
    },
    {
      "name": "siniestros",
      "description": "Siniestros — Siniestros y reclamos de seguros."
    },
    {
      "name": "plan-emergencia",
      "description": "Plan de emergencia — Planes de emergencia del edificio."
    },
    {
      "name": "procedimientos",
      "description": "Procedimientos — Procedimientos internos operativos."
    },
    {
      "name": "pagos-tesoreria",
      "description": "Pagos (finanzas) — Pagos del módulo Finanzas del edificio."
    },
    {
      "name": "fondos-reserva",
      "description": "Fondos de reserva — Fondos de reserva de la comunidad."
    },
    {
      "name": "configuracion-edificio",
      "description": "Configuración del edificio — Parámetros de cobro, mora, notificaciones, firma y reglas del edificio."
    },
    {
      "name": "tipos-multa",
      "description": "Tipos de multa — Catálogo de tipos de multa configurables por edificio."
    },
    {
      "name": "finanzas-config",
      "description": "Configuración finanzas — Categorías y subcategorías de egresos e ingresos del módulo Finanzas."
    },
    {
      "name": "gastos-departamento",
      "description": "Gastos por unidad — Prorrateo de gasto común por departamento/unidad."
    },
    {
      "name": "asignaciones-usuario",
      "description": "Asignaciones de usuario — Vincula un usuario a un edificio/unidad con un rol."
    },
    {
      "name": "asignaciones-rol",
      "description": "Asignaciones de rol — RBAC por edificio: rol, permisos extra y exclusiones."
    },
    {
      "name": "grupos-permisos",
      "description": "Grupos de permisos — Grupos custom de permisos reutilizables por edificio."
    },
    {
      "name": "permisos-usuario",
      "description": "Permisos adicionales — Permisos extra otorgados a un usuario en un edificio."
    },
    {
      "name": "turnos-planificacion",
      "description": "Turnos y planificación — Turnos de personal: fecha, horario y empleados asignados."
    },
    {
      "name": "tareas",
      "description": "Tareas — Tareas de planificación operativas, opcionales a un turno."
    },
    {
      "name": "comite-miembros",
      "description": "Miembros del comité — Integrantes del comité de administración del edificio."
    },
    {
      "name": "comite-reuniones",
      "description": "Reuniones de comité — Reuniones programadas del comité con orden del día."
    },
    {
      "name": "comite-actas",
      "description": "Actas de comité — Actas formales asociadas a reuniones de comité."
    },
    {
      "name": "plusvalia-config",
      "description": "Plusvalía (config) — Factores y orientación para el índice de plusvalía del edificio."
    },
    {
      "name": "plusvalia-snapshots",
      "description": "Plusvalía (histórico) — Snapshots periódicos del índice de plusvalía."
    },
    {
      "name": "transparencia",
      "description": "Transparencia — Portal de transparencia comunitaria (lectura agregada de finanzas, comité y seguros)."
    },
    {
      "name": "reportes",
      "description": "Reportes — Reportes financieros, de morosidad, mantenciones y ocupación."
    },
    {
      "name": "reservas-estacionamiento-visita",
      "description": "Estacionamientos de visitas — Reservas de estacionamiento para visitas."
    },
    {
      "name": "actividad",
      "description": "Registro de actividad — Auditoría de acciones de usuarios en el edificio."
    },
    {
      "name": "monitoreo-equipos",
      "description": "Monitoreo de equipos — Configuración del agente de monitoreo en equipos del personal."
    },
    {
      "name": "cotizaciones-seguro",
      "description": "Cotización de seguros — Cotizaciones rápidas de seguros del edificio (distinto de cotizaciones a proveedores)."
    },
    {
      "name": "registros-horas",
      "description": "Registro de horas — Horas trabajadas por empleado y periodo."
    },
    {
      "name": "pagos-empleados",
      "description": "Pagos a empleados — Liquidaciones y pagos de personal."
    },
    {
      "name": "mantenciones-periodicas",
      "description": "Mantenciones periódicas — Planes de mantención recurrentes del edificio."
    },
    {
      "name": "procedimientos-ejecucion",
      "description": "Ejecuciones de procedimiento — Instancias de ejecución de procedimientos internos."
    },
    {
      "name": "invitaciones",
      "description": "Invitaciones — Invitaciones pendientes a usuarios del edificio."
    },
    {
      "name": "centro-datos",
      "description": "Centro de datos — Cargas e importaciones masivas de datos históricos del edificio."
    },
    {
      "name": "finanzas",
      "description": "Finanzas — Vista agregada del módulo Finanzas (egresos, ingresos y tesorería)."
    },
    {
      "name": "mensajes",
      "description": "Mensajes — Chat entre residentes y administración (hilos y mensajes del edificio)."
    },
    {
      "name": "reporte-anual",
      "description": "Reporte anual de gestión — Reporte anual con checklist, slides, comentarios y exportación PPTX."
    },
    {
      "name": "gestion-transversal-personal",
      "description": "Gestión transversal — Banco de reservas — Personal de reserva compartido entre edificios (comunidesk_transversal)."
    },
    {
      "name": "gestion-transversal-equipo",
      "description": "Gestión transversal — Equipo de soporte — Miembros del equipo de soporte transversal con permisos por rol."
    },
    {
      "name": "gestion-transversal-asignaciones",
      "description": "Gestión transversal — Asignaciones — Asignaciones de personal titular y reemplazo entre edificios."
    },
    {
      "name": "egresos-exclusiones-gc",
      "description": "Exclusiones de egreso en gasto común — Postergación de cobro de egresos/cuotas en el gasto común mensual."
    },
    {
      "name": "conciliaciones-bancarias",
      "description": "Conciliaciones bancarias — Conciliación de movimientos bancarios con gastos comunes, egresos e ingresos."
    },
    {
      "name": "movimientos-bancarios",
      "description": "Movimientos bancarios — Movimientos importados de cartola bancaria y su estado de conciliación."
    },
    {
      "name": "cargas-cartola",
      "description": "Cargas de cartola — Historial de importaciones de cartola bancaria."
    }
  ],
  "paths": {
    "/v1/me/capabilities": {
      "get": {
        "tags": [
          "me"
        ],
        "operationId": "getCapabilities",
        "summary": "Módulos disponibles tras el login",
        "description": "Lista los módulos y endpoints que el usuario puede usar. Ideal para armar el menú en apps iOS/Android.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Filtrar al contexto de un edificio"
          }
        ],
        "responses": {
          "200": {
            "description": "Capacidades",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "user": {
                      "type": "object"
                    },
                    "edificios": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "modules": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "groups": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "protocols": {
                      "type": "object"
                    },
                    "webParity": {
                      "type": "object",
                      "description": "Mapa de paridad web ↔ gateway: módulos REST, rutas IA y Flex Pro."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/oauth/token": {
      "post": {
        "tags": [
          "auth"
        ],
        "operationId": "oauthToken",
        "summary": "Obtener access token OAuth2",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "required": [
                  "grant_type"
                ],
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "enum": [
                      "client_credentials",
                      "authorization_code",
                      "refresh_token"
                    ]
                  },
                  "scope": {
                    "type": "string"
                  },
                  "code": {
                    "type": "string"
                  },
                  "redirect_uri": {
                    "type": "string"
                  },
                  "refresh_token": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "access_token": {
                      "type": "string"
                    },
                    "token_type": {
                      "type": "string"
                    },
                    "expires_in": {
                      "type": "integer"
                    },
                    "scope": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/ai/models": {
      "get": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_models_GET",
        "summary": "/api/ai/models",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:models"
          }
        }
      }
    },
    "/v1/ai/chat": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_chat_POST",
        "summary": "/api/ai/chat",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:chat"
          }
        }
      }
    },
    "/v1/ai/extract/egresos": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_extract_egresos_POST",
        "summary": "/api/ai/egresos/extract",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:extract"
          }
        }
      }
    },
    "/v1/ai/extract/cartola": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_extract_cartola_POST",
        "summary": "/api/ai/cartola/extract",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:extract"
          }
        }
      }
    },
    "/v1/ai/extract/consumos": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_extract_consumos_POST",
        "summary": "/api/ai/consumos/extract",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:extract"
          }
        }
      }
    },
    "/v1/ai/extract/empleados": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_extract_empleados_POST",
        "summary": "/api/ai/empleados/extract",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:extract"
          }
        }
      }
    },
    "/v1/ai/extract/procedimientos": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_extract_procedimientos_POST",
        "summary": "/api/ai/procedimientos/extract",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:extract"
          }
        }
      }
    },
    "/v1/ai/building-facts": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_building_facts_POST",
        "summary": "/api/ai/building-facts",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/assist": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_assist_POST",
        "summary": "/api/ai/assist",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/ops-assistant": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_ops_assistant_POST",
        "summary": "/api/ai/ops-assistant",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/community-knowledge": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_community_knowledge_POST",
        "summary": "/api/ai/community-knowledge",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/centro-datos/map": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_centro_datos_map_POST",
        "summary": "/api/ai/centro-datos/map",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/egresos/map-modulos": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_egresos_map_modulos_POST",
        "summary": "/api/ai/egresos/map-modulos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/flex-pro/generate": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_flex_pro_generate_POST",
        "summary": "/api/ai/flex-pro/generate",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/voice": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_voice_POST",
        "summary": "/api/ai/voice",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/voice/transcribe": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_voice_transcribe_POST",
        "summary": "/api/ai/voice/transcribe",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/edificio-onboarding/jobs": {
      "get": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_edificio_onboarding_jobs_GET",
        "summary": "/api/ai/edificio-onboarding/jobs",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      },
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_edificio_onboarding_jobs_POST",
        "summary": "/api/ai/edificio-onboarding/jobs",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/edificio-onboarding/jobs/{jobId}": {
      "get": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_edificio_onboarding_jobs_jobId__GET",
        "summary": "/api/ai/edificio-onboarding/jobs/{jobId}",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      },
      "patch": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_edificio_onboarding_jobs_jobId__PATCH",
        "summary": "/api/ai/edificio-onboarding/jobs/{jobId}",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/edificio-onboarding/jobs/{jobId}/upload": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_edificio_onboarding_jobs_jobId_upload_POST",
        "summary": "/api/ai/edificio-onboarding/jobs/{jobId}/upload",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/ai/reporte-anual/presentacion": {
      "post": {
        "tags": [
          "ai"
        ],
        "operationId": "ai__v1_ai_reporte_anual_presentacion_POST",
        "summary": "/api/ai/reporte-anual/presentacion",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: ai:web"
          }
        }
      }
    },
    "/v1/flex-pro/modules": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_modules_GET",
        "summary": "/api/flex-pro/modules",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      },
      "put": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_modules_PUT",
        "summary": "/api/flex-pro/modules",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      },
      "delete": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_modules_DELETE",
        "summary": "/api/flex-pro/modules",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      }
    },
    "/v1/flex-pro/sources": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_sources_GET",
        "summary": "/api/flex-pro/sources",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      },
      "post": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_sources_POST",
        "summary": "/api/flex-pro/sources",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      }
    },
    "/v1/flex-pro/versions": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_versions_GET",
        "summary": "/api/flex-pro/versions",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      },
      "post": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_versions_POST",
        "summary": "/api/flex-pro/versions",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      }
    },
    "/v1/flex-pro/runtime/active": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_runtime_active_GET",
        "summary": "/api/flex-pro/runtime/active",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:runtime"
          }
        }
      }
    },
    "/v1/flex-pro/runtime/bundle": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_runtime_bundle_GET",
        "summary": "/api/flex-pro/runtime/bundle",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:runtime"
          }
        }
      }
    },
    "/v1/flex-pro/edificio/install": {
      "post": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_edificio_install_POST",
        "summary": "/api/flex-pro/edificio/install",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:manage"
          }
        }
      }
    },
    "/v1/flex-pro/marketplace/publish": {
      "post": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_marketplace_publish_POST",
        "summary": "/api/flex-pro/marketplace/publish",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:marketplace"
          }
        }
      }
    },
    "/v1/flex-pro/marketplace/install": {
      "post": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_marketplace_install_POST",
        "summary": "/api/flex-pro/marketplace/install",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:marketplace"
          }
        }
      }
    },
    "/v1/flex-pro/marketplace/installs": {
      "get": {
        "tags": [
          "flex-pro"
        ],
        "operationId": "flex-pro__v1_flex_pro_marketplace_installs_GET",
        "summary": "/api/flex-pro/marketplace/installs",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Scope requerido: flex-pro:marketplace"
          }
        }
      }
    },
    "/v1/rest/Edificios": {
      "get": {
        "tags": [
          "edificios"
        ],
        "operationId": "listEdificio",
        "summary": "Listar Edificios",
        "description": "Catálogo de edificios y configuración de cobro.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Edificio"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "edificios"
        ],
        "operationId": "createEdificio",
        "summary": "Crear Edificios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Edificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Edificio"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Edificios/{id}": {
      "get": {
        "tags": [
          "edificios"
        ],
        "operationId": "getEdificio",
        "summary": "Obtener Edificios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Edificio"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "edificios"
        ],
        "operationId": "updateEdificio",
        "summary": "Actualizar Edificios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Edificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "edificios"
        ],
        "operationId": "deleteEdificio",
        "summary": "Eliminar Edificios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Departamentos": {
      "get": {
        "tags": [
          "departamentos"
        ],
        "operationId": "listDepartamento",
        "summary": "Listar Departamentos / Unidades",
        "description": "Unidades del edificio: departamento, bodega o estacionamiento.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Departamento"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "departamentos"
        ],
        "operationId": "createDepartamento",
        "summary": "Crear Departamentos / Unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Departamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Departamento"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Departamentos/{id}": {
      "get": {
        "tags": [
          "departamentos"
        ],
        "operationId": "getDepartamento",
        "summary": "Obtener Departamentos / Unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Departamento"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "departamentos"
        ],
        "operationId": "updateDepartamento",
        "summary": "Actualizar Departamentos / Unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Departamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "departamentos"
        ],
        "operationId": "deleteDepartamento",
        "summary": "Eliminar Departamentos / Unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Egresos": {
      "get": {
        "tags": [
          "egresos"
        ],
        "operationId": "listEgreso",
        "summary": "Listar Egresos",
        "description": "Egresos y cuentas por pagar de la comunidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Egreso"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "egresos"
        ],
        "operationId": "createEgreso",
        "summary": "Crear Egresos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Egreso"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Egreso"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Egresos/{id}": {
      "get": {
        "tags": [
          "egresos"
        ],
        "operationId": "getEgreso",
        "summary": "Obtener Egresos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Egreso"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "egresos"
        ],
        "operationId": "updateEgreso",
        "summary": "Actualizar Egresos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Egreso"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "egresos"
        ],
        "operationId": "deleteEgreso",
        "summary": "Eliminar Egresos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GastosComunes": {
      "get": {
        "tags": [
          "gastos-comunes"
        ],
        "operationId": "listGastoComun",
        "summary": "Listar Gastos comunes",
        "description": "Periodos de gasto común y prorrateo por unidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GastoComun"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "gastos-comunes"
        ],
        "operationId": "createGastoComun",
        "summary": "Crear Gastos comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GastoComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GastoComun"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GastosComunes/{id}": {
      "get": {
        "tags": [
          "gastos-comunes"
        ],
        "operationId": "getGastoComun",
        "summary": "Obtener Gastos comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/GastoComun"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "gastos-comunes"
        ],
        "operationId": "updateGastoComun",
        "summary": "Actualizar Gastos comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GastoComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "gastos-comunes"
        ],
        "operationId": "deleteGastoComun",
        "summary": "Eliminar Gastos comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Pagos": {
      "get": {
        "tags": [
          "pagos"
        ],
        "operationId": "listPago",
        "summary": "Listar Pagos (gasto común)",
        "description": "Pagos de gasto común por departamento.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Pago"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "pagos"
        ],
        "operationId": "createPago",
        "summary": "Crear Pagos (gasto común)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Pago"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pago"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Pagos/{id}": {
      "get": {
        "tags": [
          "pagos"
        ],
        "operationId": "getPago",
        "summary": "Obtener Pagos (gasto común)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Pago"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "pagos"
        ],
        "operationId": "updatePago",
        "summary": "Actualizar Pagos (gasto común)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Pago"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "pagos"
        ],
        "operationId": "deletePago",
        "summary": "Eliminar Pagos (gasto común)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Ingresos": {
      "get": {
        "tags": [
          "ingresos"
        ],
        "operationId": "listIngresoEdificio",
        "summary": "Listar Ingresos (finanzas)",
        "description": "Ingresos del módulo Finanzas del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/IngresoEdificio"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "ingresos"
        ],
        "operationId": "createIngresoEdificio",
        "summary": "Crear Ingresos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngresoEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngresoEdificio"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Ingresos/{id}": {
      "get": {
        "tags": [
          "ingresos"
        ],
        "operationId": "getIngresoEdificio",
        "summary": "Obtener Ingresos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IngresoEdificio"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "ingresos"
        ],
        "operationId": "updateIngresoEdificio",
        "summary": "Actualizar Ingresos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngresoEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "ingresos"
        ],
        "operationId": "deleteIngresoEdificio",
        "summary": "Eliminar Ingresos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Empleados": {
      "get": {
        "tags": [
          "empleados"
        ],
        "operationId": "listEmpleado",
        "summary": "Listar Empleados",
        "description": "Personal del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Empleado"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "empleados"
        ],
        "operationId": "createEmpleado",
        "summary": "Crear Empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Empleado"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Empleado"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Empleados/{id}": {
      "get": {
        "tags": [
          "empleados"
        ],
        "operationId": "getEmpleado",
        "summary": "Obtener Empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Empleado"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "empleados"
        ],
        "operationId": "updateEmpleado",
        "summary": "Actualizar Empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Empleado"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "empleados"
        ],
        "operationId": "deleteEmpleado",
        "summary": "Eliminar Empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Proveedores": {
      "get": {
        "tags": [
          "proveedores"
        ],
        "operationId": "listProveedor",
        "summary": "Listar Proveedores",
        "description": "Proveedores y contactos del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Proveedor"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "proveedores"
        ],
        "operationId": "createProveedor",
        "summary": "Crear Proveedores",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Proveedor"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Proveedor"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Proveedores/{id}": {
      "get": {
        "tags": [
          "proveedores"
        ],
        "operationId": "getProveedor",
        "summary": "Obtener Proveedores",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Proveedor"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "proveedores"
        ],
        "operationId": "updateProveedor",
        "summary": "Actualizar Proveedores",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Proveedor"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "proveedores"
        ],
        "operationId": "deleteProveedor",
        "summary": "Eliminar Proveedores",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Consumos": {
      "get": {
        "tags": [
          "consumos"
        ],
        "operationId": "listConsumo",
        "summary": "Listar Consumos",
        "description": "Lecturas de luz, agua y gas por periodo.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Consumo"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "consumos"
        ],
        "operationId": "createConsumo",
        "summary": "Crear Consumos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Consumo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Consumo"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Consumos/{id}": {
      "get": {
        "tags": [
          "consumos"
        ],
        "operationId": "getConsumo",
        "summary": "Obtener Consumos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Consumo"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "consumos"
        ],
        "operationId": "updateConsumo",
        "summary": "Actualizar Consumos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Consumo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "consumos"
        ],
        "operationId": "deleteConsumo",
        "summary": "Eliminar Consumos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Mantenciones": {
      "get": {
        "tags": [
          "mantenciones"
        ],
        "operationId": "listMantencion",
        "summary": "Listar Mantenciones",
        "description": "Solicitudes y tickets de mantención.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Mantencion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "mantenciones"
        ],
        "operationId": "createMantencion",
        "summary": "Crear Mantenciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Mantencion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mantencion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Mantenciones/{id}": {
      "get": {
        "tags": [
          "mantenciones"
        ],
        "operationId": "getMantencion",
        "summary": "Obtener Mantenciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Mantencion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "mantenciones"
        ],
        "operationId": "updateMantencion",
        "summary": "Actualizar Mantenciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Mantencion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "mantenciones"
        ],
        "operationId": "deleteMantencion",
        "summary": "Eliminar Mantenciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Multas": {
      "get": {
        "tags": [
          "multas"
        ],
        "operationId": "listMultaDepartamento",
        "summary": "Listar Multas",
        "description": "Multas aplicadas por departamento.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MultaDepartamento"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "multas"
        ],
        "operationId": "createMultaDepartamento",
        "summary": "Crear Multas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MultaDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultaDepartamento"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Multas/{id}": {
      "get": {
        "tags": [
          "multas"
        ],
        "operationId": "getMultaDepartamento",
        "summary": "Obtener Multas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MultaDepartamento"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "multas"
        ],
        "operationId": "updateMultaDepartamento",
        "summary": "Actualizar Multas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MultaDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "multas"
        ],
        "operationId": "deleteMultaDepartamento",
        "summary": "Eliminar Multas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Visitas": {
      "get": {
        "tags": [
          "visitas"
        ],
        "operationId": "listVisita",
        "summary": "Listar Visitas / Encomiendas",
        "description": "Registro de visitas y encomiendas.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Visita"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "visitas"
        ],
        "operationId": "createVisita",
        "summary": "Crear Visitas / Encomiendas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Visita"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Visita"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Visitas/{id}": {
      "get": {
        "tags": [
          "visitas"
        ],
        "operationId": "getVisita",
        "summary": "Obtener Visitas / Encomiendas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Visita"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "visitas"
        ],
        "operationId": "updateVisita",
        "summary": "Actualizar Visitas / Encomiendas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Visita"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "visitas"
        ],
        "operationId": "deleteVisita",
        "summary": "Eliminar Visitas / Encomiendas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/AreasComunes": {
      "get": {
        "tags": [
          "areas-comunes"
        ],
        "operationId": "listAreaComun",
        "summary": "Listar Áreas comunes",
        "description": "Áreas comunes reservables del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AreaComun"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "areas-comunes"
        ],
        "operationId": "createAreaComun",
        "summary": "Crear Áreas comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AreaComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AreaComun"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/AreasComunes/{id}": {
      "get": {
        "tags": [
          "areas-comunes"
        ],
        "operationId": "getAreaComun",
        "summary": "Obtener Áreas comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AreaComun"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "areas-comunes"
        ],
        "operationId": "updateAreaComun",
        "summary": "Actualizar Áreas comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AreaComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "areas-comunes"
        ],
        "operationId": "deleteAreaComun",
        "summary": "Eliminar Áreas comunes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Reservas": {
      "get": {
        "tags": [
          "reservas"
        ],
        "operationId": "listReserva",
        "summary": "Listar Reservas",
        "description": "Reservas de áreas comunes.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Reserva"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "reservas"
        ],
        "operationId": "createReserva",
        "summary": "Crear Reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Reserva"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Reservas/{id}": {
      "get": {
        "tags": [
          "reservas"
        ],
        "operationId": "getReserva",
        "summary": "Obtener Reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Reserva"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "reservas"
        ],
        "operationId": "updateReserva",
        "summary": "Actualizar Reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "reservas"
        ],
        "operationId": "deleteReserva",
        "summary": "Eliminar Reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Reglamentos": {
      "get": {
        "tags": [
          "reglamentos"
        ],
        "operationId": "listReglamento",
        "summary": "Listar Reglamentos",
        "description": "Reglamentos internos de la comunidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Reglamento"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "reglamentos"
        ],
        "operationId": "createReglamento",
        "summary": "Crear Reglamentos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reglamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Reglamento"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Reglamentos/{id}": {
      "get": {
        "tags": [
          "reglamentos"
        ],
        "operationId": "getReglamento",
        "summary": "Obtener Reglamentos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Reglamento"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "reglamentos"
        ],
        "operationId": "updateReglamento",
        "summary": "Actualizar Reglamentos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reglamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "reglamentos"
        ],
        "operationId": "deleteReglamento",
        "summary": "Eliminar Reglamentos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/DocumentosLegales": {
      "get": {
        "tags": [
          "documentos-legales"
        ],
        "operationId": "listDocumentoLegal",
        "summary": "Listar Documentos legales",
        "description": "Documentos legales del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DocumentoLegal"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "documentos-legales"
        ],
        "operationId": "createDocumentoLegal",
        "summary": "Crear Documentos legales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentoLegal"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentoLegal"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/DocumentosLegales/{id}": {
      "get": {
        "tags": [
          "documentos-legales"
        ],
        "operationId": "getDocumentoLegal",
        "summary": "Obtener Documentos legales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/DocumentoLegal"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "documentos-legales"
        ],
        "operationId": "updateDocumentoLegal",
        "summary": "Actualizar Documentos legales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentoLegal"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "documentos-legales"
        ],
        "operationId": "deleteDocumentoLegal",
        "summary": "Eliminar Documentos legales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/AnunciosDiarioMural": {
      "get": {
        "tags": [
          "diario-mural"
        ],
        "operationId": "listAnuncioDiarioMural",
        "summary": "Listar Diario mural",
        "description": "Anuncios del diario mural.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AnuncioDiarioMural"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "diario-mural"
        ],
        "operationId": "createAnuncioDiarioMural",
        "summary": "Crear Diario mural",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnuncioDiarioMural"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnuncioDiarioMural"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/AnunciosDiarioMural/{id}": {
      "get": {
        "tags": [
          "diario-mural"
        ],
        "operationId": "getAnuncioDiarioMural",
        "summary": "Obtener Diario mural",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AnuncioDiarioMural"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "diario-mural"
        ],
        "operationId": "updateAnuncioDiarioMural",
        "summary": "Actualizar Diario mural",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnuncioDiarioMural"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "diario-mural"
        ],
        "operationId": "deleteAnuncioDiarioMural",
        "summary": "Eliminar Diario mural",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Comunicaciones": {
      "get": {
        "tags": [
          "comunicaciones"
        ],
        "operationId": "listComunicacion",
        "summary": "Listar Comunicaciones",
        "description": "Comunicaciones enviadas a residentes.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Comunicacion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "comunicaciones"
        ],
        "operationId": "createComunicacion",
        "summary": "Crear Comunicaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Comunicacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Comunicacion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Comunicaciones/{id}": {
      "get": {
        "tags": [
          "comunicaciones"
        ],
        "operationId": "getComunicacion",
        "summary": "Obtener Comunicaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Comunicacion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "comunicaciones"
        ],
        "operationId": "updateComunicacion",
        "summary": "Actualizar Comunicaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Comunicacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "comunicaciones"
        ],
        "operationId": "deleteComunicacion",
        "summary": "Eliminar Comunicaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Tickets": {
      "get": {
        "tags": [
          "tickets"
        ],
        "operationId": "listTicket",
        "summary": "Listar Tickets",
        "description": "Tickets de soporte y atención.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Ticket"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "tickets"
        ],
        "operationId": "createTicket",
        "summary": "Crear Tickets",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Ticket"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ticket"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Tickets/{id}": {
      "get": {
        "tags": [
          "tickets"
        ],
        "operationId": "getTicket",
        "summary": "Obtener Tickets",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Ticket"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "tickets"
        ],
        "operationId": "updateTicket",
        "summary": "Actualizar Tickets",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Ticket"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "tickets"
        ],
        "operationId": "deleteTicket",
        "summary": "Eliminar Tickets",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Votaciones": {
      "get": {
        "tags": [
          "votaciones"
        ],
        "operationId": "listVotacion",
        "summary": "Listar Votaciones",
        "description": "Votaciones y asambleas de la comunidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Votacion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "votaciones"
        ],
        "operationId": "createVotacion",
        "summary": "Crear Votaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Votacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Votacion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Votaciones/{id}": {
      "get": {
        "tags": [
          "votaciones"
        ],
        "operationId": "getVotacion",
        "summary": "Obtener Votaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Votacion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "votaciones"
        ],
        "operationId": "updateVotacion",
        "summary": "Actualizar Votaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Votacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "votaciones"
        ],
        "operationId": "deleteVotacion",
        "summary": "Eliminar Votaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Convenios": {
      "get": {
        "tags": [
          "convenios"
        ],
        "operationId": "listConvenioPago",
        "summary": "Listar Convenios de pago",
        "description": "Convenios de pago por deuda.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConvenioPago"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "convenios"
        ],
        "operationId": "createConvenioPago",
        "summary": "Crear Convenios de pago",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConvenioPago"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConvenioPago"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Convenios/{id}": {
      "get": {
        "tags": [
          "convenios"
        ],
        "operationId": "getConvenioPago",
        "summary": "Obtener Convenios de pago",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ConvenioPago"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "convenios"
        ],
        "operationId": "updateConvenioPago",
        "summary": "Actualizar Convenios de pago",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConvenioPago"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "convenios"
        ],
        "operationId": "deleteConvenioPago",
        "summary": "Eliminar Convenios de pago",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Cotizaciones": {
      "get": {
        "tags": [
          "cotizaciones"
        ],
        "operationId": "listCotizacion",
        "summary": "Listar Cotizaciones",
        "description": "Cotizaciones de proveedores.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Cotizacion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "cotizaciones"
        ],
        "operationId": "createCotizacion",
        "summary": "Crear Cotizaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Cotizacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cotizacion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Cotizaciones/{id}": {
      "get": {
        "tags": [
          "cotizaciones"
        ],
        "operationId": "getCotizacion",
        "summary": "Obtener Cotizaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Cotizacion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "cotizaciones"
        ],
        "operationId": "updateCotizacion",
        "summary": "Actualizar Cotizaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Cotizacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "cotizaciones"
        ],
        "operationId": "deleteCotizacion",
        "summary": "Eliminar Cotizaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GruposUnidades": {
      "get": {
        "tags": [
          "grupos-unidades"
        ],
        "operationId": "listGrupoUnidades",
        "summary": "Listar Grupos de unidades",
        "description": "Grupos de unidades para prorrateo o cobro.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GrupoUnidades"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "grupos-unidades"
        ],
        "operationId": "createGrupoUnidades",
        "summary": "Crear Grupos de unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GrupoUnidades"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrupoUnidades"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GruposUnidades/{id}": {
      "get": {
        "tags": [
          "grupos-unidades"
        ],
        "operationId": "getGrupoUnidades",
        "summary": "Obtener Grupos de unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/GrupoUnidades"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "grupos-unidades"
        ],
        "operationId": "updateGrupoUnidades",
        "summary": "Actualizar Grupos de unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GrupoUnidades"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "grupos-unidades"
        ],
        "operationId": "deleteGrupoUnidades",
        "summary": "Eliminar Grupos de unidades",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Inventario": {
      "get": {
        "tags": [
          "inventario"
        ],
        "operationId": "listItemInventario",
        "summary": "Listar Inventario",
        "description": "Inventario de bienes del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ItemInventario"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "inventario"
        ],
        "operationId": "createItemInventario",
        "summary": "Crear Inventario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemInventario"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemInventario"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Inventario/{id}": {
      "get": {
        "tags": [
          "inventario"
        ],
        "operationId": "getItemInventario",
        "summary": "Obtener Inventario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ItemInventario"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "inventario"
        ],
        "operationId": "updateItemInventario",
        "summary": "Actualizar Inventario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemInventario"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "inventario"
        ],
        "operationId": "deleteItemInventario",
        "summary": "Eliminar Inventario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Aprobaciones": {
      "get": {
        "tags": [
          "aprobaciones"
        ],
        "operationId": "listSolicitudAprobacion",
        "summary": "Listar Aprobaciones",
        "description": "Solicitudes de aprobación internas.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SolicitudAprobacion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "aprobaciones"
        ],
        "operationId": "createSolicitudAprobacion",
        "summary": "Crear Aprobaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SolicitudAprobacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SolicitudAprobacion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Aprobaciones/{id}": {
      "get": {
        "tags": [
          "aprobaciones"
        ],
        "operationId": "getSolicitudAprobacion",
        "summary": "Obtener Aprobaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SolicitudAprobacion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "aprobaciones"
        ],
        "operationId": "updateSolicitudAprobacion",
        "summary": "Actualizar Aprobaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SolicitudAprobacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "aprobaciones"
        ],
        "operationId": "deleteSolicitudAprobacion",
        "summary": "Eliminar Aprobaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Seguros": {
      "get": {
        "tags": [
          "seguros"
        ],
        "operationId": "listSeguroDepartamento",
        "summary": "Listar Seguros",
        "description": "Seguros por departamento.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SeguroDepartamento"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "seguros"
        ],
        "operationId": "createSeguroDepartamento",
        "summary": "Crear Seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SeguroDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeguroDepartamento"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Seguros/{id}": {
      "get": {
        "tags": [
          "seguros"
        ],
        "operationId": "getSeguroDepartamento",
        "summary": "Obtener Seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SeguroDepartamento"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "seguros"
        ],
        "operationId": "updateSeguroDepartamento",
        "summary": "Actualizar Seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SeguroDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "seguros"
        ],
        "operationId": "deleteSeguroDepartamento",
        "summary": "Eliminar Seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Siniestros": {
      "get": {
        "tags": [
          "siniestros"
        ],
        "operationId": "listSiniestro",
        "summary": "Listar Siniestros",
        "description": "Siniestros y reclamos de seguros.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Siniestro"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "siniestros"
        ],
        "operationId": "createSiniestro",
        "summary": "Crear Siniestros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Siniestro"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Siniestro"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Siniestros/{id}": {
      "get": {
        "tags": [
          "siniestros"
        ],
        "operationId": "getSiniestro",
        "summary": "Obtener Siniestros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Siniestro"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "siniestros"
        ],
        "operationId": "updateSiniestro",
        "summary": "Actualizar Siniestros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Siniestro"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "siniestros"
        ],
        "operationId": "deleteSiniestro",
        "summary": "Eliminar Siniestros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PlanEmergencia": {
      "get": {
        "tags": [
          "plan-emergencia"
        ],
        "operationId": "listPlanEmergencia",
        "summary": "Listar Plan de emergencia",
        "description": "Planes de emergencia del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PlanEmergencia"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "plan-emergencia"
        ],
        "operationId": "createPlanEmergencia",
        "summary": "Crear Plan de emergencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanEmergencia"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanEmergencia"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PlanEmergencia/{id}": {
      "get": {
        "tags": [
          "plan-emergencia"
        ],
        "operationId": "getPlanEmergencia",
        "summary": "Obtener Plan de emergencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PlanEmergencia"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "plan-emergencia"
        ],
        "operationId": "updatePlanEmergencia",
        "summary": "Actualizar Plan de emergencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanEmergencia"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "plan-emergencia"
        ],
        "operationId": "deletePlanEmergencia",
        "summary": "Eliminar Plan de emergencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Procedimientos": {
      "get": {
        "tags": [
          "procedimientos"
        ],
        "operationId": "listProcedimientoInterno",
        "summary": "Listar Procedimientos",
        "description": "Procedimientos internos operativos.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ProcedimientoInterno"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "procedimientos"
        ],
        "operationId": "createProcedimientoInterno",
        "summary": "Crear Procedimientos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcedimientoInterno"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcedimientoInterno"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Procedimientos/{id}": {
      "get": {
        "tags": [
          "procedimientos"
        ],
        "operationId": "getProcedimientoInterno",
        "summary": "Obtener Procedimientos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ProcedimientoInterno"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "procedimientos"
        ],
        "operationId": "updateProcedimientoInterno",
        "summary": "Actualizar Procedimientos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcedimientoInterno"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "procedimientos"
        ],
        "operationId": "deleteProcedimientoInterno",
        "summary": "Eliminar Procedimientos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PagosTesoreria": {
      "get": {
        "tags": [
          "pagos-tesoreria"
        ],
        "operationId": "listPagoEdificio",
        "summary": "Listar Pagos (finanzas)",
        "description": "Pagos del módulo Finanzas del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PagoEdificio"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "pagos-tesoreria"
        ],
        "operationId": "createPagoEdificio",
        "summary": "Crear Pagos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PagoEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagoEdificio"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PagosTesoreria/{id}": {
      "get": {
        "tags": [
          "pagos-tesoreria"
        ],
        "operationId": "getPagoEdificio",
        "summary": "Obtener Pagos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PagoEdificio"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "pagos-tesoreria"
        ],
        "operationId": "updatePagoEdificio",
        "summary": "Actualizar Pagos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PagoEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "pagos-tesoreria"
        ],
        "operationId": "deletePagoEdificio",
        "summary": "Eliminar Pagos (finanzas)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/FondosReserva": {
      "get": {
        "tags": [
          "fondos-reserva"
        ],
        "operationId": "listFondoReserva",
        "summary": "Listar Fondos de reserva",
        "description": "Fondos de reserva de la comunidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/FondoReserva"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "fondos-reserva"
        ],
        "operationId": "createFondoReserva",
        "summary": "Crear Fondos de reserva",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FondoReserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FondoReserva"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/FondosReserva/{id}": {
      "get": {
        "tags": [
          "fondos-reserva"
        ],
        "operationId": "getFondoReserva",
        "summary": "Obtener Fondos de reserva",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FondoReserva"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "fondos-reserva"
        ],
        "operationId": "updateFondoReserva",
        "summary": "Actualizar Fondos de reserva",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FondoReserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "fondos-reserva"
        ],
        "operationId": "deleteFondoReserva",
        "summary": "Eliminar Fondos de reserva",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ConfiguracionEdificio": {
      "get": {
        "tags": [
          "configuracion-edificio"
        ],
        "operationId": "listConfiguracionEdificio",
        "summary": "Listar Configuración del edificio",
        "description": "Parámetros de cobro, mora, notificaciones, firma y reglas del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConfiguracionEdificio"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "configuracion-edificio"
        ],
        "operationId": "createConfiguracionEdificio",
        "summary": "Crear Configuración del edificio",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfiguracionEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfiguracionEdificio"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ConfiguracionEdificio/{id}": {
      "get": {
        "tags": [
          "configuracion-edificio"
        ],
        "operationId": "getConfiguracionEdificio",
        "summary": "Obtener Configuración del edificio",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ConfiguracionEdificio"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "configuracion-edificio"
        ],
        "operationId": "updateConfiguracionEdificio",
        "summary": "Actualizar Configuración del edificio",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfiguracionEdificio"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "configuracion-edificio"
        ],
        "operationId": "deleteConfiguracionEdificio",
        "summary": "Eliminar Configuración del edificio",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/TiposMulta": {
      "get": {
        "tags": [
          "tipos-multa"
        ],
        "operationId": "listTipoMulta",
        "summary": "Listar Tipos de multa",
        "description": "Catálogo de tipos de multa configurables por edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TipoMulta"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "tipos-multa"
        ],
        "operationId": "createTipoMulta",
        "summary": "Crear Tipos de multa",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TipoMulta"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TipoMulta"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/TiposMulta/{id}": {
      "get": {
        "tags": [
          "tipos-multa"
        ],
        "operationId": "getTipoMulta",
        "summary": "Obtener Tipos de multa",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TipoMulta"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "tipos-multa"
        ],
        "operationId": "updateTipoMulta",
        "summary": "Actualizar Tipos de multa",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TipoMulta"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "tipos-multa"
        ],
        "operationId": "deleteTipoMulta",
        "summary": "Eliminar Tipos de multa",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/FinanzasConfig": {
      "get": {
        "tags": [
          "finanzas-config"
        ],
        "operationId": "listFinanzasConfig",
        "summary": "Listar Configuración finanzas",
        "description": "Categorías y subcategorías de egresos e ingresos del módulo Finanzas.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/FinanzasConfig"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "finanzas-config"
        ],
        "operationId": "createFinanzasConfig",
        "summary": "Crear Configuración finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FinanzasConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FinanzasConfig"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/FinanzasConfig/{id}": {
      "get": {
        "tags": [
          "finanzas-config"
        ],
        "operationId": "getFinanzasConfig",
        "summary": "Obtener Configuración finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/FinanzasConfig"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "finanzas-config"
        ],
        "operationId": "updateFinanzasConfig",
        "summary": "Actualizar Configuración finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FinanzasConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "finanzas-config"
        ],
        "operationId": "deleteFinanzasConfig",
        "summary": "Eliminar Configuración finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GastosDepartamento": {
      "get": {
        "tags": [
          "gastos-departamento"
        ],
        "operationId": "listGastoDepartamento",
        "summary": "Listar Gastos por unidad",
        "description": "Prorrateo de gasto común por departamento/unidad.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GastoDepartamento"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "gastos-departamento"
        ],
        "operationId": "createGastoDepartamento",
        "summary": "Crear Gastos por unidad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GastoDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GastoDepartamento"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GastosDepartamento/{id}": {
      "get": {
        "tags": [
          "gastos-departamento"
        ],
        "operationId": "getGastoDepartamento",
        "summary": "Obtener Gastos por unidad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/GastoDepartamento"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "gastos-departamento"
        ],
        "operationId": "updateGastoDepartamento",
        "summary": "Actualizar Gastos por unidad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GastoDepartamento"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "gastos-departamento"
        ],
        "operationId": "deleteGastoDepartamento",
        "summary": "Eliminar Gastos por unidad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/UserAssignments": {
      "get": {
        "tags": [
          "asignaciones-usuario"
        ],
        "operationId": "listUserAssignment",
        "summary": "Listar Asignaciones de usuario",
        "description": "Vincula un usuario a un edificio/unidad con un rol.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UserAssignment"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "asignaciones-usuario"
        ],
        "operationId": "createUserAssignment",
        "summary": "Crear Asignaciones de usuario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserAssignment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserAssignment"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/UserAssignments/{id}": {
      "get": {
        "tags": [
          "asignaciones-usuario"
        ],
        "operationId": "getUserAssignment",
        "summary": "Obtener Asignaciones de usuario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/UserAssignment"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "asignaciones-usuario"
        ],
        "operationId": "updateUserAssignment",
        "summary": "Actualizar Asignaciones de usuario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserAssignment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "asignaciones-usuario"
        ],
        "operationId": "deleteUserAssignment",
        "summary": "Eliminar Asignaciones de usuario",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/RoleAssignments": {
      "get": {
        "tags": [
          "asignaciones-rol"
        ],
        "operationId": "listRoleAssignment",
        "summary": "Listar Asignaciones de rol",
        "description": "RBAC por edificio: rol, permisos extra y exclusiones.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RoleAssignment"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "asignaciones-rol"
        ],
        "operationId": "createRoleAssignment",
        "summary": "Crear Asignaciones de rol",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleAssignment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleAssignment"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/RoleAssignments/{id}": {
      "get": {
        "tags": [
          "asignaciones-rol"
        ],
        "operationId": "getRoleAssignment",
        "summary": "Obtener Asignaciones de rol",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RoleAssignment"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "asignaciones-rol"
        ],
        "operationId": "updateRoleAssignment",
        "summary": "Actualizar Asignaciones de rol",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleAssignment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "asignaciones-rol"
        ],
        "operationId": "deleteRoleAssignment",
        "summary": "Eliminar Asignaciones de rol",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PermissionGroups": {
      "get": {
        "tags": [
          "grupos-permisos"
        ],
        "operationId": "listPermissionGroup",
        "summary": "Listar Grupos de permisos",
        "description": "Grupos custom de permisos reutilizables por edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PermissionGroup"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "grupos-permisos"
        ],
        "operationId": "createPermissionGroup",
        "summary": "Crear Grupos de permisos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PermissionGroup"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PermissionGroup"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PermissionGroups/{id}": {
      "get": {
        "tags": [
          "grupos-permisos"
        ],
        "operationId": "getPermissionGroup",
        "summary": "Obtener Grupos de permisos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PermissionGroup"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "grupos-permisos"
        ],
        "operationId": "updatePermissionGroup",
        "summary": "Actualizar Grupos de permisos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PermissionGroup"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "grupos-permisos"
        ],
        "operationId": "deletePermissionGroup",
        "summary": "Eliminar Grupos de permisos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/UserPermissions": {
      "get": {
        "tags": [
          "permisos-usuario"
        ],
        "operationId": "listUserPermissions",
        "summary": "Listar Permisos adicionales",
        "description": "Permisos extra otorgados a un usuario en un edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UserPermissions"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "permisos-usuario"
        ],
        "operationId": "createUserPermissions",
        "summary": "Crear Permisos adicionales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissions"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/UserPermissions/{id}": {
      "get": {
        "tags": [
          "permisos-usuario"
        ],
        "operationId": "getUserPermissions",
        "summary": "Obtener Permisos adicionales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/UserPermissions"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "permisos-usuario"
        ],
        "operationId": "updateUserPermissions",
        "summary": "Actualizar Permisos adicionales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPermissions"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "permisos-usuario"
        ],
        "operationId": "deleteUserPermissions",
        "summary": "Eliminar Permisos adicionales",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/TurnosPlanificacion": {
      "get": {
        "tags": [
          "turnos-planificacion"
        ],
        "operationId": "listTurno",
        "summary": "Listar Turnos y planificación",
        "description": "Turnos de personal: fecha, horario y empleados asignados.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Turno"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "turnos-planificacion"
        ],
        "operationId": "createTurno",
        "summary": "Crear Turnos y planificación",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Turno"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Turno"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/TurnosPlanificacion/{id}": {
      "get": {
        "tags": [
          "turnos-planificacion"
        ],
        "operationId": "getTurno",
        "summary": "Obtener Turnos y planificación",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Turno"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "turnos-planificacion"
        ],
        "operationId": "updateTurno",
        "summary": "Actualizar Turnos y planificación",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Turno"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "turnos-planificacion"
        ],
        "operationId": "deleteTurno",
        "summary": "Eliminar Turnos y planificación",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Tareas": {
      "get": {
        "tags": [
          "tareas"
        ],
        "operationId": "listTarea",
        "summary": "Listar Tareas",
        "description": "Tareas de planificación operativas, opcionales a un turno.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Tarea"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "tareas"
        ],
        "operationId": "createTarea",
        "summary": "Crear Tareas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tarea"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tarea"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Tareas/{id}": {
      "get": {
        "tags": [
          "tareas"
        ],
        "operationId": "getTarea",
        "summary": "Obtener Tareas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Tarea"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "tareas"
        ],
        "operationId": "updateTarea",
        "summary": "Actualizar Tareas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tarea"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "tareas"
        ],
        "operationId": "deleteTarea",
        "summary": "Eliminar Tareas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/MiembrosComite": {
      "get": {
        "tags": [
          "comite-miembros"
        ],
        "operationId": "listMiembroComite",
        "summary": "Listar Miembros del comité",
        "description": "Integrantes del comité de administración del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MiembroComite"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "comite-miembros"
        ],
        "operationId": "createMiembroComite",
        "summary": "Crear Miembros del comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MiembroComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MiembroComite"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/MiembrosComite/{id}": {
      "get": {
        "tags": [
          "comite-miembros"
        ],
        "operationId": "getMiembroComite",
        "summary": "Obtener Miembros del comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MiembroComite"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "comite-miembros"
        ],
        "operationId": "updateMiembroComite",
        "summary": "Actualizar Miembros del comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MiembroComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "comite-miembros"
        ],
        "operationId": "deleteMiembroComite",
        "summary": "Eliminar Miembros del comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ReunionesComite": {
      "get": {
        "tags": [
          "comite-reuniones"
        ],
        "operationId": "listReunionComite",
        "summary": "Listar Reuniones de comité",
        "description": "Reuniones programadas del comité con orden del día.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ReunionComite"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "comite-reuniones"
        ],
        "operationId": "createReunionComite",
        "summary": "Crear Reuniones de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReunionComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReunionComite"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ReunionesComite/{id}": {
      "get": {
        "tags": [
          "comite-reuniones"
        ],
        "operationId": "getReunionComite",
        "summary": "Obtener Reuniones de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ReunionComite"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "comite-reuniones"
        ],
        "operationId": "updateReunionComite",
        "summary": "Actualizar Reuniones de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReunionComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "comite-reuniones"
        ],
        "operationId": "deleteReunionComite",
        "summary": "Eliminar Reuniones de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ActasComite": {
      "get": {
        "tags": [
          "comite-actas"
        ],
        "operationId": "listActaComite",
        "summary": "Listar Actas de comité",
        "description": "Actas formales asociadas a reuniones de comité.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ActaComite"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "comite-actas"
        ],
        "operationId": "createActaComite",
        "summary": "Crear Actas de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActaComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActaComite"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ActasComite/{id}": {
      "get": {
        "tags": [
          "comite-actas"
        ],
        "operationId": "getActaComite",
        "summary": "Obtener Actas de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ActaComite"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "comite-actas"
        ],
        "operationId": "updateActaComite",
        "summary": "Actualizar Actas de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActaComite"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "comite-actas"
        ],
        "operationId": "deleteActaComite",
        "summary": "Eliminar Actas de comité",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PlusvaliaConfig": {
      "get": {
        "tags": [
          "plusvalia-config"
        ],
        "operationId": "listPlusvaliaConfig",
        "summary": "Listar Plusvalía (config)",
        "description": "Factores y orientación para el índice de plusvalía del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PlusvaliaConfig"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "plusvalia-config"
        ],
        "operationId": "createPlusvaliaConfig",
        "summary": "Crear Plusvalía (config)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlusvaliaConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlusvaliaConfig"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PlusvaliaConfig/{id}": {
      "get": {
        "tags": [
          "plusvalia-config"
        ],
        "operationId": "getPlusvaliaConfig",
        "summary": "Obtener Plusvalía (config)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PlusvaliaConfig"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "plusvalia-config"
        ],
        "operationId": "updatePlusvaliaConfig",
        "summary": "Actualizar Plusvalía (config)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlusvaliaConfig"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "plusvalia-config"
        ],
        "operationId": "deletePlusvaliaConfig",
        "summary": "Eliminar Plusvalía (config)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PlusvaliaSnapshots": {
      "get": {
        "tags": [
          "plusvalia-snapshots"
        ],
        "operationId": "listPlusvaliaSnapshot",
        "summary": "Listar Plusvalía (histórico)",
        "description": "Snapshots periódicos del índice de plusvalía.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PlusvaliaSnapshot"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "plusvalia-snapshots"
        ],
        "operationId": "createPlusvaliaSnapshot",
        "summary": "Crear Plusvalía (histórico)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlusvaliaSnapshot"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlusvaliaSnapshot"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PlusvaliaSnapshots/{id}": {
      "get": {
        "tags": [
          "plusvalia-snapshots"
        ],
        "operationId": "getPlusvaliaSnapshot",
        "summary": "Obtener Plusvalía (histórico)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PlusvaliaSnapshot"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "plusvalia-snapshots"
        ],
        "operationId": "updatePlusvaliaSnapshot",
        "summary": "Actualizar Plusvalía (histórico)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlusvaliaSnapshot"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "plusvalia-snapshots"
        ],
        "operationId": "deletePlusvaliaSnapshot",
        "summary": "Eliminar Plusvalía (histórico)",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Transparencia": {
      "get": {
        "tags": [
          "transparencia"
        ],
        "operationId": "listTransparencia",
        "summary": "Listar Transparencia",
        "description": "Portal de transparencia comunitaria (lectura agregada de finanzas, comité y seguros).",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Transparencia"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "transparencia"
        ],
        "operationId": "createTransparencia",
        "summary": "Crear Transparencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Transparencia"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transparencia"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Transparencia/{id}": {
      "get": {
        "tags": [
          "transparencia"
        ],
        "operationId": "getTransparencia",
        "summary": "Obtener Transparencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Transparencia"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "transparencia"
        ],
        "operationId": "updateTransparencia",
        "summary": "Actualizar Transparencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Transparencia"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "transparencia"
        ],
        "operationId": "deleteTransparencia",
        "summary": "Eliminar Transparencia",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Reportes": {
      "get": {
        "tags": [
          "reportes"
        ],
        "operationId": "listReporte",
        "summary": "Listar Reportes",
        "description": "Reportes financieros, de morosidad, mantenciones y ocupación.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Reporte"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "reportes"
        ],
        "operationId": "createReporte",
        "summary": "Crear Reportes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reporte"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Reporte"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Reportes/{id}": {
      "get": {
        "tags": [
          "reportes"
        ],
        "operationId": "getReporte",
        "summary": "Obtener Reportes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Reporte"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "reportes"
        ],
        "operationId": "updateReporte",
        "summary": "Actualizar Reportes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Reporte"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "reportes"
        ],
        "operationId": "deleteReporte",
        "summary": "Eliminar Reportes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ReservasEstacionamientoVisita": {
      "get": {
        "tags": [
          "reservas-estacionamiento-visita"
        ],
        "operationId": "listReservaEstacionamientoVisita",
        "summary": "Listar Estacionamientos de visitas",
        "description": "Reservas de estacionamiento para visitas.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ReservaEstacionamientoVisita"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "reservas-estacionamiento-visita"
        ],
        "operationId": "createReservaEstacionamientoVisita",
        "summary": "Crear Estacionamientos de visitas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservaEstacionamientoVisita"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservaEstacionamientoVisita"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ReservasEstacionamientoVisita/{id}": {
      "get": {
        "tags": [
          "reservas-estacionamiento-visita"
        ],
        "operationId": "getReservaEstacionamientoVisita",
        "summary": "Obtener Estacionamientos de visitas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ReservaEstacionamientoVisita"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "reservas-estacionamiento-visita"
        ],
        "operationId": "updateReservaEstacionamientoVisita",
        "summary": "Actualizar Estacionamientos de visitas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReservaEstacionamientoVisita"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "reservas-estacionamiento-visita"
        ],
        "operationId": "deleteReservaEstacionamientoVisita",
        "summary": "Eliminar Estacionamientos de visitas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ActivityLogs": {
      "get": {
        "tags": [
          "actividad"
        ],
        "operationId": "listActivityLog",
        "summary": "Listar Registro de actividad",
        "description": "Auditoría de acciones de usuarios en el edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ActivityLog"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "actividad"
        ],
        "operationId": "createActivityLog",
        "summary": "Crear Registro de actividad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityLog"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ActivityLogs/{id}": {
      "get": {
        "tags": [
          "actividad"
        ],
        "operationId": "getActivityLog",
        "summary": "Obtener Registro de actividad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ActivityLog"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "actividad"
        ],
        "operationId": "updateActivityLog",
        "summary": "Actualizar Registro de actividad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "actividad"
        ],
        "operationId": "deleteActivityLog",
        "summary": "Eliminar Registro de actividad",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/MonitoreoEquipos": {
      "get": {
        "tags": [
          "monitoreo-equipos"
        ],
        "operationId": "listMonitoreoEquipo",
        "summary": "Listar Monitoreo de equipos",
        "description": "Configuración del agente de monitoreo en equipos del personal.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonitoreoEquipo"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "monitoreo-equipos"
        ],
        "operationId": "createMonitoreoEquipo",
        "summary": "Crear Monitoreo de equipos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitoreoEquipo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitoreoEquipo"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/MonitoreoEquipos/{id}": {
      "get": {
        "tags": [
          "monitoreo-equipos"
        ],
        "operationId": "getMonitoreoEquipo",
        "summary": "Obtener Monitoreo de equipos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MonitoreoEquipo"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "monitoreo-equipos"
        ],
        "operationId": "updateMonitoreoEquipo",
        "summary": "Actualizar Monitoreo de equipos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitoreoEquipo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "monitoreo-equipos"
        ],
        "operationId": "deleteMonitoreoEquipo",
        "summary": "Eliminar Monitoreo de equipos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/CotizacionesSeguro": {
      "get": {
        "tags": [
          "cotizaciones-seguro"
        ],
        "operationId": "listCotizacionSeguro",
        "summary": "Listar Cotización de seguros",
        "description": "Cotizaciones rápidas de seguros del edificio (distinto de cotizaciones a proveedores).",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CotizacionSeguro"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "cotizaciones-seguro"
        ],
        "operationId": "createCotizacionSeguro",
        "summary": "Crear Cotización de seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CotizacionSeguro"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CotizacionSeguro"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/CotizacionesSeguro/{id}": {
      "get": {
        "tags": [
          "cotizaciones-seguro"
        ],
        "operationId": "getCotizacionSeguro",
        "summary": "Obtener Cotización de seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CotizacionSeguro"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "cotizaciones-seguro"
        ],
        "operationId": "updateCotizacionSeguro",
        "summary": "Actualizar Cotización de seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CotizacionSeguro"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "cotizaciones-seguro"
        ],
        "operationId": "deleteCotizacionSeguro",
        "summary": "Eliminar Cotización de seguros",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/RegistrosHoras": {
      "get": {
        "tags": [
          "registros-horas"
        ],
        "operationId": "listRegistroHoras",
        "summary": "Listar Registro de horas",
        "description": "Horas trabajadas por empleado y periodo.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/RegistroHoras"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "registros-horas"
        ],
        "operationId": "createRegistroHoras",
        "summary": "Crear Registro de horas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistroHoras"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegistroHoras"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/RegistrosHoras/{id}": {
      "get": {
        "tags": [
          "registros-horas"
        ],
        "operationId": "getRegistroHoras",
        "summary": "Obtener Registro de horas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RegistroHoras"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "registros-horas"
        ],
        "operationId": "updateRegistroHoras",
        "summary": "Actualizar Registro de horas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistroHoras"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "registros-horas"
        ],
        "operationId": "deleteRegistroHoras",
        "summary": "Eliminar Registro de horas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/PagosEmpleados": {
      "get": {
        "tags": [
          "pagos-empleados"
        ],
        "operationId": "listPagoEmpleado",
        "summary": "Listar Pagos a empleados",
        "description": "Liquidaciones y pagos de personal.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PagoEmpleado"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "pagos-empleados"
        ],
        "operationId": "createPagoEmpleado",
        "summary": "Crear Pagos a empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PagoEmpleado"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagoEmpleado"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/PagosEmpleados/{id}": {
      "get": {
        "tags": [
          "pagos-empleados"
        ],
        "operationId": "getPagoEmpleado",
        "summary": "Obtener Pagos a empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PagoEmpleado"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "pagos-empleados"
        ],
        "operationId": "updatePagoEmpleado",
        "summary": "Actualizar Pagos a empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PagoEmpleado"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "pagos-empleados"
        ],
        "operationId": "deletePagoEmpleado",
        "summary": "Eliminar Pagos a empleados",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/MantencionesPeriodicas": {
      "get": {
        "tags": [
          "mantenciones-periodicas"
        ],
        "operationId": "listMantencionPeriodica",
        "summary": "Listar Mantenciones periódicas",
        "description": "Planes de mantención recurrentes del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MantencionPeriodica"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "mantenciones-periodicas"
        ],
        "operationId": "createMantencionPeriodica",
        "summary": "Crear Mantenciones periódicas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MantencionPeriodica"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MantencionPeriodica"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/MantencionesPeriodicas/{id}": {
      "get": {
        "tags": [
          "mantenciones-periodicas"
        ],
        "operationId": "getMantencionPeriodica",
        "summary": "Obtener Mantenciones periódicas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MantencionPeriodica"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "mantenciones-periodicas"
        ],
        "operationId": "updateMantencionPeriodica",
        "summary": "Actualizar Mantenciones periódicas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MantencionPeriodica"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "mantenciones-periodicas"
        ],
        "operationId": "deleteMantencionPeriodica",
        "summary": "Eliminar Mantenciones periódicas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ProcedimientosEjecucion": {
      "get": {
        "tags": [
          "procedimientos-ejecucion"
        ],
        "operationId": "listProcedimientoEjecucion",
        "summary": "Listar Ejecuciones de procedimiento",
        "description": "Instancias de ejecución de procedimientos internos.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ProcedimientoEjecucion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "procedimientos-ejecucion"
        ],
        "operationId": "createProcedimientoEjecucion",
        "summary": "Crear Ejecuciones de procedimiento",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcedimientoEjecucion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcedimientoEjecucion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ProcedimientosEjecucion/{id}": {
      "get": {
        "tags": [
          "procedimientos-ejecucion"
        ],
        "operationId": "getProcedimientoEjecucion",
        "summary": "Obtener Ejecuciones de procedimiento",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ProcedimientoEjecucion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "procedimientos-ejecucion"
        ],
        "operationId": "updateProcedimientoEjecucion",
        "summary": "Actualizar Ejecuciones de procedimiento",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcedimientoEjecucion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "procedimientos-ejecucion"
        ],
        "operationId": "deleteProcedimientoEjecucion",
        "summary": "Eliminar Ejecuciones de procedimiento",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Invitaciones": {
      "get": {
        "tags": [
          "invitaciones"
        ],
        "operationId": "listInvitacion",
        "summary": "Listar Invitaciones",
        "description": "Invitaciones pendientes a usuarios del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Invitacion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "invitaciones"
        ],
        "operationId": "createInvitacion",
        "summary": "Crear Invitaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Invitacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invitacion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Invitaciones/{id}": {
      "get": {
        "tags": [
          "invitaciones"
        ],
        "operationId": "getInvitacion",
        "summary": "Obtener Invitaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Invitacion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "invitaciones"
        ],
        "operationId": "updateInvitacion",
        "summary": "Actualizar Invitaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Invitacion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "invitaciones"
        ],
        "operationId": "deleteInvitacion",
        "summary": "Eliminar Invitaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/CentroDatos": {
      "get": {
        "tags": [
          "centro-datos"
        ],
        "operationId": "listCentroDatos",
        "summary": "Listar Centro de datos",
        "description": "Cargas e importaciones masivas de datos históricos del edificio.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CentroDatos"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "centro-datos"
        ],
        "operationId": "createCentroDatos",
        "summary": "Crear Centro de datos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CentroDatos"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CentroDatos"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/CentroDatos/{id}": {
      "get": {
        "tags": [
          "centro-datos"
        ],
        "operationId": "getCentroDatos",
        "summary": "Obtener Centro de datos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CentroDatos"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "centro-datos"
        ],
        "operationId": "updateCentroDatos",
        "summary": "Actualizar Centro de datos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CentroDatos"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "centro-datos"
        ],
        "operationId": "deleteCentroDatos",
        "summary": "Eliminar Centro de datos",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/Finanzas": {
      "get": {
        "tags": [
          "finanzas"
        ],
        "operationId": "listFinanzas",
        "summary": "Listar Finanzas",
        "description": "Vista agregada del módulo Finanzas (egresos, ingresos y tesorería).",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Finanzas"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "finanzas"
        ],
        "operationId": "createFinanzas",
        "summary": "Crear Finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Finanzas"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Finanzas"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/Finanzas/{id}": {
      "get": {
        "tags": [
          "finanzas"
        ],
        "operationId": "getFinanzas",
        "summary": "Obtener Finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Finanzas"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "finanzas"
        ],
        "operationId": "updateFinanzas",
        "summary": "Actualizar Finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Finanzas"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "finanzas"
        ],
        "operationId": "deleteFinanzas",
        "summary": "Eliminar Finanzas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ChatThreads": {
      "get": {
        "tags": [
          "mensajes"
        ],
        "operationId": "listChatThread",
        "summary": "Listar Mensajes",
        "description": "Chat entre residentes y administración (hilos y mensajes del edificio).",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ChatThread"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "mensajes"
        ],
        "operationId": "createChatThread",
        "summary": "Crear Mensajes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatThread"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatThread"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ChatThreads/{id}": {
      "get": {
        "tags": [
          "mensajes"
        ],
        "operationId": "getChatThread",
        "summary": "Obtener Mensajes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ChatThread"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "mensajes"
        ],
        "operationId": "updateChatThread",
        "summary": "Actualizar Mensajes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatThread"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "mensajes"
        ],
        "operationId": "deleteChatThread",
        "summary": "Eliminar Mensajes",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ReportesAnualesGestion": {
      "get": {
        "tags": [
          "reporte-anual"
        ],
        "operationId": "listReporteAnualGestion",
        "summary": "Listar Reporte anual de gestión",
        "description": "Reporte anual con checklist, slides, comentarios y exportación PPTX.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ReporteAnualGestion"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "reporte-anual"
        ],
        "operationId": "createReporteAnualGestion",
        "summary": "Crear Reporte anual de gestión",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReporteAnualGestion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReporteAnualGestion"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ReportesAnualesGestion/{id}": {
      "get": {
        "tags": [
          "reporte-anual"
        ],
        "operationId": "getReporteAnualGestion",
        "summary": "Obtener Reporte anual de gestión",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ReporteAnualGestion"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "reporte-anual"
        ],
        "operationId": "updateReporteAnualGestion",
        "summary": "Actualizar Reporte anual de gestión",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReporteAnualGestion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "reporte-anual"
        ],
        "operationId": "deleteReporteAnualGestion",
        "summary": "Eliminar Reporte anual de gestión",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalPersonal": {
      "get": {
        "tags": [
          "gestion-transversal-personal"
        ],
        "operationId": "listPersonalReserva",
        "summary": "Listar Gestión transversal — Banco de reservas",
        "description": "Personal de reserva compartido entre edificios (comunidesk_transversal).",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PersonalReserva"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "gestion-transversal-personal"
        ],
        "operationId": "createPersonalReserva",
        "summary": "Crear Gestión transversal — Banco de reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonalReserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonalReserva"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalPersonal/{id}": {
      "get": {
        "tags": [
          "gestion-transversal-personal"
        ],
        "operationId": "getPersonalReserva",
        "summary": "Obtener Gestión transversal — Banco de reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PersonalReserva"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "gestion-transversal-personal"
        ],
        "operationId": "updatePersonalReserva",
        "summary": "Actualizar Gestión transversal — Banco de reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonalReserva"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "gestion-transversal-personal"
        ],
        "operationId": "deletePersonalReserva",
        "summary": "Eliminar Gestión transversal — Banco de reservas",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalEquipo": {
      "get": {
        "tags": [
          "gestion-transversal-equipo"
        ],
        "operationId": "listMiembroEquipo",
        "summary": "Listar Gestión transversal — Equipo de soporte",
        "description": "Miembros del equipo de soporte transversal con permisos por rol.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MiembroEquipo"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "gestion-transversal-equipo"
        ],
        "operationId": "createMiembroEquipo",
        "summary": "Crear Gestión transversal — Equipo de soporte",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MiembroEquipo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MiembroEquipo"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalEquipo/{id}": {
      "get": {
        "tags": [
          "gestion-transversal-equipo"
        ],
        "operationId": "getMiembroEquipo",
        "summary": "Obtener Gestión transversal — Equipo de soporte",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MiembroEquipo"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "gestion-transversal-equipo"
        ],
        "operationId": "updateMiembroEquipo",
        "summary": "Actualizar Gestión transversal — Equipo de soporte",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MiembroEquipo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "gestion-transversal-equipo"
        ],
        "operationId": "deleteMiembroEquipo",
        "summary": "Eliminar Gestión transversal — Equipo de soporte",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalAsignaciones": {
      "get": {
        "tags": [
          "gestion-transversal-asignaciones"
        ],
        "operationId": "listAsignacionTransversal",
        "summary": "Listar Gestión transversal — Asignaciones",
        "description": "Asignaciones de personal titular y reemplazo entre edificios.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AsignacionTransversal"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "gestion-transversal-asignaciones"
        ],
        "operationId": "createAsignacionTransversal",
        "summary": "Crear Gestión transversal — Asignaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AsignacionTransversal"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsignacionTransversal"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/GestionTransversalAsignaciones/{id}": {
      "get": {
        "tags": [
          "gestion-transversal-asignaciones"
        ],
        "operationId": "getAsignacionTransversal",
        "summary": "Obtener Gestión transversal — Asignaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/AsignacionTransversal"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "gestion-transversal-asignaciones"
        ],
        "operationId": "updateAsignacionTransversal",
        "summary": "Actualizar Gestión transversal — Asignaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AsignacionTransversal"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "gestion-transversal-asignaciones"
        ],
        "operationId": "deleteAsignacionTransversal",
        "summary": "Eliminar Gestión transversal — Asignaciones",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/EgresosExclusionGastoComun": {
      "get": {
        "tags": [
          "egresos-exclusiones-gc"
        ],
        "operationId": "listEgresoExclusionGastoComun",
        "summary": "Listar Exclusiones de egreso en gasto común",
        "description": "Postergación de cobro de egresos/cuotas en el gasto común mensual.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/EgresoExclusionGastoComun"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "egresos-exclusiones-gc"
        ],
        "operationId": "createEgresoExclusionGastoComun",
        "summary": "Crear Exclusiones de egreso en gasto común",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EgresoExclusionGastoComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EgresoExclusionGastoComun"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/EgresosExclusionGastoComun/{id}": {
      "get": {
        "tags": [
          "egresos-exclusiones-gc"
        ],
        "operationId": "getEgresoExclusionGastoComun",
        "summary": "Obtener Exclusiones de egreso en gasto común",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/EgresoExclusionGastoComun"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "egresos-exclusiones-gc"
        ],
        "operationId": "updateEgresoExclusionGastoComun",
        "summary": "Actualizar Exclusiones de egreso en gasto común",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EgresoExclusionGastoComun"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "egresos-exclusiones-gc"
        ],
        "operationId": "deleteEgresoExclusionGastoComun",
        "summary": "Eliminar Exclusiones de egreso en gasto común",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/ConciliacionesBancarias": {
      "get": {
        "tags": [
          "conciliaciones-bancarias"
        ],
        "operationId": "listConciliacionBancaria",
        "summary": "Listar Conciliaciones bancarias",
        "description": "Conciliación de movimientos bancarios con gastos comunes, egresos e ingresos.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConciliacionBancaria"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "conciliaciones-bancarias"
        ],
        "operationId": "createConciliacionBancaria",
        "summary": "Crear Conciliaciones bancarias",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConciliacionBancaria"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConciliacionBancaria"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/ConciliacionesBancarias/{id}": {
      "get": {
        "tags": [
          "conciliaciones-bancarias"
        ],
        "operationId": "getConciliacionBancaria",
        "summary": "Obtener Conciliaciones bancarias",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ConciliacionBancaria"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "conciliaciones-bancarias"
        ],
        "operationId": "updateConciliacionBancaria",
        "summary": "Actualizar Conciliaciones bancarias",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConciliacionBancaria"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "conciliaciones-bancarias"
        ],
        "operationId": "deleteConciliacionBancaria",
        "summary": "Eliminar Conciliaciones bancarias",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/MovimientosBancarios": {
      "get": {
        "tags": [
          "movimientos-bancarios"
        ],
        "operationId": "listMovimientoBancario",
        "summary": "Listar Movimientos bancarios",
        "description": "Movimientos importados de cartola bancaria y su estado de conciliación.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MovimientoBancario"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "movimientos-bancarios"
        ],
        "operationId": "createMovimientoBancario",
        "summary": "Crear Movimientos bancarios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MovimientoBancario"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MovimientoBancario"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/MovimientosBancarios/{id}": {
      "get": {
        "tags": [
          "movimientos-bancarios"
        ],
        "operationId": "getMovimientoBancario",
        "summary": "Obtener Movimientos bancarios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MovimientoBancario"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "movimientos-bancarios"
        ],
        "operationId": "updateMovimientoBancario",
        "summary": "Actualizar Movimientos bancarios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MovimientoBancario"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "movimientos-bancarios"
        ],
        "operationId": "deleteMovimientoBancario",
        "summary": "Eliminar Movimientos bancarios",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/v1/rest/CargasCartola": {
      "get": {
        "tags": [
          "cargas-cartola"
        ],
        "operationId": "listCargaCartola",
        "summary": "Listar Cargas de cartola",
        "description": "Historial de importaciones de cartola bancaria.",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CargaCartola"
                      }
                    },
                    "count": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido"
          },
          "403": {
            "description": "Sin permiso"
          }
        }
      },
      "post": {
        "tags": [
          "cargas-cartola"
        ],
        "operationId": "createCargaCartola",
        "summary": "Crear Cargas de cartola",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CargaCartola"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Creado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CargaCartola"
                }
              }
            }
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      }
    },
    "/v1/rest/CargasCartola/{id}": {
      "get": {
        "tags": [
          "cargas-cartola"
        ],
        "operationId": "getCargaCartola",
        "summary": "Obtener Cargas de cartola",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Contexto de edificio (requerido en la mayoría de módulos)."
          },
          {
            "name": "$filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtro OData, p.ej. edificioId eq 'abc'"
          },
          {
            "name": "$top",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CargaCartola"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No encontrado"
          }
        }
      },
      "patch": {
        "tags": [
          "cargas-cartola"
        ],
        "operationId": "updateCargaCartola",
        "summary": "Actualizar Cargas de cartola",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CargaCartola"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actualizado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "422": {
            "description": "Contrato inválido"
          }
        }
      },
      "delete": {
        "tags": [
          "cargas-cartola"
        ],
        "operationId": "deleteCargaCartola",
        "summary": "Eliminar Cargas de cartola",
        "security": [
          {
            "OAuth2App": [],
            "ComunideskUser": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "edificioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Eliminado"
          },
          "403": {
            "description": "Sin permiso"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "OAuth2App": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Access token OAuth2 de tu aplicación."
      },
      "ComunideskUser": {
        "type": "apiKey",
        "in": "header",
        "name": "x-comunidesk-user-authorization",
        "description": "Bearer <JWT de la cuenta Comunidesk del usuario>."
      }
    },
    "schemas": {
      "Edificio": {
        "type": "object",
        "description": "Catálogo de edificios y configuración de cobro.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "edificio"
          },
          "nombre": {
            "type": "string"
          },
          "direccion": {
            "type": "string"
          },
          "comuna": {
            "type": "string"
          },
          "ciudad": {
            "type": "string"
          },
          "pisos": {
            "type": "number"
          },
          "departamentosPorPiso": {
            "type": "number"
          },
          "pais": {
            "type": "string"
          },
          "jurisdiccion": {
            "type": "string"
          },
          "geo": {
            "type": "object",
            "additionalProperties": true
          },
          "diaCobroGastosComunes": {
            "type": "number"
          },
          "montoGastosComunesBase": {
            "type": "number"
          },
          "porcentajeMora": {
            "type": "number"
          },
          "diasGraciaMora": {
            "type": "number"
          },
          "superAdminEmail": {
            "type": "string"
          },
          "plan": {
            "type": "string"
          },
          "dbPrefix": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "totalDepartamentos": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "nombre",
          "direccion",
          "comuna",
          "ciudad",
          "pisos",
          "departamentosPorPiso",
          "diaCobroGastosComunes",
          "montoGastosComunesBase",
          "porcentajeMora",
          "diasGraciaMora"
        ]
      },
      "Departamento": {
        "type": "object",
        "description": "Unidades del edificio: departamento, bodega o estacionamiento.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "departamento"
          },
          "edificioId": {
            "type": "string"
          },
          "numero": {
            "type": "string"
          },
          "piso": {
            "type": "number"
          },
          "superficie": {
            "type": "number"
          },
          "habitaciones": {
            "type": "number"
          },
          "banos": {
            "type": "number"
          },
          "factorGastosComunes": {
            "type": "number"
          },
          "tipoUnidad": {
            "type": "string",
            "enum": [
              "departamento",
              "bodega",
              "estacionamiento"
            ]
          },
          "estado": {
            "type": "string",
            "enum": [
              "disponible",
              "ocupado",
              "mantenimiento"
            ]
          },
          "bodega": {
            "type": "string"
          },
          "estacionamiento": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "numero",
          "piso",
          "superficie",
          "habitaciones",
          "banos",
          "factorGastosComunes"
        ]
      },
      "Egreso": {
        "type": "object",
        "description": "Egresos y cuentas por pagar de la comunidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "egreso"
          },
          "edificioId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "tipoEgreso": {
            "type": "string",
            "enum": [
              "mantencion",
              "servicio",
              "suministro",
              "administracion",
              "seguro",
              "impuesto",
              "salario",
              "servicio_basico",
              "mejora",
              "fondo_reserva",
              "otro"
            ]
          },
          "subcategoriaEgreso": {
            "type": "string"
          },
          "proveedorId": {
            "type": "string"
          },
          "montoTotal": {
            "type": "number"
          },
          "numeroCuotas": {
            "type": "number"
          },
          "fechaEmision": {
            "type": "string"
          },
          "fechaVencimientoOriginal": {
            "type": "string"
          },
          "beneficiario": {
            "type": "string"
          },
          "rutBeneficiario": {
            "type": "string"
          },
          "datosBancarios": {
            "type": "object",
            "additionalProperties": true
          },
          "numeroFactura": {
            "type": "string"
          },
          "numeroOrdenCompra": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "notasInternas": {
            "type": "string"
          },
          "origenFinanciamiento": {
            "type": "string",
            "enum": [
              "gasto_comun",
              "fondo_reserva",
              "mixto"
            ]
          },
          "fondoReservaId": {
            "type": "string"
          },
          "fondoReservaNombre": {
            "type": "string"
          },
          "porcentajeFondoReserva": {
            "type": "number"
          },
          "montoFondoReserva": {
            "type": "number"
          },
          "grupoId": {
            "type": "string"
          },
          "grupoNombre": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "departamentoNombre": {
            "type": "string"
          },
          "esMultaAsociada": {
            "type": "boolean"
          },
          "multasAsociadasIds": {
            "type": "array",
            "items": {}
          },
          "departamentosCargo": {
            "type": "array",
            "items": {}
          },
          "cuotas": {
            "type": "array",
            "items": {}
          },
          "estado": {
            "type": "string"
          },
          "tieneCuotas": {
            "type": "boolean"
          },
          "montoPagado": {
            "type": "string",
            "readOnly": true
          },
          "montoRestante": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "createdBy": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "concepto",
          "tipoEgreso",
          "montoTotal",
          "numeroCuotas",
          "fechaEmision",
          "fechaVencimientoOriginal",
          "beneficiario"
        ]
      },
      "GastoComun": {
        "type": "object",
        "description": "Periodos de gasto común y prorrateo por unidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "gasto_comun"
          },
          "edificioId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "fechaEmision": {
            "type": "string"
          },
          "fechaVencimiento": {
            "type": "string"
          },
          "montoBase": {
            "type": "number"
          },
          "items": {
            "type": "array",
            "items": {}
          },
          "totalGeneral": {
            "type": "number"
          },
          "estado": {
            "type": "string",
            "enum": [
              "borrador",
              "emitido",
              "cerrado"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "periodo",
          "fechaEmision",
          "fechaVencimiento",
          "montoBase",
          "items",
          "totalGeneral"
        ]
      },
      "Pago": {
        "type": "object",
        "description": "Pagos de gasto común por departamento.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "pago"
          },
          "gastoId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "edificioId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "metodoPago": {
            "type": "string",
            "enum": [
              "transferencia",
              "efectivo",
              "cheque",
              "tarjeta",
              "webpay",
              "otro"
            ]
          },
          "fechaPago": {
            "type": "string"
          },
          "comprobante": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "gastoId",
          "departamentoId",
          "edificioId",
          "periodo",
          "monto",
          "metodoPago",
          "fechaPago"
        ]
      },
      "IngresoEdificio": {
        "type": "object",
        "description": "Ingresos del módulo Finanzas del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "ingreso_edificio"
          },
          "edificioId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "categoria": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "metodoIngreso": {
            "type": "string"
          },
          "fechaIngreso": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "registradoPor": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "concepto",
          "categoria",
          "monto",
          "metodoIngreso",
          "fechaIngreso",
          "periodo"
        ]
      },
      "Empleado": {
        "type": "object",
        "description": "Personal del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "empleado"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "apellido": {
            "type": "string"
          },
          "rut": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "telefono": {
            "type": "string"
          },
          "cargo": {
            "type": "string"
          },
          "tipoEmpleado": {
            "type": "string"
          },
          "tipoContrato": {
            "type": "string"
          },
          "fechaIngreso": {
            "type": "string"
          },
          "fechaVencimientoContrato": {
            "type": "string"
          },
          "sueldoBase": {
            "type": "number"
          },
          "valorHora": {
            "type": "number"
          },
          "horasMensuales": {
            "type": "number"
          },
          "estado": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "createdBy": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "apellido",
          "rut",
          "telefono",
          "cargo",
          "tipoEmpleado",
          "tipoContrato",
          "fechaIngreso"
        ]
      },
      "Proveedor": {
        "type": "object",
        "description": "Proveedores y contactos del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "proveedor"
          },
          "edificioId": {
            "type": "string"
          },
          "nombreEmpresa": {
            "type": "string"
          },
          "razonSocial": {
            "type": "string"
          },
          "rut": {
            "type": "string"
          },
          "giro": {
            "type": "string"
          },
          "tiposServicio": {
            "type": "array",
            "items": {}
          },
          "especialidad": {
            "type": "string"
          },
          "contactos": {
            "type": "array",
            "items": {}
          },
          "direccion": {
            "type": "string"
          },
          "comuna": {
            "type": "string"
          },
          "ciudad": {
            "type": "string"
          },
          "sitioWeb": {
            "type": "string"
          },
          "tarifaHora": {
            "type": "number"
          },
          "tarifaMinima": {
            "type": "number"
          },
          "formaPago": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "notasInternas": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "createdBy": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombreEmpresa",
          "rut",
          "tiposServicio",
          "contactos"
        ]
      },
      "Consumo": {
        "type": "object",
        "description": "Lecturas de luz, agua y gas por periodo.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "consumo"
          },
          "edificioId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "tipoConsumo": {
            "type": "string",
            "enum": [
              "luz",
              "agua",
              "gas"
            ]
          },
          "detallesDepartamentos": {
            "type": "array",
            "items": {}
          },
          "fechaLectura": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "createdBy": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "periodo",
          "tipoConsumo",
          "detallesDepartamentos"
        ]
      },
      "Mantencion": {
        "type": "object",
        "description": "Solicitudes y tickets de mantención.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "mantencion"
          },
          "edificioId": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "prioridad": {
            "type": "string",
            "enum": [
              "baja",
              "media",
              "alta",
              "urgente"
            ]
          },
          "departamentoId": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "pendiente",
              "en_progreso",
              "completada",
              "cancelada"
            ]
          },
          "solicitanteId": {
            "type": "string",
            "readOnly": true
          },
          "fechaSolicitud": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "tipo",
          "titulo",
          "descripcion",
          "prioridad"
        ]
      },
      "MultaDepartamento": {
        "type": "object",
        "description": "Multas aplicadas por departamento.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "multa_departamento"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "departamentoNumero": {
            "type": "string"
          },
          "tipoMultaId": {
            "type": "string"
          },
          "tipoMultaNombre": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "fechaMulta": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "departamentoId",
          "departamentoNumero",
          "tipoMultaId",
          "tipoMultaNombre",
          "concepto",
          "monto",
          "fechaMulta",
          "periodo"
        ]
      },
      "Visita": {
        "type": "object",
        "description": "Registro de visitas y encomiendas.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "visita"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "departamentoNumero": {
            "type": "string"
          },
          "nombreVisitante": {
            "type": "string"
          },
          "rutVisitante": {
            "type": "string"
          },
          "residenteVisitado": {
            "type": "string"
          },
          "fechaHoraIngreso": {
            "type": "string"
          },
          "accesoAutorizado": {
            "type": "boolean"
          },
          "esEncomienda": {
            "type": "boolean"
          },
          "observaciones": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "readOnly": true
          },
          "registradoPor": {
            "type": "string",
            "readOnly": true
          },
          "registradoPorNombre": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "departamentoId",
          "departamentoNumero",
          "nombreVisitante",
          "rutVisitante",
          "residenteVisitado",
          "fechaHoraIngreso",
          "accesoAutorizado"
        ]
      },
      "AreaComun": {
        "type": "object",
        "description": "Áreas comunes reservables del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "area_comun"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          },
          "configuracion": {
            "type": "object",
            "additionalProperties": true
          },
          "requiereReserva": {
            "type": "boolean"
          },
          "activo": {
            "type": "boolean"
          },
          "descripcion": {
            "type": "string"
          },
          "createdBy": {
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "tipo",
          "configuracion",
          "requiereReserva",
          "activo"
        ]
      },
      "Reserva": {
        "type": "object",
        "description": "Reservas de áreas comunes.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reserva_area"
          },
          "edificioId": {
            "type": "string"
          },
          "areaComunId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "fechaInicio": {
            "type": "string"
          },
          "fechaFin": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "pendiente",
              "confirmada",
              "cancelada"
            ]
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "areaComunId",
          "departamentoId",
          "fechaInicio",
          "fechaFin"
        ]
      },
      "Reglamento": {
        "type": "object",
        "description": "Reglamentos internos de la comunidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reglamento"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "contenido": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "vigenteDesde": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "contenido"
        ]
      },
      "DocumentoLegal": {
        "type": "object",
        "description": "Documentos legales del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "documento_legal"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "tipoDocumento": {
            "type": "string"
          },
          "fechaDocumento": {
            "type": "string"
          },
          "archivoUrl": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "tipoDocumento",
          "fechaDocumento"
        ]
      },
      "AnuncioDiarioMural": {
        "type": "object",
        "description": "Anuncios del diario mural.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "anuncio_diario_mural"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "contenido": {
            "type": "string"
          },
          "fechaPublicacion": {
            "type": "string"
          },
          "fechaExpiracion": {
            "type": "string"
          },
          "prioridad": {
            "type": "string",
            "enum": [
              "baja",
              "normal",
              "alta"
            ]
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "contenido",
          "fechaPublicacion"
        ]
      },
      "Comunicacion": {
        "type": "object",
        "description": "Comunicaciones enviadas a residentes.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "comunicacion"
          },
          "edificioId": {
            "type": "string"
          },
          "asunto": {
            "type": "string"
          },
          "cuerpo": {
            "type": "string"
          },
          "canal": {
            "type": "string",
            "enum": [
              "email",
              "push",
              "sms",
              "interno"
            ]
          },
          "destinatarios": {
            "type": "array",
            "items": {}
          },
          "fechaEnvio": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "asunto",
          "cuerpo"
        ]
      },
      "Ticket": {
        "type": "object",
        "description": "Tickets de soporte y atención.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "ticket"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "categoria": {
            "type": "string"
          },
          "prioridad": {
            "type": "string",
            "enum": [
              "baja",
              "media",
              "alta",
              "urgente"
            ]
          },
          "departamentoId": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "abierto",
              "en_progreso",
              "resuelto",
              "cerrado"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "descripcion"
        ]
      },
      "Votacion": {
        "type": "object",
        "description": "Votaciones y asambleas de la comunidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "votacion"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "opciones": {
            "type": "array",
            "items": {}
          },
          "fechaInicio": {
            "type": "string"
          },
          "fechaFin": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "borrador",
              "abierta",
              "cerrada"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "opciones",
          "fechaInicio",
          "fechaFin"
        ]
      },
      "ConvenioPago": {
        "type": "object",
        "description": "Convenios de pago por deuda.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "convenio_pago"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "montoTotal": {
            "type": "number"
          },
          "numeroCuotas": {
            "type": "number"
          },
          "fechaInicio": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "activo",
              "cumplido",
              "incumplido",
              "cancelado"
            ]
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "departamentoId",
          "montoTotal",
          "numeroCuotas",
          "fechaInicio"
        ]
      },
      "Cotizacion": {
        "type": "object",
        "description": "Cotizaciones de proveedores.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "cotizacion"
          },
          "edificioId": {
            "type": "string"
          },
          "proveedorId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "fechaCotizacion": {
            "type": "string"
          },
          "validaHasta": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "pendiente",
              "aceptada",
              "rechazada"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "proveedorId",
          "concepto",
          "monto",
          "fechaCotizacion"
        ]
      },
      "GrupoUnidades": {
        "type": "object",
        "description": "Grupos de unidades para prorrateo o cobro.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "grupo_unidades"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "departamentoIds": {
            "type": "array",
            "items": {}
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "departamentoIds"
        ]
      },
      "ItemInventario": {
        "type": "object",
        "description": "Inventario de bienes del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "item_inventario"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "categoria": {
            "type": "string"
          },
          "cantidad": {
            "type": "number"
          },
          "ubicacion": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "disponible",
              "en_uso",
              "baja"
            ]
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "cantidad"
        ]
      },
      "SolicitudAprobacion": {
        "type": "object",
        "description": "Solicitudes de aprobación internas.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "solicitud_aprobacion"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "tipoSolicitud": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "estado": {
            "type": "string",
            "enum": [
              "pendiente",
              "aprobada",
              "rechazada"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "descripcion",
          "tipoSolicitud"
        ]
      },
      "SeguroDepartamento": {
        "type": "object",
        "description": "Seguros por departamento.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "seguro_departamento"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "compania": {
            "type": "string"
          },
          "poliza": {
            "type": "string"
          },
          "vigenciaDesde": {
            "type": "string"
          },
          "vigenciaHasta": {
            "type": "string"
          },
          "montoCobertura": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "departamentoId",
          "compania",
          "poliza",
          "vigenciaDesde",
          "vigenciaHasta"
        ]
      },
      "Siniestro": {
        "type": "object",
        "description": "Siniestros y reclamos de seguros.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "siniestro"
          },
          "edificioId": {
            "type": "string"
          },
          "seguroId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "fechaSiniestro": {
            "type": "string"
          },
          "montoEstimado": {
            "type": "number"
          },
          "estado": {
            "type": "string",
            "enum": [
              "abierto",
              "en_proceso",
              "cerrado"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "descripcion",
          "fechaSiniestro"
        ]
      },
      "PlanEmergencia": {
        "type": "object",
        "description": "Planes de emergencia del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "plan_emergencia"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "tiposEmergenciaCubiertos": {
            "type": "array",
            "items": {}
          },
          "planos": {
            "type": "array",
            "items": {}
          },
          "procedimientos": {
            "type": "array",
            "items": {}
          },
          "contactos": {
            "type": "array",
            "items": {}
          },
          "brigadas": {
            "type": "array",
            "items": {}
          },
          "puntosEncuentro": {
            "type": "array",
            "items": {}
          },
          "simulacros": {
            "type": "array",
            "items": {}
          },
          "versionActual": {
            "type": "string"
          },
          "historialVersiones": {
            "type": "array",
            "items": {}
          },
          "fechaVigenciaDesde": {
            "type": "string"
          },
          "fechaVigenciaHasta": {
            "type": "string"
          },
          "proximaRevision": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "creadoPor": {
            "type": "string",
            "readOnly": true
          },
          "creadoPorNombre": {
            "type": "string",
            "readOnly": true
          },
          "aprobadoPor": {
            "type": "string",
            "readOnly": true
          },
          "aprobadoPorNombre": {
            "type": "string",
            "readOnly": true
          },
          "fechaAprobacion": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "descripcion"
        ]
      },
      "ProcedimientoInterno": {
        "type": "object",
        "description": "Procedimientos internos operativos.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "procedimiento_interno"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "categoria": {
            "type": "string"
          },
          "pasos": {
            "type": "array",
            "items": {}
          },
          "responsable": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "pasos"
        ]
      },
      "PagoEdificio": {
        "type": "object",
        "description": "Pagos del módulo Finanzas del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "pago_edificio"
          },
          "edificioId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "fechaPago": {
            "type": "string"
          },
          "metodoPago": {
            "type": "string"
          },
          "beneficiario": {
            "type": "string"
          },
          "egresoId": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "concepto",
          "monto",
          "fechaPago",
          "metodoPago"
        ]
      },
      "FondoReserva": {
        "type": "object",
        "description": "Fondos de reserva de la comunidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "fondo_reserva"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "saldo": {
            "type": "number"
          },
          "meta": {
            "type": "number"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "saldo"
        ]
      },
      "ConfiguracionEdificio": {
        "type": "object",
        "description": "Parámetros de cobro, mora, notificaciones, firma y reglas del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "configuracion_edificio"
          },
          "edificioId": {
            "type": "string"
          },
          "pais": {
            "type": "string"
          },
          "jurisdiccion": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "provincia": {
            "type": "string"
          },
          "geo": {
            "type": "object",
            "additionalProperties": true
          },
          "diaGeneracionGastos": {
            "type": "number"
          },
          "diaEmisionGastos": {
            "type": "number"
          },
          "diaCobroGastosComunes": {
            "type": "number"
          },
          "diaVencimiento": {
            "type": "number"
          },
          "moneda": {
            "type": "string"
          },
          "monedaProveedores": {
            "type": "string"
          },
          "valorUFActual": {
            "type": "number"
          },
          "valoresUF": {
            "type": "array",
            "items": {}
          },
          "porcentajeMora": {
            "type": "number"
          },
          "porcentajeMulta": {
            "type": "number"
          },
          "diasGraciaMora": {
            "type": "number"
          },
          "diasGracia": {
            "type": "number"
          },
          "permitirPagoOnline": {
            "type": "boolean"
          },
          "notificacionesEmail": {
            "type": "boolean"
          },
          "notificacionesSMS": {
            "type": "boolean"
          },
          "informacionBancaria": {
            "type": "string"
          },
          "intereses": {
            "type": "object",
            "additionalProperties": true
          },
          "fondoReserva": {
            "type": "object",
            "additionalProperties": true
          },
          "fondosEspeciales": {
            "type": "array",
            "items": {}
          },
          "torreSeguros": {
            "type": "object",
            "additionalProperties": true
          },
          "seguroColectivo": {
            "type": "object",
            "additionalProperties": true
          },
          "datosBancarios": {
            "type": "object",
            "additionalProperties": true
          },
          "administrador": {
            "type": "object",
            "additionalProperties": true
          },
          "firmaOficial": {
            "type": "object",
            "additionalProperties": true
          },
          "firmaDigital": {
            "type": "object",
            "additionalProperties": true
          },
          "pagoOnline": {
            "type": "object",
            "additionalProperties": true
          },
          "recordatoriosConsumos": {
            "type": "object",
            "additionalProperties": true
          },
          "tarifasServicios": {
            "type": "object",
            "additionalProperties": true
          },
          "configuracionTickets": {
            "type": "object",
            "additionalProperties": true
          },
          "configuracionMedidores": {
            "type": "object",
            "additionalProperties": true
          },
          "configuracionSMS": {
            "type": "object",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId"
        ]
      },
      "TipoMulta": {
        "type": "object",
        "description": "Catálogo de tipos de multa configurables por edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "tipo_multa"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre"
        ]
      },
      "FinanzasConfig": {
        "type": "object",
        "description": "Categorías y subcategorías de egresos e ingresos del módulo Finanzas.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "finanzas_config"
          },
          "edificioId": {
            "type": "string"
          },
          "egresos": {
            "type": "array",
            "items": {}
          },
          "ingresos": {
            "type": "array",
            "items": {}
          },
          "subcategoriasEgresos": {
            "type": "array",
            "items": {}
          },
          "ocultasEgresos": {
            "type": "array",
            "items": {}
          },
          "ocultasIngresos": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId"
        ]
      },
      "GastoDepartamento": {
        "type": "object",
        "description": "Prorrateo de gasto común por departamento/unidad.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "gasto_departamento"
          },
          "edificioId": {
            "type": "string"
          },
          "gastoId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "montoTotal": {
            "type": "number"
          },
          "items": {
            "type": "array",
            "items": {}
          },
          "estado": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "gastoId",
          "departamentoId",
          "periodo",
          "montoTotal"
        ]
      },
      "UserAssignment": {
        "type": "object",
        "description": "Vincula un usuario a un edificio/unidad con un rol.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "user_assignment"
          },
          "userEmail": {
            "type": "string"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "rol": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "fechaAsignacion": {
            "type": "string"
          },
          "asignadoPor": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "userEmail",
          "edificioId",
          "rol"
        ]
      },
      "RoleAssignment": {
        "type": "object",
        "description": "RBAC por edificio: rol, permisos extra y exclusiones.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "role_assignment"
          },
          "edificioId": {
            "type": "string"
          },
          "userEmail": {
            "type": "string"
          },
          "userName": {
            "type": "string"
          },
          "rol": {
            "type": "string"
          },
          "permissions": {
            "type": "array",
            "items": {}
          },
          "excludedPermissions": {
            "type": "array",
            "items": {}
          },
          "permissionGroups": {
            "type": "array",
            "items": {}
          },
          "temporary": {
            "type": "boolean"
          },
          "expiresAt": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "assignedBy": {
            "type": "string",
            "readOnly": true
          },
          "assignedByName": {
            "type": "string",
            "readOnly": true
          },
          "assignedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "userEmail",
          "rol"
        ]
      },
      "PermissionGroup": {
        "type": "object",
        "description": "Grupos custom de permisos reutilizables por edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "permission_group"
          },
          "edificioId": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "permisos": {
            "type": "array",
            "items": {}
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombre",
          "permisos"
        ]
      },
      "UserPermissions": {
        "type": "object",
        "description": "Permisos extra otorgados a un usuario en un edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "user_permissions"
          },
          "userEmail": {
            "type": "string"
          },
          "edificioId": {
            "type": "string"
          },
          "permisosAdicionales": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "userEmail",
          "edificioId",
          "permisosAdicionales"
        ]
      },
      "Turno": {
        "type": "object",
        "description": "Turnos de personal: fecha, horario y empleados asignados.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "turno"
          },
          "edificioId": {
            "type": "string"
          },
          "fecha": {
            "type": "string"
          },
          "horaInicio": {
            "type": "string"
          },
          "horaFin": {
            "type": "string"
          },
          "tipoTurno": {
            "type": "string"
          },
          "empleados": {
            "type": "array",
            "items": {}
          },
          "estado": {
            "type": "string"
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "creadoPor": {
            "type": "string",
            "readOnly": true
          },
          "creadoPorNombre": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "fecha",
          "horaInicio",
          "horaFin",
          "tipoTurno",
          "empleados"
        ]
      },
      "Tarea": {
        "type": "object",
        "description": "Tareas de planificación operativas, opcionales a un turno.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "tarea"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "tipoTarea": {
            "type": "string"
          },
          "frecuencia": {
            "type": "string"
          },
          "turnoId": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "asignadaATurno": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo"
        ]
      },
      "MiembroComite": {
        "type": "object",
        "description": "Integrantes del comité de administración del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "miembro_comite"
          },
          "edificioId": {
            "type": "string"
          },
          "usuarioId": {
            "type": "string"
          },
          "usuarioEmail": {
            "type": "string"
          },
          "usuarioNombre": {
            "type": "string"
          },
          "nombre": {
            "type": "string"
          },
          "apellido": {
            "type": "string"
          },
          "cargo": {
            "type": "string"
          },
          "rut": {
            "type": "string"
          },
          "unidad": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "telefono": {
            "type": "string"
          },
          "fechaInicio": {
            "type": "string"
          },
          "fechaFin": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "cargo"
        ]
      },
      "ReunionComite": {
        "type": "object",
        "description": "Reuniones programadas del comité con orden del día.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reunion_comite"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "fechaProgramada": {
            "type": "string"
          },
          "horaInicio": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "ordenDelDia": {
            "type": "array",
            "items": {}
          },
          "asistentesReales": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "fechaProgramada"
        ]
      },
      "ActaComite": {
        "type": "object",
        "description": "Actas formales asociadas a reuniones de comité.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "acta_comite"
          },
          "edificioId": {
            "type": "string"
          },
          "reunionId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "numeroActa": {
            "type": "string"
          },
          "contenidoHtml": {
            "type": "string"
          },
          "datos": {
            "type": "object",
            "additionalProperties": true
          },
          "estado": {
            "type": "string"
          },
          "firmasRequeridas": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "reunionId",
          "titulo"
        ]
      },
      "PlusvaliaConfig": {
        "type": "object",
        "description": "Factores y orientación para el índice de plusvalía del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "plusvalia_config"
          },
          "edificioId": {
            "type": "string"
          },
          "orientacionEdificio": {
            "type": "string"
          },
          "factores": {
            "type": "array",
            "items": {}
          },
          "orientacionUnidades": {
            "type": "object",
            "additionalProperties": true
          },
          "geo": {
            "type": "object",
            "additionalProperties": true
          },
          "fuentesExternas": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId"
        ]
      },
      "PlusvaliaSnapshot": {
        "type": "object",
        "description": "Snapshots periódicos del índice de plusvalía.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "plusvalia_snapshot"
          },
          "edificioId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "fecha": {
            "type": "string"
          },
          "indicePromedio": {
            "type": "number"
          },
          "config": {
            "type": "object",
            "additionalProperties": true
          },
          "detalle": {
            "type": "object",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "periodo",
          "fecha"
        ]
      },
      "Transparencia": {
        "type": "object",
        "description": "Portal de transparencia comunitaria (lectura agregada de finanzas, comité y seguros).",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "transparencia_vista"
          },
          "edificioId": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "gastos": {
            "type": "string",
            "readOnly": true
          },
          "egresos": {
            "type": "string",
            "readOnly": true
          },
          "aprobaciones": {
            "type": "string",
            "readOnly": true
          },
          "reuniones": {
            "type": "string",
            "readOnly": true
          },
          "actas": {
            "type": "string",
            "readOnly": true
          },
          "procedimientos": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId"
        ]
      },
      "Reporte": {
        "type": "object",
        "description": "Reportes financieros, de morosidad, mantenciones y ocupación.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reporte_financiero"
          },
          "edificioId": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "parametros": {
            "type": "object",
            "additionalProperties": true
          },
          "formato": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "generadoPor": {
            "type": "string",
            "readOnly": true
          },
          "generadoEn": {
            "type": "string",
            "readOnly": true
          },
          "resultado": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "tipo",
          "periodo"
        ]
      },
      "ReservaEstacionamientoVisita": {
        "type": "object",
        "description": "Reservas de estacionamiento para visitas.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reserva_estacionamiento_visita"
          },
          "edificioId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "nombreVisitante": {
            "type": "string"
          },
          "patenteVehiculo": {
            "type": "string"
          },
          "fechaHoraVisita": {
            "type": "string"
          },
          "estacionamientoReservado": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "departamentoId",
          "nombreVisitante",
          "fechaHoraVisita"
        ]
      },
      "ActivityLog": {
        "type": "object",
        "description": "Auditoría de acciones de usuarios en el edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "activity_log"
          },
          "edificioId": {
            "type": "string"
          },
          "activityType": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "userEmail": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "activityType",
          "description"
        ]
      },
      "MonitoreoEquipo": {
        "type": "object",
        "description": "Configuración del agente de monitoreo en equipos del personal.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "monitoreo_agente_config"
          },
          "edificioId": {
            "type": "string"
          },
          "plantilla": {
            "type": "string"
          },
          "rolesAplicacion": {
            "type": "array",
            "items": {}
          },
          "controlAplicaciones": {
            "type": "object",
            "additionalProperties": true
          },
          "filtradoWeb": {
            "type": "object",
            "additionalProperties": true
          },
          "dispositivosUsb": {
            "type": "object",
            "additionalProperties": true
          },
          "auditoriaSesion": {
            "type": "object",
            "additionalProperties": true
          },
          "activo": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId"
        ]
      },
      "CotizacionSeguro": {
        "type": "object",
        "description": "Cotizaciones rápidas de seguros del edificio (distinto de cotizaciones a proveedores).",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "cotizacion_seguro"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "tipoSeguro": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "propuestas": {
            "type": "array",
            "items": {}
          },
          "asesoria": {
            "type": "object",
            "additionalProperties": true
          },
          "montoAseguradoEstimado": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "tipoSeguro"
        ]
      },
      "RegistroHoras": {
        "type": "object",
        "description": "Horas trabajadas por empleado y periodo.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "registro_horas"
          },
          "edificioId": {
            "type": "string"
          },
          "empleadoId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "fecha": {
            "type": "string"
          },
          "horasTrabajadas": {
            "type": "number"
          },
          "aprobado": {
            "type": "boolean"
          },
          "observaciones": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "empleadoId",
          "periodo",
          "fecha",
          "horasTrabajadas"
        ]
      },
      "PagoEmpleado": {
        "type": "object",
        "description": "Liquidaciones y pagos de personal.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "pago_empleado"
          },
          "edificioId": {
            "type": "string"
          },
          "empleadoId": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "montoTotal": {
            "type": "number"
          },
          "estado": {
            "type": "string"
          },
          "fechaPago": {
            "type": "string"
          },
          "metodoPago": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "empleadoId",
          "periodo",
          "montoTotal"
        ]
      },
      "MantencionPeriodica": {
        "type": "object",
        "description": "Planes de mantención recurrentes del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "mantencion_periodica"
          },
          "edificioId": {
            "type": "string"
          },
          "titulo": {
            "type": "string"
          },
          "frecuencia": {
            "type": "string"
          },
          "proveedorId": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "proximaEjecucion": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "titulo",
          "frecuencia"
        ]
      },
      "ProcedimientoEjecucion": {
        "type": "object",
        "description": "Instancias de ejecución de procedimientos internos.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "procedimiento_ejecucion"
          },
          "edificioId": {
            "type": "string"
          },
          "procedimientoId": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "pasosCompletados": {
            "type": "array",
            "items": {}
          },
          "responsable": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "procedimientoId",
          "estado"
        ]
      },
      "Invitacion": {
        "type": "object",
        "description": "Invitaciones pendientes a usuarios del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "invitacion_pendiente"
          },
          "edificioId": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "rol": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "mensaje": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "token": {
            "type": "string",
            "readOnly": true
          },
          "enviadoEn": {
            "type": "string",
            "readOnly": true
          },
          "expiraEn": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "email",
          "rol"
        ]
      },
      "CentroDatos": {
        "type": "object",
        "description": "Cargas e importaciones masivas de datos históricos del edificio.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "datos_historicos"
          },
          "edificioId": {
            "type": "string"
          },
          "hoja": {
            "type": "string"
          },
          "datos": {
            "type": "array",
            "items": {}
          },
          "fuente": {
            "type": "string"
          },
          "fechaCarga": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "hoja",
          "datos"
        ]
      },
      "Finanzas": {
        "type": "object",
        "description": "Vista agregada del módulo Finanzas (egresos, ingresos y tesorería).",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "egreso"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          }
        }
      },
      "ChatThread": {
        "type": "object",
        "description": "Chat entre residentes y administración (hilos y mensajes del edificio).",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "chat_thread"
          },
          "edificioId": {
            "type": "string"
          },
          "participants": {
            "type": "array",
            "items": {}
          },
          "kind": {
            "type": "string",
            "enum": [
              "direct",
              "group"
            ]
          },
          "title": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "fromEmail": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "lastMessageAt": {
            "type": "string",
            "readOnly": true
          },
          "lastMessagePreview": {
            "type": "string",
            "readOnly": true
          },
          "lastReadAt": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "participants"
        ]
      },
      "ReporteAnualGestion": {
        "type": "object",
        "description": "Reporte anual con checklist, slides, comentarios y exportación PPTX.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "reporte_anual_gestion"
          },
          "edificioId": {
            "type": "string"
          },
          "anio": {
            "type": "number"
          },
          "estado": {
            "type": "string",
            "enum": [
              "borrador",
              "en_revision",
              "presentado"
            ]
          },
          "checklist": {
            "type": "array",
            "items": {}
          },
          "secciones": {
            "type": "array",
            "items": {}
          },
          "comentarios": {
            "type": "array",
            "items": {}
          },
          "notasAdmin": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "progreso": {
            "type": "string",
            "readOnly": true
          },
          "datos": {
            "type": "string",
            "readOnly": true
          },
          "pptxGeneradoEn": {
            "type": "string",
            "readOnly": true
          },
          "actualizadoEn": {
            "type": "string",
            "readOnly": true
          },
          "creadoEn": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "anio"
        ]
      },
      "PersonalReserva": {
        "type": "object",
        "description": "Personal de reserva compartido entre edificios (comunidesk_transversal).",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "personal_reserva"
          },
          "nombre": {
            "type": "string"
          },
          "apellido": {
            "type": "string"
          },
          "rut": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          },
          "telefono": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "disponible": {
            "type": "boolean"
          },
          "estado": {
            "type": "string",
            "enum": [
              "activo",
              "inactivo",
              "suspendido"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "tipo_doc": {
            "type": "string",
            "readOnly": true
          },
          "creadoPor": {
            "type": "string",
            "readOnly": true
          },
          "rbacUsers": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "nombre",
          "apellido",
          "rut",
          "tipo"
        ]
      },
      "MiembroEquipo": {
        "type": "object",
        "description": "Miembros del equipo de soporte transversal con permisos por rol.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "equipo_soporte"
          },
          "nombre": {
            "type": "string"
          },
          "apellido": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "rol": {
            "type": "string"
          },
          "activo": {
            "type": "boolean"
          },
          "edificiosAsignados": {
            "type": "array",
            "items": {}
          },
          "permisos": {
            "type": "object",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "tipo_doc": {
            "type": "string",
            "readOnly": true
          },
          "creadoPor": {
            "type": "string",
            "readOnly": true
          },
          "estadisticas": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "nombre",
          "apellido",
          "email",
          "rol"
        ]
      },
      "AsignacionTransversal": {
        "type": "object",
        "description": "Asignaciones de personal titular y reemplazo entre edificios.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "asignacion"
          },
          "edificioId": {
            "type": "string"
          },
          "personalTitularId": {
            "type": "string"
          },
          "personalReemplazoId": {
            "type": "string"
          },
          "motivoReemplazo": {
            "type": "string"
          },
          "fechaInicio": {
            "type": "string"
          },
          "fechaFin": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "activa",
              "proxima",
              "finalizada",
              "cancelada"
            ]
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "tipo_doc": {
            "type": "string",
            "readOnly": true
          },
          "creadoPor": {
            "type": "string",
            "readOnly": true
          },
          "egresoFinanzasId": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "personalTitularId",
          "fechaInicio",
          "fechaFin"
        ]
      },
      "EgresoExclusionGastoComun": {
        "type": "object",
        "description": "Postergación de cobro de egresos/cuotas en el gasto común mensual.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "egreso_exclusion_gasto_comun"
          },
          "edificioId": {
            "type": "string"
          },
          "periodoExcluido": {
            "type": "string"
          },
          "periodoDestino": {
            "type": "string"
          },
          "egresoId": {
            "type": "string"
          },
          "cuotaId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "esCuota": {
            "type": "boolean"
          },
          "motivo": {
            "type": "string"
          },
          "estado": {
            "type": "string",
            "enum": [
              "pendiente",
              "integrado",
              "cancelado"
            ]
          },
          "integradoEnPeriodo": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "excluidoPor": {
            "type": "string",
            "readOnly": true
          },
          "excluidoPorNombre": {
            "type": "string",
            "readOnly": true
          },
          "excluidoAt": {
            "type": "string",
            "readOnly": true
          },
          "integradoAt": {
            "type": "string",
            "readOnly": true
          },
          "integradoPor": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "periodoExcluido",
          "egresoId",
          "concepto",
          "monto",
          "esCuota"
        ]
      },
      "ConciliacionBancaria": {
        "type": "object",
        "description": "Conciliación de movimientos bancarios con gastos comunes, egresos e ingresos.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "conciliacion_bancaria"
          },
          "edificioId": {
            "type": "string"
          },
          "transaccionId": {
            "type": "string"
          },
          "fecha": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "periodo": {
            "type": "string"
          },
          "tipoConciliacion": {
            "type": "string"
          },
          "comentarios": {
            "type": "string"
          },
          "unidadId": {
            "type": "string"
          },
          "unidadNumero": {
            "type": "string"
          },
          "tipoUnidad": {
            "type": "string"
          },
          "gastoComunId": {
            "type": "string"
          },
          "departamentoId": {
            "type": "string"
          },
          "departamentoNumero": {
            "type": "string"
          },
          "egresoId": {
            "type": "string"
          },
          "ingresoId": {
            "type": "string"
          },
          "concepto": {
            "type": "string"
          },
          "egresoCreado": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "conciliadoPor": {
            "type": "string",
            "readOnly": true
          },
          "conciliadoEn": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "transaccionId",
          "fecha",
          "descripcion",
          "monto",
          "tipoConciliacion"
        ]
      },
      "MovimientoBancario": {
        "type": "object",
        "description": "Movimientos importados de cartola bancaria y su estado de conciliación.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "movimiento_bancario"
          },
          "edificioId": {
            "type": "string"
          },
          "transaccionId": {
            "type": "string"
          },
          "fecha": {
            "type": "string"
          },
          "descripcion": {
            "type": "string"
          },
          "monto": {
            "type": "number"
          },
          "periodo": {
            "type": "string"
          },
          "mapeoAutomatico": {
            "type": "string"
          },
          "confianzaMapeo": {
            "type": "number"
          },
          "conciliado": {
            "type": "boolean"
          },
          "conciliacionId": {
            "type": "string"
          },
          "conciliacionDetalle": {
            "type": "object",
            "additionalProperties": true
          },
          "conciliadoEn": {
            "type": "string"
          },
          "duplicado": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "cargadoPor": {
            "type": "string",
            "readOnly": true
          },
          "cargadoEn": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "transaccionId",
          "fecha",
          "descripcion",
          "monto"
        ]
      },
      "CargaCartola": {
        "type": "object",
        "description": "Historial de importaciones de cartola bancaria.",
        "properties": {
          "_id": {
            "type": "string"
          },
          "_rev": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "carga_cartola"
          },
          "edificioId": {
            "type": "string"
          },
          "nombreArchivo": {
            "type": "string"
          },
          "periodo": {
            "type": "string"
          },
          "resumen": {
            "type": "object",
            "additionalProperties": true
          },
          "rangoFechas": {
            "type": "object",
            "additionalProperties": true
          },
          "movimientosIds": {
            "type": "array",
            "items": {}
          },
          "movimientosData": {
            "type": "array",
            "items": {}
          },
          "createdAt": {
            "type": "string",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "readOnly": true
          },
          "cargadoPor": {
            "type": "string",
            "readOnly": true
          },
          "cargadoPorNombre": {
            "type": "string",
            "readOnly": true
          },
          "fechaCarga": {
            "type": "string",
            "readOnly": true
          }
        },
        "required": [
          "edificioId",
          "nombreArchivo",
          "periodo",
          "resumen",
          "rangoFechas"
        ]
      },
      "OAuthScopes": {
        "type": "string",
        "enum": [
          "comunidesk:read",
          "comunidesk:write",
          "files:pdf",
          "files:excel",
          "ai:models",
          "ai:chat",
          "ai:extract",
          "ai:web",
          "flex-pro:manage",
          "flex-pro:runtime",
          "flex-pro:marketplace"
        ],
        "description": "Scopes OAuth soportados por el gateway."
      }
    }
  },
  "security": [
    {
      "OAuth2App": [],
      "ComunideskUser": []
    }
  ]
}