# Formato JSON para importar tareas a un tablero (Multi-Site Manager) Generá ÚNICAMENTE un objeto JSON válido con la forma que se describe abajo. Sin markdown, sin bloques ```json, sin texto antes ni después. ## Estructura raíz { "options": { ... }, // opcional — comportamiento de la importación "lists": [ ... ], // opcional — columnas del tablero "cards": [ ... ], // las tareas "milestones": [ ... ] // opcional — hitos del timeline (vista Gantt) } Atajo: si sólo tenés tareas, el JSON puede ser directamente el array de cards. ## cards[] — una tarea | campo | tipo | req | descripción | |-------------|----------|-----|-----------------------------------------------------------------------------| | title | string | sí | Texto de la tarjeta. | | description | string | no | Detalle largo. Acepta markdown. | | list | string | no | Nombre de la columna destino. Si no existe, se crea. Default: primera columna del tablero. | | labels | string[] | no | Nombres de etiqueta. Las que no existan se crean con un color automático. | | assignee | string | no | Email de un miembro del sitio. Si no coincide, la tarea queda sin asignar. | | start_date | string | no | YYYY-MM-DD. Inicio de la barra en el Gantt. | | due_date | string | no | YYYY-MM-DD. Fin de la barra en el Gantt y fecha de vencimiento. | | cover_color | string | no | Hex #rrggbb. Franja de color arriba de la tarjeta. | | completed | boolean | no | true = la tarea ya está hecha. | | is_epic | boolean | no | true = épica; agrupa sus hijas en el Gantt. Se activa solo si hay children. | | children | card[] | no | Subtareas anidadas, mismo formato. Máximo 5 niveles. | | ref | string | no | Identificador local (no se guarda) para referenciar esta tarea desde otra. | | parent | string | no | ref de la tarea padre. Alternativa plana a anidar con children. | Atajo: una tarea puede ser un string suelto — "Revisar copy" equivale a { "title": "Revisar copy" }. ## milestones[] — hitos del timeline | campo | tipo | req | descripción | |-------------|---------|-----|---------------------------------------------------| | title | string | sí | Nombre del hito. | | date | string | sí | YYYY-MM-DD. Posición de la línea en el timeline. | | color | string | no | Hex #rrggbb. Default #6366f1. | | description | string | no | Detalle opcional. | | completed | boolean | no | true = hito ya alcanzado. | ## lists[] — columnas del kanban | campo | tipo | req | descripción | |-------|--------|-----|-----------------------------------------| | name | string | sí | Nombre de la columna. | | color | string | no | Hex #rrggbb del punto de la columna. | Las columnas se crean en el orden del array, después de las que ya existen. ## options | campo | tipo | default | descripción | |-----------------------|---------|---------|-----------------------------------------------------------------------------------| | default_list | string | — | Columna para las tareas que no definen "list". | | create_missing_lists | boolean | true | Si es false, las tareas con columna desconocida van a la columna por defecto. | | create_missing_labels | boolean | true | Si es false, las etiquetas que no existan en el sitio se omiten. | ## Reglas - Fechas SIEMPRE en formato YYYY-MM-DD. Nunca "15/08/2026", "agosto" ni fechas relativas. - Colores SIEMPRE en hex de 6 dígitos con # (ej. #6366f1). - Máximo 500 tareas y 100 hitos por archivo. - Para que una tarea aparezca en el Gantt necesita start_date y/o due_date. - Para jerarquías usá children (anidado) o ref + parent (plano) — no ambos en la misma tarea. - No inventes emails: si no conocés los miembros del sitio, omití assignee. - La importación SÓLO agrega. Nunca borra ni modifica tareas existentes. - Las tareas se agregan al final de cada columna, en el orden del array. ## Ejemplo completo { "options": { "default_list": "Por hacer", "create_missing_lists": true, "create_missing_labels": true }, "lists": [ { "name": "Por hacer", "color": "#6366f1" }, { "name": "En progreso", "color": "#f59e0b" }, { "name": "Listo", "color": "#10b981" } ], "cards": [ { "ref": "auth", "title": "Autenticación", "description": "Login con email + Google", "list": "En progreso", "labels": ["backend", "urgente"], "assignee": "alguien@ejemplo.com", "start_date": "2026-08-01", "due_date": "2026-08-15", "cover_color": "#8b5cf6", "children": [ { "title": "Magic link", "start_date": "2026-08-01", "due_date": "2026-08-07" }, { "title": "OAuth Google", "start_date": "2026-08-08", "due_date": "2026-08-15" } ] }, { "title": "Definir esquema de la DB", "list": "Listo", "completed": true }, { "title": "Escribir tests de la API", "parent": "auth", "labels": ["testing"], "due_date": "2026-08-20" }, "Revisar copy del landing" ], "milestones": [ { "title": "Beta pública", "date": "2026-09-01", "color": "#8b5cf6" }, { "title": "Lanzamiento", "date": "2026-10-15" } ] }