Modelo DCIM: Sala → Fila → Rack
Nace de la ronda del 23-08-2026 (task #253):
bib_asksobre los invariantes de Blueprint/Room/Row devolvía 0 chunks — estas reglas solo vivían como comentarios en el código. Esta página los destila. Verificado contra v1.82.x.
Las tres caras de un mismo modelo
Blueprint es UN solo modelo con tres modos (Blueprint.mode):
| mode | Qué es | Qué coloca | Página propia |
|---|---|---|---|
map (default) | plano de planta clásico | racks, vía BlueprintPlacement | /blueprints/<id> |
row | una Fila de racks (línea de CPD) | racks, vía BlueprintPlacement | /rows/<id> (la vista exige mode="row" — un id de otro modo da 404) |
room | una Sala (plano que contiene Filas) | FILAS, vía RoomRowPlacement(room, row, pos_x, pos_y, rotation) | sección Rooms del dashboard |
Invariantes que el código exige:
- Una Sala NO coloca racks directamente: sus racks son los de sus Filas. Por
eso una Sala no aparece en el
{% regroup %}de racks del dashboard — se lista aparte (racks/views.py, sección Rooms conrow_count/rack_countanotados). - Una Fila puede colocarse en varias Salas (RoomRowPlacement es N:M con posición); los racks viven en la Fila, no en la colocación.
- La sección de un rack en el dashboard = el blueprint de su PRIMERA colocación
activa (
placementscon blueprint no borrado, orden por pk). Sin colocación → “No Map”. La misma regla la usa el inventario del backup (backup_selection.py). - Borrar una Fila manda sus racks a la papelera SOLO si ningún otro placement
activo los referencia (
blueprints.py, delete): un rack colocado además en un mapa sobrevive.
Trampas conocidas (todas mordidas)
- Clonado (task #253, arreglado en v1.82.4): el clon debe conservar
modey, en Salas, replicar lasRoomRowPlacement. Clonar una Fila se RECHAZA (400): losBlueprintPlacementcopiados apuntarían a LOS MISMOSRack— racks compartidos entre dos filas rompen el borrado y el 404 de/rows/. El clon real de racks esclone_rack_in_row(página de la Fila). - El dashboard agrupa secciones por NOMBRE de blueprint, no por id
(
racks/views.pyracks_by_group[blueprint_name]+dashboard_sections.build_sections): dos planos con el mismo nombre en la misma org se fundirían en una tarjeta.Blueprint.nameNO tiene unique. Hoy sin colisión en PROD; el cambio a id está APLAZADO a conciencia (toca la caché de roll-ups + plantilla; task #253). - Fondos de plano (task #252, v1.82.4): viven en
uploads/blueprints/<org_id>/con nombrebp{id}_{slug}_{ts}; los legacy de la carpeta plana pueden estar COMPARTIDOS entre organizaciones (los creó el restore) — jamás borrarlos desde código de request (el RLS impide ver las referencias de otras orgs); limpieza: comandocleanup_blueprint_backgrounds(manual, dry-run por defecto). - Auto-Plan escribe la imagen ANTES de encolar el análisis; si la task falla,
_cleanup_failed_uploadrecoge el fichero (si nada lo referencia — la task Huey corre con bypass RLS y sí ve todas las orgs).
Véase también
- [[crearack—racks—filas-row]]
- [[crearack—blueprints—crear-plano]]