paperless-ngx/NOTION_INTEGRATION_GUIDE.md
Claude e7b426caf1
fix(linting): corrige errores de formato y sintaxis detectados por pre-commit
- Elimina import duplicado de DeletionRequestViewSet en urls.py (F811)
- Aplica formato automático con ruff format a 12 archivos Python
- Agrega comas finales faltantes (COM812) en 74 ubicaciones
- Normaliza formato de dependencias en pyproject.toml
- Corrige ortografía en archivos de documentación (codespell)

Errores corregidos:
- src/paperless/urls.py: Import duplicado de DeletionRequestViewSet
- 74 violaciones de COM812 (comas finales faltantes)
- Formato inconsistente en múltiples archivos Python

Este commit asegura que el código pase el linting check de pre-commit
y resuelve los problemas de formato introducidos en el commit anterior.

Archivos Python reformateados: 12
Archivos de documentación corregidos: 35
Comas finales agregadas: 74
2025-11-17 19:17:49 +00:00

22 KiB

📘 Guía de Integración con Notion

Documento: Guía completa para integrar IntelliDocs-ngx Roadmap 2026 con Notion Fecha: 2025-11-09 Autoridad: Siguiendo directivas de agents.md Preferencia del Director: Notion sobre Jira/Confluence


🎯 Visión General

Esta guía explica cómo integrar el GitHub Project de IntelliDocs-ngx con Notion para crear un workspace centralizado de gestión de proyectos, combinando lo mejor de ambas plataformas:

  • GitHub Projects: Control técnico de issues, PRs, código
  • Notion: Documentación, planificación estratégica, comunicación con stakeholders

🏗️ Arquitectura de Integración

┌─────────────────────────────────────────────────────────────┐
│                    NOTION WORKSPACE                          │
│  📊 Roadmap Dashboard | 📋 Tasks Database | 📖 Docs Wiki    │
└─────────────────────┬───────────────────────────────────────┘
                      │
                      │ Sync (2-way)
                      │
┌─────────────────────▼───────────────────────────────────────┐
│               GITHUB PROJECT                                 │
│  🔨 Issues | 🔀 Pull Requests | 📈 Project Board            │
└─────────────────────────────────────────────────────────────┘

🚀 Paso 1: Configurar Notion Workspace

1.1 Crear Workspace

  1. Ir a https://notion.so
  2. Crear cuenta o login
  3. Crear nuevo workspace: "IntelliDocs-ngx"
  4. Invitar a @dawnsystem como admin

1.2 Estructura del Workspace

Crear la siguiente jerarquía de páginas:

🏠 IntelliDocs-ngx Home
├── 📊 Roadmap 2026
│   ├── 🗺️ Timeline View
│   ├── 📋 Tasks Database
│   ├── 📈 Epic Dashboard
│   └── 📊 Progress Reports
├── 📚 Documentation
│   ├── 📘 Technical Docs
│   ├── 📗 User Guides
│   ├── 📕 API Reference
│   └── 📙 Architecture
├── 🎯 OKRs & Goals
│   ├── 2026 Objectives
│   └── KPIs Dashboard
├── 👥 Team
│   ├── Team Directory
│   └── Meeting Notes
└── 💬 Communications
    ├── Weekly Updates
    └── Announcements

📊 Paso 2: Crear Database de Tasks en Notion

2.1 Estructura de la Database

Crear una Full-page database llamada "Roadmap 2026 Tasks" con las siguientes propiedades:

Property Name Type Options/Config
Task ID Title Formato: TSK-XXXX
Status Select Backlog, Planned, In Progress, In Review, Testing, Done, Blocked
Epic Select EPIC 1-12 (ver ROADMAP_2026.md)
Prioridad Select 🔴 Crítica, 🟠 Alta, 🟡 Media, 🟢 Baja
Trimestre Select Q1, Q2, Q3, Q4 2026
Estimación Number Días de trabajo
Progreso Number Porcentaje (0-100)
Fecha Inicio Date -
Fecha Fin Date -
Responsible Person -
GitHub Issue URL Link al issue en GitHub
GitHub PR URL Link al PR cuando aplique
Tags Multi-select backend, frontend, mobile, ml-ai, ocr, security, devops
Notas Text Notas adicionales
Subtareas Relation Link a otra database de subtareas

2.2 Template de Task

Crear un template para nuevas tasks:

# {{Task ID}}: {{Título}}

## 📋 Descripción
[Descripción detallada de la tarea]

## 🎯 Epic
{{Epic}}

## 📅 Timeline
- **Inicio:** {{Fecha Inicio}}
- **Fin estimado:** {{Fecha Fin}}
- **Trimestre:** {{Trimestre}}

## 👤 Responsible
{{Responsible}}

## ✅ Subtareas
- [ ] Subtarea 1
- [ ] Subtarea 2
- [ ] Subtarea 3

## 📝 Criterios de Aceptación
- [ ] Criterio 1
- [ ] Criterio 2
- [ ] Criterio 3

## 🔗 Links
- GitHub Issue: {{GitHub Issue}}
- GitHub PR: {{GitHub PR}}
- Documentación relacionada:

## 💬 Notas
[Notas adicionales, decisiones de diseño, etc.]

🔗 Paso 3: Integración GitHub ↔ Notion

Opción A: Usando Notion API + GitHub Actions (Recomendado)

3.1 Crear Integración en Notion

  1. Ir a https://www.notion.so/my-integrations

  2. Click en "+ New integration"

  3. Configurar:

    • Name: IntelliDocs GitHub Sync
    • Associated workspace: IntelliDocs-ngx
    • Type: Internal integration
    • Capabilities:
      • Read content
      • Update content
      • Insert content
  4. Guardar y copiar el Internal Integration Token

3.2 Compartir Database con la Integración

  1. Abrir la database "Roadmap 2026 Tasks" en Notion
  2. Click en "..." (menú)
  3. Seleccionar "Add connections"
  4. Buscar y seleccionar "IntelliDocs GitHub Sync"

3.3 Obtener Database ID

  1. Abrir la database en el navegador
  2. El URL será: https://notion.so/{{workspace}}/{{database_id}}?v={{view_id}}
  3. Copiar el database_id

3.4 Crear GitHub Action para Sync

Crear .github/workflows/notion-sync.yml:

name: Sync GitHub Issues to Notion

on:
  issues:
    types: [opened, edited, closed, reopened, assigned]
  pull_request:
    types: [opened, closed, merged]
  schedule:
    # Sync cada hora
    - cron: '0 * * * *'
  workflow_dispatch:

jobs:
  sync-to-notion:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: |
          pip install notion-client PyGithub

      - name: Sync to Notion
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_DATABASE_ID: ${{ secrets.NOTION_DATABASE_ID }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          python .github/scripts/sync_github_to_notion.py

3.5 Script de Sincronización

Crear .github/scripts/sync_github_to_notion.py:

#!/usr/bin/env python3
"""
Sincroniza GitHub Issues con Notion Database
"""

import os
from notion_client import Client
from github import Github

# Configuración
NOTION_TOKEN = os.environ['NOTION_TOKEN']
NOTION_DATABASE_ID = os.environ['NOTION_DATABASE_ID']
GITHUB_TOKEN = os.environ['GITHUB_TOKEN']
REPO_NAME = 'dawnsystem/IntelliDocs-ngx'

# Clientes
notion = Client(auth=NOTION_TOKEN)
github = Github(GITHUB_TOKEN)
repo = github.get_repo(REPO_NAME)

def get_epic_from_labels(labels):
    """Extrae el Epic de los labels del issue"""
    for label in labels:
        if label.name.startswith('epic:'):
            return label.name.replace('epic: ', '').upper()
    return 'Sin Epic'

def get_priority_from_labels(labels):
    """Extrae la prioridad de los labels"""
    priority_map = {
        'priority: critical': '🔴 Crítica',
        'priority: high': '🟠 Alta',
        'priority: medium': '🟡 Media',
        'priority: low': '🟢 Baja'
    }
    for label in labels:
        if label.name in priority_map:
            return priority_map[label.name]
    return '🟡 Media'

def get_quarter_from_labels(labels):
    """Extrae el trimestre de los labels"""
    for label in labels:
        if label.name.startswith('Q'):
            return label.name
    return 'Backlog'

def get_status_from_issue(issue):
    """Determina el status basado en el estado del issue"""
    if issue.state == 'closed':
        return 'Done'
    elif issue.pull_request:
        return 'In Review'
    elif issue.assignee:
        return 'In Progress'
    else:
        return 'Planned'

def sync_issue_to_notion(issue):
    """Sincroniza un issue de GitHub a Notion"""

    # Buscar si ya existe en Notion
    results = notion.databases.query(
        database_id=NOTION_DATABASE_ID,
        filter={
            "property": "GitHub Issue",
            "url": {"equals": issue.html_url}
        }
    )

    # Preparar propiedades
    properties = {
        "Task ID": {"title": [{"text": {"content": f"TSK-{issue.number}"}}]},
        "Status": {"select": {"name": get_status_from_issue(issue)}},
        "Epic": {"select": {"name": get_epic_from_labels(issue.labels)}},
        "Prioridad": {"select": {"name": get_priority_from_labels(issue.labels)}},
        "Trimestre": {"select": {"name": get_quarter_from_labels(issue.labels)}},
        "GitHub Issue": {"url": issue.html_url},
    }

    # Agregar responsible si existe
    if issue.assignee:
        properties["Responsible"] = {
            "people": [{"object": "user", "name": issue.assignee.login}]
        }

    # Agregar PR si existe
    if issue.pull_request:
        properties["GitHub PR"] = {"url": issue.pull_request.html_url}

    # Crear o actualizar en Notion
    if results['results']:
        # Actualizar existente
        page_id = results['results'][0]['id']
        notion.pages.update(page_id=page_id, properties=properties)
        print(f"✅ Updated: {issue.title}")
    else:
        # Crear nuevo
        notion.pages.create(
            parent={"database_id": NOTION_DATABASE_ID},
            properties=properties,
            children=[
                {
                    "object": "block",
                    "type": "heading_2",
                    "heading_2": {
                        "rich_text": [{"type": "text", "text": {"content": "Descripción"}}]
                    }
                },
                {
                    "object": "block",
                    "type": "paragraph",
                    "paragraph": {
                        "rich_text": [{"type": "text", "text": {"content": issue.body or "Sin descripción"}}]
                    }
                }
            ]
        )
        print(f"✨ Created: {issue.title}")

def main():
    """Función principal"""
    print("🔄 Sincronizando GitHub Issues a Notion...")

    # Obtener todos los issues abiertos
    issues = repo.get_issues(state='all')

    count = 0
    for issue in issues:
        # Solo sincronizar issues con label de Epic
        if any(label.name.startswith('epic:') for label in issue.labels):
            sync_issue_to_notion(issue)
            count += 1

    print(f"\n✅ Sincronización completa: {count} issues procesados")

if __name__ == '__main__':
    main()

3.6 Configurar Secrets en GitHub

  1. Ir a: https://github.com/dawnsystem/IntelliDocs-ngx/settings/secrets/actions
  2. Agregar secrets:
    • NOTION_TOKEN: Token de la integración de Notion
    • NOTION_DATABASE_ID: ID de la database de Notion

Alternativa Manual (Si no quieres GitHub Actions)

Si prefieres no usar GitHub Actions, puedes sincronizar manualmente:

  1. Ejecutar el script Python localmente:
python .github/scripts/sync_github_to_notion.py
  1. Programarlo con cron (Linux/Mac):
# Ejecutar cada hora
0 * * * * cd /path/to/repo && python .github/scripts/sync_github_to_notion.py
  1. O usar un scheduled task en Windows

Esta opción es 100% gratuita y no require servicios de terceros de pago.


📊 Paso 4: Configurar Vistas en Notion

Vista 1: Timeline (Gantt)

  1. En la database, click en "+ New view"
  2. Seleccionar "Timeline"
  3. Configurar:
    • Name: Timeline View
    • Date property (start): Fecha Inicio
    • Date property (end): Fecha Fin
    • Group by: Epic
    • Color by: Prioridad

Vista 2: Kanban Board

  1. Crear nueva vista: "Kanban Board"
  2. Tipo: Board
  3. Configurar:
    • Group by: Status
    • Sort by: Prioridad
    • Card preview: Task ID, Responsible, Fecha Fin

Vista 3: Por Epic

  1. Crear vista: "Por Epic"
  2. Tipo: Board
  3. Group by: Epic
  4. Sub-group by: Status

Vista 4: Calendar

  1. Crear vista: "Calendario"
  2. Tipo: Calendar
  3. Date property: Fecha Inicio
  4. Color by: Epic

Vista 5: Tabla Completa

  1. Crear vista: "Tabla Completa"
  2. Tipo: Table
  3. Mostrar todas las propiedades
  4. Sort by: Task ID

📈 Paso 5: Dashboard Ejecutivo en Notion

Crear una página "Epic Dashboard" con:

5.1 Progress Bars por Epic

Usar la función Progress Bar de Notion:

EPIC 1: Testing y QA
████████████░░░░░░░░ 60% (12/20 tasks)

EPIC 2: API Docs
████████████████████ 100% (8/8 tasks)

EPIC 3: Performance
███████░░░░░░░░░░░░░ 35% (7/20 tasks)

5.2 Linked Database Views

Insertar vistas filtradas de la database principal:

## 🔥 Tareas Críticas
[Linked database: Filter by Prioridad = Crítica]

## 🚀 En Progreso Esta Semana
[Linked database: Filter by Status = In Progress]

## ⏰ Vencimientos Próximos (7 días)
[Linked database: Filter by Fecha Fin within next 7 days]

5.3 KPIs y Métricas

Usar fórmulas de Notion para calcular métricas:

📊 Total Tasks: {{count(all)}}
✅ Completadas: {{count(status = Done)}}
🔨 En Progreso: {{count(status = In Progress)}}
📅 Planificadas: {{count(status = Planned)}}

📈 Progreso General: {{count(Done) / count(all) * 100}}%

🗂️ Paso 6: Organizar Documentación en Notion

6.1 Migrar Documentos Markdown a Notion

Opción A: Import manual

  1. Copiar contenido de archivos .md
  2. Pegar en páginas de Notion
  3. Notion convierte Markdown automáticamente

Opción B: Usando markdown-to-notion

npm install -g markdown-to-notion

markdown-to-notion \
  --token YOUR_NOTION_TOKEN \
  --page-id YOUR_PAGE_ID \
  --file ROADMAP_2026.md

6.2 Estructura de Documentación

📚 Documentation
├── 📘 Technical Docs
│   ├── ROADMAP_2026.md (importado)
│   ├── IMPROVEMENT_ROADMAP.md (importado)
│   ├── BITACORA_MAESTRA.md (sincronizado)
│   └── agents.md (referencia)
├── 📗 User Guides
│   ├── Getting Started
│   ├── Mobile App Guide
│   └── API Usage
├── 📕 API Reference
│   └── Swagger docs (embedded)
└── 📙 Architecture
    ├── System Architecture
    ├── Database Schema
    └── Deployment Diagram

🔔 Paso 7: Notificaciones y Comunicación

7.1 Configurar Notificaciones

En Notion Settings:

  1. My notifications:

    • Updates to pages I'm subscribed to
    • @mentions
    • Comments and replies
  2. Email notifications:

    • Daily digest (7:00 AM)
    • Real-time (solo para @mentions críticos)

7.2 Integrar con Slack (opcional)

Si el equipo usa Slack:

  1. Instalar Notion app en Slack

  2. Conectar workspace de Notion

  3. Configurar notificaciones:

    /notion subscribe #intellidocs-dev to "Roadmap 2026 Tasks"
    
  4. Notificar en Slack cuando:

    • Nueva task creada
    • Task movida a "Done"
    • Comentario en task con prioridad crítica

📊 Paso 8: Reporting y Weekly Updates

8.1 Template de Weekly Update

Crear una database "Weekly Updates" con template:

# Week {{week_number}} - {{date_range}}

## 🎯 Objetivos de la Semana
- [ ] Objetivo 1
- [ ] Objetivo 2
- [ ] Objetivo 3

## ✅ Completado
{{linked_view: tasks done this week}}

## 🔨 En Progreso
{{linked_view: tasks in progress}}

## 🚫 Bloqueadores
- Bloqueador 1: [descripción]
- Bloqueador 2: [descripción]

## 📈 Métricas
- **Velocity:** X tasks/semana
- **Burn rate:** Y% del sprint
- **Progreso general:** Z%

## 🎯 Próxima Semana
- Plan para semana siguiente

8.2 Monthly Reports

Template para reportes mensuales:

# Monthly Report: {{month}} {{year}}

## 📊 Executive Summary
[Resumen de alto nivel para stakeholders]

## ✅ Epics Completados
{{linked_view: epics completed this month}}

## 🎯 Progress vs Plan
- **Planned:** X tasks
- **Completed:** Y tasks
- **Variance:** Z%

## 🌟 Highlights
- Logro importante 1
- Logro importante 2
- Logro importante 3

## ⚠️ Challenges
- Desafío 1 y cómo se resolvió
- Desafío 2 (en progreso)

## 🔮 Next Month Forecast
[Proyecciones para próximo mes]

## 📎 Attachments
- Screenshots
- Charts
- Links

🎨 Paso 9: Personalización y Branding

9.1 Cover Images

Agregar covers personalizados:

  • Logo de IntelliDocs-ngx en página principal
  • Imágenes temáticas por Epic
  • Usar Unsplash integration de Notion

9.2 Icons

Asignar íconos a páginas:

  • 🏠 Home
  • 📊 Roadmap
  • 📚 Docs
  • 🎯 Goals
  • 👥 Team
  • 💬 Communications

9.3 Colores y Themes

Usar colores consistentes:

  • 🔴 Crítico / Urgente
  • 🟠 Alta prioridad
  • 🟡 Media prioridad
  • 🟢 Baja prioridad
  • 🔵 Información / Docs
  • 🟣 Innovación / R&D

🔒 Paso 10: Permisos y Seguridad

10.1 Configurar Permisos

  1. Workspace SettingsMembers & Groups

  2. Crear grupos:

    • Admins: Full access
    • Developers: Can edit
    • Stakeholders: Can comment
    • Guests: Can view
  3. Asignar permisos por página:

    • Roadmap: Developers (edit), Stakeholders (view)
    • Docs: Everyone (view), Developers (edit)
    • Team: Everyone (edit)

10.2 Compartir con Externos

Para compartir con usuarios sin cuenta:

  1. Click en "Share" en la página

  2. Seleccionar "Share to web"

  3. Configurar:

    • Allow search engines to index
    • Allow comments
    • Allow editing
  4. Generar link público (opcional)


📱 Paso 11: Mobile Access

Notion Mobile Apps

  1. Descargar Notion app:

    • iOS: App Store
    • Android: Google Play
  2. Login con misma cuenta

  3. Features disponibles en mobile:

    • Ver y editar tasks
    • Actualizar status
    • Comentar
    • Recibir notificaciones
    • Offline mode (sync al reconectar)

🔄 Paso 12: Workflow Completo

Flujo de Trabajo Típico

  1. Nueva Feature Request:

    User → GitHub Issue → Auto-sync → Notion Task
                                           ↓
                                      Priorizada en Planning
                                           ↓
                                      Asignada a Developer
    
  2. Durante Desarrollo:

    Developer → Move to "In Progress" en Notion
                      ↓
                 Updates sincronizados a GitHub
                      ↓
                 Creates PR en GitHub
                      ↓
                 Status en Notion: "In Review"
    
  3. Post-Merge:

    PR merged → Issue closed → Status: "Done"
                                      ↓
                             Updated en Notion
                                      ↓
                         Reflected en Dashboard
    

💡 Tips y Best Practices

1. Mantener Notion como "Source of Truth" para Planning

  • Planificación estratégica en Notion
  • Tracking técnico en GitHub
  • Sync automático entre ambos

2. Usar Templates

  • Template para tasks
  • Template para meeting notes
  • Template para weekly updates

3. Embeds útiles

  • Embed Figma designs
  • Embed Google Sheets (para budgets)
  • Embed Loom videos (demos)

4. Databases Relacionadas

  • Link tasks a epics
  • Link epics a OKRs
  • Link docs a tasks

5. Mantener Limpio

  • Archivar tasks viejas
  • Review mensual de docs
  • Actualizar templates según feedback

🆚 Comparación: Notion vs Jira/Confluence

Feature Notion Jira + Confluence Ganador
Facilidad de uso Notion
Flexibilidad Notion
Features de PM Jira
Documentación Notion
Integraciones Jira
Costo $8/user/mes $7.75/user/mes Empate
Curva de aprendizaje Suave Pronunciada Notion
Reporting Jira

Recomendación

Notion es la mejor opción para IntelliDocs-ngx porque:

  1. Equipo pequeño (1-5 personas)
  2. Necesidad de flexibilidad
  3. Documentación como prioridad
  4. Integración sencilla con GitHub

📚 Recursos Adicionales

Tutoriales Notion

Integraciones (100% Gratuitas)

Comunidad

  • Reddit: r/Notion
  • Discord: Notion Community
  • Twitter: @NotionHQ

Checklist de Setup Completo

Notion Setup

  • Workspace creado
  • Estructura de páginas configurada
  • Database "Roadmap 2026 Tasks" creada
  • Propiedades configuradas (12 campos)
  • Templates creados (task, weekly update, monthly report)
  • Vistas creadas (Timeline, Kanban, Calendar, Table)
  • Dashboard ejecutivo configurado

Integración (100% Gratuita)

  • Notion API integration creada (GRATIS)
  • GitHub Action configurada (GRATIS)
  • Secrets configurados en GitHub
  • Primer sync exitoso con script Python (GRATIS)
  • SIN servicios de pago (Zapier/Make eliminados)

Documentación

  • Markdown docs migrados a Notion
  • Wiki de documentación organizada
  • API reference embedded

Equipo

  • Miembros invitados
  • Permisos configurados
  • Onboarding docs creados
  • Primera reunión de planning agendada

🎯 Próximos Pasos

  1. Semana 1: Setup básico de Notion + sync
  2. Semana 2: Migrar docs y crear templates
  3. Semana 3: Onboarding del equipo
  4. Semana 4: Primera iteración con feedback

Soporte: Director: @dawnsystem Fecha: 2025-11-09 Versión: 1.0

Nota: Este documento es parte de la iniciativa del ROADMAP_2026.md y sigue las directivas de agents.md