# Capacidades VERDE

Las frases presuponen que el usuario ha seleccionado exactamente el objeto o los objetos indicados. Las shapes son resumidas; la IA completa IDs reales, índices y valores explícitos.

## Objetos — 11

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| Cambiar propiedad | `pon los textos seleccionados en rojo` | `setProperty(selection,cTextColor,#ff0000)` | Cambia solo el color de texto de la selección. |
| Mover | `mueve los seleccionados 10 mm a la derecha` | `move(selection,dx:10,dy:0)` | Desplaza relativamente todos los seleccionados. |
| Resize | `haz los seleccionados a la mitad` | `resize(selection,0.5,0.5)` | Reduce ancho y alto al 50 %. |
| Borrar selección | `borra los objetos seleccionados` | `delete(selection)` | Elimina la selección en una transacción con Undo. |
| Crear TText | `crea un texto que ponga FACTURA` | `create(TText,{cText:"FACTURA"})` | Crea un texto usando defaults reales. |
| Crear TRectangle | `crea un rectángulo azul oscuro` | `create(TRectangle,{cBackgroundColor:#00008b})` | Crea un rectángulo sin objetos extra. |
| Crear TBarcode raíz | `crea un código de barras con contenido HEADER.numero` | `create(TBarcode,{cContent:HEADER.numero})` | Crea el barcode con el contenido solicitado. |
| Duplicate | `duplica los objetos seleccionados` | `duplicate(selection)` | Duplica la selección conservando propiedades. |
| Reorder | `trae los seleccionados al frente` | `reorder(selection,bringToFront)` | Cambia el orden de dibujo. |
| Align | `alinea arriba los objetos seleccionados` | `align(selection,top)` | Iguala el borde superior de la selección. |
| Distribute | `distribuye horizontalmente los seleccionados` | `distribute(selection,horizontal)` | Reparte sus posiciones horizontalmente. |

## Selección — 4

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| Un objeto seleccionado | `pon el seleccionado en negrita` | `setProperty(selection,lFontBold,true)` | Actúa sobre el único seleccionado. |
| Varios seleccionados | `mueve estos objetos 5 mm hacia abajo` | `move(selection,dx:0,dy:5)` | Actúa sobre toda la selección múltiple. |
| Todos los objetos de un tipo | `pon todos los textos en negrita` | `setProperty(ids:[todos los TText],lFontBold,true)` | Usa el inventario global, no solo la selección. |
| Objetos visuales dentro de TTable | `pon todos los textos en negrita` | `setProperty(ids:[TText raíz y de celdas],...)` | Incluye los TText anidados; el inventario final lo hizo 5/5. |

## TTable — 17

En operaciones sobre una tabla existente, seleccionar una sola `TTable` y nombrar siempre sección y línea cuando pueda haber más de una.

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| Crear TTable | `crea una tabla` | `create(TTable)` | Crea una tabla con secciones vacías. |
| Crear línea | `añade una línea de detalle` | `tableInsertLine(selection,detail,0)` | Crea una línea válida con una columna inicial. |
| Crear N columnas finales | `añade una línea de cabecera de cinco columnas` | `insertLine + 4×insertColumn` | La línea termina con cinco columnas, no seis. |
| Mover columna | `pon la tercera columna de la cabecera en primera posición` | `tableMoveColumn(header,0,2→0)` | Mueve la celda física dentro de esa línea. |
| Cambiar ancho | `pon a 60 mm la segunda columna del detalle` | `tableSetColumnWidth(detail,0,1,60)` | Cambia el ancho de esa columna física. |
| Eliminar columna | `elimina la tercera columna de la primera línea de detalle` | `tableDeleteColumn(detail,0,2)` | Elimina la columna indicada; no usar “la última” si hay varias líneas ambiguas. |
| Eliminar línea | `elimina la segunda línea de detalle` | `tableDeleteLine(detail,1)` | Elimina la línea concreta. |
| Mover línea | `mueve la segunda línea de detalle a la primera posición` | `tableMoveLine(detail,1→0)` | Reordena las líneas de esa sección. |
| Altura de línea | `pon la cabecera a 12 mm de alto` | `tableSetLineHeight(header,0,12)` | Fija la altura real de la línea. |
| Fondo de línea | `pon azul oscuro al fondo de la cabecera` | `tableSetLineBackground(header,0,#00008b)` | Cambia el fondo de la línea, no el fondo de sus textos. |
| Borde simple | `pon el borde de la línea de detalle azul y de 1 mm` | `tableSetLineBorderColor + tableSetLineBorderWidth` | Aplica color y grosor al borde de la línea. |
| Padding | `pon 2 mm de padding superior a la línea de detalle` | `tableSetLinePadding(detail,0,nTop,2)` | Ajusta el lado solicitado y normaliza la línea. |
| Redondeado | `redondea al 20 por ciento la cabecera` | `tableSetLineBorderRadius(header,0,20)` | Aplica el radio 0–100 de la línea. |
| Separadores | `activa los separadores verticales del detalle` | `tableSetLineVerticalSeparators(detail,0,true)` | Muestra separadores internos entre celdas. |
| Zebra | `activa zebra en el detalle con impares gris claro y pares blancos` | `zebraEnabled + zebraColor(odd) + zebraColor(even)` | Alterna los colores del detalle. |
| Condición | `muestra la línea de detalle solo si DETAIL.cantidad > 0` | `tableSetLineCondition(detail,0,"DETAIL.cantidad > 0")` | Guarda literalmente la condición de presentación. |
| Fórmulas de color | `usa IF(DETAIL.cantidad>10,"#ffeeee","#ffffff") para el fondo del detalle` | `tableSetLineBackgroundColorFormula(...)` | Guarda la fórmula sin evaluarla ni reescribirla. |

## Celdas — 2

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| Crear TText en celda | `en la segunda celda del detalle pon DETAIL.descripcion` | `create(TText,targetCell:detail/0/1,{cText:DETAIL.descripcion})` | Crea y vincula el texto real a esa celda. |
| Modificar objeto de celda | `alinea a la derecha cantidad y precio del detalle` | `2×setProperty(ids anidados,cTextAlign,right)` | Modifica los TText ya inventariados dentro de la tabla. |

## Datos — 6

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| HEADER.xxx | `crea un texto con el nombre del cliente` | `create(TText,{cText:HEADER.cliente})` | Usa el nombre exacto disponible. |
| DETAIL.xxx | `en la primera celda del detalle pon el código` | `create(TText,targetCell...,{cText:DETAIL.codigo})` | Enlaza el campo repetitivo real. |
| Texto fijo | `crea un texto que ponga TOTAL` | `create(TText,{cText:"TOTAL"})` | Crea un literal canónico. |
| Texto + campo | `crea un texto que ponga Factura: seguido del número` | `create(TText,{cText:"Factura: "+HEADER.numero})` | Conserva literal y referencia exacta. |
| Transform(fecha) | `crea un texto con la fecha formateada` | `create(TText,{cText:Transform(HEADER.fecha,"99/99/9999")})` | Usa la fórmula comprobada. |
| Campo inexistente seguro | `crea un texto con el teléfono del cliente` cuando no existe | `commands:[]` | No inventa el campo ni modifica el documento. |

## Planes — 2

| Capacidad | Orden del usuario | Command esperado | Resultado esperado |
|---|---|---|---|
| Un comando | `haz el seleccionado a la mitad` | `resize` | Es el patrón preferido y más estable. |
| Dos a cinco comandos | `alinea arriba y distribuye horizontalmente los seleccionados` | `align + distribute` | Ejecuta el plan corto de forma atómica y con un Undo. |

