- 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
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
- Ir a https://notion.so
- Crear cuenta o login
- Crear nuevo workspace: "IntelliDocs-ngx"
- 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
-
Click en "+ New integration"
-
Configurar:
- Name: IntelliDocs GitHub Sync
- Associated workspace: IntelliDocs-ngx
- Type: Internal integration
- Capabilities:
- ✅ Read content
- ✅ Update content
- ✅ Insert content
-
Guardar y copiar el Internal Integration Token
3.2 Compartir Database con la Integración
- Abrir la database "Roadmap 2026 Tasks" en Notion
- Click en "..." (menú)
- Seleccionar "Add connections"
- Buscar y seleccionar "IntelliDocs GitHub Sync"
3.3 Obtener Database ID
- Abrir la database en el navegador
- El URL será:
https://notion.so/{{workspace}}/{{database_id}}?v={{view_id}} - 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
- Ir a:
https://github.com/dawnsystem/IntelliDocs-ngx/settings/secrets/actions - Agregar secrets:
NOTION_TOKEN: Token de la integración de NotionNOTION_DATABASE_ID: ID de la database de Notion
✅ Alternativa Manual (Si no quieres GitHub Actions)
Si prefieres no usar GitHub Actions, puedes sincronizar manualmente:
- Ejecutar el script Python localmente:
python .github/scripts/sync_github_to_notion.py
- Programarlo con cron (Linux/Mac):
# Ejecutar cada hora
0 * * * * cd /path/to/repo && python .github/scripts/sync_github_to_notion.py
- 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)
- En la database, click en "+ New view"
- Seleccionar "Timeline"
- Configurar:
- Name: Timeline View
- Date property (start): Fecha Inicio
- Date property (end): Fecha Fin
- Group by: Epic
- Color by: Prioridad
Vista 2: Kanban Board
- Crear nueva vista: "Kanban Board"
- Tipo: Board
- Configurar:
- Group by: Status
- Sort by: Prioridad
- Card preview: Task ID, Responsible, Fecha Fin
Vista 3: Por Epic
- Crear vista: "Por Epic"
- Tipo: Board
- Group by: Epic
- Sub-group by: Status
Vista 4: Calendar
- Crear vista: "Calendario"
- Tipo: Calendar
- Date property: Fecha Inicio
- Color by: Epic
Vista 5: Tabla Completa
- Crear vista: "Tabla Completa"
- Tipo: Table
- Mostrar todas las propiedades
- 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
- Copiar contenido de archivos .md
- Pegar en páginas de Notion
- 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:
-
My notifications:
- ✅ Updates to pages I'm subscribed to
- ✅ @mentions
- ✅ Comments and replies
-
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:
-
Instalar Notion app en Slack
-
Conectar workspace de Notion
-
Configurar notificaciones:
/notion subscribe #intellidocs-dev to "Roadmap 2026 Tasks" -
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
-
Workspace Settings → Members & Groups
-
Crear grupos:
- Admins: Full access
- Developers: Can edit
- Stakeholders: Can comment
- Guests: Can view
-
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:
-
Click en "Share" en la página
-
Seleccionar "Share to web"
-
Configurar:
- ⬜ Allow search engines to index
- ✅ Allow comments
- ⬜ Allow editing
-
Generar link público (opcional)
📱 Paso 11: Mobile Access
Notion Mobile Apps
-
Descargar Notion app:
- iOS: App Store
- Android: Google Play
-
Login con misma cuenta
-
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
-
Nueva Feature Request:
User → GitHub Issue → Auto-sync → Notion Task ↓ Priorizada en Planning ↓ Asignada a Developer -
Durante Desarrollo:
Developer → Move to "In Progress" en Notion ↓ Updates sincronizados a GitHub ↓ Creates PR en GitHub ↓ Status en Notion: "In Review" -
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:
- Equipo pequeño (1-5 personas)
- Necesidad de flexibilidad
- Documentación como prioridad
- Integración sencilla con GitHub
📚 Recursos Adicionales
Tutoriales Notion
- Notion Academy: https://www.notion.so/help/guides
- YouTube: Notion product management
- Templates: https://www.notion.so/templates
Integraciones (100% Gratuitas)
- Notion API: https://developers.notion.com/ (GRATIS)
- GitHub Actions: https://github.com/features/actions (GRATIS - 2000 min/mes)
- Python Notion Client: https://github.com/ramnes/notion-sdk-py (GRATIS, open source)
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
- Semana 1: Setup básico de Notion + sync
- Semana 2: Migrar docs y crear templates
- Semana 3: Onboarding del equipo
- 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