# Plan de portado del Engine PHP a Harbour

Inventario ordenado por prioridad real para convertir el Engine actual a Harbour sin portar diseñador, endpoints web ni renderizado HTML. El orden respeta dependencias: cada pieza aparece antes de las clases que la usan.

| Orden | Archivo PHP | Qué hace | Qué usa | Quién lo usa | Dificultad | Estado |
|---:|---|---|---|---|---|---|
| 1 | `public/motor/clases/TBarcodeUtil.php` | Normaliza y genera datos de barcode. | Funciones de cadenas PHP. | `TBarcode.php`, `TFuncFormulas.php`. | Baja | Portado |
| 2 | `public/motor/clases/TImageUtil.php` | Resuelve imagen a origen renderizable. | Ficheros, MIME, base64, rutas. | `TImage.php`. | Media | Portado |
| 3 | `public/php/TObjectBase.php` | Base comun de objetos de plantilla. | `TContextoEjecucion`, datos de capa, formulas de color. | `TText`, `TRectangle`, `TEllipse`, `TLine`, `TBarcode`, `TImage`. | Media | Portado |
| 4 | `public/php/TRectangle.php` | Genera IR de rectangulos. | `TObjectBase`. | `TDocument.php`, `TTable.php`. | Baja | Portado |
| 5 | `public/php/TEllipse.php` | Genera IR de elipses. | `TObjectBase`. | `TDocument.php`. | Baja | Portado |
| 6 | `public/php/TLine.php` | Genera IR de lineas. | `TObjectBase`. | `TDocument.php`. | Baja | Portado |
| 7 | `public/php/TBarcode.php` | Genera IR de codigos de barras. | `TObjectBase`, `TBarcodeUtil`, `TContextoEjecucion`. | `TDocument.php`, `TTable.php`. | Media | Portado |
| 8 | `public/php/TImage.php` | Genera IR de imagenes. | `TObjectBase`, `TImageUtil`, `TContextoEjecucion`. | `TDocument.php`, `TTable.php`. | Media | Portado |
| 9 | `public/php/TText.php` | Genera IR de textos. | `TObjectBase`, `TContextoEjecucion`, evaluacion de formulas. | `TDocument.php`, `TTable.php`, `TMotorComposicion.php`. | Media | Portado |
| 10 | `public/php/TTable.php` | Genera IR de tablas con detalle y grupos. | `TRectangle`, `TText`, `TBarcode`, `TImage`, `TContextoEjecucion`. | `TDocument.php`, `TMotorComposicion.php`. | Muy alta | Portado |
| 11 | `public/php/TDocument.php` | Modelo del documento y fabrica de objetos. | `TText`, `TRectangle`, `TEllipse`, `TLine`, `TBarcode`, `TImage`, `TTable`. | `TPlantilla.php`, scripts de preview/export/tests. | Alta | Portado |
| 12 | `public/motor/clases/TConectorDatos.php` | Carga y normaliza datos de ejecucion legacy. | JSON, ficheros, variables `DataVar`, `DetalleVar`, `UserVar`, `AcumVar`. | `TConectorDatosReg.php`, `TContextoEjecucion.php`, `TMotorEjecucion.php`, tests. | Alta | Portado |
| 13 | `public/motor/clases/TConectorDatosReg.php` | Recibe datos runtime en memoria. | `TConectorDatos`, estructuras/registros VAR y LINE. | `TLLDominusPHP.php`, `TContextoEjecucion.php`, `TMotorEjecucion.php`, tests `datos_reg`. | Media | Portado |
| 14 | `public/motor/clases/TFuncFormulas.php` | Implementa funciones de formulas. | `TBarcodeUtil`, fechas, numeros, cadenas. | `TEvaluadorFormulas.php`. | Alta | Portado |
| 15 | `public/motor/clases/TEvaluadorFormulas.php` | Evalua formulas y condiciones. | `TFuncFormulas`, variables, contexto de pagina. | `TContextoEjecucion.php`, `validar_formula.php`, tests. | Muy alta | Portado |
| 16 | `public/motor/clases/TContextoEjecucion.php` | Mantiene contexto runtime. | `TConectorDatos`, `TConectorDatosReg`, `TEvaluadorFormulas`, acumuladores, paginas, capas. | Objetos PHP, `TTable.php`, `TMotorEjecucion.php`. | Muy alta | Portado |
| 17 | `public/motor/clases/TPlantilla.php` | Carga `.lbl` como documento. | `TDocument`, JSON, ficheros. | `TMotorEjecucion.php`, scripts de preview/export/tests. | Media | Portado |
| 18 | `public/motor/clases/TMotorComposicion.php` | Convierte objetos en renderizables. | Objetos con `generarRenderizable()`, `TContextoEjecucion`. | `TMotorEjecucion.php`. | Baja | Portado |
| 19 | `public/motor/clases/TDocumentoRenderizable.php` | Contenedor del documento IR. | Estructuras de paginas y avisos. | `TMotorPaginacion.php`, `TMotorEjecucion.php`, renderizadores/endpoints. | Baja | Portado |
| 20 | `public/motor/clases/TMotorPaginacion.php` | Agrupa renderizables en paginas. | `TDocumentoRenderizable`. | `TMotorEjecucion.php`, tests de paginacion. | Media | Portado |
| 21 | `public/motor/clases/TMotorEjecucion.php` | Orquesta ejecucion completa a IR. | `TPlantilla`, `TConectorDatos`, `TConectorDatosReg`, `TContextoEjecucion`, `TMotorComposicion`, `TMotorPaginacion`. | `index.php`, `preview.php`, `export_ir.php`, tests, futura API Harbour. | Alta | Portado |

## PHP que si debe portarse

- `public/motor/clases/TBarcodeUtil.php`: ya portado; dependencia de barcode y formulas.
- `public/motor/clases/TImageUtil.php`: ya portado; dependencia de imagenes.
- `public/php/TObjectBase.php`: ya portado; base comun de objetos.
- `public/php/TRectangle.php`: ya portado; objeto simple.
- `public/php/TEllipse.php`: ya portado; objeto simple.
- `public/php/TLine.php`: ya portado; objeto simple.
- `public/php/TBarcode.php`: ya portado; objeto con util de barcode.
- `public/php/TImage.php`: ya portado; objeto con util de imagen.
- `public/php/TText.php`: ya portado; objeto de texto.
- `public/php/TTable.php`: ya portado; cubierto por test Harbour focalizado en cabecera, detalle, pie y `DetalleVar`.
- `public/php/TDocument.php`: ya portado; carga y crea objetos Harbour por `cType`.
- `public/motor/clases/TConectorDatos.php`: ya portado; contrato base y compatibilidad legacy JSON.
- `public/motor/clases/TConectorDatosReg.php`: ya portado; conector definitivo de datos runtime en memoria para `TLLDominusPHP`.
- `public/motor/clases/TFuncFormulas.php`: ya portado; funciones de formulas cubiertas por test Harbour.
- `public/motor/clases/TEvaluadorFormulas.php`: ya portado; condiciones, expresiones y funciones runtime cubiertas por test Harbour.
- `public/motor/clases/TContextoEjecucion.php`: ya portado; contexto runtime probado con conector falso.
- `public/motor/clases/TPlantilla.php`: ya portado; carga datos normalizados o formato minimo `pagina/objetos`.
- `public/motor/clases/TMotorComposicion.php`: ya portado; delega en `generarRenderizable()` y registra avisos.
- `public/motor/clases/TDocumentoRenderizable.php`: ya portado; contenedor de paginas y tamano de salida.
- `public/motor/clases/TMotorPaginacion.php`: ya portado; pagina renderizables en documento IR.
- `public/motor/clases/TMotorEjecucion.php`: ya portado; orquesta report normal y etiquetas hasta IR.

## PHP que no debe portarse y por que

- `public/motor/index.php`: entrada web HTML; se sustituye por API Cliente/Engine.
- `public/motor/preview.php`: endpoint de preview real; se sustituye por llamada a Engine Harbour.
- `public/motor/export_ir.php`: endpoint JSON de IR; no se porta literal, solo su contrato.
- `public/motor/validar_formula.php`: endpoint web; la logica portable esta en `TEvaluadorFormulas.php`.
- `public/motor/demo_data.php`: datos demo para preview; no pertenece al nucleo.
- `public/motor/recurso_existe.php`: helper web de recursos; no pertenece al nucleo.
- `public/motor/clases/TRenderizador.php`: base de renderizado HTML actual; el port necesita un renderer Harbour/GDI nuevo.
- `public/motor/clases/TSalidaHtml.php`: salida HTML; no forma parte de `.lbl + datos -> IR`.
- `public/motor/herramientas/*.php`: herramientas, generadores y analisis LL12; no son runtime del Engine.
- `public/motor/tests/**/*.php`: pruebas PHP actuales; se reemplazan por pruebas Harbour equivalentes.

Fase actual completada: entrada Harbour al motor consolidada en `TLLEngine.prg`; usa `TConectorDatosReg.prg` y `TMotorEjecucion.prg` directamente. `RunEngine()` devuelve el documento intermedio, no HTML.
