Propuesta v1.3 (Jira→BIND integrado) y plan-avance con Etapas 2-3 por actividad diaria
Reemplaza el enfoque de adenda separada: la propuesta completa sube a v1.3 con la integración Jira→BIND incorporada en §1-2 (bloque de ajuste con entregables, candados fiscales y exclusiones), §4 (fila Ajuste 9-12 h / $5,400-$7,200; total 121-148 h / $72,600-$88,800), §7 (supuestos del token PAF y del flujo) y anexos A/B. PDF reconstruido con fuentes embebidas (antes dependía de fuentes de Windows) y fixes visuales: flechas en títulos serif, tabla de inversión sin partir, label A.4 sin huérfano. El Excel para Erika (Avance-Balam-2026-07-28.xlsx) extiende el formato del 27-jul con Etapas 2-3 y el ajuste Jira desglosados en actividades diarias cuyos rangos suman exactamente los contractuales; se rebalancearon los rangos de Etapa 1 (sumaban 34-42 vs 32-39 contractual) recortando las tres actividades con horas reales muy por debajo del estimado, con asserts que lo verifican. Verificado con 5 agentes (paridad MD↔HTML, cifras vs bitácora/CSV, formato y calendario, cobertura de entregables, PDF visual). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -1,187 +0,0 @@
|
||||
"""Genera Horas-etapas-Balam-2026-07-28.xlsx — resumen de horas POR ETAPA para Erika.
|
||||
|
||||
Pedido por Erika el 27-jul (6:46 pm: "las ya completas más que nada para ver
|
||||
cuántas son") y aclarado el 28-jul (8:36 am): el Excel es el insumo del conteo
|
||||
de horas de cada etapa "sobre todo para la FACTURACIÓN correspondiente".
|
||||
|
||||
Las horas trabajadas se leen del Excel interno (`Plan-actividades-avance-2026-07-27.xlsx`),
|
||||
que a su vez sale de `Seguimiento-horas.csv` — una sola fuente de datos, igual que
|
||||
`generar_resumen_erika_2026_07_27.py`. Los rangos estimados y montos son los
|
||||
contractuales de la propuesta v1.2 (§4) y de la Adenda 01 (Jira → BIND).
|
||||
"""
|
||||
import os
|
||||
from datetime import date
|
||||
|
||||
import openpyxl
|
||||
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
|
||||
from openpyxl.utils import get_column_letter
|
||||
|
||||
BASE = os.path.dirname(os.path.abspath(__file__))
|
||||
SRC = os.path.join(BASE, "Plan-actividades-avance-2026-07-27.xlsx")
|
||||
DST = os.path.join(BASE, "Horas-etapas-Balam-2026-07-28.xlsx")
|
||||
EMISION = date(2026, 7, 28) # fecha de emisión; horas al corte del lunes 27-jul
|
||||
TARIFA = 600 # MXN/h + IVA (propuesta v1.2 §3.3)
|
||||
|
||||
# Marca Balam
|
||||
CAFE, AMARILLO, CREMA = "331F0E", "F7BD0C", "FDF3D8"
|
||||
V_FILL, V_FONT = "C6EFCE", "006100" # verde
|
||||
A_FILL, A_FONT = "FFEB9C", "9C6500" # amarillo
|
||||
GRIS = "595959"
|
||||
BORDE = "D9D9D9"
|
||||
|
||||
thin = Side(style="thin", color=BORDE)
|
||||
box = Border(left=thin, right=thin, top=thin, bottom=thin)
|
||||
|
||||
# --- Horas trabajadas desde el Excel interno (única fuente) -------------------
|
||||
wsrc = openpyxl.load_workbook(SRC).active
|
||||
trab = {}
|
||||
for row in range(2, wsrc.max_row + 1):
|
||||
nombre = str(wsrc.cell(row=row, column=1).value or "").strip()
|
||||
if nombre.startswith(("Etapa 0", "Etapa 1", "Integracion")):
|
||||
clave = "TOTAL" if nombre.startswith("Integracion") else nombre.split(" ")[0] + nombre.split(" ")[1]
|
||||
trab[clave] = float(wsrc.cell(row=row, column=10).value or 0)
|
||||
|
||||
E0, E1, TOTAL = trab["Etapa0"], trab["Etapa1"], trab["TOTAL"]
|
||||
assert abs((E0 + E1) - TOTAL) < 0.01, f"Horas no cuadran: {E0} + {E1} != {TOTAL}"
|
||||
|
||||
# --- Filas del resumen --------------------------------------------------------
|
||||
# (etapa, estatus, kind_estatus, est_min, est_max, trabajadas o None)
|
||||
ETAPAS = [
|
||||
("Etapa 0 — Discovery, infraestructura y prototipo visual",
|
||||
"✅ Completada y validada (24-jul)", "ok", 18, 22, E0),
|
||||
("Etapa 1 — Plataforma base y sincronización con BIND",
|
||||
"🟡 En curso · 6 de 8 entregables terminados", "curso", 32, 39, E1),
|
||||
("Etapa 2 — Facturación (consulta y emisión), catálogo y multimoneda",
|
||||
"⚪ Próxima", "prox", 38, 46, None),
|
||||
("Etapa 3 — Cobranza, tablero, reportes y cierre",
|
||||
"⚪ Próxima", "prox", 24, 29, None),
|
||||
]
|
||||
ADENDA = ("Adicional — Integración Jira → BIND (Adenda 01)",
|
||||
"📋 En aprobación · no estaba en la propuesta original", "prox", 9, 12, None)
|
||||
|
||||
SUB_MIN = sum(e[3] for e in ETAPAS) # 112
|
||||
SUB_MAX = sum(e[4] for e in ETAPAS) # 136
|
||||
TOT_MIN, TOT_MAX = SUB_MIN + ADENDA[3], SUB_MAX + ADENDA[4] # 121, 148
|
||||
|
||||
|
||||
def dinero(h):
|
||||
return f"${h * TARIFA:,.0f}"
|
||||
|
||||
|
||||
def rango_dinero(lo, hi):
|
||||
return f"{dinero(lo)} – {dinero(hi)}"
|
||||
|
||||
|
||||
# --- Construcción -------------------------------------------------------------
|
||||
wb = openpyxl.Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "Horas por etapa"
|
||||
|
||||
ws["A1"] = "Proyecto Balam · Plataforma de Automatización Financiera"
|
||||
ws["A1"].font = Font(bold=True, size=14, color=CAFE)
|
||||
ws["A2"] = ("Horas por etapa — emitido el 28-jul-2026 · horas trabajadas al corte "
|
||||
"del lunes 27-jul-2026 · tarifa $600 MXN/h + IVA")
|
||||
ws["A2"].font = Font(size=10, italic=True, color=GRIS)
|
||||
|
||||
ENC = ["Etapa", "Estatus", "Horas estimadas", "Horas trabajadas\n(al 27-jul)",
|
||||
"Importe estimado\n(MXN, antes de IVA)"]
|
||||
ANCHOS = [52, 34, 15, 15, 20]
|
||||
FILA_ENC = 4
|
||||
|
||||
for i, (txt, ancho) in enumerate(zip(ENC, ANCHOS), start=1):
|
||||
c = ws.cell(row=FILA_ENC, column=i, value=txt)
|
||||
c.font = Font(bold=True, size=10, color=CAFE)
|
||||
c.fill = PatternFill("solid", fgColor=AMARILLO)
|
||||
c.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
c.border = box
|
||||
ws.column_dimensions[get_column_letter(i)].width = ancho
|
||||
ws.row_dimensions[FILA_ENC].height = 28
|
||||
|
||||
|
||||
def fila(r, nombre, estatus, kind, est, trabajadas, importe, bold=False, fill=None):
|
||||
c = ws.cell(row=r, column=1, value=nombre)
|
||||
c.font = Font(bold=bold, size=10, color=CAFE)
|
||||
c.alignment = Alignment(vertical="center", wrap_text=True)
|
||||
|
||||
cs = ws.cell(row=r, column=2, value=estatus)
|
||||
cs.font = Font(size=9, color=GRIS)
|
||||
cs.alignment = Alignment(vertical="center", wrap_text=True)
|
||||
if kind == "ok":
|
||||
cs.font = Font(size=9, color=V_FONT); cs.fill = PatternFill("solid", fgColor=V_FILL)
|
||||
elif kind == "curso":
|
||||
cs.font = Font(size=9, color=A_FONT); cs.fill = PatternFill("solid", fgColor=A_FILL)
|
||||
|
||||
ce = ws.cell(row=r, column=3, value=est)
|
||||
ce.font = Font(bold=bold, size=10, color=CAFE)
|
||||
ce.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
ct = ws.cell(row=r, column=4, value=trabajadas if trabajadas is not None else "—")
|
||||
if trabajadas is not None:
|
||||
ct.number_format = "0.00"
|
||||
ct.font = Font(bold=bold or trabajadas is not None, size=10, color=CAFE)
|
||||
ct.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
ci = ws.cell(row=r, column=5, value=importe)
|
||||
ci.font = Font(bold=bold, size=10, color=CAFE)
|
||||
ci.alignment = Alignment(horizontal="right", vertical="center")
|
||||
|
||||
for col in range(1, 6):
|
||||
ws.cell(row=r, column=col).border = box
|
||||
if fill:
|
||||
ws.cell(row=r, column=col).fill = PatternFill("solid", fgColor=fill)
|
||||
ws.row_dimensions[r].height = 26
|
||||
|
||||
|
||||
r = FILA_ENC + 1
|
||||
for nombre, estatus, kind, lo, hi, t in ETAPAS:
|
||||
fila(r, nombre, estatus, kind, f"{lo} – {hi}", t, rango_dinero(lo, hi))
|
||||
r += 1
|
||||
|
||||
fila(r, "Subtotal — propuesta v1.2", "", "sub", f"{SUB_MIN} – {SUB_MAX}", TOTAL,
|
||||
rango_dinero(SUB_MIN, SUB_MAX), bold=True, fill=CREMA)
|
||||
r += 1
|
||||
|
||||
nombre, estatus, kind, lo, hi, t = ADENDA
|
||||
fila(r, nombre, estatus, kind, f"{lo} – {hi}", t, rango_dinero(lo, hi))
|
||||
r += 1
|
||||
|
||||
fila(r, "Total con Adenda 01", "", "tot", f"{TOT_MIN} – {TOT_MAX}", TOTAL,
|
||||
rango_dinero(TOT_MIN, TOT_MAX), bold=True, fill=CREMA)
|
||||
r += 2
|
||||
|
||||
# --- Notas --------------------------------------------------------------------
|
||||
notas = [
|
||||
f"Horas trabajadas al corte del lunes 27-jul-2026, del control de horas del proyecto "
|
||||
f"(mismas cifras del Excel de avance enviado el 27-jul): Etapa 0 {E0:.2f} h · "
|
||||
f"Etapa 1 {E1:.2f} h · total {TOTAL:.2f} h.",
|
||||
f"La Etapa 0 cerró en {E0:.2f} h, dentro del rango contractual de 18–22 h "
|
||||
f"(a $600/h: {dinero(E0)} antes de IVA).",
|
||||
"Referencia de facturación (propuesta v1.2, §3.3): la facturación inicial es de 30 h — "
|
||||
"$18,000 + IVA — y cubre la Etapa 0 completa más el inicio de la Etapa 1; se emite en "
|
||||
"cuanto se confirme el visto bueno. Los avances posteriores se facturan semanalmente "
|
||||
"(viernes) por horas efectivamente trabajadas, con pago a 30 días naturales.",
|
||||
"La integración Jira → BIND no estaba contemplada en la propuesta original; se "
|
||||
"formaliza en la Adenda 01 (compartida el 28-jul) y se ejecuta tras su aprobación "
|
||||
"por escrito.",
|
||||
"Los rangos de horas operan con tope por etapa: al aproximarse al máximo, el trabajo "
|
||||
"se detiene y se revisa el alcance antes de continuar.",
|
||||
]
|
||||
for txt in notas:
|
||||
c = ws.cell(row=r, column=1, value=txt)
|
||||
c.font = Font(italic=True, size=9, color=CAFE)
|
||||
c.alignment = Alignment(wrap_text=True, vertical="top")
|
||||
ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=5)
|
||||
ws.row_dimensions[r].height = 28 if len(txt) > 120 else 16
|
||||
r += 1
|
||||
|
||||
ws.freeze_panes = f"A{FILA_ENC + 1}"
|
||||
ws.sheet_view.showGridLines = False
|
||||
ws.print_area = f"A1:E{r}"
|
||||
ws.page_setup.orientation = "landscape"
|
||||
ws.page_setup.fitToWidth = 1
|
||||
ws.sheet_properties.pageSetUpPr.fitToPage = True
|
||||
|
||||
wb.save(DST)
|
||||
print("OK ->", DST)
|
||||
print(f" E0 {E0:.2f} h · E1 {E1:.2f} h · total {TOTAL:.2f} h · "
|
||||
f"v1.2 {SUB_MIN}–{SUB_MAX} h · con adenda {TOT_MIN}–{TOT_MAX} h")
|
||||
@@ -0,0 +1,335 @@
|
||||
"""Genera Avance-Balam-2026-07-28.xlsx — plan y avance COMPLETO para Erika.
|
||||
|
||||
Pedido por Erika el 27-28 jul: el conteo de horas de cada etapa (base de la
|
||||
facturación) en el mismo formato de los exceles anteriores, extendido a las
|
||||
Etapas 2 y 3 desglosadas por actividades diarias.
|
||||
|
||||
Etapas 0-1 (hechas/en curso) se leen del Excel interno
|
||||
(`Plan-actividades-avance-2026-07-27.xlsx`), que a su vez sale de
|
||||
`Seguimiento-horas.csv` — una sola fuente de datos. Las Etapas 2-3 y el ajuste
|
||||
Jira → BIND se planifican aquí con los rangos contractuales de la propuesta
|
||||
v1.3 (§2 y §4): E2 38–46 h · E3 24–29 h · Jira 9–12 h · total 121–148 h.
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
from datetime import date
|
||||
|
||||
import openpyxl
|
||||
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
|
||||
from openpyxl.utils import get_column_letter
|
||||
|
||||
BASE = os.path.dirname(os.path.abspath(__file__))
|
||||
SRC = os.path.join(BASE, "Plan-actividades-avance-2026-07-27.xlsx")
|
||||
DST = os.path.join(BASE, "Avance-Balam-2026-07-28.xlsx")
|
||||
|
||||
# Marca Balam
|
||||
CAFE, AMARILLO, CREMA = "331F0E", "F7BD0C", "FDF3D8"
|
||||
V_FILL, V_FONT = "C6EFCE", "006100" # verde
|
||||
A_FILL, A_FONT = "FFEB9C", "9C6500" # amarillo
|
||||
R_FILL, R_FONT = "FFC7CE", "9C0006" # rojo
|
||||
GRIS = "595959"
|
||||
BORDE = "D9D9D9"
|
||||
|
||||
thin = Side(style="thin", color=BORDE)
|
||||
box = Border(left=thin, right=thin, top=thin, bottom=thin)
|
||||
|
||||
# Columnas del origen (interno 27-jul)
|
||||
O_NOMBRE, O_INI, O_FIN, O_PCT, O_EST, O_TRAB, O_STAT = 1, 3, 4, 7, 9, 10, 11
|
||||
|
||||
# Estatus del interno que quedaron amarrados a la "sesión del 28-jul" —
|
||||
# la sesión se movió a revisión interna de Balam (REGISTRO #58).
|
||||
REEMPLAZOS_STAT = {
|
||||
"🔴 Diseño listo · impl. en pausa (def. Balam 28-jul)":
|
||||
"🔴 Diseño listo · impl. en pausa (flujo en revisión interna de Balam)",
|
||||
"🟡 Conectividad lista · falta regla 28-jul":
|
||||
"🟡 Conectividad lista · falta regla (revisión interna de Balam)",
|
||||
}
|
||||
|
||||
# Los rangos por actividad del interno sumaban 34–42 h en Etapa 1, fuera del
|
||||
# rango contractual de 32–39 (tope de facturación $23,400). Se recortan las
|
||||
# tres actividades cuyas horas reales quedaron muy por debajo del estimado,
|
||||
# para que la descomposición sume exactamente 32–39.
|
||||
REEMPLAZOS_EST = {
|
||||
"Sincronización de clientes": "1.5–2", # antes 2.5–3 (real: 0.5)
|
||||
"Sincronización de facturas y cotizaciones": "4–4.5", # antes 4.5–5.5 (real: 0.5)
|
||||
"Modelo de facturas + migraciones + datos de prueba": "3–3.5" # antes 3.5–4.5 (real: 0.5)
|
||||
}
|
||||
|
||||
|
||||
def limpia_fecha(txt):
|
||||
"""'vie 24/07/26' -> '24/07/2026'."""
|
||||
m = re.search(r"(\d{2})/(\d{2})/(\d{2})", str(txt or ""))
|
||||
return f"{m.group(1)}/{m.group(2)}/20{m.group(3)}" if m else ""
|
||||
|
||||
|
||||
# --- Lee Etapas 0-1 del interno ----------------------------------------------
|
||||
wsrc = openpyxl.load_workbook(SRC).active
|
||||
hechas = [] # filas E0/E1 (encabezados de etapa + actividades)
|
||||
trab_por_etapa = {}
|
||||
for row in range(2, wsrc.max_row + 1):
|
||||
nombre = str(wsrc.cell(row=row, column=O_NOMBRE).value or "").strip()
|
||||
if not nombre or nombre.startswith(("✅", "▬", "Horas:", "Etapa 1:", "🔴", "Pendientes",
|
||||
"API de Jira", "Núcleo")):
|
||||
continue
|
||||
if nombre.startswith("Integracion"):
|
||||
trab_por_etapa["TOTAL"] = float(wsrc.cell(row=row, column=O_TRAB).value or 0)
|
||||
continue
|
||||
es_etapa = nombre.startswith("Etapa")
|
||||
if es_etapa:
|
||||
trab_por_etapa[nombre] = float(wsrc.cell(row=row, column=O_TRAB).value or 0)
|
||||
stat = str(wsrc.cell(row=row, column=O_STAT).value or "").strip()
|
||||
est = str(wsrc.cell(row=row, column=O_EST).value or "")
|
||||
hechas.append({
|
||||
"nombre": nombre,
|
||||
"ini": limpia_fecha(wsrc.cell(row=row, column=O_INI).value),
|
||||
"fin": limpia_fecha(wsrc.cell(row=row, column=O_FIN).value),
|
||||
"pct": wsrc.cell(row=row, column=O_PCT).value or 0,
|
||||
"est": REEMPLAZOS_EST.get(nombre, est),
|
||||
"trab": wsrc.cell(row=row, column=O_TRAB).value,
|
||||
"stat": REEMPLAZOS_STAT.get(stat, stat),
|
||||
"etapa": es_etapa,
|
||||
})
|
||||
|
||||
E0, E1 = trab_por_etapa["Etapa 0"], trab_por_etapa["Etapa 1"]
|
||||
TOTAL = trab_por_etapa["TOTAL"]
|
||||
assert abs((E0 + E1) - TOTAL) < 0.01, f"Horas no cuadran: {E0}+{E1} != {TOTAL}"
|
||||
|
||||
|
||||
def suma_est(filas):
|
||||
lo = hi = 0.0
|
||||
for f in filas:
|
||||
est = f["est"] if isinstance(f, dict) else f
|
||||
if not est or est == "—":
|
||||
continue
|
||||
p = est.replace("–", "-").split("-")
|
||||
lo += float(p[0])
|
||||
hi += float(p[-1])
|
||||
return lo, hi
|
||||
|
||||
|
||||
# Las actividades de E0 y E1 deben sumar exactamente su rango contractual.
|
||||
_secciones = {}
|
||||
_actual = None
|
||||
for f in hechas:
|
||||
if f["etapa"]:
|
||||
_actual = f["nombre"]
|
||||
else:
|
||||
_secciones.setdefault(_actual, []).append(f)
|
||||
assert suma_est(_secciones["Etapa 0"]) == (18, 22), \
|
||||
f"Etapa 0: actividades suman {suma_est(_secciones['Etapa 0'])} != (18, 22)"
|
||||
assert suma_est(_secciones["Etapa 1"]) == (32, 39), \
|
||||
f"Etapa 1: actividades suman {suma_est(_secciones['Etapa 1'])} != (32, 39)"
|
||||
|
||||
# --- Plan de Etapas 2-3 y ajuste Jira (actividades diarias) -------------------
|
||||
PROX = "⚪ Próxima"
|
||||
PROX_FLUJO = "⚪ Próxima · requiere flujo de facturación definido"
|
||||
PROX_JIRA = "⚪ Próxima · sujeta a aprobación (v1.3) y flujo definido"
|
||||
|
||||
# (nombre, ini, fin, est_min, est_max, estatus)
|
||||
ETAPA2 = ("Etapa 2 — Facturación (consulta y emisión), catálogo y multimoneda",
|
||||
"29/07/2026", "12/08/2026", 38, 46, [
|
||||
("Andamiaje del frontend (Angular): proyecto, login y guardias por rol",
|
||||
"29/07/2026", "30/07/2026", "4–5", PROX),
|
||||
("Layout base con la identidad de marca; gestión de estado y caché",
|
||||
"30/07/2026", "31/07/2026", "3–4", PROX),
|
||||
("Listado de facturas: filtros, búsqueda, paginación y ordenamiento",
|
||||
"31/07/2026", "03/08/2026", "6–7", PROX),
|
||||
("Detalle de factura con descarga de PDF/XML desde BIND",
|
||||
"04/08/2026", "04/08/2026", "3–4", PROX),
|
||||
("Catálogo de clientes con lista blanca configurable (editable por rol Administración)",
|
||||
"05/08/2026", "05/08/2026", "3–4", PROX),
|
||||
("Tipo de cambio del DOF: proceso programado y captura al facturar",
|
||||
"06/08/2026", "06/08/2026", "2", PROX),
|
||||
("Creación de cotizaciones desde la plataforma (con simulación dry-run)",
|
||||
"06/08/2026", "07/08/2026", "5–6", PROX_FLUJO),
|
||||
("Conversión cotización→factura con confirmación humana (MXN con IVA / USD sin IVA)",
|
||||
"10/08/2026", "11/08/2026", "5–6", PROX_FLUJO),
|
||||
("Exportación de facturas y clientes a CSV/XLSX",
|
||||
"11/08/2026", "11/08/2026", "2", PROX),
|
||||
("Pruebas integrales del flujo de emisión + manual de usuario",
|
||||
"12/08/2026", "12/08/2026", "5–6", PROX),
|
||||
])
|
||||
|
||||
ETAPA3 = ("Etapa 3 — Cobranza, tablero, reportes y cierre",
|
||||
"13/08/2026", "21/08/2026", 24, 29, [
|
||||
("Módulo de cobranza: antigüedad de cartera 30/60/90 y vistas por vencer/vencidas",
|
||||
"13/08/2026", "14/08/2026", "5–6", PROX),
|
||||
("Alertas internas configurables + aplicación de la lista blanca",
|
||||
"14/08/2026", "17/08/2026", "4–5", PROX),
|
||||
("Tablero directivo con indicadores de cuentas por cobrar",
|
||||
"17/08/2026", "18/08/2026", "4–5", PROX),
|
||||
("Reporte operativo configurable (frecuencia, destinatarios, CSV/XLSX/PDF)",
|
||||
"19/08/2026", "19/08/2026", "3–4", PROX),
|
||||
("Endurecimiento de seguridad, secretos, respaldos y plan de recuperación",
|
||||
"20/08/2026", "20/08/2026", "3–4", PROX),
|
||||
("Documentación técnica: README, runbook y ADRs",
|
||||
"20/08/2026", "21/08/2026", "2", PROX),
|
||||
("Sesión de capacitación grabada + transferencia y cierre",
|
||||
"21/08/2026", "21/08/2026", "3", PROX),
|
||||
("Soporte posterior al lanzamiento (2 semanas, corrección de defectos — sin costo)",
|
||||
"24/08/2026", "04/09/2026", "—", "⚪ Incluida en el cierre · sin costo"),
|
||||
])
|
||||
|
||||
JIRA = ("Integración Jira → BIND (ajuste propuesta v1.3, en aprobación)",
|
||||
"04/08/2026", "07/08/2026", 9, 12, [
|
||||
("Cliente de la API de Jira (token PAF): lectura de tickets FAC y control de límites",
|
||||
"04/08/2026", "05/08/2026", "3–4", PROX_JIRA),
|
||||
("Disparador por estatus → generación automática de la cotización en BIND",
|
||||
"05/08/2026", "06/08/2026", "4–5", PROX_JIRA),
|
||||
("Trazabilidad ticket↔cotización↔factura, alimentación del tablero y prueba observada",
|
||||
"07/08/2026", "07/08/2026", "2–3", PROX_JIRA),
|
||||
])
|
||||
|
||||
|
||||
def suma_rangos(acts):
|
||||
lo = hi = 0
|
||||
for _, _, _, est, _ in acts:
|
||||
if est == "—": # filas sin costo (soporte incluido) no suman
|
||||
continue
|
||||
p = est.split("–")
|
||||
lo += float(p[0])
|
||||
hi += float(p[-1])
|
||||
return lo, hi
|
||||
|
||||
|
||||
for titulo, _, _, lo, hi, acts in (ETAPA2, ETAPA3, JIRA):
|
||||
slo, shi = suma_rangos(acts)
|
||||
assert (slo, shi) == (lo, hi), f"{titulo}: actividades {slo}–{shi} != rango {lo}–{hi}"
|
||||
|
||||
TOT_MIN = 18 + 32 + ETAPA2[3] + ETAPA3[3] + JIRA[3] # 121
|
||||
TOT_MAX = 22 + 39 + ETAPA2[4] + ETAPA3[4] + JIRA[4] # 148
|
||||
PCT_GLOBAL = round(TOTAL / ((TOT_MIN + TOT_MAX) / 2), 2)
|
||||
|
||||
# --- Construcción -------------------------------------------------------------
|
||||
wb = openpyxl.Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "Plan y avance"
|
||||
|
||||
ws["A1"] = "Proyecto Balam · Plataforma de Automatización Financiera"
|
||||
ws["A1"].font = Font(bold=True, size=14, color=CAFE)
|
||||
ws["A2"] = ("Plan y avance al 28-jul-2026 · horas trabajadas al corte del lunes 27-jul · "
|
||||
"Etapas 2-3 y ajuste Jira desglosados por actividad diaria")
|
||||
ws["A2"].font = Font(size=10, italic=True, color=GRIS)
|
||||
|
||||
ENC = ["Actividad", "Inicio", "Fin", "Avance", "Horas\nestimadas", "Horas\ntrabajadas", "Estatus"]
|
||||
ANCHOS = [56, 12, 12, 9, 11, 11, 40]
|
||||
FILA_ENC = 4
|
||||
|
||||
for i, (txt, ancho) in enumerate(zip(ENC, ANCHOS), start=1):
|
||||
c = ws.cell(row=FILA_ENC, column=i, value=txt)
|
||||
c.font = Font(bold=True, size=10, color=CAFE)
|
||||
c.fill = PatternFill("solid", fgColor=AMARILLO)
|
||||
c.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
c.border = box
|
||||
ws.column_dimensions[get_column_letter(i)].width = ancho
|
||||
ws.row_dimensions[FILA_ENC].height = 26
|
||||
|
||||
|
||||
def pinta_fila(r, nombre, ini, fin, pct, est, trab, stat, etapa=False):
|
||||
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)
|
||||
|
||||
for col, val in ((2, ini), (3, fin)):
|
||||
cc = ws.cell(row=r, column=col, value=val)
|
||||
cc.font = Font(size=9, color=GRIS)
|
||||
cc.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
cp = ws.cell(row=r, column=4, value=pct)
|
||||
cp.number_format = "0%"
|
||||
cp.alignment = Alignment(horizontal="center", vertical="center")
|
||||
if pct >= 1:
|
||||
cp.font = Font(bold=True, size=10, color=V_FONT)
|
||||
cp.fill = PatternFill("solid", fgColor=V_FILL)
|
||||
elif pct > 0:
|
||||
cp.font = Font(bold=True, size=10, color=A_FONT)
|
||||
cp.fill = PatternFill("solid", fgColor=A_FILL)
|
||||
else:
|
||||
cp.font = Font(size=10, color=GRIS)
|
||||
|
||||
ce = ws.cell(row=r, column=5, value=est)
|
||||
ce.font = Font(bold=etapa, size=10, color=CAFE)
|
||||
ce.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
ct = ws.cell(row=r, column=6, value=trab if trab not in (None, "") else "—")
|
||||
if isinstance(trab, (int, float)):
|
||||
ct.number_format = "0.00"
|
||||
ct.font = Font(bold=etapa, size=10, color=CAFE)
|
||||
ct.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
cs = ws.cell(row=r, column=7, value=stat)
|
||||
cs.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True)
|
||||
cs.font = Font(size=9, color=GRIS)
|
||||
if stat.startswith("✅"):
|
||||
cs.font = Font(size=9, color=V_FONT); cs.fill = PatternFill("solid", fgColor=V_FILL)
|
||||
elif stat.startswith("🟡"):
|
||||
cs.font = Font(size=9, color=A_FONT); cs.fill = PatternFill("solid", fgColor=A_FILL)
|
||||
elif stat.startswith("🔴"):
|
||||
cs.font = Font(size=9, bold=True, color=R_FONT); cs.fill = PatternFill("solid", fgColor=R_FILL)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
r = FILA_ENC + 1
|
||||
pinta_fila(r, "Integracion de plataformas Balam", "01/07/2026", "21/08/2026",
|
||||
PCT_GLOBAL, f"{TOT_MIN:.0f}–{TOT_MAX:.0f}", TOTAL, "", etapa=True)
|
||||
r += 1
|
||||
|
||||
for f in hechas:
|
||||
pinta_fila(r, f["nombre"], f["ini"], f["fin"], f["pct"], f["est"], f["trab"],
|
||||
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)
|
||||
r += 1
|
||||
for nombre, aini, afin, est, stat in acts:
|
||||
pinta_fila(r, nombre, aini, afin, 0, est, None, stat)
|
||||
r += 1
|
||||
|
||||
# --- Leyenda y notas ----------------------------------------------------------
|
||||
r += 1
|
||||
leyenda = "✅ Completada · 🟡 En curso · 🔴 Pendiente/bloqueada · ⚪ Próxima"
|
||||
notas = [
|
||||
(leyenda, False),
|
||||
(f"Horas trabajadas al corte del lunes 27-jul: {E0:.2f} h en Etapa 0 (cerrada y "
|
||||
f"validada, rango 18–22 h) y {E1:.2f} h en Etapa 1 ({TOTAL:.2f} h en total). "
|
||||
"Las horas por etapa son la base de la facturación (tarifa $600/h + IVA).", True),
|
||||
("Etapas 2 y 3 desglosadas por actividad diaria con sus rangos estimados "
|
||||
"(38–46 h y 24–29 h). Las fechas planificadas asumen media jornada en promedio "
|
||||
"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 (9–12 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. De aprobarse, corre en "
|
||||
"paralelo con la Etapa 2 la semana del 4-ago.", 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),
|
||||
("En Etapa 1 siguen abiertos: capa de escritura (en pausa por la definición del "
|
||||
"flujo), datos de prueba, y Azure/CI-CD (accesos del lado de Balam).", False),
|
||||
]
|
||||
for txt, bold in notas:
|
||||
c = ws.cell(row=r, column=1, value=txt)
|
||||
c.font = Font(italic=True, size=9, color=CAFE, bold=bold)
|
||||
c.alignment = Alignment(wrap_text=True, vertical="top")
|
||||
ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=7)
|
||||
ws.row_dimensions[r].height = 28 if len(txt) > 120 else 14
|
||||
r += 1
|
||||
|
||||
ws.freeze_panes = f"A{FILA_ENC + 1}"
|
||||
ws.sheet_view.showGridLines = False
|
||||
ws.print_area = f"A1:G{r}"
|
||||
ws.page_setup.orientation = "landscape"
|
||||
ws.page_setup.fitToWidth = 1
|
||||
ws.sheet_properties.pageSetUpPr.fitToPage = True
|
||||
|
||||
wb.save(DST)
|
||||
print("OK ->", DST)
|
||||
print(f" E0 {E0:.2f} h · E1 {E1:.2f} h · trabajadas {TOTAL:.2f} h · "
|
||||
f"plan {TOT_MIN:.0f}–{TOT_MAX:.0f} h · avance global {PCT_GLOBAL:.0%} · "
|
||||
f"filas E2 {len(ETAPA2[5])} · E3 {len(ETAPA3[5])} · Jira {len(JIRA[5])}")
|
||||
@@ -5,8 +5,8 @@
|
||||
|---|---|
|
||||
| **Preparada para** | Noe Rocha (CTO) · Araceli Sánchez Jiménez (CEO/Operaciones) · Erika Chávez (PM) · Pedro Alberto Ayala Elizondo (Contacto técnico) |
|
||||
| **Preparada por** | Johann Velazquez — Consultor de Software · Monterrey, N.L. |
|
||||
| **Fecha** | Mayo 2026 (actualizada julio 2026) |
|
||||
| **Versión** | 1.2 — facturación inicial de 30 h explícita y condiciones comerciales consolidadas (ajuste post-kickoff, 1-jul-2026). Base: v1.1 con ajustes acordados el 8-jun-2026 |
|
||||
| **Fecha** | Mayo 2026 (actualizada al 28 de julio de 2026) |
|
||||
| **Versión** | 1.3 — integración Jira → BIND incorporada al alcance conforme al control de cambios (§10), ajuste del 28-jul-2026. Base: v1.2 (facturación inicial de 30 h explícita y condiciones comerciales consolidadas, 1-jul-2026) |
|
||||
| **Vigencia** | 30 días naturales a partir de la fecha de emisión |
|
||||
|
||||
---
|
||||
@@ -15,16 +15,16 @@
|
||||
|
||||
Balam opera hoy un proceso financiero fragmentado: facturación, cobranza, conciliación y contabilidad viven en sistemas que no se comunican, y el trabajo de unirlos recae en personas. Cada traspaso manual introduce error, retrabajo y demoras de cobranza que erosionan la relación con los clientes estratégicos.
|
||||
|
||||
Esta propuesta plantea una **primera etapa enfocada**: una plataforma web que centraliza la facturación y las cuentas por cobrar sobre **BIND ERP**, el sistema ya confirmado como fuente de verdad. El MVP permite **emitir facturas en MXN y USD** desde la plataforma —creando la cotización y convirtiéndola en factura a través de la API de BIND, que conserva el timbrado CFDI— y entrega además visibilidad, dashboard, alertas y reglas de cobranza. Toda emisión opera con **confirmación humana y modo de simulación**, de modo que la prioridad #1 de Balam (facturación) se atiende sin asumir riesgos fiscales. La arquitectura queda preparada para incorporar conciliación bancaria, pagos en línea, contabilidad e integraciones adicionales conforme se validen.
|
||||
Esta propuesta plantea una **primera etapa enfocada**: una plataforma web que centraliza la facturación y las cuentas por cobrar sobre **BIND ERP**, el sistema ya confirmado como fuente de verdad. El MVP permite **emitir facturas en MXN y USD** desde la plataforma —creando la cotización y convirtiéndola en factura a través de la API de BIND, que conserva el timbrado CFDI— y entrega además visibilidad, dashboard, alertas y reglas de cobranza. Toda emisión opera con **confirmación humana y modo de simulación**, de modo que la prioridad #1 de Balam (facturación) se atiende sin asumir riesgos fiscales. Con el **ajuste de julio de 2026**, el alcance incorpora además la **integración con Jira**: los tickets de la bandeja de Facturación generan automáticamente su cotización en BIND, conservando los mismos candados de control. La arquitectura queda preparada para incorporar conciliación bancaria, pagos en línea, contabilidad e integraciones adicionales conforme se validen.
|
||||
|
||||
En síntesis:
|
||||
|
||||
- **Alcance:** MVP de facturación (consulta y **emisión asistida** MXN/USD) y cobranza sobre la API de BIND ERP.
|
||||
- **Plazo:** 6 a 7 semanas, a media dedicación.
|
||||
- **Inversión:** **$67,200 – $81,600 MXN** + IVA, bajo esquema de tiempo y materiales con tope por etapa.
|
||||
- **Alcance:** MVP de facturación (consulta y **emisión asistida** MXN/USD) y cobranza sobre la API de BIND ERP, más la **integración acotada con Jira** (generación automática de cotizaciones desde la bandeja de Facturación — ajuste jul-2026).
|
||||
- **Plazo:** 6 a 8 semanas, a media dedicación.
|
||||
- **Inversión:** **$72,600 – $88,800 MXN** + IVA, bajo esquema de tiempo y materiales con tope por etapa (incluye el ajuste Jira → BIND de 9 – 12 h).
|
||||
- **Modelo:** transparencia total de horas, entregables verificables semana a semana, y código propiedad de Balam desde el primer día.
|
||||
|
||||
El enfoque responde directamente a la indicación del CTO de priorizar facturación e integrar únicamente BIND en esta primera fase, evitando comprometer alcance que dependa de integraciones aún no disponibles o no prioritarias.
|
||||
El enfoque responde directamente a la indicación del CTO de priorizar facturación y BIND en esta primera fase, evitando comprometer alcance que dependa de integraciones aún no disponibles o no prioritarias. La integración con Jira —originalmente diferida— se incorporó en julio de 2026 como ajuste de alcance, una vez que la propia dirección confirmó que el proceso de facturación se gobierna en Jira y que su API cubre lo necesario.
|
||||
|
||||
---
|
||||
|
||||
@@ -36,11 +36,12 @@ Durante la sesión con el equipo directivo, la lectura del requerimiento fue cla
|
||||
|
||||
### 1.2 Contexto que define el alcance
|
||||
|
||||
Tras la sesión de seguimiento y las actualizaciones del CTO del 25 de mayo, tres factores reordenan el alcance del MVP:
|
||||
Tras la sesión de seguimiento y las actualizaciones del CTO del 25 de mayo, cuatro factores reordenan el alcance del MVP:
|
||||
|
||||
1. **BIND ERP cuenta con API oficial** (`api.bind.com.mx`, OData v3, 20,000 solicitudes/día). Esto permite una integración por API en tiempo cercano a real, superando el supuesto inicial de exportación manual de archivos.
|
||||
2. **La dirección técnica priorizó la facturación.** Conforme a la indicación de considerar "únicamente BIND ERP en una primera etapa", funcionalidades como pagos en línea, conciliación bancaria, recordatorios automáticos a clientes y asientos contables se difieren de manera explícita a fases posteriores.
|
||||
3. **BUK dispone de API**, confirmada por el equipo de Balam, aunque no constituye una prioridad inmediata. Queda contemplada en el roadmap sin condicionar el MVP.
|
||||
4. **El proceso interno evolucionó hacia Jira** (confirmado por la dirección en julio de 2026): hoy todo el flujo de facturación nace y se gobierna en Jira — *"lo que no está en Jira no se procesa"* — con una bandeja dedicada (**Facturación**, llave `FAC-`) y un flujo de estatus formal. Por ello, la integración con Jira se incorporó al alcance como **ajuste conforme al control de cambios** (§10), detallado en la §2.
|
||||
|
||||
### 1.3 Sistemas actuales
|
||||
|
||||
@@ -48,7 +49,7 @@ Tras la sesión de seguimiento y las actualizaciones del CTO del 25 de mayo, tre
|
||||
|---|---|---|
|
||||
| **BIND ERP** | Facturación y contabilidad con PAC integrado | Integración principal (API confirmada) |
|
||||
| **BUK** | Recursos humanos, contratos, nómina | Fuera de alcance (API disponible, fase posterior) |
|
||||
| **Jira** | Gestión de proyectos y servicios | Fuera de alcance |
|
||||
| **Jira** | Gestión de proyectos y servicios; origen operativo del proceso de facturación | **Integración acotada (ajuste jul-2026):** lectura de la bandeja Facturación y generación automática de cotizaciones en BIND |
|
||||
| **Banca (3 instituciones)** | 2 México + IBC Bank Texas, estados en PDF | Fuera de alcance |
|
||||
|
||||
### 1.4 Solución propuesta
|
||||
@@ -58,6 +59,7 @@ Se propone una **capa de operaciones financieras sobre BIND ERP**, no un reempla
|
||||
**Alcance funcional del MVP:**
|
||||
|
||||
- Integración con BIND ERP vía API: lectura primero y **escritura asistida** una vez validada en Discovery.
|
||||
- **Integración con Jira (ajuste jul-2026):** lectura de los tickets de la bandeja **Facturación (`FAC-`)** y generación automática de la cotización en BIND al alcanzar el estatus disparador que Balam defina, mediante la misma capa de escritura controlada y con trazabilidad ticket ↔ cotización ↔ factura.
|
||||
- **Emisión de facturas desde la plataforma:** creación de cotización y conversión a factura en MXN (con IVA) y USD (sin IVA, para clientes extranjeros) a través de la API de BIND, con timbrado a cargo del PAC de BIND, confirmación humana obligatoria y modo de simulación (*dry-run*) previo a cada emisión.
|
||||
- Catálogo central de clientes con lista blanca configurable (ACUNTIA + Top 3).
|
||||
- Vista unificada de facturación: estados, vencimientos, filtros y descarga de PDF/XML.
|
||||
@@ -87,6 +89,7 @@ La incorporación posterior de pagos en línea, recordatorios automáticos, conc
|
||||
- Reducción medible del trabajo manual de consulta y reporteo sobre BIND.
|
||||
- Aplicación correcta de la lista blanca: ACUNTIA y Top 3 nunca reciben recordatorios automáticos masivos.
|
||||
- Entrega del MVP funcional en el plazo comprometido, con alcance acotado y sin desviaciones.
|
||||
- Trazabilidad ticket de Jira → cotización → factura sin captura manual duplicada, una vez definido el flujo de facturación.
|
||||
- Control fiscal: ninguna factura se emite sin confirmación humana explícita; el timbrado CFDI permanece a cargo del PAC de BIND.
|
||||
|
||||
### 1.6 Escala operativa de referencia
|
||||
@@ -122,7 +125,7 @@ La selección tecnológica privilegia robustez empresarial, mantenibilidad a lar
|
||||
|
||||
> **Sobre las versiones.** Las versiones indicadas son la referencia vigente a mayo de 2026; se fijan al inicio del proyecto sobre la rama estable/LTS de cada tecnología. Se prioriza **.NET 10** por ser versión de soporte extendido (LTS), apropiada para una aplicación financiera de largo plazo.
|
||||
|
||||
El proyecto se organiza en cuatro etapas secuenciales. Cada una concluye con un entregable demostrable y se factura conforme a horas reales (ver §3).
|
||||
El proyecto se organiza en cuatro etapas secuenciales, más el **ajuste Jira → BIND** incorporado en julio de 2026 (al final de esta sección). Cada bloque concluye con un entregable demostrable y se factura conforme a horas reales (ver §3).
|
||||
|
||||
### Etapa 0 — Discovery, infraestructura y prototipo visual · *Semana 1 · 18 – 22 h*
|
||||
|
||||
@@ -195,6 +198,27 @@ El proyecto se organiza en cuatro etapas secuenciales. Cada una concluye con un
|
||||
|
||||
> **Fuera de esta etapa:** recordatorios automáticos a clientes, pagos en línea, conciliación bancaria, asientos contables automáticos e integración bancaria en vivo.
|
||||
|
||||
### Integración Jira → BIND — ajuste de alcance (jul-2026) · *se ejecuta junto con las Etapas 2-3 · 9 – 12 h*
|
||||
|
||||
**Antecedente.** La versión anterior de esta propuesta dejó Jira fuera del alcance conforme a la información disponible al cotizar. En las sesiones del 22, 24 y 27 de julio la dirección confirmó que el proceso interno evolucionó — todo el flujo de facturación nace y se gobierna en Jira — y quedó confirmada la viabilidad técnica: la API de Jira cubre lectura y escritura de tickets, se entregó el token de integración (**"PAF"**, vigente al 27-jul-2027) y se documentaron los límites de consumo de Atlassian. La estimación (~10 h) se comunicó a la PM el 21 de julio; esta sección la formaliza conforme al control de cambios (§10).
|
||||
|
||||
**Entregables:**
|
||||
|
||||
- **Conexión con la API de Jira** mediante el token PAF y lectura de los tickets de la bandeja **Facturación (`FAC-`)**, con consumo autorregulado conforme a los límites de velocidad documentados por Atlassian.
|
||||
- **Generación automática de la cotización en BIND** cuando un ticket alcanza el estatus disparador que Balam defina (candidato natural: la entrada del ticket al proceso de facturación, previo a "resuelto"), a través de la misma capa de escritura controlada del MVP.
|
||||
- **Trazabilidad ticket ↔ cotización ↔ prefactura/factura**, visible en la plataforma y registrada en la bitácora de auditoría; los tickets leídos alimentan además la vista *"qué necesita atención"* del tablero.
|
||||
- **Pruebas controladas:** scripts de consulta y de creación/edición sobre un registro de prueba, y una **prueba observada** con el equipo de Balam antes de habilitar la generación automática en operación.
|
||||
|
||||
```
|
||||
Ticket Jira (FAC) → Cotización BIND (automática) → Prefactura → Aprobación humana → Timbrado (PAC de BIND)
|
||||
```
|
||||
|
||||
> **El control fiscal no cambia.** La integración crea **cotizaciones, nunca facturas**: se mantiene la cadena acordada — cotización → prefactura → **aprobación humana** → timbrado por el PAC de BIND — con modo de simulación (*dry-run*), feature flag y registro en bitácora. No existe timbrado automático.
|
||||
|
||||
**No incluye:** (a) el **alta automática de clientes en BIND** — si el cliente del ticket no existe, la plataforma lo detecta y lo notifica; darlo de alta automáticamente es una decisión de proceso abierta que, de aprobarse, se estima por separado; (b) **tickets con múltiples facturas** — el supuesto es *un ticket → una cotización*; el manejo del caso masivo se define junto con Balam y, si requiere desarrollo adicional, se estima por separado; (c) **otros usos de Jira** (reporteo de horas de consultores, tableros sobre otras bandejas, espacio comercial) y los módulos del Anexo B.
|
||||
|
||||
> **Dependencia clave.** La implementación inicia una vez que Balam cierre la **definición del flujo de facturación** (en revisión interna), de la cual salen el estatus disparador y las reglas de prefactura.
|
||||
|
||||
---
|
||||
|
||||
## 3. Modelo de colaboración
|
||||
@@ -212,7 +236,7 @@ A cambio de esta flexibilidad, el esquema ofrece controles concretos:
|
||||
|
||||
### 3.2 Dedicación y plazo
|
||||
|
||||
La dedicación es de **media jornada (aproximadamente 20 h/semana**, con flexibilidad hasta 25 h en semanas de mayor carga). Sobre esa base, la primera etapa requiere **112 a 136 horas**, equivalentes a **6 – 7 semanas** de calendario.
|
||||
La dedicación es de **media jornada (aproximadamente 20 h/semana**, con flexibilidad hasta 25 h en semanas de mayor carga). Sobre esa base, la primera etapa requiere **121 a 148 horas** (incluido el ajuste Jira → BIND), equivalentes a **6 – 8 semanas** de calendario.
|
||||
|
||||
### 3.3 Condiciones comerciales
|
||||
|
||||
@@ -255,9 +279,12 @@ La inversión de la primera etapa se desglosa por entregable, conforme al esquem
|
||||
| 1 | Plataforma base, sincronización con BIND y capa de escritura | 32 – 39 | $19,200 – $23,400 |
|
||||
| 2 | Facturación (consulta y **emisión** MXN/USD), catálogo y multimoneda | 38 – 46 | $22,800 – $27,600 |
|
||||
| 3 | Cobranza, tablero, reportes y cierre | 24 – 29 | $14,400 – $17,400 |
|
||||
| **Total primera etapa** | | **112 – 136 h** | **$67,200 – $81,600** |
|
||||
| Ajuste jul-2026 | **Integración Jira → BIND** (lectura de la bandeja FAC, cotización automática, trazabilidad y pruebas) | 9 – 12 | $5,400 – $7,200 |
|
||||
| **Total primera etapa** | | **121 – 148 h** | **$72,600 – $88,800** |
|
||||
|
||||
> Cifras antes de IVA. Plazo estimado: **6 – 7 semanas** a media jornada (~20 h/semana, con flexibilidad hasta 25 h en semanas pico).
|
||||
> Cifras antes de IVA. Plazo estimado: **6 – 8 semanas** a media jornada (~20 h/semana, con flexibilidad hasta 25 h en semanas pico).
|
||||
|
||||
> **Sobre el ajuste Jira → BIND:** se incorporó conforme al control de cambios (§10) a partir de la confirmación de julio de 2026 (ver §2); el rango es consistente con la estimación de ~10 h comunicada el 21 de julio y su ejecución inicia una vez que Balam cierre la definición del flujo de facturación.
|
||||
|
||||
> **Facturación inicial (vinculante para el primer pago):** el primer pago corresponde a **30 horas — $18,000 MXN + IVA**, que cubren la **Etapa 0 completa (18–22 h) y el inicio de la Etapa 1**; se factura al arranque del proyecto y su pago corre a 30 días naturales (ver §3.3). Los avances posteriores se facturan semanalmente (viernes) por horas efectivamente trabajadas.
|
||||
|
||||
@@ -302,7 +329,7 @@ Los siguientes son servicios de infraestructura externos, independientes de los
|
||||
| Azure Key Vault + Application Insights | Secretos (Standard) + observabilidad (5 GB/mes incluidos, luego por GB) | $0 – $15 |
|
||||
| Monitoreo de disponibilidad / Sentry *(opcional)* | Plan gratuito → Team | $0 – $26 |
|
||||
| PAC para CFDI | Ya incluido en BIND | Sin costo adicional |
|
||||
| **Total mensual estimado** | | **$30 – $160 USD/mes** |
|
||||
| **Total mensual estimado** | | **$30 – $162 USD/mes** |
|
||||
|
||||
> **Configuración esperada en producción** (App Service B2 + PostgreSQL B2s con respaldo + observabilidad básica): **≈ $90 – $110 USD/mes**. El extremo bajo de la tabla corresponde a una configuración mínima; el alto, a una holgada con redundancia y monitoreo de pago.
|
||||
|
||||
@@ -327,6 +354,8 @@ El cumplimiento de las estimaciones depende de las siguientes condiciones. De no
|
||||
7. **Acuerdo de uso de la metodología asistida por IA**, con el compromiso de no entrenamiento sobre datos del cliente.
|
||||
8. **El PAC integrado de BIND** atiende los volúmenes actuales y futuros sin costo adicional; el timbrado CFDI permanece a cargo de BIND, no de la plataforma.
|
||||
9. **El comportamiento de escritura de la API de BIND** (creación de cotización, conversión a factura y timbrado) se valida en Discovery; la emisión productiva se habilita únicamente tras esa validación. Balam designa al rol responsable de confirmar cada emisión.
|
||||
10. **Token de Jira ("PAF") vigente** con visibilidad de la bandeja Facturación (`FAC-`), que opera como bandeja "padre" del proceso; si algún disparador nace en otra bandeja sin reflejarse en FAC, el ajuste se revisa en conjunto. Entregado el 27-jul-2026.
|
||||
11. **Definición del flujo de facturación** cerrada por Balam (estatus disparador y reglas de prefactura) y **diagrama del flujo Jira en tamaño legible** entregado, antes de iniciar la implementación del ajuste Jira → BIND.
|
||||
|
||||
---
|
||||
|
||||
@@ -371,7 +400,8 @@ Más allá del código funcional, la entrega incluye:
|
||||
1. Sesión de revisión de esta propuesta (1 h) para resolver dudas y ajustar lo que corresponda.
|
||||
2. **Firma del contrato / orden de trabajo** (prestación de servicios y confidencialidad) — formaliza el compromiso para arrancar sin anticipo.
|
||||
3. **Facturación inicial** (30 horas — **$18,000 MXN** + IVA), que cubre la Etapa 0 y el inicio de la Etapa 1 (ver §3.3), con pago a 30 días naturales, para iniciar Discovery.
|
||||
4. Arranque del proyecto, con entrega del MVP en **6 – 7 semanas**.
|
||||
4. Arranque del proyecto, con entrega del MVP en **6 – 8 semanas**.
|
||||
5. **Aprobación por escrito de la versión 1.3** (basta la confirmación por correo electrónico) para ejecutar el ajuste Jira → BIND de 9 – 12 h una vez definido el flujo de facturación.
|
||||
|
||||
---
|
||||
|
||||
@@ -393,7 +423,7 @@ Leyenda: ✅ Cubierto · ⚠️ Parcial · ❌ Diferido a fase posterior (Anexo
|
||||
|
||||
| Funcionalidad PRD | Cobertura | Detalle |
|
||||
|---|---|---|
|
||||
| Generación automatizada de facturas | ⚠️ | **Incluida la creación asistida:** cotización → factura desde la plataforma vía API de BIND, con confirmación humana; el timbrado lo realiza el PAC de BIND. La generación **automática desde eventos** (Jira→BUK→Factura) depende de APIs no disponibles hoy — fase posterior. |
|
||||
| Generación automatizada de facturas | ⚠️ | **Incluida la creación asistida:** cotización → factura desde la plataforma vía API de BIND, con confirmación humana; el timbrado lo realiza el PAC de BIND. Con el **ajuste jul-2026**, los tickets de Jira (bandeja Facturación) **generan automáticamente su cotización**; la cadena completa sin intervención (Jira→BUK→Factura) sigue en fase posterior. |
|
||||
| Multimoneda para clientes internacionales (USD sin IVA) | ✅ | **Emisión en MXN (con IVA) y USD (sin IVA)** con tipo de cambio del DOF capturado al momento de facturación. **EUR queda fuera del MVP.** |
|
||||
| Descarga automática de facturas / reporte | ✅ | Listado con filtros, búsqueda, detalle con PDF/XML y exportación a Excel. |
|
||||
|
||||
@@ -433,7 +463,7 @@ Leyenda: ✅ Cubierto · ⚠️ Parcial · ❌ Diferido a fase posterior (Anexo
|
||||
|
||||
| ID | Descripción | Cobertura | Notas |
|
||||
|---|---|---|---|
|
||||
| RF-01 | Generar facturas automáticamente desde eventos | ⚠️ | Creación manual (cotización→factura) incluida; la generación automática desde eventos requiere Jira/BUK — fase posterior |
|
||||
| RF-01 | Generar facturas automáticamente desde eventos | ⚠️ | Creación asistida (cotización→factura) incluida; con el ajuste jul-2026, los tickets de Jira generan automáticamente la **cotización**. La factura siempre requiere aprobación humana; la cadena BUK→Factura sigue en fase posterior |
|
||||
| RF-02 | Multimoneda USD/EUR/MXN | ⚠️ | Emisión MXN + USD en el MVP; EUR en fase posterior |
|
||||
| RF-03 | Integración con sistemas existentes (BUK / nómina) | ❌ | API de BUK confirmada, no prioritaria |
|
||||
| RF-04 | Registrar pagos desde fuentes bancarias | ❌ | Fase posterior |
|
||||
@@ -461,7 +491,7 @@ Leyenda: ✅ Cubierto · ⚠️ Parcial · ❌ Diferido a fase posterior (Anexo
|
||||
|
||||
### A.4 Diferidos — resumen
|
||||
|
||||
**Bloqueado por terceros o sin prioridad actual:** generación automática de facturas (Jira→BUK→Factura); integración bancaria en vivo (Belvo/Plaid/IBC Texas); integración con BUK; integración con Jira.
|
||||
**Bloqueado por terceros o sin prioridad actual:** generación automática de facturas de punta a punta (Jira→BUK→Factura); integración bancaria en vivo (Belvo/Plaid/IBC Texas); integración con BUK. *(La integración con Jira dejó de estar diferida: se incorporó como ajuste jul-2026 — ver §2.)*
|
||||
|
||||
**Diferido por decisión de alcance:** pagos en línea; recordatorios automáticos a clientes; conciliación bancaria; asientos contables automáticos; EUR; flujo de efectivo proyectado; detección avanzada de anomalías; portal de cliente; multi-tenant comercial; cumplimiento avanzado Texas.
|
||||
|
||||
@@ -486,7 +516,7 @@ Los siguientes son **rangos indicativos**, no compromisos contractuales. Se reco
|
||||
|
||||
### B.2 Roadmap posterior (sin cotización)
|
||||
|
||||
Se cotiza al cierre de la fase anterior, priorizando con datos reales de uso: integración bancaria en vivo (Belvo, Plaid); conector con BIND para asientos contables automáticos; integración con Jira; flujo de efectivo proyectado (30/60/90 días); gestión cambiaria automática; pagos recurrentes; detección avanzada de anomalías; soporte EUR; clasificación asistida por IA; portal de cliente; multi-tenant comercial; aplicación móvil para tickets; y cumplimiento avanzado para Texas.
|
||||
Se cotiza al cierre de la fase anterior, priorizando con datos reales de uso: integración bancaria en vivo (Belvo, Plaid); conector con BIND para asientos contables automáticos; ampliaciones de la integración con Jira (otras bandejas, reporteo de horas, espacio comercial); flujo de efectivo proyectado (30/60/90 días); gestión cambiaria automática; pagos recurrentes; detección avanzada de anomalías; soporte EUR; clasificación asistida por IA; portal de cliente; multi-tenant comercial; aplicación móvil para tickets; y cumplimiento avanzado para Texas.
|
||||
|
||||
### B.3 Activación
|
||||
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
# Adenda 01 — Integración Jira → BIND
|
||||
## Generación automática de cotizaciones desde los tickets de facturación
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Preparada para** | Noe Rocha (CTO) · Araceli Sánchez Jiménez (CEO/Operaciones) · Erika Chávez (PM) · Pedro Alberto Ayala Elizondo (Contacto técnico) |
|
||||
| **Preparada por** | Johann Velazquez — Consultor de Software · Monterrey, N.L. |
|
||||
| **Fecha** | 28 de julio de 2026 |
|
||||
| **Documento** | Adenda 01 a la Propuesta Comercial v1.2 — solicitud de cambio conforme a la §10 (control de cambios) |
|
||||
| **Vigencia** | 30 días naturales a partir de la fecha de emisión |
|
||||
|
||||
---
|
||||
|
||||
## 1. Antecedente
|
||||
|
||||
La propuesta v1.2 dejó Jira explícitamente **fuera del alcance** del MVP (§1.3 y Anexo A.4), conforme a la información disponible al momento de cotizar. Durante el Discovery y las sesiones de julio, la dirección confirmó que el proceso interno evolucionó: **hoy todo el flujo de facturación de Balam nace y se gobierna en Jira** — *"lo que no está en Jira no se procesa"* — con una bandeja dedicada (**Facturación**, llave `FAC-`) y un flujo de estatus formal que culmina en "resuelto".
|
||||
|
||||
En la sesión del 22 de julio el CTO planteó incorporar esta conectividad como ajuste de alcance; en la validación del prototipo del 24 de julio se ratificó, y en la sesión técnica del 27 de julio con Pedro Ayala quedó confirmada la viabilidad: la API de Jira cubre **lectura y escritura** de tickets, se entregó el token de integración (**"PAF"**, vigente al 27-jul-2027) y se documentaron los límites de consumo del lado de Atlassian. La estimación preliminar (~10 h) se comunicó a la PM el 21 de julio; esta adenda la formaliza por escrito, como lo prevé el control de cambios de la propuesta.
|
||||
|
||||
## 2. Alcance del cambio
|
||||
|
||||
La integración agrega a la primera etapa las siguientes capacidades:
|
||||
|
||||
1. **Conexión con la API de Jira** mediante el token PAF y lectura de los tickets de la bandeja **Facturación (`FAC-`)**, con consumo autorregulado conforme a los límites de velocidad documentados por Atlassian.
|
||||
2. **Generación automática de la cotización en BIND** cuando un ticket alcanza el estatus disparador que Balam defina (candidato natural: la entrada del ticket al proceso de facturación, previo a "resuelto"), a través de la misma **capa de escritura controlada** del MVP.
|
||||
3. **Trazabilidad ticket ↔ cotización ↔ prefactura/factura**, visible en la plataforma y registrada en la bitácora de auditoría. Los tickets leídos alimentan además la vista *"qué necesita atención"* del tablero.
|
||||
4. **Pruebas controladas:** scripts de consulta y de creación/edición sobre un registro de prueba, y una **prueba observada** con el equipo de Balam antes de habilitar la generación automática en operación (según lo acordado en la sesión del 27 de julio).
|
||||
|
||||
> **El control fiscal no cambia.** La integración crea **cotizaciones, nunca facturas**: se mantiene la cadena acordada — cotización → prefactura → **aprobación humana** → timbrado por el PAC de BIND — con modo de simulación (*dry-run*), feature flag y registro en bitácora. No existe timbrado automático.
|
||||
|
||||
## 3. Qué no incluye
|
||||
|
||||
- **Alta automática de clientes en BIND.** Si el cliente del ticket no existe en BIND, la plataforma lo **detecta y lo notifica**; darlo de alta automáticamente es una decisión de proceso aún abierta y, de aprobarse, se estima por separado.
|
||||
- **Tickets con múltiples facturas.** El supuesto de esta adenda es *un ticket → una cotización*. El manejo del caso masivo (un ticket con un listado de decenas de facturas) se define junto con Balam; si requiere desarrollo adicional, se estima por separado.
|
||||
- **Otros usos de Jira** — reporteo de horas de consultores, tableros sobre otras bandejas o el espacio comercial para pipeline de ventas — así como los módulos diferidos del Anexo B, permanecen fuera del alcance.
|
||||
|
||||
## 4. Estimación e inversión
|
||||
|
||||
| Concepto | Horas | Inversión (MXN) |
|
||||
|---|---|---|
|
||||
| Integración Jira → BIND: lectura de la bandeja FAC, disparador por estatus, cotización automática, trazabilidad y pruebas | 9 – 12 | $5,400 – $7,200 |
|
||||
|
||||
- **Tarifa vigente:** $600 MXN/h + IVA (§3.3). El rango es consistente con la estimación de ~10 h comunicada el 21 de julio y opera bajo el mismo esquema de horas reales **con tope**: al aproximarse al máximo, el trabajo se detiene y se revisa con Balam.
|
||||
- **Facturación:** como el resto de los avances — semanal (viernes) por horas efectivamente trabajadas, con pago a 30 días naturales.
|
||||
- **Efecto en el total de la primera etapa:** de 112 – 136 h ($67,200 – $81,600) pasa a **121 – 148 h ($72,600 – $88,800)**, antes de IVA.
|
||||
|
||||
## 5. Supuestos y dependencias
|
||||
|
||||
1. **Definición del flujo de facturación** por parte de Balam (actualmente en revisión interna; sesión por agendar): de ella salen el estatus disparador y las reglas de prefactura. La implementación de esta adenda inicia una vez cerrada esa definición.
|
||||
2. **Token PAF vigente** con visibilidad de la bandeja FAC (entregado el 27 de julio) y un interlocutor técnico (Pedro) para dudas de Jira, con respuesta en menos de 48 horas.
|
||||
3. **Diagrama del flujo Jira de facturación** en tamaño legible (comprometido por Balam en la sesión del 22 de julio).
|
||||
4. **Bandeja FAC como fuente.** FAC opera como bandeja "padre" del proceso de facturación; si las pruebas muestran que algún disparador nace en otra bandeja sin reflejarse en FAC, el ajuste se revisa en conjunto.
|
||||
5. **Sin ambiente de pruebas de BIND:** toda prueba de escritura será acotada, acordada previamente y observada, como se convino con el CTO.
|
||||
|
||||
## 6. Condiciones
|
||||
|
||||
Todo lo no modificado por esta adenda — condiciones comerciales (§3.3), garantía de 45 días, propiedad del código, metodología de desarrollo y supuestos generales — permanece en los términos de la propuesta v1.2 y del contrato de servicios firmado. La mención de Jira como "fuera de alcance" (§1.3 y Anexo A) queda sustituida por el alcance acotado que esta adenda define.
|
||||
|
||||
## 7. Aceptación
|
||||
|
||||
Conforme a la §10 de la propuesta (control de cambios), esta adenda se ejecuta tras su **aprobación por escrito**; basta la confirmación por correo electrónico. No requiere un nuevo contrato.
|
||||
|
||||
---
|
||||
|
||||
**Johann Velazquez** · Consultor de Software
|
||||
Monterrey, Nuevo León
|
||||
Binary file not shown.
@@ -1,377 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Adenda 01 — Integración Jira → BIND · Balam</title>
|
||||
<style>
|
||||
@font-face{ font-family:"Caladea"; font-style:normal; font-weight:400; src:url("fonts/Caladea-Regular.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:normal; font-weight:700; src:url("fonts/Caladea-Bold.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:italic; font-weight:400; src:url("fonts/Caladea-Italic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:italic; font-weight:700; src:url("fonts/Caladea-BoldItalic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:normal; font-weight:400; src:url("fonts/Carlito-Regular.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:normal; font-weight:700; src:url("fonts/Carlito-Bold.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:italic; font-weight:400; src:url("fonts/Carlito-Italic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:italic; font-weight:700; src:url("fonts/Carlito-BoldItalic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"DejaVu Sans Mono"; font-style:normal; font-weight:400; src:url("fonts/DejaVuSansMono.ttf") format("truetype"); }
|
||||
|
||||
:root{
|
||||
--ink:#1C2B39; /* deep slate navy — headings, dark fields */
|
||||
--ink-2:#3C4A57; /* body text */
|
||||
--muted:#6E7A86; /* meta, captions */
|
||||
--hair:#E4E8EC; /* hairlines */
|
||||
--hair-2:#C9D1D8; /* stronger hairlines */
|
||||
--accent:#BC5B3E; /* terracotta accent */
|
||||
--accent-d:#9A4530; /* darker terracotta for small text */
|
||||
--accent-tint:#FBF1EC;/* pale terracotta wash */
|
||||
--cream:#F8F5F0; /* warm panel */
|
||||
--paper:#FFFFFF;
|
||||
--ok:#2E7D5B;
|
||||
--warn:#C0892E;
|
||||
--no:#B23A48;
|
||||
--serif:'Caladea','Bitstream Charter','DejaVu Serif',Georgia,serif;
|
||||
--sans:'Carlito','DejaVu Sans','Noto Sans',system-ui,sans-serif;
|
||||
--mono:'DejaVu Sans Mono','Liberation Mono',monospace;
|
||||
}
|
||||
|
||||
*{ -webkit-print-color-adjust:exact; print-color-adjust:exact; box-sizing:border-box; }
|
||||
html,body{ margin:0; padding:0; }
|
||||
body{
|
||||
font-family:var(--sans);
|
||||
font-size:10.25pt;
|
||||
line-height:1.55;
|
||||
color:var(--ink-2);
|
||||
background:var(--paper);
|
||||
-webkit-font-smoothing:antialiased;
|
||||
}
|
||||
|
||||
@page{ size:Letter; margin:15mm 16mm 18mm 16mm; }
|
||||
@page :first{ margin:0; }
|
||||
|
||||
p{ margin:6pt 0; }
|
||||
strong,b{ font-weight:700; color:var(--ink); }
|
||||
em,i{ font-style:italic; }
|
||||
a{ color:var(--accent-d); text-decoration:none; }
|
||||
|
||||
code{
|
||||
font-family:var(--mono); font-size:8.6pt;
|
||||
background:var(--cream); border:.5pt solid var(--hair);
|
||||
border-radius:3pt; padding:.5pt 3pt; color:var(--ink);
|
||||
}
|
||||
|
||||
ul,ol{ margin:6pt 0; padding-left:17pt; }
|
||||
li{ margin:3pt 0; line-height:1.5; color:var(--ink-2); padding-left:2pt; }
|
||||
li::marker{ color:var(--accent); }
|
||||
ol li::marker{ color:var(--accent-d); font-weight:700; }
|
||||
|
||||
/* ---------------- COVER ---------------- */
|
||||
.cover{
|
||||
width:216mm; min-height:279mm;
|
||||
background:var(--ink);
|
||||
color:#EAEDF0;
|
||||
padding:30mm 26mm 24mm;
|
||||
display:flex; flex-direction:column;
|
||||
position:relative; overflow:hidden;
|
||||
}
|
||||
.cover::after{ /* faint geometric corner motif */
|
||||
content:""; position:absolute; right:-60mm; top:-60mm;
|
||||
width:150mm; height:150mm; border-radius:50%;
|
||||
background:radial-gradient(circle at center, rgba(188,91,62,.18), rgba(188,91,62,0) 70%);
|
||||
}
|
||||
.cover .top{ position:relative; z-index:2; }
|
||||
.cover .rule{ width:46pt; height:3pt; background:var(--accent); margin-bottom:14pt; }
|
||||
.cover .eyebrow{
|
||||
font-family:var(--sans); font-size:10pt; font-weight:700;
|
||||
letter-spacing:.34em; text-transform:uppercase; color:#D89A82;
|
||||
}
|
||||
.cover .mid{ position:relative; z-index:2; margin-top:auto; margin-bottom:auto; padding:18mm 0; }
|
||||
.cover h1{
|
||||
font-family:var(--serif); font-weight:700;
|
||||
font-size:37pt; line-height:1.06; letter-spacing:-.01em;
|
||||
margin:0; color:#FFFFFF; max-width:150mm;
|
||||
}
|
||||
.cover .client{
|
||||
margin-top:16pt; font-family:var(--sans); font-size:12.5pt; color:#C9D1D8;
|
||||
}
|
||||
.cover .client b{ color:var(--accent); font-weight:700; }
|
||||
.cover .meta{ position:relative; z-index:2; }
|
||||
.cover .meta-grid{
|
||||
display:grid; grid-template-columns:34mm 1fr;
|
||||
gap:7pt 14pt; border-top:.6pt solid rgba(255,255,255,.18);
|
||||
padding-top:14pt;
|
||||
}
|
||||
.cover .meta-grid dt{
|
||||
font-family:var(--sans); font-size:7.5pt; font-weight:700;
|
||||
letter-spacing:.12em; text-transform:uppercase; color:#8FA0AD; padding-top:1.5pt;
|
||||
}
|
||||
.cover .meta-grid dd{ margin:0; font-size:9.5pt; color:#DDE3E8; line-height:1.45; }
|
||||
.cover .meta-grid dd .who{ display:block; }
|
||||
.cover .meta-grid dd .who b{ color:#FFFFFF; font-weight:700; }
|
||||
.cover .meta-grid dd .who span{ color:#9FB0BC; }
|
||||
.cover .conf{
|
||||
position:relative; z-index:2; margin-top:18pt;
|
||||
display:flex; justify-content:space-between; align-items:baseline;
|
||||
font-family:var(--sans); font-size:8pt; letter-spacing:.06em;
|
||||
text-transform:uppercase; color:#7C8B97;
|
||||
border-top:.6pt solid rgba(255,255,255,.12); padding-top:10pt;
|
||||
}
|
||||
.cover .conf .badge{ color:var(--accent); font-weight:700; }
|
||||
|
||||
/* ---------------- TOC ---------------- */
|
||||
.toc{ break-before:page; padding-top:6mm; }
|
||||
.toc h2{
|
||||
font-family:var(--serif); font-size:20pt; color:var(--ink);
|
||||
margin:0 0 2pt; font-weight:700;
|
||||
}
|
||||
.toc .kick{
|
||||
font-family:var(--sans); font-size:8pt; font-weight:700; letter-spacing:.2em;
|
||||
text-transform:uppercase; color:var(--accent-d); margin-bottom:14pt;
|
||||
}
|
||||
.toc .rule{ width:46pt; height:2.5pt; background:var(--accent); margin:6pt 0 16pt; }
|
||||
.toc-row{ display:flex; align-items:baseline; gap:9pt; padding:6.5pt 0; border-bottom:.5pt solid var(--hair); }
|
||||
.toc-row .n{ font-family:var(--serif); font-weight:700; font-size:11pt; color:var(--accent); min-width:24pt; }
|
||||
.toc-row .t{ font-family:var(--serif); font-size:11.5pt; color:var(--ink); }
|
||||
.toc-row.section .t{ font-weight:700; }
|
||||
.toc-row .dots{ flex:1; border-bottom:.6pt dotted var(--hair-2); transform:translateY(-3pt); }
|
||||
.toc-row .pg{ font-family:var(--sans); font-size:9.5pt; color:var(--muted); font-variant-numeric:tabular-nums; min-width:14pt; text-align:right; }
|
||||
.toc-row.annex{ margin-top:2pt; }
|
||||
.toc-row.annex .n,.toc-row.annex .t{ color:var(--ink); }
|
||||
.toc-row.annex .n{ color:var(--accent); }
|
||||
|
||||
/* ---------------- CONTENT ---------------- */
|
||||
.content{ break-before:page; }
|
||||
|
||||
.sec{ margin-top:20pt; }
|
||||
.sec:first-child{ margin-top:0; }
|
||||
.sec-head{
|
||||
display:flex; align-items:baseline; gap:14pt;
|
||||
margin:0 0 9pt; padding-bottom:8pt;
|
||||
border-bottom:1.2pt solid var(--ink); break-after:avoid;
|
||||
}
|
||||
.sec-head.no-num{ gap:0; }
|
||||
.sec-num{
|
||||
font-family:var(--serif); font-size:29pt; font-weight:700;
|
||||
color:var(--accent); line-height:.85; letter-spacing:-.02em; min-width:38pt;
|
||||
}
|
||||
.sec-head h2{
|
||||
font-family:var(--serif); font-size:18pt; font-weight:700;
|
||||
color:var(--ink); line-height:1.12; margin:0;
|
||||
}
|
||||
.sec-head .kick{
|
||||
display:block; font-family:var(--sans); font-size:7.5pt; font-weight:700;
|
||||
letter-spacing:.16em; text-transform:uppercase; color:var(--accent-d); margin-bottom:3pt;
|
||||
}
|
||||
|
||||
h3{ font-family:var(--sans); font-size:11.5pt; font-weight:700; color:var(--ink); margin:15pt 0 5pt; break-after:avoid; }
|
||||
h3 .sn{ color:var(--accent-d); font-weight:700; margin-right:7pt; }
|
||||
h4{ font-family:var(--sans); font-size:10pt; font-weight:700; color:var(--ink); margin:12pt 0 4pt; break-after:avoid; }
|
||||
|
||||
.mini-label{
|
||||
font-family:var(--sans); font-size:8pt; font-weight:700; letter-spacing:.1em;
|
||||
text-transform:uppercase; color:var(--accent-d); margin:10pt 0 4pt;
|
||||
}
|
||||
.lede{ font-size:11pt; line-height:1.62; color:var(--ink); }
|
||||
|
||||
/* drop cap for executive summary */
|
||||
.dropcap > p:first-of-type::first-letter{
|
||||
font-family:var(--serif); font-weight:700; color:var(--accent);
|
||||
font-size:38pt; line-height:.82; float:left; padding:2pt 7pt 0 0;
|
||||
}
|
||||
|
||||
/* ETAPA block */
|
||||
.etapa{ margin:16pt 0 5pt; padding-top:9pt; border-top:.8pt solid var(--hair-2); break-after:avoid; }
|
||||
.etapa .et-t{ font-family:var(--serif); font-size:13pt; font-weight:700; color:var(--ink); line-height:1.2; }
|
||||
.etapa .et-meta{ font-family:var(--sans); font-size:8.5pt; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--accent-d); margin-top:3pt; }
|
||||
|
||||
/* ---------------- TABLES ---------------- */
|
||||
table{ width:100%; border-collapse:collapse; margin:10pt 0; font-size:9.2pt; }
|
||||
thead{ display:table-header-group; }
|
||||
th{
|
||||
text-align:left; font-family:var(--sans); font-weight:700; color:var(--ink);
|
||||
font-size:7.8pt; letter-spacing:.045em; text-transform:uppercase;
|
||||
padding:7pt 9pt; border-bottom:1.4pt solid var(--ink); vertical-align:bottom;
|
||||
}
|
||||
td{ padding:6.5pt 9pt; border-bottom:.6pt solid var(--hair); vertical-align:top; color:var(--ink-2); line-height:1.42; }
|
||||
tr{ break-inside:avoid; }
|
||||
td.k{ color:var(--ink); font-weight:600; }
|
||||
.num,th.num{ text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
|
||||
.ctr,th.ctr{ text-align:center; }
|
||||
tr.total td{ font-weight:700; color:var(--ink); background:var(--cream); border-top:1.2pt solid var(--ink); border-bottom:1.2pt solid var(--ink); }
|
||||
tr.sub-total td{ font-weight:700; color:var(--ink); background:var(--accent-tint); border-top:1pt solid var(--accent); }
|
||||
.cov{ font-size:11pt; text-align:center; line-height:1; }
|
||||
table.compact td,table.compact th{ padding:5.5pt 8pt; }
|
||||
|
||||
/* ---------------- CALLOUTS ---------------- */
|
||||
.callout{
|
||||
break-inside:avoid; background:var(--accent-tint);
|
||||
border-left:3pt solid var(--accent); border-radius:0 4pt 4pt 0;
|
||||
padding:9pt 14pt; margin:11pt 0; font-size:9.4pt; line-height:1.5; color:var(--ink-2);
|
||||
}
|
||||
.callout strong,.callout b{ color:var(--accent-d); }
|
||||
.callout.cool{ background:var(--cream); border-left-color:var(--ink); }
|
||||
.callout.cool strong,.callout.cool b{ color:var(--ink); }
|
||||
|
||||
/* ---------------- FLOW CHIPS ---------------- */
|
||||
.flow{
|
||||
break-inside:avoid; display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
|
||||
gap:6pt; margin:14pt 0; padding:14pt 12pt; background:var(--cream); border-radius:7pt;
|
||||
}
|
||||
.chip{
|
||||
font-family:var(--sans); font-weight:600; font-size:9pt; color:var(--ink);
|
||||
background:#fff; border:.7pt solid var(--hair-2); padding:5pt 11pt; border-radius:20pt;
|
||||
box-shadow:0 1pt 2pt rgba(28,43,57,.05);
|
||||
}
|
||||
.chip.accent{ background:var(--accent); color:#fff; border-color:var(--accent); }
|
||||
.arrow{ color:var(--accent); font-weight:700; font-size:11pt; }
|
||||
|
||||
/* ---------------- SYNTHESIS CARDS ---------------- */
|
||||
.synthesis{ display:grid; grid-template-columns:1fr 1fr; gap:9pt; margin:12pt 0; break-inside:avoid; }
|
||||
.scard{ border:.7pt solid var(--hair); border-top:2.5pt solid var(--accent); border-radius:5pt; padding:9pt 12pt; background:#fff; }
|
||||
.scard .lab{ font-family:var(--sans); font-size:7.3pt; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--accent-d); margin-bottom:3pt; }
|
||||
.scard .big{ font-family:var(--serif); font-size:13pt; font-weight:700; color:var(--ink); line-height:1.15; }
|
||||
.scard .val{ font-size:9pt; color:var(--ink-2); line-height:1.42; }
|
||||
.scard .sm{ font-size:8.2pt; color:var(--muted); margin-top:2pt; }
|
||||
|
||||
/* sign-off */
|
||||
.signoff{ margin-top:24pt; padding-top:14pt; border-top:1.2pt solid var(--ink); break-inside:avoid; }
|
||||
.signoff .nm{ font-family:var(--serif); font-size:14pt; font-weight:700; color:var(--ink); }
|
||||
.signoff .rl{ font-family:var(--sans); font-size:9pt; color:var(--muted); margin-top:2pt; letter-spacing:.03em; }
|
||||
|
||||
hr.div{ border:none; border-top:.6pt solid var(--hair); margin:16pt 0; }
|
||||
.spacer{ height:4pt; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- ============ COVER ============ -->
|
||||
<div class="cover">
|
||||
<div class="top">
|
||||
<div class="rule"></div>
|
||||
<div class="eyebrow">Adenda 01 · Propuesta Comercial</div>
|
||||
</div>
|
||||
|
||||
<div class="mid">
|
||||
<h1>Integración Jira → BIND</h1>
|
||||
<div class="client">Generación automática de cotizaciones desde los tickets de facturación — <b>Balam</b></div>
|
||||
</div>
|
||||
|
||||
<div class="meta">
|
||||
<dl class="meta-grid">
|
||||
<dt>Preparada para</dt>
|
||||
<dd>Noe Rocha (CTO) · Araceli Sánchez Jiménez (CEO/Operaciones) · Erika Chávez (PM) · Pedro Alberto Ayala Elizondo (Contacto técnico)</dd>
|
||||
|
||||
<dt>Preparada por</dt>
|
||||
<dd>Johann Velazquez — Consultor de Software · Monterrey, N.L.</dd>
|
||||
|
||||
<dt>Fecha</dt>
|
||||
<dd>28 de julio de 2026</dd>
|
||||
|
||||
<dt>Referencia</dt>
|
||||
<dd>Propuesta Comercial v1.2 · Contrato de servicios firmado el 26-jun-2026 · §10 — Control de cambios</dd>
|
||||
|
||||
<dt>Vigencia</dt>
|
||||
<dd>30 días naturales a partir de la fecha de emisión</dd>
|
||||
</dl>
|
||||
|
||||
<div class="conf">
|
||||
<span class="badge">Documento confidencial</span>
|
||||
<span>Adenda a la propuesta v1.2 — no sustituye al contrato</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ CONTENT ============ -->
|
||||
<main class="content">
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">01</div><div><h2>Antecedente</h2></div></div>
|
||||
|
||||
<p>La propuesta v1.2 dejó Jira explícitamente <strong>fuera del alcance</strong> del MVP (§1.3 y Anexo A.4), conforme a la información disponible al momento de cotizar. Durante el Discovery y las sesiones de julio, la dirección confirmó que el proceso interno evolucionó: <strong>hoy todo el flujo de facturación de Balam nace y se gobierna en Jira</strong> — <em>"lo que no está en Jira no se procesa"</em> — con una bandeja dedicada (<strong>Facturación</strong>, llave <code>FAC-</code>) y un flujo de estatus formal que culmina en "resuelto".</p>
|
||||
|
||||
<p>En la sesión del 22 de julio el CTO planteó incorporar esta conectividad como ajuste de alcance; en la validación del prototipo del 24 de julio se ratificó, y en la sesión técnica del 27 de julio con Pedro Ayala quedó confirmada la viabilidad: la API de Jira cubre <strong>lectura y escritura</strong> de tickets, se entregó el token de integración (<strong>"PAF"</strong>, vigente al 27-jul-2027) y se documentaron los límites de consumo del lado de Atlassian. La estimación preliminar (~10 h) se comunicó a la PM el 21 de julio; esta adenda la formaliza por escrito, como lo prevé el control de cambios de la propuesta.</p>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">02</div><div><h2>Alcance del cambio</h2></div></div>
|
||||
|
||||
<p>La integración agrega a la primera etapa las siguientes capacidades:</p>
|
||||
|
||||
<ol>
|
||||
<li><strong>Conexión con la API de Jira</strong> mediante el token PAF y lectura de los tickets de la bandeja <strong>Facturación (<code>FAC-</code>)</strong>, con consumo autorregulado conforme a los límites de velocidad documentados por Atlassian.</li>
|
||||
<li><strong>Generación automática de la cotización en BIND</strong> cuando un ticket alcanza el estatus disparador que Balam defina (candidato natural: la entrada del ticket al proceso de facturación, previo a "resuelto"), a través de la misma <strong>capa de escritura controlada</strong> del MVP.</li>
|
||||
<li><strong>Trazabilidad ticket ↔ cotización ↔ prefactura/factura</strong>, visible en la plataforma y registrada en la bitácora de auditoría. Los tickets leídos alimentan además la vista <em>"qué necesita atención"</em> del tablero.</li>
|
||||
<li><strong>Pruebas controladas:</strong> scripts de consulta y de creación/edición sobre un registro de prueba, y una <strong>prueba observada</strong> con el equipo de Balam antes de habilitar la generación automática en operación (según lo acordado en la sesión del 27 de julio).</li>
|
||||
</ol>
|
||||
|
||||
<div class="flow">
|
||||
<span class="chip">Ticket Jira <small>(FAC)</small></span><span class="arrow">→</span>
|
||||
<span class="chip accent">Cotización BIND <small>(automática)</small></span><span class="arrow">→</span>
|
||||
<span class="chip">Prefactura</span><span class="arrow">→</span>
|
||||
<span class="chip">Aprobación humana</span><span class="arrow">→</span>
|
||||
<span class="chip">Timbrado <small>(PAC de BIND)</small></span>
|
||||
</div>
|
||||
|
||||
<div class="callout"><strong>El control fiscal no cambia.</strong> La integración crea <strong>cotizaciones, nunca facturas</strong>: se mantiene la cadena acordada — cotización → prefactura → <strong>aprobación humana</strong> → timbrado por el PAC de BIND — con modo de simulación (<em>dry-run</em>), feature flag y registro en bitácora. No existe timbrado automático.</div>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">03</div><div><h2>Qué no incluye</h2></div></div>
|
||||
|
||||
<ul>
|
||||
<li><strong>Alta automática de clientes en BIND.</strong> Si el cliente del ticket no existe en BIND, la plataforma lo <strong>detecta y lo notifica</strong>; darlo de alta automáticamente es una decisión de proceso aún abierta y, de aprobarse, se estima por separado.</li>
|
||||
<li><strong>Tickets con múltiples facturas.</strong> El supuesto de esta adenda es <em>un ticket → una cotización</em>. El manejo del caso masivo (un ticket con un listado de decenas de facturas) se define junto con Balam; si requiere desarrollo adicional, se estima por separado.</li>
|
||||
<li><strong>Otros usos de Jira</strong> — reporteo de horas de consultores, tableros sobre otras bandejas o el espacio comercial para pipeline de ventas — así como los módulos diferidos del Anexo B, permanecen fuera del alcance.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">04</div><div><h2>Estimación e inversión</h2></div></div>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>Concepto</th><th class="num">Horas</th><th class="num">Inversión (MXN)</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td class="k">Primera etapa — propuesta v1.2 (Etapas 0 a 3)</td><td class="num">112 – 136</td><td class="num">$67,200 – $81,600</td></tr>
|
||||
<tr><td class="k">Adenda 01 — Integración Jira → BIND: lectura de la bandeja FAC, disparador por estatus, cotización automática, trazabilidad y pruebas</td><td class="num">9 – 12</td><td class="num">$5,400 – $7,200</td></tr>
|
||||
<tr class="total"><td>Total de la primera etapa con adenda</td><td class="num">121 – 148</td><td class="num">$72,600 – $88,800</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ul>
|
||||
<li><strong>Tarifa vigente:</strong> $600 MXN/h + IVA (§3.3). El rango es consistente con la estimación de ~10 h comunicada el 21 de julio y opera bajo el mismo esquema de horas reales <strong>con tope</strong>: al aproximarse al máximo, el trabajo se detiene y se revisa con Balam.</li>
|
||||
<li><strong>Facturación:</strong> como el resto de los avances — semanal (viernes) por horas efectivamente trabajadas, con pago a 30 días naturales.</li>
|
||||
<li>Cifras antes de IVA.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">05</div><div><h2>Supuestos y dependencias</h2></div></div>
|
||||
|
||||
<ol>
|
||||
<li><strong>Definición del flujo de facturación</strong> por parte de Balam (actualmente en revisión interna; sesión por agendar): de ella salen el estatus disparador y las reglas de prefactura. La implementación de esta adenda inicia una vez cerrada esa definición.</li>
|
||||
<li><strong>Token PAF vigente</strong> con visibilidad de la bandeja FAC (entregado el 27 de julio) y un interlocutor técnico (Pedro) para dudas de Jira, con respuesta en menos de 48 horas.</li>
|
||||
<li><strong>Diagrama del flujo Jira de facturación</strong> en tamaño legible (comprometido por Balam en la sesión del 22 de julio).</li>
|
||||
<li><strong>Bandeja FAC como fuente.</strong> FAC opera como bandeja "padre" del proceso de facturación; si las pruebas muestran que algún disparador nace en otra bandeja sin reflejarse en FAC, el ajuste se revisa en conjunto.</li>
|
||||
<li><strong>Sin ambiente de pruebas de BIND:</strong> toda prueba de escritura será acotada, acordada previamente y observada, como se convino con el CTO.</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">06</div><div><h2>Condiciones</h2></div></div>
|
||||
|
||||
<p>Todo lo no modificado por esta adenda — condiciones comerciales (§3.3), garantía de 45 días, propiedad del código, metodología de desarrollo y supuestos generales — permanece en los términos de la propuesta v1.2 y del contrato de servicios firmado. La mención de Jira como "fuera de alcance" (§1.3 y Anexo A) queda sustituida por el alcance acotado que esta adenda define.</p>
|
||||
</section>
|
||||
|
||||
<section class="sec">
|
||||
<div class="sec-head"><div class="sec-num">07</div><div><h2>Aceptación</h2></div></div>
|
||||
|
||||
<p>Conforme a la §10 de la propuesta (control de cambios), esta adenda se ejecuta tras su <strong>aprobación por escrito</strong>; basta la confirmación por correo electrónico. No requiere un nuevo contrato.</p>
|
||||
|
||||
<div class="signoff">
|
||||
<div class="nm">Johann Velazquez</div>
|
||||
<div class="rl">Consultor de Software · Monterrey, Nuevo León</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -4,6 +4,16 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>Propuesta Comercial — Plataforma de Automatización Financiera · Balam</title>
|
||||
<style>
|
||||
@font-face{ font-family:"Caladea"; font-style:normal; font-weight:400; src:url("fonts/Caladea-Regular.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:normal; font-weight:700; src:url("fonts/Caladea-Bold.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:italic; font-weight:400; src:url("fonts/Caladea-Italic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Caladea"; font-style:italic; font-weight:700; src:url("fonts/Caladea-BoldItalic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:normal; font-weight:400; src:url("fonts/Carlito-Regular.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:normal; font-weight:700; src:url("fonts/Carlito-Bold.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:italic; font-weight:400; src:url("fonts/Carlito-Italic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"Carlito"; font-style:italic; font-weight:700; src:url("fonts/Carlito-BoldItalic.ttf") format("truetype"); }
|
||||
@font-face{ font-family:"DejaVu Sans Mono"; font-style:normal; font-weight:400; src:url("fonts/DejaVuSansMono.ttf") format("truetype"); }
|
||||
|
||||
:root{
|
||||
--ink:#1C2B39; /* deep slate navy — headings, dark fields */
|
||||
--ink-2:#3C4A57; /* body text */
|
||||
@@ -212,6 +222,8 @@
|
||||
}
|
||||
.chip.accent{ background:var(--accent); color:#fff; border-color:var(--accent); }
|
||||
.arrow{ color:var(--accent); font-weight:700; font-size:11pt; }
|
||||
.aw{ font-family:var(--sans); } /* flechas →/↔ en títulos serif (Caladea no trae el glifo) */
|
||||
.keep{ break-inside:avoid; }
|
||||
|
||||
/* ---------------- SYNTHESIS CARDS ---------------- */
|
||||
.synthesis{ display:grid; grid-template-columns:1fr 1fr; gap:9pt; margin:12pt 0; break-inside:avoid; }
|
||||
@@ -250,10 +262,10 @@
|
||||
<dd>Johann Velazquez — Consultor de Software · Monterrey, N.L.</dd>
|
||||
|
||||
<dt>Fecha</dt>
|
||||
<dd>29 de mayo de 2026</dd>
|
||||
<dd>29 de mayo de 2026 · actualizada el 28 de julio de 2026</dd>
|
||||
|
||||
<dt>Versión</dt>
|
||||
<dd>1.2 — ajustes comerciales acordados 1-jul-2026</dd>
|
||||
<dd>1.3 — integración Jira → BIND incorporada al alcance (§10, control de cambios), 28-jul-2026 · base: v1.2 (1-jul-2026)</dd>
|
||||
|
||||
<dt>Vigencia</dt>
|
||||
<dd>30 días naturales a partir de la fecha de emisión</dd>
|
||||
@@ -284,7 +296,7 @@
|
||||
<div class="toc-row section"><span class="n">09</span><span class="t">Fuera del alcance de esta etapa</span><span class="dots"></span><span class="pg">{{PG_9}}</span></div>
|
||||
<div class="toc-row section"><span class="n">10</span><span class="t">Garantía y condiciones generales</span><span class="dots"></span><span class="pg">{{PG_10}}</span></div>
|
||||
<div class="toc-row section"><span class="n">11</span><span class="t">Próximos pasos</span><span class="dots"></span><span class="pg">{{PG_11}}</span></div>
|
||||
<div class="toc-row annex"><span class="n">A</span><span class="t">Anexo A — Trazabilidad PRD ↔ MVP</span><span class="dots"></span><span class="pg">{{PG_anexoA}}</span></div>
|
||||
<div class="toc-row annex"><span class="n">A</span><span class="t">Anexo A — Trazabilidad PRD <span class="aw">↔</span> MVP</span><span class="dots"></span><span class="pg">{{PG_anexoA}}</span></div>
|
||||
<div class="toc-row annex"><span class="n">B</span><span class="t">Anexo B — Cotización indicativa de fases posteriores</span><span class="dots"></span><span class="pg">{{PG_anexoB}}</span></div>
|
||||
</div>
|
||||
|
||||
@@ -299,23 +311,23 @@
|
||||
<p>Balam opera hoy un proceso financiero fragmentado: facturación, cobranza, conciliación y contabilidad viven en sistemas que no se comunican, y el trabajo de unirlos recae en personas. Cada traspaso manual introduce error, retrabajo y demoras de cobranza que erosionan la relación con los clientes estratégicos.</p>
|
||||
</div>
|
||||
|
||||
<p>Esta propuesta plantea una <strong>primera etapa enfocada</strong>: una plataforma web que centraliza la facturación y las cuentas por cobrar sobre <strong>BIND ERP</strong>, el sistema ya confirmado como fuente de verdad. El MVP permite <strong>emitir facturas en MXN y USD</strong> desde la plataforma —creando la cotización y convirtiéndola en factura a través de la API de BIND, que conserva el timbrado CFDI— y entrega además visibilidad, dashboard, alertas y reglas de cobranza. Toda emisión opera con <strong>confirmación humana y modo de simulación</strong>, de modo que la prioridad #1 de Balam (facturación) se atiende sin asumir riesgos fiscales. La arquitectura queda preparada para incorporar conciliación bancaria, pagos en línea, contabilidad e integraciones adicionales conforme se validen.</p>
|
||||
<p>Esta propuesta plantea una <strong>primera etapa enfocada</strong>: una plataforma web que centraliza la facturación y las cuentas por cobrar sobre <strong>BIND ERP</strong>, el sistema ya confirmado como fuente de verdad. El MVP permite <strong>emitir facturas en MXN y USD</strong> desde la plataforma —creando la cotización y convirtiéndola en factura a través de la API de BIND, que conserva el timbrado CFDI— y entrega además visibilidad, dashboard, alertas y reglas de cobranza. Toda emisión opera con <strong>confirmación humana y modo de simulación</strong>, de modo que la prioridad #1 de Balam (facturación) se atiende sin asumir riesgos fiscales. Con el <strong>ajuste de julio de 2026</strong>, el alcance incorpora además la <strong>integración con Jira</strong>: los tickets de la bandeja de Facturación generan automáticamente su cotización en BIND, conservando los mismos candados de control. La arquitectura queda preparada para incorporar conciliación bancaria, pagos en línea, contabilidad e integraciones adicionales conforme se validen.</p>
|
||||
|
||||
<p class="mini-label">En síntesis</p>
|
||||
<div class="synthesis">
|
||||
<div class="scard">
|
||||
<div class="lab">Alcance</div>
|
||||
<div class="val">MVP de facturación (consulta y <strong>emisión asistida</strong> MXN/USD) y cobranza sobre la API de BIND ERP.</div>
|
||||
<div class="val">MVP de facturación (consulta y <strong>emisión asistida</strong> MXN/USD) y cobranza sobre la API de BIND ERP, más la <strong>integración acotada con Jira</strong> (generación automática de cotizaciones desde la bandeja de Facturación — ajuste jul-2026).</div>
|
||||
</div>
|
||||
<div class="scard">
|
||||
<div class="lab">Plazo</div>
|
||||
<div class="big">6 a 7 semanas</div>
|
||||
<div class="big">6 a 8 semanas</div>
|
||||
<div class="sm">a media dedicación.</div>
|
||||
</div>
|
||||
<div class="scard">
|
||||
<div class="lab">Inversión</div>
|
||||
<div class="big">$67,200 – $81,600 MXN</div>
|
||||
<div class="sm">+ IVA · tiempo y materiales con tope por etapa.</div>
|
||||
<div class="big">$72,600 – $88,800 MXN</div>
|
||||
<div class="sm">+ IVA · tiempo y materiales con tope por etapa · incluye el ajuste Jira → BIND (9 – 12 h).</div>
|
||||
</div>
|
||||
<div class="scard">
|
||||
<div class="lab">Modelo</div>
|
||||
@@ -323,7 +335,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>El enfoque responde directamente a la indicación del CTO de priorizar facturación e integrar únicamente BIND en esta primera fase, evitando comprometer alcance que dependa de integraciones aún no disponibles o no prioritarias.</p>
|
||||
<p>El enfoque responde directamente a la indicación del CTO de priorizar facturación y BIND en esta primera fase, evitando comprometer alcance que dependa de integraciones aún no disponibles o no prioritarias. La integración con Jira —originalmente diferida— se incorporó en julio de 2026 como ajuste de alcance, una vez que la propia dirección confirmó que el proceso de facturación se gobierna en Jira y que su API cubre lo necesario.</p>
|
||||
</section>
|
||||
|
||||
<!-- ===== 1. ENTENDIMIENTO DEL PROYECTO ===== -->
|
||||
@@ -334,11 +346,12 @@
|
||||
<p>Durante la sesión con el equipo directivo, la lectura del requerimiento fue clara: <em>"El proceso está tan desvinculado… pasa por varias manos… cada parte humana se está equivocando."</em> El reto no es de naturaleza técnica, sino operativa y económica. Cada traspaso manual entre nómina, facturación, cobranza, conciliación y contabilidad genera errores que se traducen en dinero perdido, retrabajo y deterioro en la relación con clientes clave.</p>
|
||||
|
||||
<h3><span class="sn">1.2</span>Contexto que define el alcance</h3>
|
||||
<p>Tras la sesión de seguimiento y las actualizaciones del CTO del 25 de mayo, tres factores reordenan el alcance del MVP:</p>
|
||||
<p>Tras la sesión de seguimiento y las actualizaciones del CTO del 25 de mayo, cuatro factores reordenan el alcance del MVP:</p>
|
||||
<ol>
|
||||
<li><strong>BIND ERP cuenta con API oficial</strong> (<code>api.bind.com.mx</code>, OData v3, 20,000 solicitudes/día). Esto permite una integración por API en tiempo cercano a real, superando el supuesto inicial de exportación manual de archivos.</li>
|
||||
<li><strong>La dirección técnica priorizó la facturación.</strong> Conforme a la indicación de considerar "únicamente BIND ERP en una primera etapa", funcionalidades como pagos en línea, conciliación bancaria, recordatorios automáticos a clientes y asientos contables se difieren de manera explícita a fases posteriores.</li>
|
||||
<li><strong>BUK dispone de API</strong>, confirmada por el equipo de Balam, aunque no constituye una prioridad inmediata. Queda contemplada en el roadmap sin condicionar el MVP.</li>
|
||||
<li><strong>El proceso interno evolucionó hacia Jira</strong> (confirmado por la dirección en julio de 2026): hoy todo el flujo de facturación nace y se gobierna en Jira — <em>"lo que no está en Jira no se procesa"</em> — con una bandeja dedicada (<strong>Facturación</strong>, llave <code>FAC-</code>) y un flujo de estatus formal. Por ello, la integración con Jira se incorporó al alcance como <strong>ajuste conforme al control de cambios</strong> (§10), detallado en la §2.</li>
|
||||
</ol>
|
||||
|
||||
<h3><span class="sn">1.3</span>Sistemas actuales</h3>
|
||||
@@ -347,7 +360,7 @@
|
||||
<tbody>
|
||||
<tr><td class="k">BIND ERP</td><td>Facturación y contabilidad con PAC integrado</td><td>Integración principal (API confirmada)</td></tr>
|
||||
<tr><td class="k">BUK</td><td>Recursos humanos, contratos, nómina</td><td>Fuera de alcance (API disponible, fase posterior)</td></tr>
|
||||
<tr><td class="k">Jira</td><td>Gestión de proyectos y servicios</td><td>Fuera de alcance</td></tr>
|
||||
<tr><td class="k">Jira</td><td>Gestión de proyectos y servicios; origen operativo del proceso de facturación</td><td><strong>Integración acotada (ajuste jul-2026):</strong> lectura de la bandeja Facturación y generación automática de cotizaciones en BIND</td></tr>
|
||||
<tr><td class="k">Banca (3 instituciones)</td><td>2 México + IBC Bank Texas, estados en PDF</td><td>Fuera de alcance</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -358,6 +371,7 @@
|
||||
<p><strong>Alcance funcional del MVP:</strong></p>
|
||||
<ul>
|
||||
<li>Integración con BIND ERP vía API: lectura primero y <strong>escritura asistida</strong> una vez validada en Discovery.</li>
|
||||
<li><strong>Integración con Jira (ajuste jul-2026):</strong> lectura de los tickets de la bandeja <strong>Facturación (<code>FAC-</code>)</strong> y generación automática de la cotización en BIND al alcanzar el estatus disparador que Balam defina, mediante la misma capa de escritura controlada y con trazabilidad ticket ↔ cotización ↔ factura.</li>
|
||||
<li><strong>Emisión de facturas desde la plataforma:</strong> creación de cotización y conversión a factura en MXN (con IVA) y USD (sin IVA, para clientes extranjeros) a través de la API de BIND, con timbrado a cargo del PAC de BIND, confirmación humana obligatoria y modo de simulación (<em>dry-run</em>) previo a cada emisión.</li>
|
||||
<li>Catálogo central de clientes con lista blanca configurable (ACUNTIA + Top 3).</li>
|
||||
<li>Vista unificada de facturación: estados, vencimientos, filtros y descarga de PDF/XML.</li>
|
||||
@@ -393,6 +407,7 @@
|
||||
<li>Reducción medible del trabajo manual de consulta y reporteo sobre BIND.</li>
|
||||
<li>Aplicación correcta de la lista blanca: ACUNTIA y Top 3 nunca reciben recordatorios automáticos masivos.</li>
|
||||
<li>Entrega del MVP funcional en el plazo comprometido, con alcance acotado y sin desviaciones.</li>
|
||||
<li>Trazabilidad ticket de Jira → cotización → factura sin captura manual duplicada, una vez definido el flujo de facturación.</li>
|
||||
<li>Control fiscal: ninguna factura se emite sin confirmación humana explícita; el timbrado CFDI permanece a cargo del PAC de BIND.</li>
|
||||
</ul>
|
||||
|
||||
@@ -432,7 +447,7 @@
|
||||
|
||||
<div class="callout"><strong>Sobre las versiones.</strong> Las versiones indicadas son la referencia vigente a mayo de 2026; se fijan al inicio del proyecto sobre la rama estable/LTS de cada tecnología. Se prioriza <strong>.NET 10</strong> por ser versión de soporte extendido (LTS), apropiada para una aplicación financiera de largo plazo.</div>
|
||||
|
||||
<p>El proyecto se organiza en cuatro etapas secuenciales. Cada una concluye con un entregable demostrable y se factura conforme a horas reales (ver §3).</p>
|
||||
<p>El proyecto se organiza en cuatro etapas secuenciales, más el <strong>ajuste Jira → BIND</strong> incorporado en julio de 2026 (al final de esta sección). Cada bloque concluye con un entregable demostrable y se factura conforme a horas reales (ver §3).</p>
|
||||
|
||||
<div class="etapa"><div class="et-t">Etapa 0 — Discovery, infraestructura y prototipo visual</div><div class="et-meta">Semana 1 · 18 – 22 h</div></div>
|
||||
<p><strong>Objetivo.</strong> Validar el comportamiento real de la API de BIND con la cuenta de Balam, preparar la infraestructura en Azure, dejar el repositorio operativo y <strong>entregar un prototipo visual navegable</strong> que alinee expectativas de producto antes de iniciar el desarrollo del backend.</p>
|
||||
@@ -496,6 +511,32 @@
|
||||
<li>Transferencia y soporte posterior al lanzamiento de 2 semanas (corrección de defectos).</li>
|
||||
</ul>
|
||||
<div class="callout cool"><strong>Fuera de esta etapa:</strong> recordatorios automáticos a clientes, pagos en línea, conciliación bancaria, asientos contables automáticos e integración bancaria en vivo.</div>
|
||||
|
||||
<div class="etapa"><div class="et-t">Integración Jira <span class="aw">→</span> BIND — ajuste de alcance (jul-2026)</div><div class="et-meta">Se ejecuta junto con las Etapas 2-3 · 9 – 12 h</div></div>
|
||||
|
||||
<p><strong>Antecedente.</strong> La versión anterior de esta propuesta dejó Jira fuera del alcance conforme a la información disponible al cotizar. En las sesiones del 22, 24 y 27 de julio la dirección confirmó que el proceso interno evolucionó — todo el flujo de facturación nace y se gobierna en Jira — y quedó confirmada la viabilidad técnica: la API de Jira cubre lectura y escritura de tickets, se entregó el token de integración (<strong>"PAF"</strong>, vigente al 27-jul-2027) y se documentaron los límites de consumo de Atlassian. La estimación (~10 h) se comunicó a la PM el 21 de julio; esta sección la formaliza conforme al control de cambios (§10).</p>
|
||||
|
||||
<p><strong>Entregables:</strong></p>
|
||||
<ul>
|
||||
<li><strong>Conexión con la API de Jira</strong> mediante el token PAF y lectura de los tickets de la bandeja <strong>Facturación (<code>FAC-</code>)</strong>, con consumo autorregulado conforme a los límites de velocidad documentados por Atlassian.</li>
|
||||
<li><strong>Generación automática de la cotización en BIND</strong> cuando un ticket alcanza el estatus disparador que Balam defina (candidato natural: la entrada del ticket al proceso de facturación, previo a "resuelto"), a través de la misma capa de escritura controlada del MVP.</li>
|
||||
<li><strong>Trazabilidad ticket ↔ cotización ↔ prefactura/factura</strong>, visible en la plataforma y registrada en la bitácora de auditoría; los tickets leídos alimentan además la vista <em>"qué necesita atención"</em> del tablero.</li>
|
||||
<li><strong>Pruebas controladas:</strong> scripts de consulta y de creación/edición sobre un registro de prueba, y una <strong>prueba observada</strong> con el equipo de Balam antes de habilitar la generación automática en operación.</li>
|
||||
</ul>
|
||||
|
||||
<div class="flow">
|
||||
<span class="chip">Ticket Jira <small>(FAC)</small></span><span class="arrow">→</span>
|
||||
<span class="chip accent">Cotización BIND <small>(automática)</small></span><span class="arrow">→</span>
|
||||
<span class="chip">Prefactura</span><span class="arrow">→</span>
|
||||
<span class="chip">Aprobación humana</span><span class="arrow">→</span>
|
||||
<span class="chip">Timbrado <small>(PAC de BIND)</small></span>
|
||||
</div>
|
||||
|
||||
<div class="callout"><strong>El control fiscal no cambia.</strong> La integración crea <strong>cotizaciones, nunca facturas</strong>: se mantiene la cadena acordada — cotización → prefactura → <strong>aprobación humana</strong> → timbrado por el PAC de BIND — con modo de simulación (<em>dry-run</em>), feature flag y registro en bitácora. No existe timbrado automático.</div>
|
||||
|
||||
<p><strong>No incluye:</strong> (a) el <strong>alta automática de clientes en BIND</strong> — si el cliente del ticket no existe, la plataforma lo detecta y lo notifica; darlo de alta automáticamente es una decisión de proceso abierta que, de aprobarse, se estima por separado; (b) <strong>tickets con múltiples facturas</strong> — el supuesto es <em>un ticket → una cotización</em>; el manejo del caso masivo se define junto con Balam y, si requiere desarrollo adicional, se estima por separado; (c) <strong>otros usos de Jira</strong> (reporteo de horas de consultores, tableros sobre otras bandejas, espacio comercial) y los módulos del Anexo B.</p>
|
||||
|
||||
<div class="callout cool"><strong>Dependencia clave.</strong> La implementación inicia una vez que Balam cierre la <strong>definición del flujo de facturación</strong> (en revisión interna), de la cual salen el estatus disparador y las reglas de prefactura.</div>
|
||||
</section>
|
||||
<!-- ===== 3. MODELO DE COLABORACIÓN ===== -->
|
||||
<section class="sec">
|
||||
@@ -512,7 +553,7 @@
|
||||
</ul>
|
||||
|
||||
<h3><span class="sn">3.2</span>Dedicación y plazo</h3>
|
||||
<p>La dedicación es de <strong>media jornada (aproximadamente 20 h/semana</strong>, con flexibilidad hasta 25 h en semanas de mayor carga). Sobre esa base, la primera etapa requiere <strong>112 a 136 horas</strong>, equivalentes a <strong>6 – 7 semanas</strong> de calendario.</p>
|
||||
<p>La dedicación es de <strong>media jornada (aproximadamente 20 h/semana</strong>, con flexibilidad hasta 25 h en semanas de mayor carga). Sobre esa base, la primera etapa requiere <strong>121 a 148 horas</strong> (incluido el ajuste Jira → BIND), equivalentes a <strong>6 – 8 semanas</strong> de calendario.</p>
|
||||
|
||||
<h3><span class="sn">3.3</span>Tarifa y facturación</h3>
|
||||
<ul>
|
||||
@@ -546,6 +587,7 @@
|
||||
<div class="sec-head"><div class="sec-num">04</div><div><h2>Inversión</h2></div></div>
|
||||
<p>La inversión de la primera etapa se desglosa por entregable, conforme al esquema de tiempo y materiales:</p>
|
||||
|
||||
<div class="keep">
|
||||
<table>
|
||||
<thead><tr><th>Etapa</th><th>Entregable principal</th><th class="num">Rango (horas)</th><th class="num">Inversión (MXN)</th></tr></thead>
|
||||
<tbody>
|
||||
@@ -553,11 +595,13 @@
|
||||
<tr><td class="k ctr">1</td><td>Plataforma base, sincronización con BIND y capa de escritura</td><td class="num">32 – 39</td><td class="num">$19,200 – $23,400</td></tr>
|
||||
<tr><td class="k ctr">2</td><td>Facturación (consulta y <strong>emisión</strong> MXN/USD), catálogo y multimoneda</td><td class="num">38 – 46</td><td class="num">$22,800 – $27,600</td></tr>
|
||||
<tr><td class="k ctr">3</td><td>Cobranza, tablero, reportes y cierre</td><td class="num">24 – 29</td><td class="num">$14,400 – $17,400</td></tr>
|
||||
<tr class="total"><td colspan="2">Total primera etapa</td><td class="num">112 – 136 h</td><td class="num">$67,200 – $81,600</td></tr>
|
||||
<tr><td class="k ctr">Ajuste</td><td><strong>Integración Jira → BIND</strong> (lectura de la bandeja FAC, cotización automática, trazabilidad y pruebas) — jul-2026</td><td class="num">9 – 12</td><td class="num">$5,400 – $7,200</td></tr>
|
||||
<tr class="total"><td colspan="2">Total primera etapa</td><td class="num">121 – 148 h</td><td class="num">$72,600 – $88,800</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="callout cool">Cifras antes de IVA. Plazo estimado: <strong>6 – 7 semanas</strong> a media jornada (~20 h/semana, con flexibilidad hasta 25 h en semanas pico).</div>
|
||||
<div class="callout cool">Cifras antes de IVA. Plazo estimado: <strong>6 – 8 semanas</strong> a media jornada (~20 h/semana, con flexibilidad hasta 25 h en semanas pico). <strong>El ajuste Jira → BIND</strong> se incorporó conforme al control de cambios (§10) a partir de la confirmación de julio de 2026 (ver §2); el rango es consistente con la estimación de ~10 h comunicada el 21 de julio y su ejecución inicia una vez que Balam cierre la definición del flujo de facturación.</div>
|
||||
<div class="callout">El esquema de control por etapa busca que la inversión se concentre en la parte baja del rango; el margen superior cubre eventualidades del Discovery con BIND. Toda variación se comunica antes de incurrir en ella.</div>
|
||||
</section>
|
||||
|
||||
@@ -601,7 +645,7 @@
|
||||
<tr><td class="k">Azure Key Vault + Application Insights</td><td>Secretos (Standard) + observabilidad (5 GB/mes incluidos, luego por GB)</td><td class="num">$0 – $15</td></tr>
|
||||
<tr><td class="k">Monitoreo de disponibilidad / Sentry <em>(opcional)</em></td><td>Plan gratuito → Team</td><td class="num">$0 – $26</td></tr>
|
||||
<tr><td class="k">PAC para CFDI</td><td>Ya incluido en BIND</td><td class="num">Sin costo adicional</td></tr>
|
||||
<tr class="total"><td colspan="2">Total mensual estimado</td><td class="num">$30 – $160 USD/mes</td></tr>
|
||||
<tr class="total"><td colspan="2">Total mensual estimado</td><td class="num">$30 – $162 USD/mes</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -628,6 +672,8 @@
|
||||
<li><strong>Acuerdo de uso de la metodología asistida por IA</strong>, con el compromiso de no entrenamiento sobre datos del cliente.</li>
|
||||
<li><strong>El PAC integrado de BIND</strong> atiende los volúmenes actuales y futuros sin costo adicional; el timbrado CFDI permanece a cargo de BIND, no de la plataforma.</li>
|
||||
<li><strong>El comportamiento de escritura de la API de BIND</strong> (creación de cotización, conversión a factura y timbrado) se valida en Discovery; la emisión productiva se habilita únicamente tras esa validación. Balam designa al rol responsable de confirmar cada emisión.</li>
|
||||
<li><strong>Token de Jira ("PAF") vigente</strong> con visibilidad de la bandeja Facturación (<code>FAC-</code>), que opera como bandeja "padre" del proceso; si algún disparador nace en otra bandeja sin reflejarse en FAC, el ajuste se revisa en conjunto. Entregado el 27-jul-2026.</li>
|
||||
<li><strong>Definición del flujo de facturación</strong> cerrada por Balam (estatus disparador y reglas de prefactura) y <strong>diagrama del flujo Jira en tamaño legible</strong> entregado, antes de iniciar la implementación del ajuste Jira → BIND.</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
@@ -677,7 +723,8 @@
|
||||
<ol>
|
||||
<li>Firma del contrato u orden de trabajo (prestación de servicios y confidencialidad).</li>
|
||||
<li>Emisión de la primera factura por 30 horas de arranque (<strong>$18,000 MXN</strong> + IVA) e inicio del Discovery; pago a 30 días naturales.</li>
|
||||
<li>Arranque del proyecto, con entrega del MVP en <strong>6 – 7 semanas</strong>.</li>
|
||||
<li>Arranque del proyecto, con entrega del MVP en <strong>6 – 8 semanas</strong>.</li>
|
||||
<li><strong>Aprobación por escrito de la versión 1.3</strong> (basta la confirmación por correo electrónico) para ejecutar el ajuste Jira → BIND de 9 – 12 h una vez definido el flujo de facturación.</li>
|
||||
</ol>
|
||||
|
||||
<div class="signoff">
|
||||
@@ -687,7 +734,7 @@
|
||||
</section>
|
||||
<!-- ===== ANEXO A — TRAZABILIDAD PRD ↔ MVP ===== -->
|
||||
<section class="sec" style="break-before:page;">
|
||||
<div class="sec-head"><div class="sec-num">A</div><div><span class="kick">Anexo</span><h2>Trazabilidad PRD ↔ MVP</h2></div></div>
|
||||
<div class="sec-head"><div class="sec-num">A</div><div><span class="kick">Anexo</span><h2>Trazabilidad PRD <span class="aw">↔</span> MVP</h2></div></div>
|
||||
|
||||
<p class="lede">Este anexo relaciona cada funcionalidad y requerimiento del <strong>PRD de Balam</strong> con el alcance comprometido en la primera etapa, como referencia para alinear expectativas sobre lo incluido, lo parcial y lo diferido.</p>
|
||||
|
||||
@@ -701,7 +748,7 @@
|
||||
<table>
|
||||
<thead><tr><th>Funcionalidad PRD</th><th class="ctr" style="width:62pt;">Cobertura</th><th>Detalle</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td class="k">Generación automatizada de facturas</td><td class="cov">⚠️</td><td><strong>Incluida la creación asistida:</strong> cotización → factura desde la plataforma vía API de BIND, con confirmación humana; el timbrado lo realiza el PAC de BIND. La generación <strong>automática desde eventos</strong> (Jira→BUK→Factura) depende de APIs no disponibles hoy — fase posterior.</td></tr>
|
||||
<tr><td class="k">Generación automatizada de facturas</td><td class="cov">⚠️</td><td><strong>Incluida la creación asistida:</strong> cotización → factura desde la plataforma vía API de BIND, con confirmación humana; el timbrado lo realiza el PAC de BIND. Con el <strong>ajuste jul-2026</strong>, los tickets de Jira (bandeja Facturación) <strong>generan automáticamente su cotización</strong>; la cadena completa sin intervención (Jira→BUK→Factura) sigue en fase posterior.</td></tr>
|
||||
<tr><td class="k">Multimoneda para clientes internacionales (USD sin IVA)</td><td class="cov">✅</td><td><strong>Emisión en MXN (con IVA) y USD (sin IVA)</strong> con tipo de cambio del DOF capturado al momento de facturación. <strong>EUR queda fuera del MVP.</strong></td></tr>
|
||||
<tr><td class="k">Descarga automática de facturas / reporte</td><td class="cov">✅</td><td>Listado con filtros, búsqueda, detalle con PDF/XML y exportación a Excel.</td></tr>
|
||||
</tbody>
|
||||
@@ -751,7 +798,7 @@
|
||||
<table class="compact">
|
||||
<thead><tr><th style="width:46pt;">ID</th><th>Descripción</th><th class="ctr" style="width:62pt;">Cobertura</th><th>Notas</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td class="k">RF-01</td><td>Generar facturas automáticamente desde eventos</td><td class="cov">⚠️</td><td>Creación manual (cotización→factura) incluida; la generación automática desde eventos requiere Jira/BUK — fase posterior</td></tr>
|
||||
<tr><td class="k">RF-01</td><td>Generar facturas automáticamente desde eventos</td><td class="cov">⚠️</td><td>Creación asistida (cotización→factura) incluida; con el ajuste jul-2026, los tickets de Jira generan automáticamente la <strong>cotización</strong>. La factura siempre requiere aprobación humana; la cadena BUK→Factura sigue en fase posterior</td></tr>
|
||||
<tr><td class="k">RF-02</td><td>Multimoneda USD/EUR/MXN</td><td class="cov">⚠️</td><td>Emisión MXN + USD en el MVP; EUR en fase posterior</td></tr>
|
||||
<tr><td class="k">RF-03</td><td>Integración con sistemas existentes (BUK / nómina)</td><td class="cov">❌</td><td>API de BUK confirmada, no prioritaria</td></tr>
|
||||
<tr><td class="k">RF-04</td><td>Registrar pagos desde fuentes bancarias</td><td class="cov">❌</td><td>Fase posterior</td></tr>
|
||||
@@ -782,8 +829,10 @@
|
||||
</table>
|
||||
|
||||
<h3><span class="sn">A.4</span>Diferidos — resumen</h3>
|
||||
<div class="keep">
|
||||
<p class="mini-label">Bloqueado por terceros o sin prioridad actual</p>
|
||||
<p>Generación automática de facturas (Jira→BUK→Factura); integración bancaria en vivo (Belvo / Plaid / IBC Texas); integración con BUK; integración con Jira.</p>
|
||||
<p>Generación automática de facturas de punta a punta (Jira→BUK→Factura); integración bancaria en vivo (Belvo / Plaid / IBC Texas); integración con BUK. <em>(La integración con Jira dejó de estar diferida: se incorporó como ajuste jul-2026 — ver §2.)</em></p>
|
||||
</div>
|
||||
<p class="mini-label">Diferido por decisión de alcance</p>
|
||||
<p>Pagos en línea; recordatorios automáticos a clientes; conciliación bancaria; asientos contables automáticos; EUR; flujo de efectivo proyectado; detección avanzada de anomalías; portal de cliente; multi-tenant comercial; cumplimiento avanzado Texas.</p>
|
||||
</section>
|
||||
@@ -810,7 +859,7 @@
|
||||
<div class="callout">El monto de esta fase es comparable al del MVP porque incorpora <strong>cinco módulos nuevos completos</strong>, cada uno con su propio diseño, integración y pruebas. No se trata de extensiones menores, sino de capacidades adicionales sobre la base ya construida.</div>
|
||||
|
||||
<h3><span class="sn">B.2</span>Roadmap posterior (sin cotización)</h3>
|
||||
<p>Se cotiza al cierre de la fase anterior, priorizando con datos reales de uso: integración bancaria en vivo (Belvo, Plaid); conector con BIND para asientos contables automáticos; integración con Jira; flujo de efectivo proyectado (30/60/90 días); gestión cambiaria automática; pagos recurrentes; detección avanzada de anomalías; soporte EUR; clasificación asistida por IA; portal de cliente; multi-tenant comercial; aplicación móvil para tickets; y cumplimiento avanzado para Texas.</p>
|
||||
<p>Se cotiza al cierre de la fase anterior, priorizando con datos reales de uso: integración bancaria en vivo (Belvo, Plaid); conector con BIND para asientos contables automáticos; ampliaciones de la integración con Jira (otras bandejas, reporteo de horas, espacio comercial); flujo de efectivo proyectado (30/60/90 días); gestión cambiaria automática; pagos recurrentes; detección avanzada de anomalías; soporte EUR; clasificación asistida por IA; portal de cliente; multi-tenant comercial; aplicación móvil para tickets; y cumplimiento avanzado para Texas.</p>
|
||||
|
||||
<h3><span class="sn">B.3</span>Activación</h3>
|
||||
<p>Al cierre del MVP se realiza una sesión de priorización (1 h) y se formaliza una orden de trabajo por módulo seleccionado. La tarifa, el esquema, la comunicación y la garantía aplican en los mismos términos que en la primera etapa (sin anticipo; facturación al inicio de cada módulo, pago a 30 días).</p>
|
||||
|
||||
Binary file not shown.
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"input_html": "Adenda-01-Integracion-Jira.html",
|
||||
"output_pdf": "Adenda-01-Integracion-Jira-Balam.pdf",
|
||||
|
||||
"page_size": "Letter",
|
||||
"cover_full_bleed": true,
|
||||
"render_timeout_ms": 30000,
|
||||
|
||||
"metadata": {
|
||||
"title": "Adenda 01 — Integración Jira → BIND · Plataforma de Automatización Financiera · Balam",
|
||||
"author": "Johann Velazquez",
|
||||
"subject": "Solicitud de cambio a la propuesta v1.2: generación automática de cotizaciones en BIND desde tickets de Jira",
|
||||
"keywords": "adenda, Jira, BIND, Balam, control de cambios, cotizaciones"
|
||||
},
|
||||
|
||||
"footer": {
|
||||
"text": "Adenda 01 · Integración Jira → BIND · Balam — Confidencial",
|
||||
"skip_first_page": true,
|
||||
"skip_pages": [],
|
||||
"page_number_format": "{page} / {pages}",
|
||||
"rule": true,
|
||||
"font_size_pt": 7.5,
|
||||
"margin_mm": 12,
|
||||
"color": [0.46, 0.51, 0.57]
|
||||
},
|
||||
|
||||
"fonts": {
|
||||
"footer_ttf": "fonts/Carlito-Regular.ttf"
|
||||
},
|
||||
|
||||
"toc": {}
|
||||
}
|
||||
@@ -9,8 +9,8 @@
|
||||
"metadata": {
|
||||
"title": "Propuesta Comercial — Plataforma de Automatización Financiera · Balam",
|
||||
"author": "Johann Velazquez",
|
||||
"subject": "MVP de facturación y cobranza sobre BIND ERP — propuesta v1.2",
|
||||
"keywords": "propuesta, Balam, BIND ERP, facturación, MVP, v1.2"
|
||||
"subject": "MVP de facturación y cobranza sobre BIND ERP + integración Jira → BIND — propuesta v1.3",
|
||||
"keywords": "propuesta, Balam, BIND ERP, Jira, facturación, MVP, v1.3"
|
||||
},
|
||||
|
||||
"footer": {
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
|
||||
"fonts": {
|
||||
"footer_ttf": "C:\\Windows\\Fonts\\calibri.ttf"
|
||||
"footer_ttf": "fonts/Carlito-Regular.ttf"
|
||||
},
|
||||
|
||||
"toc": {
|
||||
|
||||
Reference in New Issue
Block a user