El árbol organizacional y las relaciones padre-hijo
La página de Estructura Organizacional (/org-structure) es el mejor lugar en GCM para ver la forma de tu iglesia. Es un árbol literal — cada unidad de nivel 1 es una raíz, cada unidad de nivel 2 se anida bajo ella, y así sucesivamente hasta las hojas.
Esta página es sobre leer y navegar el árbol. Crear unidades vive en Crear unidades; gestionar los nombres de los niveles vive en Definir niveles.
Anatomía de una fila
Cada unidad se renderiza como una fila en el árbol con estos elementos, de izquierda a derecha:
- Un chevron de expandir/colapsar si la unidad tiene hijos. Desactivado cuando no hay descendientes.
- Un ícono — edificio para activa, archivo para archivada.
- El nombre. Los nombres largos se envuelven en una segunda línea en lugar de truncarse a "Centr…".
- Una insignia de nivel ("Sede", "Centro") — la etiqueta singular del nivel.
- Un chip de conteo de miembros con un ícono
Users. Haz hover para el tooltip exacto. - El nombre del líder si hay uno asignado, en una línea más pequeña debajo. Los líderes no asignados muestran una pista atenuada ámbar "Sin líder asignado" cuando tienes permiso de gestión, para que puedas detectar huecos de un vistazo.
- La dirección si está definida.
- Una fila de acciones al hacer hover con controles de asignar líder, editar y archivar.

Expandir el árbol
Haz clic en el chevron de cualquier unidad con hijos para expandirla. Los hijos se renderizan una indentación más adentro con un conector vertical de línea de árbol. Haz clic de nuevo para colapsar.
Tres atajos en la barra de herramientas:
- Expandir todo — abre cada fila de una vez. Bueno para detectar huecos.
- Colapsar todo — cierra todo de vuelta al nivel 1.
- Seleccionar todo — usado con acciones en lote, ver abajo.
El estado de expansión vive solo en el estado del componente — refresca la página y vuelves a todo-colapsado. Eso es intencional; para organizaciones con cientos de unidades la vista todo-expandido es inmanejable.
Estadísticas de resumen
Por encima del árbol, dos tarjetas de estadísticas con forma de píldora muestran:
- N unidades — total de unidades activas en cada nivel.
- N miembros asignados — suma del conteo de miembros de cada unidad. (Nota: un miembro asignado en el nivel 1 y el nivel 3 cuenta dos veces a través de los niveles, pero solo una vez hacia el total de miembros de la organización en otros lugares. Esta estadística muestra el conteo de asignación, no el conteo distinto de miembros.)
Estas píldoras están codificadas por color — primario para unidades, azul para miembros — y sirven como una verificación rápida de salud.
Entrar en una unidad
Haz clic en la fila de una unidad para seleccionarla (la fila se resalta en azul primario). Hacer clic en el nombre de una unidad hija en la migaja de pan en la parte superior de la página de detalle de la unidad te lleva un nivel arriba. El patrón de URL es:
/org-structure— la vista del árbol./hierarchy/:levelIndex— la página de nivel (cuadrícula de tarjetas de cada unidad en ese nivel)./hierarchy/:levelIndex/:unitId— la página de detalle de la unidad.
La página de detalle de la unidad es la vista pesada. Incluye:
- Una tarjeta hero con el nombre de la unidad, píldora de líder, conteo de miembros e insignia del padre.
- Mosaicos de estadísticas para el conteo de unidades hijas, total de miembros en el subárbol, promedio de miembros por hijo y la proporción de "líderes asignados" (ej. "2 / 7").
- La tarjeta de dirección y la vista previa del mapa embebido si
map_locationoestimated_map_locationestá definido. - Un panel de Unidades hijas con pestañas activas y archivadas, controles de orden y tarjetas con click-through.
- Un panel de Miembros con filas de asignación buscables, paginadas y removibles.
Las migajas de pan son clickeables
En la parte superior de cada página de detalle de unidad la migaja de pan es Estructura organizacional → <nombre plural del nivel> → <nombre de la unidad>. Haz clic en cualquier segmento para regresar.
Reglas padre-hijo
Cada unidad debajo del nivel 1 tiene exactamente un padre. Las reglas que la UI aplica:
- Una unidad no puede ser su propio padre. El selector excluye el propio id de la unidad.
- Una unidad no puede ser un descendiente de sí misma. Reasignar valida contra esto implícitamente vía la restricción de nivel (solo puedes elegir un padre un nivel arriba).
- Un padre debe estar en el nivel inmediatamente superior. Una célula de nivel 4 no puede ser asignada directamente a una sede de nivel 1 — tiene que pasar por un nivel 2 y un nivel 3.
- Las unidades de nivel 1 no tienen padre. El selector no aparece en el diálogo de creación para el nivel 1.
Estos son guardias de UI; la base de datos también tiene una restricción de verificación que coincide con #3.
Operaciones en lote
Una vez que cualquier casilla de unidad está marcada, una barra fija de acciones en lote aparece en la parte superior del árbol con estas opciones:
- Archivar — oculta suavemente las unidades seleccionadas (y todos sus descendientes — la cascada es automática).
- Eliminar — abre un asistente de reasignación. Ver abajo.
- Limpiar — descarta la selección.
En una página de nivel (cuadrícula de tarjetas) también obtienes Editar padre — reasigna varias unidades hermanas a un único nuevo padre en una sola operación. El selector excluye las unidades seleccionadas para prevenir auto-asignación.
El asistente de reasignación al eliminar
Eliminar una unidad que tiene hijos o miembros dispara un diálogo de guardia con dos preguntas:
¿Qué debe pasar con las unidades hijas?
- Eliminarlas también (el predeterminado — cascada recursiva).
- Moverlas a una unidad hermana que elijas de un desplegable.
¿Qué debe pasar con los miembros?
- Desasignarlos (eliminar la fila de
member_unit_assignments). Siguen siendo miembros; solo pierden su vínculo de unidad. - Reasignarlos a una unidad hermana que elijas.
El asistente cuenta ambos antes de ejecutar para que veas "12 miembros asignados" y la lista de nombres de unidades hijas antes de confirmar. Una vez que haces clic en Eliminar permanentemente la operación corre como una secuencia: reparentar hijos → reasignar miembros → limpieza de user-unit-assignment → soft-delete en las unidades.
La eliminación dura es irreversible desde la UI
Una vez que el asistente corre, las filas eliminadas tienen deleted_at definido y son invisibles para la app. Restaurarlas requiere un arreglo directo en la base de datos por parte de soporte. Prefiere Archivar para cualquier cosa que podrías querer recuperar.
Cómo el árbol obtiene los datos
El árbol usa dos consultas:
org_units— cada fila activa para la organización, ordenada porlevel_indexluegoname.org_units_archived— la misma consulta conarchived_at IS NOT NULL.
Ambas se cachean por 2 minutos vía React Query. Las mutaciones (crear, editar, archivar, eliminar) invalidan el caché para que el árbol se refresque automáticamente. Si los conteos de insignias alguna vez se ven desactualizados, navega afuera y de vuelta — eso fuerza un refetch.
Próximos pasos
- Asigna miembros a las unidades en tu árbol.
- Asigna líderes y pastores para limitar las vistas de los usuarios.
- Archivar y restaurar cuando la forma de tu árbol cambie.
