#!/usr/bin/env python3
"""
Generador del documento de Exoneración — Electiva en Transformación Digital (NRC-8775)
======================================================================================
Caso (Sector Público): Transformación Digital y Gestión del Cambio bajo el Modelo de Kotter

Genera: Oviedo_Alexander_Exoneracion_Caso_Kotter_ETD.docx

Formato: APA 7ª edición UNIMINUTO (Calibri 11pt, interlineado doble, márgenes 2.54 cm,
sangría 1.27 cm, alineación izquierda, paginación superior derecha)
"""

import os
import sys

try:
    from docx import Document
    from docx.shared import Pt, Cm, RGBColor
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.enum.table import WD_TABLE_ALIGNMENT
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement
except ImportError:
    print("Instalando python-docx...")
    os.system(f"{sys.executable} -m pip install python-docx --break-system-packages")
    from docx import Document
    from docx.shared import Pt, Cm, RGBColor
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.enum.table import WD_TABLE_ALIGNMENT
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement


# ─── Constantes APA 7 (UNIMINUTO) ─────────────────────────────────────
FONT_NAME = "Calibri"
FONT_SIZE = Pt(11)
LINE_SPACING = 2.0
MARGIN = Cm(2.54)
INDENT = Cm(1.27)

COLOR_TITULO = RGBColor(0x1B, 0x2A, 0x47)
COLOR_TEXTO = RGBColor(0x22, 0x22, 0x22)
HEADER_FILL = '1B2A47'


# ─── Utilidades ────────────────────────────────────────────────────────

def set_cell_shading(cell, color_hex):
    shading = OxmlElement('w:shd')
    shading.set(qn('w:fill'), color_hex)
    shading.set(qn('w:val'), 'clear')
    cell._tc.get_or_add_tcPr().append(shading)


def add_page_number(section):
    """Número de página en la esquina superior derecha (APA 7)."""
    header = section.header
    p = header.paragraphs[0]
    p.alignment = WD_ALIGN_PARAGRAPH.RIGHT

    run = p.add_run()
    fld_begin = OxmlElement('w:fldChar')
    fld_begin.set(qn('w:fldCharType'), 'begin')
    instr = OxmlElement('w:instrText')
    instr.set(qn('xml:space'), 'preserve')
    instr.text = 'PAGE'
    fld_end = OxmlElement('w:fldChar')
    fld_end.set(qn('w:fldCharType'), 'end')

    run._r.append(fld_begin)
    run._r.append(instr)
    run._r.append(fld_end)
    run.font.name = FONT_NAME
    run.font.size = FONT_SIZE
    run.font.color.rgb = COLOR_TEXTO


def add_paragraph_apa(doc, text, bold=False, italic=False,
                      alignment=WD_ALIGN_PARAGRAPH.LEFT,
                      indent=True, font_size=FONT_SIZE,
                      space_after=Pt(0), space_before=Pt(0)):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.name = FONT_NAME
    run.font.size = font_size
    run.font.bold = bold
    run.font.italic = italic
    run.font.color.rgb = COLOR_TEXTO

    pf = p.paragraph_format
    pf.alignment = alignment
    pf.line_spacing = LINE_SPACING
    pf.space_after = space_after
    pf.space_before = space_before
    if indent:
        pf.first_line_indent = INDENT
    return p


def add_block_quote(doc, text):
    """Cita textual larga (40+ palabras): bloque con sangría 1.27 cm, sin comillas."""
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.name = FONT_NAME
    run.font.size = FONT_SIZE
    run.font.color.rgb = COLOR_TEXTO

    pf = p.paragraph_format
    pf.alignment = WD_ALIGN_PARAGRAPH.LEFT
    pf.line_spacing = LINE_SPACING
    pf.left_indent = INDENT
    pf.space_after = Pt(6)
    return p


def add_heading_apa(doc, text, level=1):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.name = FONT_NAME
    run.font.color.rgb = COLOR_TITULO

    pf = p.paragraph_format
    pf.line_spacing = LINE_SPACING
    pf.space_before = Pt(18)
    pf.space_after = Pt(6)

    if level == 1:
        run.font.size = Pt(14)
        run.font.bold = True
        pf.alignment = WD_ALIGN_PARAGRAPH.CENTER
    elif level == 2:
        run.font.size = Pt(12)
        run.font.bold = True
        pf.alignment = WD_ALIGN_PARAGRAPH.LEFT
    else:
        run.font.size = Pt(11)
        run.font.bold = True
        run.font.italic = True
        pf.alignment = WD_ALIGN_PARAGRAPH.LEFT
    return p


def add_table(doc, headers, rows, widths=None):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    table.style = 'Table Grid'

    for i, header in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = header
        set_cell_shading(cell, HEADER_FILL)
        for paragraph in cell.paragraphs:
            paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
            paragraph.paragraph_format.line_spacing = 1.0
            for run in paragraph.runs:
                run.font.name = FONT_NAME
                run.font.size = Pt(10)
                run.font.bold = True
                run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)

    for r, row_data in enumerate(rows):
        for c, cell_text in enumerate(row_data):
            cell = table.rows[r + 1].cells[c]
            cell.text = str(cell_text)
            for paragraph in cell.paragraphs:
                paragraph.alignment = WD_ALIGN_PARAGRAPH.LEFT
                paragraph.paragraph_format.line_spacing = 1.0
                for run in paragraph.runs:
                    run.font.name = FONT_NAME
                    run.font.size = Pt(10)
                    run.font.color.rgb = COLOR_TEXTO

    if widths:
        for i, width in enumerate(widths):
            for row in table.rows:
                row.cells[i].width = width
    return table


def add_table_caption(doc, numero, titulo):
    """Encabezado de tabla APA: 'Tabla N' en negrita + título en cursiva."""
    p1 = doc.add_paragraph()
    r1 = p1.add_run(numero)
    r1.font.name = FONT_NAME
    r1.font.size = FONT_SIZE
    r1.font.bold = True
    r1.font.color.rgb = COLOR_TEXTO
    p1.paragraph_format.line_spacing = 1.0
    p1.paragraph_format.space_before = Pt(12)

    p2 = doc.add_paragraph()
    r2 = p2.add_run(titulo)
    r2.font.name = FONT_NAME
    r2.font.size = FONT_SIZE
    r2.font.italic = True
    r2.font.color.rgb = COLOR_TEXTO
    p2.paragraph_format.line_spacing = 1.0
    p2.paragraph_format.space_after = Pt(6)


def add_table_note(doc, texto):
    p = doc.add_paragraph()
    r1 = p.add_run("Nota. ")
    r1.font.name = FONT_NAME
    r1.font.size = Pt(10)
    r1.font.italic = True
    r1.font.color.rgb = COLOR_TEXTO
    r2 = p.add_run(texto)
    r2.font.name = FONT_NAME
    r2.font.size = Pt(10)
    r2.font.color.rgb = COLOR_TEXTO
    p.paragraph_format.line_spacing = 1.0
    p.paragraph_format.space_before = Pt(4)
    p.paragraph_format.space_after = Pt(12)


def add_reference(doc, text):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.name = FONT_NAME
    run.font.size = FONT_SIZE
    run.font.color.rgb = COLOR_TEXTO

    pf = p.paragraph_format
    pf.alignment = WD_ALIGN_PARAGRAPH.LEFT
    pf.line_spacing = LINE_SPACING
    pf.space_after = Pt(6)
    pf.left_indent = INDENT
    pf.first_line_indent = -INDENT
    return p


# ─── Construcción del documento ────────────────────────────────────────

def build_document():
    doc = Document()

    for section in doc.sections:
        section.top_margin = MARGIN
        section.bottom_margin = MARGIN
        section.left_margin = MARGIN
        section.right_margin = MARGIN
        add_page_number(section)

    # ═══════════════════ PORTADA ═══════════════════
    for _ in range(4):
        doc.add_paragraph().paragraph_format.line_spacing = LINE_SPACING

    add_paragraph_apa(doc,
        "Transformación digital y gestión del cambio en el sector público colombiano: "
        "análisis del caso de la Agencia Nacional de Servicios Ciudadanos bajo el modelo de Kotter",
        bold=True, alignment=WD_ALIGN_PARAGRAPH.CENTER,
        indent=False, font_size=Pt(14), space_after=Pt(24))

    add_paragraph_apa(doc, "Alexander Oviedo Fadul",
        alignment=WD_ALIGN_PARAGRAPH.CENTER, indent=False, space_after=Pt(4))

    doc.add_paragraph().paragraph_format.line_spacing = LINE_SPACING

    datos = [
        "Especialización en Inteligencia Artificial",
        "Corporación Universitaria Minuto de Dios (UNIMINUTO)",
        "NRC-8775 — Electiva en Transformación Digital",
        "Actividad de exoneración — Caso de estudio",
        "Profesor: Juan Diego López Vargas",
        "23 de julio de 2026",
    ]
    for dato in datos:
        add_paragraph_apa(doc, dato,
            alignment=WD_ALIGN_PARAGRAPH.CENTER, indent=False, space_after=Pt(4))

    doc.add_page_break()

    # ═══════════════════ INTRODUCCIÓN ═══════════════════
    add_heading_apa(doc, "Introducción", level=1)

    add_paragraph_apa(doc,
        "El caso de la Agencia Nacional de Servicios Ciudadanos plantea una situación que "
        "reconozco sin dificultad. Llevo más de nueve años como servidor de la Rama Judicial "
        "colombiana y he visto, desde adentro, cómo una entidad puede tener presupuesto aprobado, "
        "licencias compradas y un plan estratégico impecable, y aun así fracasar en el intento de "
        "modernizarse. El caso lo dice con claridad en su numeral tercero: el desafío no radica "
        "exclusivamente en la incorporación de nuevas tecnologías, sino en la dificultad de "
        "transformar una cultura organizacional arraigada en prácticas tradicionales. Esa frase "
        "resume una década de aprendizajes propios.")

    add_paragraph_apa(doc,
        "El presente documento responde las tres preguntas de discusión formuladas al cierre del "
        "caso: cómo gestionar la resistencia en el sector público, qué rol juega la regulación y "
        "cómo asegurar la sostenibilidad del cambio. Para hacerlo, articulo tres fuentes de "
        "evidencia. La primera es el marco conceptual del curso, en particular el modelo de ocho "
        "pasos de Kotter (1996) y la noción de liderazgo adaptativo de Heifetz (1994). La segunda "
        "es la literatura reciente sobre barreras a la transformación digital, con dos referencias "
        "que resultan especialmente pertinentes: la revisión sistemática de Singun (2025), que "
        "clasifica ochenta subdimensiones de obstáculos, y el análisis de Quintero Salazar (2025) "
        "sobre liderazgo adaptativo en un sector regulado. La tercera es mi propia experiencia "
        "documentada en proyectos de digitalización judicial, que uso deliberadamente como "
        "contraste empírico y no como anécdota decorativa.")

    add_paragraph_apa(doc,
        "Adelanto una tesis que atraviesa las tres respuestas. La transformación digital en el "
        "Estado no falla por falta de tecnología ni, en la mayoría de los casos, por falta de "
        "presupuesto. Falla porque se administra como un proyecto de tecnología cuando en realidad "
        "es un proceso político, jurídico y cultural que apenas se apoya en herramientas. "
        "El modelo de Kotter resulta útil precisamente porque desplaza el centro de gravedad "
        "hacia las personas; pero, como argumentaré, requiere ajustes para operar en un entorno "
        "donde el líder no elige a su equipo, el presupuesto es anual y la autoridad cambia con "
        "los ciclos institucionales.")

    # ═══════════════════ SÍNTESIS DEL CASO ═══════════════════
    add_heading_apa(doc, "Síntesis analítica del caso", level=1)

    add_paragraph_apa(doc,
        "La Agencia Nacional de Servicios Ciudadanos es una entidad ficticia que opera bajo "
        "esquemas burocráticos tradicionales: procesos rígidos, fragmentación organizacional y baja "
        "orientación al ciudadano. Enfrenta tiempos de respuesta elevados, aumento de quejas, "
        "observaciones de entes de control y una percepción pública de ineficiencia. El caso aplica "
        "los ocho pasos de Kotter y reporta mejoras en eficiencia operativa, transparencia y "
        "experiencia del ciudadano.")

    add_paragraph_apa(doc,
        "Antes de responder las preguntas conviene señalar una particularidad del relato. El caso "
        "presenta la secuencia de Kotter como si se hubiera ejecutado de forma lineal y exitosa, "
        "pero no describe los conflictos concretos que aparecen en cada paso. Esa omisión es "
        "comprensible en un ejercicio académico, aunque vale la pena nombrarla: en la práctica, los "
        "ocho pasos no avanzan en fila india. Se solapan, retroceden y a veces conviven en el mismo "
        "trimestre. En mi experiencia, el paso cinco —eliminar obstáculos— nunca se cierra: "
        "reaparece cada vez que el proyecto toca un área nueva. Kotter (2014) reconoció esta "
        "limitación al proponer que los ocho aceleradores operen de manera simultánea y continua, "
        "en una red paralela a la jerarquía formal, y no como una lista de verificación secuencial.")

    add_paragraph_apa(doc,
        "Con esa advertencia metodológica, y asumiendo el escenario descrito, desarrollo las tres "
        "preguntas de discusión.")

    # ═══════════════════ PREGUNTA 1 ═══════════════════
    add_heading_apa(doc, "Pregunta 1. ¿Cómo gestionar la resistencia en el sector público?", level=1)

    add_heading_apa(doc, "La resistencia como información, no como obstáculo", level=2)

    add_paragraph_apa(doc,
        "El primer error que se comete al gestionar la resistencia es tratarla como un defecto de "
        "carácter de quienes se oponen. La literatura del curso sugiere lo contrario. Singun (2025) "
        "identifica la resistencia al cambio como la barrera con mayor frecuencia de aparición en "
        "su revisión sistemática y describe un fenómeno que denomina resistencia dual: la "
        "combinación entre la comodidad personal con las prácticas conocidas y una cultura "
        "institucional que privilegia la estabilidad sobre la adaptación. No se trata, entonces, de "
        "un problema individual que se corrija con una circular, sino de un equilibrio "
        "organizacional que se sostiene porque a alguien le funciona.")

    add_paragraph_apa(doc,
        "En el sector público colombiano esa resistencia tiene, además, fundamentos que considero "
        "racionales y que rara vez se reconocen en los diagnósticos. Menciono cuatro que he visto "
        "operar de forma recurrente. El primero es el riesgo personal: un servidor público responde "
        "disciplinaria, fiscal y penalmente por sus actuaciones, de modo que apartarse del "
        "procedimiento conocido no es una travesura, es una exposición. El segundo es la memoria "
        "institucional de reformas abandonadas; quien lleva quince años en una entidad ha visto "
        "morir tres o cuatro sistemas que también iban a cambiarlo todo, y su escepticismo es "
        "evidencia acumulada, no terquedad. El tercero es la asimetría de competencias digitales, "
        "que en entidades con plantas de personal maduras produce un temor legítimo a quedar "
        "expuesto ante los compañeros. El cuarto es la estructura de incentivos de la carrera "
        "administrativa, donde la innovación no suele computar en la evaluación de desempeño "
        "mientras que el error sí computa en el proceso disciplinario.")

    add_paragraph_apa(doc,
        "Formulado así, el problema cambia de naturaleza. La pregunta ya no es cómo vencer la "
        "resistencia, sino cómo modificar las condiciones que la hacen razonable. Esta es, en "
        "esencia, la distinción que propone Heifetz (1994) entre problemas técnicos —que se "
        "resuelven con conocimiento experto— y desafíos adaptativos, que exigen que las personas "
        "involucradas cambien sus creencias, hábitos y lealtades. Comprar una plataforma es un "
        "problema técnico. Lograr que un despacho abandone el expediente en papel es un desafío "
        "adaptativo, y por eso no se resuelve con más capacitación sobre el mismo software.")

    add_heading_apa(doc, "Mecanismos concretos anclados en el modelo de Kotter", level=2)

    add_paragraph_apa(doc,
        "A partir de esa lectura, propongo seis mecanismos que he aplicado o visto aplicar con "
        "resultados desiguales, cada uno vinculado a los pasos del modelo.")

    add_paragraph_apa(doc,
        "Construir la urgencia con datos propios y no con discursos. El paso uno de Kotter suele "
        "ejecutarse mal en el Estado porque se sustituye la evidencia por retórica. Cuando en la "
        "Dirección Seccional presentamos tiempos reales de trámite —no promedios nacionales, sino "
        "los del despacho que teníamos enfrente— la conversación cambió de tono. Un dato propio, "
        "verificable y desagregado incomoda mucho más que cualquier presentación sobre "
        "la cuarta revolución industrial. Aquí conviene una precisión técnica: la media es una "
        "aliada del statu quo. En análisis de tiempos procesales suelo trabajar con medianas y "
        "percentiles altos, porque el promedio disimula justamente los casos represados que "
        "generan las quejas ciudadanas que el caso menciona.")

    add_paragraph_apa(doc,
        "Ampliar la coalición guía más allá del organigrama. El caso plantea, en su paso dos, un "
        "equipo interdisciplinario de directivos, líderes tecnológicos y actores estratégicos del "
        "gobierno. Coincido, pero lo considero insuficiente. En el sector público existe una "
        "autoridad informal que no aparece en ningún manual de funciones: la secretaria con veinte "
        "años en el despacho, el técnico que conoce todas las excepciones del sistema, el líder "
        "sindical. Si esas personas no están en la coalición, la coalición no gobierna nada. En el "
        "ecosistema MARDUK —plataforma de innovación judicial que articula más de ciento cincuenta "
        "herramientas sobre un universo de 2,2 millones de procesos y que obtuvo el primer lugar en "
        "el Concurso de Innovación JusticiaLab 2024 en la categoría de justicia basada en datos— "
        "la decisión deliberada fue que las herramientas las desarrollaran servidores judiciales y "
        "no un proveedor externo. El efecto sobre la resistencia fue inmediato y no lo anticipé "
        "en esa magnitud: es muy difícil oponerse a una solución construida por un colega que "
        "atiende la misma ventanilla.")

    add_paragraph_apa(doc,
        "Convertir al resistente en coautor. Es la extensión natural del punto anterior y, en mi "
        "experiencia, el mecanismo más eficaz. Cuando alguien objeta un desarrollo, la respuesta "
        "que mejor me ha funcionado no es persuadirlo sino pedirle que documente el flujo real de "
        "trabajo —el que efectivamente ocurre, no el del manual de procesos—. Quien conoce las "
        "excepciones del procedimiento es normalmente quien más resiste, porque intuye que el "
        "sistema nuevo no las contempla. Casi siempre tiene razón, y esa información es "
        "exactamente la que evita que la herramienta nazca inservible.")

    add_paragraph_apa(doc,
        "Eliminar obstáculos con decisiones de autoridad, no con pedagogía. El paso cinco exige "
        "distinguir entre dos tipos de resistencia que suelen confundirse. La resistencia por temor "
        "o desconocimiento se disuelve con acompañamiento y tiempo. La resistencia por interés "
        "—de quien pierde control de una información, de un trámite o de una renta— no se disuelve "
        "con talleres. Requiere una decisión formal del nivel directivo. Ser honesto sobre esta "
        "diferencia evita desgastar meses en sensibilizaciones destinadas al fracaso.")

    add_paragraph_apa(doc,
        "Producir victorias tempranas que le sirvan al servidor, no solo al indicador. El paso seis "
        "del caso habla de digitalizar trámites prioritarios. Agrego un criterio de selección que "
        "me parece decisivo: la primera victoria debe aliviar el trabajo de quien opera el proceso, "
        "no únicamente mejorar la métrica del reporte. Cuando desarrollamos el aplicativo de "
        "consulta de nómina para el área de talento humano, el impacto institucional fue modesto; "
        "el impacto en la percepción interna fue considerable, porque cada servidor comprobó que la "
        "digitalización también podía trabajar a su favor. Esa credibilidad es la que después "
        "financia los proyectos difíciles.")

    add_paragraph_apa(doc,
        "Reconocer el papel de la urgencia exógena. Hago aquí una observación que matiza el modelo. "
        "El proyecto ENKI, que construimos para habilitar la operación judicial durante la "
        "pandemia, no requirió que nadie fabricara un sentido de urgencia: la urgencia era la "
        "realidad. En cuestión de semanas se adoptaron prácticas digitales que llevaban años "
        "estancadas. La lección es incómoda pero útil: la resistencia cede cuando el costo de no "
        "cambiar se vuelve visible e inmediato. En condiciones normales, ese costo existe pero está "
        "difuso, y la tarea del liderazgo consiste en hacerlo evidente sin esperar una crisis.")

    add_table_caption(doc, "Tabla 1",
        "Tipos de resistencia en el sector público y mecanismos de gestión asociados")

    add_table(doc,
        ["Tipo de resistencia", "Origen", "Mecanismo recomendado", "Paso de Kotter"],
        [
            ["Por temor al riesgo personal",
             "Responsabilidad disciplinaria, fiscal y penal del servidor",
             "Respaldo normativo expreso y protocolos que documenten la actuación",
             "5. Eliminar obstáculos"],
            ["Por escepticismo histórico",
             "Memoria de reformas iniciadas y abandonadas",
             "Victorias tempranas verificables y comunicación de resultados medidos",
             "6. Victorias a corto plazo"],
            ["Por brecha de competencias",
             "Asimetría digital generacional y formativa",
             "Acompañamiento sostenido en el puesto de trabajo, no capacitación única",
             "5. Eliminar obstáculos"],
            ["Por incentivos desalineados",
             "La innovación no computa en la evaluación de desempeño",
             "Ajuste de indicadores institucionales y reconocimiento formal",
             "7 y 8. Consolidar y anclar"],
            ["Por interés",
             "Pérdida de control sobre información, trámites o rentas",
             "Decisión directiva formal; no se resuelve con sensibilización",
             "2. Coalición guía"],
        ],
        widths=[Cm(3.4), Cm(3.8), Cm(5.2), Cm(3.4)])

    add_table_note(doc,
        "Elaboración propia a partir de Kotter (1996), Heifetz (1994) y Singun (2025), "
        "contrastados con la experiencia del autor en proyectos de digitalización judicial.")

    # ═══════════════════ PREGUNTA 2 ═══════════════════
    add_heading_apa(doc, "Pregunta 2. ¿Qué rol juega la regulación?", level=1)

    add_heading_apa(doc, "Una doble condición: habilitadora y restrictiva", level=2)

    add_paragraph_apa(doc,
        "La regulación cumple simultáneamente dos funciones opuestas, y esa ambivalencia es lo que "
        "hace la pregunta interesante. Es el piso que habilita la transformación y es el techo que "
        "la limita. Sostener solo una de las dos lecturas produce diagnósticos incompletos.")

    add_paragraph_apa(doc,
        "Conviene partir de una asimetría fundamental entre el sector público y el privado, que el "
        "caso menciona de pasada pero que en mi criterio explica buena parte del fenómeno. En el "
        "ámbito privado rige el principio general de libertad: lo que no está prohibido está "
        "permitido. En el ámbito estatal opera el principio de legalidad consagrado en los "
        "artículos 6 y 121 de la Constitución Política, según el cual los servidores públicos solo "
        "pueden hacer aquello para lo que están expresamente facultados. La consecuencia práctica "
        "es contundente: sin norma habilitante, innovar no es una iniciativa, es una exposición "
        "personal. Mi formación jurídica me ha hecho ver este punto con más nitidez que mi "
        "formación como ingeniero. Muchos proyectos tecnológicos del Estado no se detienen por "
        "razones técnicas; se detienen porque nadie quiere firmar.")

    add_heading_apa(doc, "La regulación como habilitador", level=2)

    add_paragraph_apa(doc,
        "En el caso colombiano, el marco normativo ha construido progresivamente el piso jurídico "
        "de la transformación digital pública. La Ley 1712 de 2014 estableció el régimen de "
        "transparencia y acceso a la información pública, con obligaciones de publicación proactiva "
        "que empujaron la disponibilidad de datos. El Decreto 1008 de 2018 definió los lineamientos "
        "de la política de Gobierno Digital, que el caso menciona expresamente. El documento CONPES "
        "3975 de 2019 formuló la política nacional de transformación digital e inteligencia "
        "artificial. Y en el sector judicial, la Ley 2213 de 2022 dio vigencia permanente al uso de "
        "las tecnologías de la información en las actuaciones judiciales, convirtiendo en regla "
        "ordinaria lo que había nacido como medida de emergencia.")

    add_paragraph_apa(doc,
        "Esa última norma ilustra bien el rol habilitador. Antes de ella, cada juez debía valorar "
        "individualmente la validez de una audiencia virtual o de una notificación electrónica, con "
        "el riesgo de nulidades procesales. Después de ella, la discusión se trasladó al terreno "
        "operativo. La norma no produjo la transformación, pero eliminó el principal argumento de "
        "quienes preferían no intentarla. Ese es, exactamente, el paso cinco de Kotter ejecutado "
        "por vía normativa.")

    add_heading_apa(doc, "La regulación como restricción y como rezago", level=2)

    add_paragraph_apa(doc,
        "El reverso es igual de real. Quintero Salazar (2025) documenta un mecanismo que considero "
        "el hallazgo más transferible de la bibliografía de la asignatura. Al analizar el sector "
        "eléctrico colombiano, muestra que la metodología de costos eficientes de la CREG se "
        "calcula sobre promedios sectoriales y no reconoce dinámicamente las eficiencias que genera "
        "la digitalización, con una consecuencia que el autor formula sin rodeos:")

    add_block_quote(doc,
        "Los usuarios del mercado regulado terminan pagando tarifas que reflejan una estructura de "
        "costos obsoleta, subsidiando efectivamente la resistencia del sector a la modernización "
        "tecnológica (Quintero Salazar, 2025, p. 65).")

    add_paragraph_apa(doc,
        "La idea de que un marco regulatorio puede terminar subsidiando la resistencia al cambio "
        "me parece extrapolable a cualquier entidad pública. Cuando la regulación mide medios en "
        "lugar de resultados, digitalizar no reporta beneficio institucional alguno. Lo he visto en "
        "el terreno judicial: durante años los indicadores de gestión privilegiaron el conteo de "
        "providencias proferidas y no los tiempos efectivos de resolución ni la calidad del "
        "servicio al usuario. Bajo ese esquema, un despacho que invertía tres meses en depurar sus "
        "datos y automatizar su flujo aparecía, en el reporte trimestral, con peor desempeño que "
        "otro que siguió trabajando exactamente igual que el año anterior. El sistema de medición "
        "castigaba la inversión en capacidad. Ninguna estrategia de gestión del cambio compensa un "
        "incentivo institucional mal diseñado.")

    add_paragraph_apa(doc,
        "A esto se añade la rigidez de la contratación pública. Los procesos de selección "
        "tradicionales exigen definir con precisión el objeto contractual antes de conocer la "
        "solución, lo cual encaja mal con desarrollos iterativos donde el requerimiento se refina "
        "durante la ejecución. El resultado frecuente es que la entidad contrata lo que sabía pedir "
        "al inicio, no lo que necesitaba al final.")

    add_heading_apa(doc, "Regulación y límites sustantivos: el caso de la inteligencia artificial", level=2)

    add_paragraph_apa(doc,
        "Hay una tercera función de la regulación que el caso no aborda y que resulta ineludible "
        "en un programa de especialización en inteligencia artificial: fijar límites sustantivos. "
        "La Ley 1581 de 2012 sobre protección de datos personales condiciona cualquier proyecto "
        "que trate información ciudadana, y en el ámbito judicial la frontera es todavía más "
        "estricta. La automatización puede clasificar, extraer, priorizar y sugerir; no puede "
        "decidir. El debido proceso exige un juez natural que motive su decisión, y esa garantía no "
        "es un obstáculo tecnológico que deba removerse, es el contenido mismo del servicio. En los "
        "desarrollos con modelos de lenguaje que he implementado, este principio se traduce en una "
        "regla operativa simple: el sistema prepara insumos y el servidor decide, siempre con "
        "trazabilidad de lo que la herramienta sugirió.")

    add_paragraph_apa(doc,
        "En síntesis, la regulación habilita, restringe y delimita. Un liderazgo eficaz en el "
        "sector público no la enfrenta ni la ignora: la lee con precisión, aprovecha el margen "
        "existente, documenta las barreras que encuentra y participa en su actualización. "
        "Quintero Salazar (2025) concluye que la vía estructural exige modernizar las metodologías "
        "regulatorias, no solo las plataformas tecnológicas. Comparto ese diagnóstico.")

    add_table_caption(doc, "Tabla 2",
        "Marco normativo colombiano y su efecto sobre la transformación digital pública")

    add_table(doc,
        ["Instrumento", "Contenido principal", "Efecto sobre el cambio"],
        [
            ["Constitución Política, arts. 6 y 121",
             "Principio de legalidad de la función pública",
             "Restrictivo: sin habilitación expresa, innovar implica riesgo personal"],
            ["Ley 1712 de 2014",
             "Transparencia y acceso a la información pública",
             "Habilitador: obliga a publicar y ordenar información"],
            ["Decreto 1008 de 2018",
             "Lineamientos de la política de Gobierno Digital",
             "Habilitador: fija estándares y marco de referencia"],
            ["CONPES 3975 de 2019",
             "Política nacional de transformación digital e IA",
             "Habilitador: orienta inversión y capacidades"],
            ["Ley 2213 de 2022",
             "Vigencia permanente de las TIC en actuaciones judiciales",
             "Habilitador: elimina la incertidumbre sobre validez procesal"],
            ["Ley 1581 de 2012",
             "Protección de datos personales",
             "Delimitador: condiciona el tratamiento de información ciudadana"],
        ],
        widths=[Cm(4.0), Cm(5.0), Cm(6.8)])

    add_table_note(doc,
        "Elaboración propia. La clasificación en habilitador, restrictivo y delimitador sigue la "
        "distinción propuesta en el análisis, con base en Quintero Salazar (2025) y Moore (1995).")

    # ═══════════════════ PREGUNTA 3 ═══════════════════
    add_heading_apa(doc, "Pregunta 3. ¿Cómo asegurar la sostenibilidad del cambio?", level=1)

    add_heading_apa(doc, "El problema real: la discontinuidad institucional", level=2)

    add_paragraph_apa(doc,
        "Los pasos siete y ocho de Kotter —consolidar el cambio y anclarlo en la cultura— son los "
        "que el caso resuelve con mayor brevedad y los que, en mi experiencia, concentran la mayor "
        "tasa de fracaso. La razón es específica del sector público: la discontinuidad. Los "
        "gobiernos cambian, los directivos rotan, las comisiones terminan y los contratos se "
        "vencen. Un proyecto que depende de la permanencia de su promotor tiene fecha de "
        "caducidad, aunque nadie la escriba.")

    add_paragraph_apa(doc,
        "Debo admitir una limitación propia sobre este punto, porque me parece más honesto que "
        "presentar un balance impecable. Varias de las herramientas que desarrollé en la seccional "
        "funcionaron bien mientras yo estuve en el cargo y perdieron tracción cuando cambié de "
        "posición. No fallaron técnicamente. Fallaron porque el conocimiento operativo estaba "
        "concentrado en una persona y porque nunca alcanzaron a incorporarse a un procedimiento "
        "formal. Fue una lección costosa: la sostenibilidad no se construye al final del proyecto, "
        "como sugiere la secuencia lineal del modelo, sino desde el primer día.")

    add_heading_apa(doc, "Seis condiciones de sostenibilidad", level=2)

    add_paragraph_apa(doc,
        "Formalizar el cambio en instrumentos que sobrevivan a las personas. Mientras una práctica "
        "digital dependa de la voluntad de un directivo, es reversible. Cuando queda incorporada en "
        "un acuerdo, un manual de procedimientos, el manual específico de funciones o el plan "
        "estratégico institucional, adquiere una inercia propia. En la Rama Judicial, el Plan "
        "Estratégico de Transformación Digital cumple esa función de continuidad, y buena parte de "
        "mi trabajo en la seccional consistió precisamente en aterrizarlo al nivel territorial. "
        "Un cambio sin rubro presupuestal asignado y sin responsable identificado en el manual de "
        "funciones no está anclado: está de visita.")

    add_paragraph_apa(doc,
        "Construir capacidades internas y no solo comprar soluciones. Quintero Salazar (2025) "
        "insiste en este punto y coincide con lo que he observado. Cuando la totalidad del "
        "conocimiento reside en el proveedor, cada renovación contractual se convierte en un riesgo "
        "de continuidad y la entidad negocia desde una posición débil. La alternativa no es "
        "prescindir de terceros, sino asegurar que la entidad conserve el gobierno del dato, la "
        "documentación de la arquitectura y un equipo capaz de mantener y auditar lo contratado.")

    add_paragraph_apa(doc,
        "Documentar para reducir la dependencia de personas. Es la traducción directa de mi error "
        "anterior. Manuales de operación, código versionado y accesible, decisiones de diseño "
        "registradas y al menos dos servidores capacitados por herramienta crítica. No es un "
        "requisito burocrático: es lo que permite que el cambio sobreviva a un traslado.")

    add_paragraph_apa(doc,
        "Medir adopción y no solo implementación. Esta distinción me parece la más subestimada. Una "
        "entidad puede reportar que implementó una plataforma cuando lo único cierto es que la "
        "instaló. Los indicadores que importan son otros: qué porcentaje de trámites entra "
        "efectivamente por el canal digital, cuántos usuarios activos hay al tercer mes, cuánto "
        "bajó el tiempo mediano de respuesta, cuántas quejas se redujeron. Sin esa medición, la "
        "organización no sabe si consolidó algo o si simplemente firmó un acta de recibo.")

    add_paragraph_apa(doc,
        "Integrar competencias digitales en el ciclo de talento humano. Si la evaluación de "
        "desempeño, los concursos de méritos y los programas de inducción no incorporan estas "
        "competencias, la transformación depende del entusiasmo individual. Y el entusiasmo, a "
        "diferencia de la norma, no se hereda con el cargo. Menciono un ejemplo institucional que "
        "me involucra directamente: la comisión especial de estudios que me permite cursar esta "
        "especialización es una decisión de la entidad orientada a construir capacidad interna. "
        "Es, en términos de Kotter, una inversión en el paso ocho.")

    add_paragraph_apa(doc,
        "Sostener comunidades de práctica en lugar de liderazgos individuales. Esta es, "
        "probablemente, la lección más valiosa que extraje de MARDUK. Una red de servidores que "
        "desarrollan, comparten y mejoran herramientas resulta mucho más resiliente que un equipo "
        "central de innovación, porque el conocimiento se distribuye y la motivación se renueva por "
        "reconocimiento entre pares. Kotter (2014) llega a una conclusión semejante cuando propone "
        "una red voluntaria operando en paralelo a la jerarquía. Cuando el cambio se convierte en "
        "identidad profesional compartida —así trabajamos aquí— deja de necesitar un promotor.")

    add_table_caption(doc, "Tabla 3",
        "Indicadores de implementación frente a indicadores de adopción")

    add_table(doc,
        ["Dimensión", "Indicador de implementación (insuficiente)", "Indicador de adopción (recomendado)"],
        [
            ["Cobertura",
             "Plataforma instalada y en producción",
             "Porcentaje de trámites tramitados por el canal digital"],
            ["Uso",
             "Número de licencias adquiridas",
             "Usuarios activos recurrentes al tercer y sexto mes"],
            ["Servicio",
             "Trámites publicados en línea",
             "Tiempo mediano de respuesta y percentil 90 de la distribución"],
            ["Ciudadano",
             "Campañas de divulgación realizadas",
             "Variación de quejas asociadas al trámite intervenido"],
            ["Capacidad",
             "Servidores capacitados en una jornada",
             "Servidores que operan la herramienta sin soporte externo"],
        ],
        widths=[Cm(3.0), Cm(6.4), Cm(6.4)])

    add_table_note(doc,
        "Elaboración propia. La distinción se apoya en los factores de observabilidad y "
        "experimentación de Rogers (2003) y en los pasos 7 y 8 de Kotter (1996).")

    # ═══════════════════ ANÁLISIS CRÍTICO ═══════════════════
    add_heading_apa(doc, "Análisis crítico del modelo aplicado al caso", level=1)

    add_paragraph_apa(doc,
        "Cierro con tres observaciones críticas sobre la aplicación del modelo de Kotter al "
        "escenario planteado, porque considero que un análisis que solo valide el marco teórico "
        "aporta poco.")

    add_paragraph_apa(doc,
        "La primera se refiere a la secuencialidad. El modelo original supone un avance ordenado, "
        "pero en una entidad pública los pasos compiten por los mismos recursos escasos y ocurren "
        "en paralelo. La versión posterior del propio Kotter (2014), con sus ocho aceleradores "
        "continuos, describe mejor lo que efectivamente sucede.")

    add_paragraph_apa(doc,
        "La segunda tiene que ver con el supuesto de autoridad. Kotter formuló su modelo observando "
        "corporaciones donde el liderazgo elige su equipo, define incentivos y puede desvincular "
        "personal. Un director de entidad pública no dispone de ninguna de esas tres palancas en "
        "los mismos términos. Por eso el liderazgo adaptativo de Heifetz (1994), centrado en "
        "movilizar a las personas para que enfrenten el problema en lugar de resolverlo desde "
        "arriba, complementa mejor el modelo en este contexto que cualquier refuerzo de la "
        "autoridad formal.")

    add_paragraph_apa(doc,
        "La tercera se dirige al desenlace del caso. El numeral sexto reporta mejoras en eficiencia, "
        "transparencia y experiencia del ciudadano, pero no informa cómo se midieron ni en qué "
        "plazo. Insisto en el punto porque es donde más he visto fallar la evaluación de estos "
        "procesos: sin línea base previa a la intervención, cualquier mejora reportada es una "
        "afirmación sin respaldo. Y en el sector público, donde la legitimidad se construye "
        "justamente sobre la rendición de cuentas, ese vacío no es un detalle metodológico menor.")

    # ═══════════════════ CONCLUSIONES ═══════════════════
    add_heading_apa(doc, "Conclusiones", level=1)

    add_paragraph_apa(doc,
        "El análisis del caso permite formular cuatro conclusiones. La primera es que la "
        "resistencia al cambio en el sector público responde a incentivos racionales —riesgo "
        "personal, memoria de reformas fallidas, brechas de competencia y sistemas de medición "
        "desalineados— y no a una disposición negativa de los servidores. Gestionarla exige "
        "modificar esas condiciones, no solo comunicar mejor la visión.")

    add_paragraph_apa(doc,
        "La segunda es que la regulación desempeña un triple papel: habilita cuando otorga "
        "seguridad jurídica, como lo hizo la Ley 2213 de 2022 en el ámbito judicial; restringe "
        "cuando mide medios en lugar de resultados y termina, en palabras de Quintero Salazar "
        "(2025), subsidiando la resistencia a la modernización; y delimita cuando fija fronteras "
        "sustantivas que la tecnología no debe cruzar, como ocurre con el debido proceso frente a "
        "la automatización de decisiones.")

    add_paragraph_apa(doc,
        "La tercera es que la sostenibilidad no es la etapa final del proceso sino una condición "
        "de diseño. Depende de que el cambio quede formalizado en instrumentos institucionales, de "
        "que existan capacidades internas y documentación que reduzcan la dependencia de personas, "
        "de que se midan indicadores de adopción y no de instalación, y de que se sostengan "
        "comunidades de práctica capaces de sobrevivir a la rotación directiva.")

    add_paragraph_apa(doc,
        "La cuarta, y la que me parece más relevante para nuestra formación, es que la "
        "transformación digital del Estado es un proceso de gestión del cambio con soporte "
        "tecnológico, y no lo contrario. La tecnología está disponible y su costo desciende cada "
        "año. Lo escaso es la capacidad de alinear cultura, normativa, medición y liderazgo durante "
        "el tiempo suficiente para que el cambio se vuelva ordinario. Esa es, al final, la "
        "definición práctica de anclar el cambio en la cultura organizacional que propone el "
        "octavo paso del modelo.")

    # ═══════════════════ REFERENCIAS ═══════════════════
    doc.add_page_break()
    add_heading_apa(doc, "Referencias", level=1)

    referencias = [
        "Congreso de Colombia. (2012, 17 de octubre). Ley 1581 de 2012. Por la cual se dictan "
        "disposiciones generales para la protección de datos personales. Diario Oficial No. 48.587.",

        "Congreso de Colombia. (2014, 6 de marzo). Ley 1712 de 2014. Por medio de la cual se crea "
        "la Ley de Transparencia y del Derecho de Acceso a la Información Pública Nacional. "
        "Diario Oficial No. 49.084.",

        "Congreso de Colombia. (2022, 13 de junio). Ley 2213 de 2022. Por medio de la cual se "
        "establece la vigencia permanente del Decreto Legislativo 806 de 2020 y se adoptan medidas "
        "para implementar las tecnologías de la información y las comunicaciones en las actuaciones "
        "judiciales. Diario Oficial No. 52.064.",

        "Consejo Nacional de Política Económica y Social. (2019). Documento CONPES 3975. Política "
        "nacional para la transformación digital e inteligencia artificial. Departamento Nacional "
        "de Planeación.",

        "Constitución Política de Colombia. (1991). Artículos 6 y 121. Gaceta Constitucional "
        "No. 116.",

        "Heifetz, R. A. (1994). Leadership without easy answers. Harvard University Press.",

        "Heifetz, R. A., Grashow, A., & Linsky, M. (2009). The practice of adaptive leadership: "
        "Tools and tactics for changing your organization and the world. Harvard Business Press.",

        "Kotter, J. P. (1996). Leading change. Harvard Business School Press.",

        "Kotter, J. P. (2014). Accelerate: Building strategic agility for a faster-moving world. "
        "Harvard Business Review Press.",

        "Ministerio de Tecnologías de la Información y las Comunicaciones. (2018, 14 de junio). "
        "Decreto 1008 de 2018. Por el cual se establecen los lineamientos generales de la política "
        "de Gobierno Digital. Diario Oficial No. 50.624.",

        "Moore, M. H. (1995). Creating public value: Strategic management in government. "
        "Harvard University Press.",

        "Quintero Salazar, J. A. (2025). Transformación digital y liderazgo adaptativo en el sector "
        "eléctrico: una vía realista para mejorar la eficiencia y mitigar el alza de tarifas. "
        "Palermo Business Review, (31), 61-93.",

        "Rogers, E. M. (2003). Diffusion of innovations (5th ed.). Free Press.",

        "Singun, A., Jr. (2025). Unveiling the barriers to digital transformation in higher "
        "education institutions: A systematic literature review. Discover Education, 4(37). "
        "https://doi.org/10.1007/s44217-025-00430-9",
    ]

    for ref in referencias:
        add_reference(doc, ref)

    return doc


def main():
    output_dir = os.path.dirname(os.path.abspath(__file__))
    output_path = os.path.join(
        output_dir, "Oviedo_Alexander_Exoneracion_Caso_Kotter_ETD.docx")

    doc = build_document()
    doc.save(output_path)

    size_kb = os.path.getsize(output_path) / 1024
    print(f"Documento generado: {output_path}")
    print(f"Tamaño: {size_kb:.1f} KB")


if __name__ == "__main__":
    main()
