PortLab

Platform for Open Research Through Live Analysis and Broadcasting

Diagramas de Gantt

Actividades

Propiedades

Dependencias

JSON del diagrama

Es lo mismo que se ve a la izquierda, escrito por extenso: quien prefiera teclear puede trabajar aquí y pulsar Aplicar. El texto se actualiza con cada cambio hecho en los paneles; los cambios hechos aquí solo surten efecto tras Aplicar.

Un invento de hace más de un siglo

El diagrama que lleva el nombre de Henry L. Gantt tiene dos padres. Karol Adamiecki, ingeniero polaco, dibujaba desde 1896 un harmonogram: tiras de papel que se deslizaban sobre un tablero graduado, una por trabajo, con las fechas de inicio y de fin y las dependencias entre unos y otros. Solo lo publicó en 1931, en polaco, y durante décadas fuera de Polonia no se supo nada de él (Marsh, 1975). Gantt, en Estados Unidos, llegó a una idea parecida en la década de 1910, para controlar la producción en los talleres y después en los astilleros de la Primera Guerra Mundial; el libro de Wallace Clark de 1922 la difundió en muchas lenguas, y con el nombre de Gantt (Wilson, 2003).

La idea es sencilla y por eso ha durado: el tiempo en horizontal, una fila por actividad, y una barra tan larga como su duración. De un vistazo se ve qué se solapa, qué va con retraso respecto a una fecha, cuánto falta para el final.

El dibujo no basta: las redes

Un diagrama de Gantt dice cuándo, pero no dice por qué. Si una actividad se retrasa una semana, ¿cuáles otras se mueven? La hoja dibujada a mano no lo sabe. La respuesta llegó a finales de los años cincuenta, casi a la vez y desde dos lados: el método del camino crítico (CPM) de Kelley y Walker, nacido para el mantenimiento de las plantas químicas, y el PERT de la Marina estadounidense para el programa Polaris (Malcolm y otros, 1959). Ambos describen el proyecto como una red: las actividades y las restricciones de precedencia entre ellas. Las fechas pasan a ser un resultado, no un dato.

Esta página mantiene juntas las dos cosas. El dibujo es un Gantt, pero las barras de las actividades automáticas son el resultado de un cálculo sobre la red de dependencias: se cambia una duración y todo lo que depende de ella se desplaza solo.

El cálculo: un orden y dos pasadas

Primero las actividades se ponen en orden topológico: cada una después de todas aquellas de las que depende. El algoritmo es el de Kahn (1962): se parte de las actividades sin predecesores y, cada vez que se coloca una, se quitan las restricciones que salían de ella. Si al final queda alguna, es porque las dependencias forman un ciclo —A espera a B, que espera a A— y el plan es imposible tal como está escrito: la página lo dice y dibuja el resto de todos modos.

Después la pasada hacia delante: siguiendo el orden, cada actividad empieza en cuanto todas sus restricciones lo permiten. El mayor de los finales es el final del proyecto. Por último la pasada hacia atrás, del final al principio: para cada actividad se calcula el final más tardío que no retrasa el proyecto. La diferencia entre los dos finales es la holgura total, y las actividades con holgura cero son el camino crítico: si una de ellas se retrasa un día, se retrasa un día todo el proyecto (Kelley, 1961).

Las pruebas de la biblioteca reproducen el ejemplo clásico del manual de Hillier y Lieberman, la construcción de un edificio en catorce actividades: 44 semanas, camino crítico A‑B‑C‑E‑F‑J‑L‑N, y las holguras de las demás actividades iguales a las del libro.

Junto a la holgura total está la holgura libre: cuánto puede retrasarse una actividad sin mover ninguna otra actividad, ni siquiera un día. La total es siempre al menos tanto como la libre, y la diferencia dice algo que la total sola esconde: que la holgura es compartida. En el ejemplo del manual D, G y H tienen cuatro semanas de holgura total y ninguna de holgura libre: las cuatro semanas son de la cadena D‑G‑H‑M, y si las consume D ya no les quedan a G, H y M. Es la última, M, la que las tiene de verdad libres.

Cuatro restricciones, y el retardo

La restricción más común es fin → inicio: el sucesor empieza cuando el predecesor ha terminado. Las otras tres se usan menos, pero se usan: inicio → inicio (dos trabajos que arrancan juntos, quizá con unos días de diferencia), fin → fin (la documentación termina con el desarrollo), inicio → fin (el sistema antiguo sigue encendido hasta que empieza el nuevo). Cada restricción puede tener un retardo: tres días de secado, dos de revisión. Un retardo negativo es un adelanto: el sucesor empieza antes de que termine el predecesor.

Una restricción sobre una fase vale para todas sus actividades: «las pruebas empiezan después del desarrollo» significa después de la última actividad del desarrollo.

El tiempo laborable

Una duración de cinco días no es una semana de calendario: depende de qué días se trabaja. El calendario de la página tiene los días laborables de la semana, los festivos y, en la escala en horas, las franjas del horario. Toda la aritmética —sumar una duración, restarla, medir una holgura— se hace en tiempo laborable: la holgura de una actividad que termina el viernes y cuyo sucesor empieza el lunes es cero, no dos días.

El tiempo se cuenta en minutos en un reloj sin huso horario. Parece un detalle y es una decisión: un plan habla de días del calendario, y con el horario de verano dos días al año duran 23 y 25 horas; contados como instantes, desplazarían las barras una hora y las fechas un día.

En la escala en horas el eje del tiempo está comprimido: la noche, la pausa y los días no laborables no ocupan espacio. Con una jornada de ocho horas, de lo contrario, dos tercios del dibujo quedarían en blanco. En la escala en días, en cambio, los fines de semana se quedan, en gris, porque ahí sirven para leer el calendario.

Pero el eje comprimido no siempre conviene. Una máquina que funciona día y noche, un turno que cruza la medianoche, una prueba que corre sola todo el fin de semana: ahí la noche es tiempo de verdad, y quitarla del dibujo falsearía las proporciones. Para estos casos el eje puede mostrar las 24 horas: una barra es tan larga como el tiempo de calendario que abarca, y las horas fuera del horario aparecen en gris como los días de descanso. El cálculo no cambia, porque una duración sigue contando solo horas laborables: es el dibujo el que deja de esconder el resto.

Las fiestas nacionales se calculan año por año. Las fijas son una fecha; las ligadas a la Pascua —el Viernes Santo, el lunes de Pascua— siguen el calendario lunar de la Iglesia, y la página las obtiene con el algoritmo gregoriano publicado de forma anónima en Nature en 1876, el que recogen los manuales de astronomía: las pruebas lo comparan con las fechas conocidas de 1818 a 2285. En el dibujo cada columna gris de fiesta lleva su nombre: se lee pasando por encima con el ratón, y en el SVG exportado es un elemento <title>, el mismo que leen los lectores de pantalla.

No todas las actividades trabajan igual: una obra trabaja los sábados, una oficina no, una máquina funciona día y noche. Además del calendario del proyecto se pueden definir otros con un nombre, que heredan de él todo lo que no cambian —las fiestas nacionales, por ejemplo— y asignarlos a las actividades, o a una fase para todas las suyas. La duración de una actividad y sus holguras se cuentan en su calendario; el retraso de una dependencia en el del sucesor, que es quien espera.

Fechas calculadas y fechas escritas

Cada actividad es automática o de fechas escritas. La automática tiene una duración y empieza en cuanto puede; se le puede dar un «no antes del». La de fechas escritas se queda donde se pone: es el caso de un seminario ya fijado o de una entrega contractual. Las dependencias le afectan igualmente: si una fecha escrita no respeta una restricción, el dibujo lo señala en vez de moverla a escondidas. Es la distinción que hacen los programas de planificación entre actividades programadas automática y manualmente.

Entre las dos hay un término medio: una actividad automática con una restricción de fecha, como en los programas de planificación. «Debe empezar el» y «debe terminar el» la fijan en esa fecha, incluso contra las dependencias, y si las dependencias la querrían más tarde el dibujo lo dice. «No empezar antes del» y «no terminar antes del» la retienen. Las restricciones «antes del» —empezar, o terminar, antes del— no la mueven en absoluto: fijan un plazo. La pasada hacia atrás parte de ahí en lugar del final del proyecto, y si el plan lo supera la holgura se vuelve negativa, para esa actividad y para las que la preceden: es el tiempo que hay que recuperar, y la página lo señala como un incumplimiento.

Al desmarcar una actividad automática, las fechas calculadas pasan a ser fechas escritas: la barra se queda donde estaba, y desde ese momento ya no se mueve sola.

Las barras de las actividades de fechas escritas también se pueden arrastrar: el cuerpo de la barra la mueve, los bordes cambian su inicio o su fin. Las calculadas no, y es una decisión. Los programas de planificación dejan arrastrar también una actividad automática, pero para mantenerla donde se ha soltado le añaden a escondidas una restricción «no empezar antes del»: desde ese momento, si el predecesor termina antes, la actividad ya no se mueve, y nadie recuerda por qué. Aquí una actividad calculada se mueve cambiando lo que la calcula —la duración, las dependencias, un «no antes del» escrito a propósito— o pasa a ser de fechas escritas, y entonces se arrastra.

El plan que avanza: la fecha de estado

Un plan se escribe al principio y se actualiza mientras se trabaja. El avance de las actividades dice cuánto está hecho; la fecha de estado dice a qué fecha. Con una fecha de estado la página hace lo que hacen los programas de planificación cuando reprograman el trabajo restante: las actividades terminadas se quedan donde estaban; de las empezadas la parte hecha se queda en su sitio y la que falta vuelve a empezar desde la fecha de estado, y la barra se parte en dos con un tramo punteado en medio; las que no han empezado no pueden empezar antes. Las dependencias siguen valiendo para el trabajo restante: una actividad empezada antes de que terminara su predecesora no termina antes que ella (es la lógica mantenida, el comportamiento predeterminado de esos programas). A partir de ahí el camino crítico y las holguras se recalculan sobre el trabajo restante, y se ve enseguida si el final del proyecto se ha movido.

Para ver quién va atrasado, y cuánto, está la línea de avance: parte de la fecha de estado y en cada fila va a tocar el punto del plan al que corresponde el trabajo hecho. Si una actividad ha hecho lo que el plan pedía para esa fecha, la línea pasa recta; si ha hecho menos, el punto cae antes y la línea hace un pico a la izquierda, tan largo como el retraso; si ha hecho más, el pico va a la derecha. Fila tras fila sale una línea quebrada que en Japón se llama «línea del rayo» (inazuma-sen) y que los programas de planificación llaman progress line.

El plan de esta comparación es el calculado sin la fecha de estado, como si todo hubiera ido según las duraciones escritas, y el trabajo hecho se mide sobre él, en tiempo laborable. Una actividad que debía empezar y no lo ha hecho apunta a su inicio previsto; una terminada antes de tiempo, a su fin previsto; un hito no alcanzado, a su fecha. Las fases no tienen un punto propio: se leen a través de sus actividades.

La incertidumbre: el PERT de tres estimaciones

Una duración escrita con un solo número es una promesa que nadie sabe cumplir: «cinco días» suele querer decir «entre tres y diez, lo más probable cinco». El PERT —Program Evaluation and Review Technique— nació en 1958 para el programa de misiles Polaris de la Marina estadounidense, hecho en gran parte de trabajos nunca hechos antes, para los que no existía una duración segura. Por eso pide para cada actividad tres estimaciones en lugar de una (Malcolm y otros, 1959):

  • la optimista \(a\): la duración si todo va bien, que en la práctica rara vez se mejora;
  • la más probable \(m\): la que ocurriría más a menudo si el trabajo se hiciera muchas veces;
  • la pesimista \(b\): la duración si sale mal lo que suele poder salir mal, catástrofes aparte.

Las tres estimaciones describen cómo se distribuye la duración, y el PERT la aproxima con una distribución beta: acotada entre \(a\) y \(b\), con el pico en \(m\), normalmente asimétrica porque los retrasos posibles son más largos que los adelantos. De esa hipótesis, y de la idea de que entre \(a\) y \(b\) caben unas seis desviaciones típicas, salen dos fórmulas sencillas:

\[ t_e = \frac{a + 4m + b}{6} \qquad\qquad \sigma = \frac{b - a}{6} \]

La duración esperada \(t_e\) pesa cuatro veces la estimación más probable. Una actividad con una optimista de 2 días, una más probable de 5 y una pesimista de 14 dura en media 6 días, no 5: la cola de los retrasos desplaza la media. De dónde vienen los pesos, y hasta qué punto son una aproximación, lo discute Clark (1962).

El proyecto dura lo que su camino crítico, calculado con las duraciones esperadas. Si las actividades del camino son independientes, su suma es aproximadamente normal por el teorema central del límite: la duración esperada del proyecto \(T_e\) es la suma de las \(t_e\), y su varianza la suma de las varianzas \(\sigma^2\) a lo largo del mismo camino. Con esas dos cifras se responde a la pregunta que de verdad importa —¿qué probabilidad hay de terminar antes de una fecha \(T\)?— midiendo la distancia de la fecha al final esperado en desviaciones típicas:

\[ z = \frac{T - T_e}{\sqrt{\sum_i \sigma_i^2}} \qquad\qquad P(\text{fin} \le T) = \Phi(z) \]

donde \(\Phi\) es la función de distribución de la normal estándar. Con \(z = 0\) la fecha es el final esperado y la probabilidad es la mitad; con \(z = 1\), una desviación típica más allá, sube al 84 %; con \(z = 2\) al 98 %.

El ejemplo de las pruebas es otra vez el de Hillier y Lieberman, con las tres estimaciones del libro para las catorce actividades de la obra. Las duraciones esperadas son las del cálculo determinista, el final esperado está a 44 semanas, y en el camino crítico A‑B‑C‑E‑F‑J‑L‑N las varianzas suman 9: la desviación típica del proyecto es de 3 semanas. La probabilidad de terminar antes de 47 semanas es \(\Phi(1) \approx 0{,}84\); antes de 44, exactamente la mitad. La página calcula \(\Phi\) con la fórmula 7.1.26 de Abramowitz y Stegun, que se equivoca en menos de dos partes por diez millones.

El método tiene límites conocidos, que conviene tener presentes al leer ese número. El más importante: mira un solo camino. Si hay otros casi críticos, también ellos pueden retrasar el proyecto, y la probabilidad real de terminar a tiempo es más baja que la calculada (MacCrimmon y Ryavec, 1964). La forma beta y el sexto del intervalo son convenciones, no leyes; y las estimaciones las da quien conoce el trabajo, con su optimismo. El PERT sigue siendo útil por lo que es: una forma honesta de decir cuán incierto es un plan, y de ver dónde se acumula la incertidumbre.

Dos detalles del cálculo. Entre dos caminos críticos con la misma duración esperada la página toma el de mayor varianza, que es el más prudente. Y de una actividad ya empezada, con una fecha de estado, solo cuenta la parte que falta: su desviación típica se reduce en proporción al trabajo que queda.

Semanas, trimestres y categorías

El eje del tiempo elige solo sus dos franjas según la densidad —meses y días, meses y semanas, años y meses— pero se pueden fijar: años y trimestres para un programa de varios años, meses y semanas para una obra, semanas y días para un plan ajustado. Las semanas son las de la norma ISO 8601, la numeración que se usa en Europa: empiezan el lunes, y la primera del año es la que contiene el primer jueves, es decir, la del 4 de enero. Así una semana nunca se reparte entre dos años, pero el año de la semana puede no ser el del día: el 29 de diciembre de 2008 está en la primera semana de 2009, el 3 de enero de 2010 en la quincuagésima tercera de 2009. Tienen 53 semanas los años que empiezan en jueves, o en miércoles si son bisiestos: 2026 es uno de ellos. Las pruebas comparan la numeración con los ejemplos de la norma y, durante cincuenta años de días, con un segundo algoritmo independiente, el que parte del número de orden del día en el año.

Las categorías colorean las barras por tipo de trabajo —proyecto, obra, pruebas— y la leyenda las explica. La paleta para las categorías sin colores propios evita el azul de las barras normales y el rojo del camino crítico, para que las tres señales no se confundan. Las precedencias son las del estilo: el color elegido en una actividad gana sobre su categoría, y la categoría sobre lo que la actividad hereda de la fase. Con el camino crítico resaltado, una actividad crítica de una categoría conserva el relleno de la categoría y toma el contorno rojo: si el rojo lo cubriera todo, la leyenda mentiría precisamente en las actividades que más cuentan.

Intercambiar el plan con otros programas

El documento de esta página es el JSON, pero un plan a menudo tiene que cambiar de manos. Tres formatos cubren los casos más comunes, y cada uno lleva lo que su naturaleza le permite.

El XML de MS Project (MSPDI, el esquema que Microsoft publica desde principios de los años 2000) es la lengua franca de los programas de planificación: lo leen y lo escriben Project, ProjectLibre, GanttProject y muchos otros. Lleva fases, duraciones, dependencias con su tipo y su retardo, restricciones de fecha, avance, calendarios con la semana, el horario y las excepciones, la fecha de estado y, en un campo personalizado, la categoría. Algunos detalles del formato muestran cómo está pensado: las fechas son horas locales sin huso horario, como aquí; las duraciones son horas de trabajo («PT40H0M0S» son cinco días de ocho horas); los retardos son décimas de minuto; y el orden de los elementos cuenta, porque Project lee el archivo contra el esquema. En la escala en días cada día se convierte en el horario de trabajo del calendario: el inicio a la primera hora, el fin a la última. Al leer, las excepciones que se repiten cada año se expanden en fechas, y las actividades programadas manualmente pasan a ser actividades de fechas escritas.

Mermaid es un lenguaje para describir diagramas con texto, que GitLab, GitHub y muchos editores de Markdown dibujan solos: un plan pegado en un README sigue siendo legible y acompaña al repositorio. Es mucho más pobre: no tiene flechas ni fases anidadas, una dependencia es solo «después de» (after) y los días de descanso son fechas que excluir (excludes). Allí una duración en días se salta los días excluidos alargando la barra: la página rehace el mismo cálculo de Mermaid y escribe cada actividad en la forma más sencilla que lo reproduce —after y la duración, o la fecha y la duración, o las dos fechas—, de modo que el dibujo de Mermaid tiene las mismas fechas que este.

iCalendar (RFC 5545) es el formato de las agendas: un evento por actividad y por hito, para importar en un calendario personal o de grupo. En la escala en días los eventos son de día completo, con el final excluido que prescribe la norma; en la de horas tienen la hora «flotante», sin huso, que es el tiempo de esta página. Cada evento tiene un identificador estable —la actividad y una huella del título—, y al volver a importar el archivo una agenda actualiza los eventos en lugar de duplicarlos. Los eventos se marcan como tiempo libre, para que una actividad de tres semanas no haga parecer ocupado a quien la sigue.

Lo que esta página no hace

  • Los recursos. El cálculo supone que siempre hay alguien para hacer el trabajo. Tener en cuenta personas y máquinas limitadas —el problema de la programación con recursos restringidos— es NP‑difícil (Blazewicz, Lenstra y Rinnooy Kan, 1983) y requiere heurísticas que aquí no hay.
  • La incertidumbre más allá del PERT. La probabilidad de terminar a tiempo se calcula solo sobre el camino crítico. Para tener en cuenta todos los caminos haría falta una simulación de Monte Carlo, que sortea muchas veces las duraciones y rehace el cálculo: aquí no está.
  • La comparación con el plan inicial (la línea base): se hace guardando el JSON en cada revisión.

Bibliografía

  • «To find Easter», Nature 13, 487, 1876 (carta anónima «de un corresponsal de Nueva York»). doi:10.1038/013487a0
  • H. L. Gantt, Organizing for Work, Harcourt, Brace and Howe, Nueva York 1919.
  • W. Clark, The Gantt Chart: A Working Tool of Management, Ronald Press, Nueva York 1922.
  • E. R. Marsh, «The harmonogram of Karol Adamiecki», Academy of Management Journal 18(2), 358–364, 1975. doi:10.5465/255537
  • J. E. Kelley, M. R. Walker, «Critical-path planning and scheduling», Proceedings of the Eastern Joint Computer Conference, 160–173, 1959. doi:10.1145/1460299.1460318
  • D. G. Malcolm, J. H. Roseboom, C. E. Clark, W. Fazar, «Application of a technique for research and development program evaluation», Operations Research 7(5), 646–669, 1959. doi:10.1287/opre.7.5.646
  • C. E. Clark, «The PERT model for the distribution of an activity time», Operations Research 10(3), 405–406, 1962. doi:10.1287/opre.10.3.405
  • K. R. MacCrimmon, C. A. Ryavec, «An analytical study of the PERT assumptions», Operations Research 12(1), 16–37, 1964. doi:10.1287/opre.12.1.16
  • M. Abramowitz, I. A. Stegun (eds.), Handbook of Mathematical Functions, National Bureau of Standards, Washington 1964 — fórmula 7.1.26 para la función de error.
  • J. E. Kelley, «Critical-path planning and scheduling: mathematical basis», Operations Research 9(3), 296–320, 1961. doi:10.1287/opre.9.3.296
  • A. B. Kahn, «Topological sorting of large networks», Communications of the ACM 5(11), 558–562, 1962. doi:10.1145/368996.369025
  • J. Blazewicz, J. K. Lenstra, A. H. G. Rinnooy Kan, «Scheduling subject to resource constraints: classification and complexity», Discrete Applied Mathematics 5(1), 11–24, 1983. doi:10.1016/0166-218X(83)90012-4
  • J. M. Wilson, «Gantt charts: a centenary appreciation», European Journal of Operational Research 149(2), 430–437, 2003. doi:10.1016/S0377-2217(02)00769-5
  • ISO 8601-1:2019, Date and time — Representations for information interchange — Part 1: Basic rules, International Organization for Standardization, Ginebra 2019.
  • B. Desruisseaux (ed.), «Internet Calendaring and Scheduling Core Object Specification (iCalendar)», RFC 5545, IETF, 2009. doi:10.17487/RFC5545
  • Microsoft, «Project XML Data Interchange Schema Reference» (mspdi_pj12.xsd), Microsoft Learn.
  • Mermaid, «Gantt diagrams», documentación de mermaid.js, mermaid.js.org.
  • F. S. Hillier, G. J. Lieberman, Introduction to Operations Research, McGraw-Hill, capítulo «Project management with PERT/CPM».

Para qué sirve

Para construir un cronograma —un proyecto, una campaña de medida, la preparación de un evento— y llevárselo como figura en SVG, PNG o PDF, como tabla CSV, como XML de MS Project o texto Mermaid, o como eventos de una agenda. El diagrama se guarda como archivo JSON y se vuelve a abrir cuando hace falta: no hay nada en la base de datos, el documento es el archivo.

Las partes de la página

A la izquierda la lista de Actividades, con las fases y las actividades que contienen, y a la derecha de cada una la fecha de inicio calculada. La varita señala las actividades con fechas calculadas, el rombo rojo las que están en el camino crítico. Debajo, las Propiedades de lo seleccionado; el botón Proyecto vuelve a las propiedades generales. A la derecha el dibujo, que se rehace con cada cambio, y debajo la tabla de Dependencias.

Una actividad se selecciona desde la lista o haciendo clic en su fila del dibujo. Con Ctrl (o Cmd) el clic añade a la selección: con varias actividades seleccionadas cada cambio se aplica a todas. Con el teclado, ↑ y ↓ recorren la lista, Intro lleva al nombre, Supr elimina; en una fase ← la contrae y → la despliega.

Construir un plan

Lo más rápido es seleccionar una actividad y pulsar Actividad siguiente: añade una justo debajo, ya unida a la primera por una restricción fin → inicio. Repitiéndolo se escribe la cadena principal sin tocar la tabla de dependencias.

Una fase es una actividad que contiene otras: Actividad dentro crea una en su interior, y las flechas laterales llevan la actividad seleccionada dentro de la fase que la precede o fuera de la suya. Las fechas de una fase son las de sus actividades, y su estilo desciende a todas. Un hito es una actividad de duración cero —una entrega, una reunión de seguimiento— y se dibuja como un rombo.

Una fase se puede contraer con el triángulo junto a su nombre, en la lista o en el margen izquierdo del dibujo, o con la casilla Contraída de sus propiedades. Sus actividades siguen en el cálculo —la fase va siempre del primer inicio al último fin, y el camino crítico no cambia— pero no se ven, ni en la lista ni en el dibujo, y con ellas desaparecen las flechas que las tocan. También la figura exportada las deja fuera: es la manera de hacer un diagrama de síntesis solo con las fases. Encima de la lista, Desplegar todas las fases y Contraer todas las fases hacen lo mismo con todas a la vez; con el filtro se ve igualmente todo lo que coincide.

Duplicar copia la actividad con todo lo que contiene; Eliminar la quita junto con las dependencias que la nombran. El identificador es el nombre con el que la llaman las dependencias: al cambiarlo, las dependencias se actualizan solas.

Fechas calculadas o escritas

Con Fechas calculadas a partir de las dependencias marcado, la actividad tiene una duración y empieza en cuanto sus restricciones lo permiten; el campo No antes del le impide empezar antes de una fecha. Sin la marca se escriben el inicio y el fin (o el inicio y la duración), y la actividad se queda ahí. Al desmarcar, las fechas calculadas quedan escritas y la barra no se mueve. Una actividad sin ninguna fecha siempre es calculada.

Una actividad de fechas escritas se arrastra en el dibujo: agarrada por el medio se mueve, agarrada por un borde cambia el inicio o el fin, y el cursor dice cuál de las dos cosas va a pasar. Mientras se arrastra, un rectángulo discontinuo muestra adónde irá, con las fechas nuevas junto al puntero; Esc cancela. El paso es el día, en la escala en horas la media hora (la hora si el dibujo es estrecho), y en la escala en horas comprimida un desplazamiento cuenta horas de trabajo, también a través de la noche. Con el teclado, con la actividad seleccionada, Alt + ← → la mueve un paso y Alt + Mayús + ← → mueve su fin. Un hito de fecha escrita se mueve igual. Las actividades calculadas no se arrastran: sus fechas las deciden las dependencias, y la pestaña de profundización explica por qué.

La Restricción de fecha añade una fecha que respetar: debe empezar el, debe terminar el, empezar antes del, terminar antes del, no empezar antes del, no terminar antes del. Al elegirla, la fecha parte de la que el plan ya da, así que la restricción no mueve nada hasta que se cambia. Las restricciones «antes del» son plazos: no mueven la actividad, pero si el plan los supera aparece un aviso de incumplimiento, la holgura se vuelve negativa y sobre la barra hay un triángulo rojo (verde, si el plazo se cumple). Con fechas escritas solo vale una restricción «antes del».

Debajo de los campos se leen las fechas calculadas, la holgura total y la libre, y si la actividad es crítica, está terminada o en curso.

Solo fechas, o fechas y horas

La Escala del proyecto fija la unidad. Con solo fechas las duraciones son días laborables; con fechas y horas son horas laborables, y cuenta el horario de trabajo: por ejemplo 9-13, 14-18, ocho horas al día. Al cambiar de escala, duraciones y retardos se convierten con las horas de un día laborable: cinco días pasan a ser cuarenta horas, no cinco. En la escala en horas el eje del tiempo se salta la noche, la pausa y los días de descanso, salvo que se marque Las 24 horas en el eje: entonces se quedan, en gris, y una barra que cruza la noche es tan larga como el tiempo real.

El calendario tiene los días laborables de la semana y, si se quiere, las fiestas nacionales de un país —Italia, Reino Unido (Inglaterra y Gales) o España— calculadas año por año, Pascua incluida. Debajo se ven las que caen en el periodo del proyecto, cada una con su marca: al desmarcarla, esa fiesta no se observa y el día sigue a la semana —un martes se trabaja, un domingo no—. Con la fecha y los dos botones se añade un festivo concreto —el patrón local, un cierre, un puente— o un día trabajado, es decir, un día de descanso en el que se trabaja igualmente, como un sábado. Las fechas añadidas se quitan con la cruz. Todos los cálculos las tienen en cuenta, y en el dibujo los días no laborables aparecen en gris: pasando por encima con el ratón se lee el nombre de la fiesta. A un festivo añadido se le da el nombre en el campo junto a su fecha.

Las fiestas nacionales son las vigentes hoy: en Italia San Francisco (4 de octubre) cuenta desde 2026; en el Reino Unido una fiesta que cae en fin de semana pasa al primer día laborable, como prevén los substitute days; para España se incluyen las fiestas comunes a todo el país, mientras que el Jueves Santo y las fiestas de las comunidades autónomas se añaden a mano.

Calendarios de las actividades

En las propiedades del proyecto, Añadir un calendario crea un calendario con nombre: hereda del calendario del proyecto todo lo que no se cambia, y se pueden elegir los días laborables, las fiestas nacionales (como el proyecto, ninguna o las de un país), los festivos adicionales y los días trabajados, y en la escala de horas el horario. Luego se asigna a una actividad, o a una fase para todas las suyas, con la casilla Calendario de sus propiedades. La duración y las holguras de la actividad se cuentan en su calendario; el retraso de una dependencia en el del sucesor. Al cambiar el nombre de un calendario lo siguen las actividades que lo usan; al eliminarlo vuelven al que heredan.

Las dependencias

Cada fila de la tabla dice que una actividad (A) depende de otra (De), con una de las cuatro restricciones —fin → inicio, inicio → inicio, fin → fin, inicio → fin— y un retardo, en la misma unidad que las duraciones. Un retardo negativo es un adelanto. Una dependencia desde o hacia una fase vale para todas sus actividades.

Las flechas salen del lado de la barra que nombra la restricción y entran por el otro: cuando el sucesor empieza justo al final del predecesor, la flecha le cae encima.

Camino crítico y holguras

El camino crítico no se elige: lo calcula la página a partir de las duraciones y las dependencias, y lo forman las actividades con holgura cero. Para cambiarlo se cambian esas, o las fechas fijadas a mano. Las dos casillas de abajo están en las propiedades del proyecto, grupo Visualización: se llega con el botón Proyecto encima de la lista de actividades. La holgura de cada actividad, y si es crítica, se leen en su grupo Fechas, en Calculadas.

Resaltar el camino crítico pinta de rojo las actividades sin holgura y las flechas que las unen: son las que, si se retrasan, retrasan el final del proyecto. El rojo cubre los colores que la actividad hereda del proyecto o de su fase, no los elegidos en la actividad: una actividad crítica coloreada a mano conserva sus colores, y se reconoce por el contorno más grueso, el rombo en la lista y las flechas rojas.

La holgura total es cuánto puede retrasarse una actividad sin retrasar el proyecto; la holgura libre cuánto puede retrasarse sin mover ninguna otra actividad, y nunca supera la total. Con Mostrar las holguras, libre y total, tras cada barra hay una línea continua tan larga como la holgura libre, y luego discontinua hasta el final de la total, con una marca. Las dos se pueden poner también en columna junto a los nombres.

Categorías y leyenda

En las propiedades del proyecto, el grupo Categorías y leyenda enumera las categorías con su nombre, su relleno y su contorno; Añadir una categoría crea una con los colores de la paleta, y la cruz la elimina. Una categoría se asigna a una actividad, o a una fase para todas las suyas, con la casilla Categoría de sus propiedades, donde nueva categoría… la crea sobre la marcha. El color elegido en una actividad en el grupo Barras gana sobre la categoría; con el camino crítico resaltado, una actividad crítica de una categoría conserva el relleno de la categoría y toma el contorno rojo.

La Leyenda muestra las categorías en uso y, si está resaltado, el camino crítico: debajo del dibujo, a la derecha, o libre. Se puede arrastrar con el ratón adonde no tape nada: al soltarla pasa a ser libre y se queda ahí, también en el archivo exportado.

Tres estimaciones (PERT)

En las propiedades de una actividad, el grupo Tres estimaciones (PERT) recoge la duración optimista, la más probable y la pesimista. Con las tres la duración de la actividad pasa a ser la esperada, (a + 4m + b) / 6, y debajo se leen la duración esperada y la desviación típica, (b − a) / 6. En las propiedades del proyecto el grupo PERT: tres estimaciones muestra la duración esperada del proyecto y su desviación típica; eligiendo una fecha en Probabilidad de terminar antes del se lee la probabilidad de terminar antes de ese día, y en el dibujo aparece una línea violeta con la probabilidad escrita debajo. Las actividades sin tres estimaciones cuentan como seguras. Lo que hay detrás se explica en la pestaña de profundización.

La fecha de estado

La Fecha de estado, en el grupo Tiempo del proyecto, dice a qué fecha se refiere el avance escrito (al final de ese día). Desde ahí la página reprograma el trabajo restante: las actividades terminadas se quedan donde estaban, de las empezadas la parte hecha se queda y el resto vuelve a empezar tras la fecha de estado —la barra se parte, con un tramo punteado sobre el hueco— y las que aún no han empezado no empiezan antes. En el dibujo la fecha de estado es una línea azul continua; la línea de hoy es otra cosa, rosa y discontinua.

Con una fecha de estado se puede marcar Línea de avance: la línea azul se convierte en una quebrada que en cada fila va al punto del plan al que corresponde el trabajo hecho. Un pico a la izquierda es un retraso, uno a la derecha un adelanto, y su longitud dice cuánto. En las propiedades de cada actividad, en Calculadas, la misma desviación aparece en días (u horas) laborables.

Cómo se ve

En el grupo Visualización se eligen las columnas junto a los nombres (inicio, fin, duración, avance, holgura total, holgura libre), el rótulo en las barras, la línea de hoy y la cuadrícula. Los píxeles por día (o por hora) fijan la escala del dibujo; vacío, la página la elige sola, y con ella las dos franjas del eje: meses y días, meses y semanas, años y meses. El Eje del tiempo las fija a elección: años y trimestres, años y meses, trimestres y meses, meses y semanas ISO, meses y días, semanas ISO y días, y en la escala en horas días y horas. Las semanas se numeran como quiere la norma ISO 8601 (S1, S2… desde el lunes); los trimestres se escriben T1–T4, con el año si hay sitio.

Tamaños de letra tiene un mando único para los nombres de las Fases, de las Actividades y para los rótulos de Eje y barras. Un campo vacío sigue a las actividades y muestra en gris el valor vigente; Aplicar a todos quita los tamaños fijados en actividades sueltas.

El avance de una actividad se ve como la parte oscura de su barra; el de una fase es la media de sus actividades, ponderada por la duración.

El CSV

Importar lee una tabla con una fila por actividad —de una hoja de cálculo o de otro programa de planificación— y Exportar los datos › CSV escribe la del diagrama. Un archivo CSV también se puede arrastrar sobre el dibujo. Las columnas reconocidas son:

id;nome;padre;tipo;inizio;fine;durata;avanzamento;auto;dipende
analisis;Análisis;;;;;;;;
requisitos;Requisitos;analisis;;2026-10-05;;5;100;;
datos;Fuentes de datos;analisis;;;;8;60;sì;requisitos
entrega;Entrega;;traguardo;;;;;sì;datos:FI+2
  • Los encabezados se escriben en italiano, como las claves del JSON, o en inglés (name, start, duration, predecessors…); las columnas desconocidas se ignoran, y se avisa.
  • El separador —punto y coma, coma o tabulador— se reconoce en la primera línea; un texto que lo contiene va entre comillas.
  • Las fechas se escriben como 2026-10-05 o 05/10/2026, con la hora si hace falta (2026-10-05 09:30: basta una hora para elegir la escala en horas).
  • padre es el id de la fase que contiene la actividad; tipo vale traguardo o milestone para los hitos; auto con sì, yes, 1 o x hace calculadas las fechas.
  • dipende enumera los predecesores separados por espacios: id, id:II, id:FF+2, id:-1. También se aceptan los códigos ingleses (FS, SS, SF), el número de la fila a la manera de los programas de planificación (3FS+2d) y el nombre de la actividad.
  • ottimistica, probabile y pessimistica (o en inglés optimistic, most likely, pessimistic) son las tres estimaciones del PERT; vincolo y data vincolo la restricción de fecha, con los nombres de la página o con los códigos de los programas de planificación (MSO, MFO, SNLT, FNLT, SNET, FNET); calendario el nombre del calendario de la actividad, que debe existir en el diagrama en que se importa; categoria (o category) su categoría.

El CSV exportado usa el punto y coma y se abre directamente en una hoja de cálculo. Lleva las actividades y las dependencias, no el estilo: para eso el documento sigue siendo el JSON.

MS Project, Mermaid e iCalendar

El menú Exportar los datos escribe también el XML de MS Project, el texto Mermaid —en un archivo .mmd, o en el portapapeles ya dentro del cercado ```mermaid, listo para pegar en un Markdown de GitLab— y un archivo iCalendar para importar en una agenda. Importar lee, además del CSV, el XML de MS Project y el texto Mermaid, también dentro de un archivo Markdown: el formato se reconoce solo, y los archivos también se pueden arrastrar sobre el dibujo.

  • MS Project (se abre con Archivo › Abrir, eligiendo el formato XML): pasan fases, duraciones, dependencias con tipo y retardo, restricciones, avance, calendarios con fiestas y excepciones, la fecha de estado y la categoría, en el campo Texto1 con el nombre Categoría. Las actividades de fechas escritas pasan a «debe empezar el», los hitos escritos a «debe terminar el». Quedan fuera recursos, costes y colores.
  • Mermaid: las fases pasan a ser secciones (las anidadas con su ruta, «Fase › Subfase»), las dependencias fin → inicio sin retardo pasan a after, los días de descanso a excludes; las actividades terminadas llevan done, las que están en curso active y, si el camino crítico está resaltado, las críticas crit. Mermaid no dibuja flechas: las demás restricciones se traducen en fechas. Al leer, las secciones pasan a fases, after a dependencias y una fecha de inicio a un «no antes del».
  • iCalendar: un evento por actividad y por hito, con la fase, la duración y el avance en la descripción y la categoría entre las categorías del evento. Volviendo a exportar tras un cambio e importando, los eventos se actualizan.
gantt
    dateFormat YYYY-MM-DD
    excludes weekends, 2026-11-02
    section Análisis
    Requisitos :done, requisitos, 2026-10-05, 5d
    Fuentes de datos :active, datos, after requisitos, 8d
    section Entrega
    Entrega :milestone, entrega, 2026-12-01, 0d

Exportar, deshacer, no perder el trabajo

Como en los editores de diagramas de bloques y de diagramas de flujo: SVG vectorial con las fuentes incrustadas, PNG a los dpi elegidos, PDF producido por el servidor, y el campo cm para la anchura con la que sale la figura. Un Gantt de muchos meses es ancho: el campo cm lo lleva a la anchura de la página sin perder nada, porque es vectorial.

En varias páginas. El menú junto a Exportar PDF elige la hoja: una página, del tamaño de la figura, o A4 o A3, horizontal o vertical. Con una hoja elegida el Gantt sale al tamaño del campo cm (o al natural) y se divide en páginas como una tabla impresa: se corta entre una fila y la siguiente y en el límite de un día (o de una hora) del eje, y cada página repite la cabecera del eje y, si no ocupan más del 40% de la hoja, los nombres con las columnas de al lado. La barra dice antes cuántas páginas hacen falta; el pie de cada una lleva el nombre del archivo, el número y, si la cuadrícula tiene varias filas y columnas, la fila y la columna. Como máximo 100 páginas.

Las flechas curvas deshacen y rehacen (Ctrl+Z, Ctrl+Y). Con cada cambio queda en el navegador una copia de seguridad, que al volver a abrir la página se ofrece para recuperarla. El documento sigue siendo el archivo JSON.

El JSON

{
  "titolo": "",
  "scala": "giorni",
  "calendario": { "lavorativi": [1, 2, 3, 4, 5], "nazionali": "ES",
                  "esclusi": ["2026-12-08"], "festivi": ["2026-04-02"], "lavorati": [],
                  "orario": [[9, 13], [14, 18]] },
  "stile":  { "font": "IBM Plex Sans, Arial, sans-serif", "dim": 13 },
  "pagina": { "inizio": "2026-10-05", "colonne": ["inizio", "fine"], "critico": true },
  "attivita": [
    { "id": "analisis", "nome": "Análisis", "figli": [
      { "id": "requisitos", "nome": "Requisitos", "durata": 5, "auto": true },
      { "id": "seminario", "nome": "Seminario", "inizio": "2026-10-20", "fine": "2026-10-21" } ] },
    { "id": "entrega", "nome": "Entrega", "tipo": "traguardo", "auto": true }
  ],
  "dipendenze": [
    { "da": "requisitos", "a": "entrega", "tipo": "FI", "ritardo": 2 }
  ]
}

Las claves están en italiano, como en los otros dos editores. scala vale giorni (días) u ore (horas); los días laborables van de 1 (lunes) a 7 (domingo); nazionali vale IT, GB o ES, esclusi son las fiestas nacionales que no se observan, festivi los días de descanso añadidos y lavorati los que se trabajan igualmente, aunque sean de descanso, que prevalecen sobre todo; las restricciones son FI (fin → inicio), II, FF e IF, y se aceptan los códigos ingleses. En stile, dim_titolo y dim_etichetta fijan los tamaños de las fases y de los rótulos del eje; si se omiten, siguen a dim.

Las claves de las evoluciones de 2026: en pagina, data_stato (fecha de estado) y entro (la fecha de la probabilidad del PERT); en una actividad vincolo (inizia_il, finisce_il, inizia_entro, finisce_entro, inizia_dopo, finisce_dopo) con data_vincolo, las tres estimaciones ottimistica, probabile, pessimistica, y calendario; en el primer nivel calendari, por ejemplo { "obra": { "lavorativi": [1, 2, 3, 4, 5, 6] } }, con las mismas claves que calendario.

Las de la v1.3: en pagina, asse (las dos franjas, por ejemplo ["mesi", "settimane"], entre anni, trimestri, mesi, settimane, giorni y ore: años, trimestres, meses, semanas, días, horas), ore_piene (las 24 horas), legenda (sotto, destra, libera: debajo, a la derecha, libre) con legenda_xy, y linea_avanzamento (línea de avance); en el primer nivel categorie, por ejemplo [{ "nome": "Obra", "sfondo": "#ffd8a8", "bordo": "#e8590c" }], y en una actividad o una fase categoria; en festivi una fecha puede llevar su nombre: "2026-05-15 San Isidro". Desde la v1.4, en una fase, chiusa (true) la contrae. Desde la v1.5, en pagina, mesi_progetto (true) cuenta los años, trimestres y meses del eje desde el inicio del proyecto (Año 1, T1, M1) en lugar de nombrar el calendario: es el eje de los cronogramas que aún no tienen fecha, y conviene que inizio sea el primero de un mes.

Límites que conviene conocer

  • Los recursos no se cuentan: dos actividades encargadas a la misma persona pueden solaparse.
  • La probabilidad del PERT mira solo el camino crítico: con otros caminos casi críticos la real es más baja.
  • Solo se arrastran las barras de fechas escritas: las calculadas siguen a las dependencias.
  • En los calendarios de MS Project cada día de la semana puede tener su horario; aquí el horario es uno por calendario, y al leer vale el del primer día laborable.
  • Mermaid no tiene flechas ni horarios de trabajo: en la escala en horas las actividades se escriben allí con sus dos fechas, hora incluida.
  • El diagrama no se guarda en el servidor: la copia de seguridad del navegador cubre un despiste, pero el documento es el archivo JSON.
  • Los nombres de los meses y de los días en el eje, y los encabezados de las columnas, salen en el idioma de la página desde la que se exporta.

Keywords: Diagramas de Gantt, Gantt, Cronograma, Camino crítico, CPM, Planificación, SVG, PNG, PDF, CSV, MS Project, Mermaid, iCalendar, Semanas ISO

Moreno Comelli, CNR-IFAC, 2022-2026


Code & Design by CNR-IFAC - Core by PortLab