Anida el ajuste Jira→BIND dentro de la Etapa 2 (antes leía como una 5ª etapa)

Propuesta: mueve el bloque completo (antecedente, entregables, diagrama,
candados fiscal, exclusiones, dependencia) de después de la Etapa 3 a
justo después de la Etapa 2, y le baja el peso visual — de un div .etapa
de peso igual a las 4 etapas reales, a una caja .ajuste-anidado con
barra de acento, fondo crema y kicker "AJUSTE DENTRO DE LA ETAPA 2"
(h4 bajo el h3 de Etapa 2 en el markdown). La fila de la tabla de
Inversión (§4) se reordena igual, entre Etapa 2 y Etapa 3.

Excel: mismo reordenamiento (Etapa 2 → ajuste Jira → Etapa 3) con relleno
ámbar distinto del crema de una etapa contractual, para que no compita
visualmente como una etapa más.

Cambio incidental: el glifo ↳ no existe en Caladea/Carlito y Chromium
caía a un fallback de sistema (LucidaGrande-Bold) en la fila de la tabla;
se sustituyó por » en los 3 archivos y las fuentes vuelven a embeber limpio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Johann
2026-07-29 00:05:41 -06:00
parent 46f86ef827
commit f7f7088e01
5 changed files with 83 additions and 61 deletions
Binary file not shown.
+18 -10
View File
@@ -170,7 +170,7 @@ ETAPA3 = ("Etapa 3 — Cobranza, tablero, reportes y cierre",
"24/08/2026", "04/09/2026", "—", "⚪ Incluida en el cierre · sin costo"),
])
JIRA = ("Integración Jira → BIND (ajuste propuesta v1.3, en aprobación)",
JIRA = ("» Ajuste dentro de la Etapa 2: Integración Jira → BIND (en aprobación, v1.3)",
"27/07/2026", "29/07/2026", 7, 10, [
("Cliente de la API de Jira (token PAF): lectura de tickets FAC y control de límites",
"27/07/2026", "27/07/2026", "2–3", PROX_JIRA),
@@ -225,7 +225,7 @@ for i, (txt, ancho) in enumerate(zip(ENC, ANCHOS), start=1):
ws.row_dimensions[FILA_ENC].height = 26
def pinta_fila(r, nombre, ini, fin, pct, est, trab, stat, etapa=False):
def pinta_fila(r, nombre, ini, fin, pct, est, trab, stat, etapa=False, fill=None):
c = ws.cell(row=r, column=1, value=nombre)
c.font = Font(bold=etapa, size=10, color=CAFE)
c.alignment = Alignment(vertical="center", wrap_text=True, indent=0 if etapa else 1)
@@ -270,7 +270,7 @@ def pinta_fila(r, nombre, ini, fin, pct, est, trab, stat, etapa=False):
for col in range(1, 8):
ws.cell(row=r, column=col).border = box
if etapa and col in (1, 2, 3):
ws.cell(row=r, column=col).fill = PatternFill("solid", fgColor=CREMA)
ws.cell(row=r, column=col).fill = PatternFill("solid", fgColor=fill or CREMA)
r = FILA_ENC + 1
@@ -283,8 +283,14 @@ for f in hechas:
f["stat"], etapa=f["etapa"])
r += 1
for titulo, ini, fin, lo, hi, acts in (ETAPA2, ETAPA3, JIRA):
pinta_fila(r, titulo, ini, fin, 0, f"{lo}–{hi}", None, "", etapa=True)
for seccion in (ETAPA2, JIRA, ETAPA3):
titulo, ini, fin, lo, hi, acts = seccion
# El ajuste Jira se pinta ANIDADO dentro de la Etapa 2 (mismo lugar en la
# propuesta): relleno ámbar "pendiente" en vez del crema de una etapa
# contractual, y prefijo "»" para que no se lea como una 5ª etapa.
es_jira = seccion is JIRA
pinta_fila(r, titulo, ini, fin, 0, f"{lo}–{hi}", None, "", etapa=True,
fill=A_FILL if es_jira else None)
r += 1
for nombre, aini, afin, est, stat in acts:
pinta_fila(r, nombre, aini, afin, 0, est, None, stat)
@@ -303,11 +309,13 @@ notas = [
"y están sujetas a la definición del flujo de facturación (en revisión interna "
"de Balam) y al acceso a Azure. El soporte post-lanzamiento (2 semanas, sin "
"costo) corre del 24-ago al 4-sep, después del cierre.", False),
("Integración Jira → BIND (7–10 h): ajuste no contemplado en la propuesta "
"original, incorporado en la propuesta ajustada v1.3; se ejecuta tras su "
"aprobación por escrito y una vez definido el flujo. Se programó a partir "
"del lunes 27-jul —día en que Pedro entregó el token PAF— en paralelo con "
"el cierre de la Etapa 1 y el arranque de la Etapa 2.", False),
("Integración Jira → BIND (7–10 h), señalada con » dentro de la Etapa 2: "
"ajuste no contemplado en la propuesta original, incorporado en la propuesta "
"ajustada v1.3; se ejecuta tras su aprobación por escrito y una vez definido "
"el flujo. Se agrupa junto a la Etapa 2 porque automatiza el mismo entregable "
"(creación de cotizaciones); se programó a partir del lunes 27-jul —día en que "
"Pedro entregó el token PAF— en paralelo con el cierre de la Etapa 1 y el "
"arranque de la Etapa 2.", False),
(f"Total del plan con el ajuste: {TOT_MIN:.0f}–{TOT_MAX:.0f} h. El avance global "
f"({PCT_GLOBAL:.0%}) se calcula sobre el plan completo; el corte anterior (80%) "
"se calculaba solo sobre las Etapas 0-1.", False),