# `gui/controller.py` ## Propósito Controlador principal de la GUI: enlaza la vista con los servicios de aplicación, maneja selección de carpetas/CSV, abre el selector de campos y ejecuta el procesamiento por radicado. ## API pública ### `class AppController` - `__init__(view, service)`: inicializa y vincula callbacks. - `on_select_root()`: abre diálogo de carpeta para la raíz. - `on_select_csv()`: abre diálogo para guardar CSV. - `on_process()`: coordina selección de campos y el procesamiento por radicado. ## Flujo 1) Construye schema/muestra de factura cuando es necesario. 2) Abre `FieldSelectorDialog` para elegir campos (y alias). 3) Relanza el procesamiento por radicado, emite JSON y escribe CSV incremental. ## Ejemplo ```python from gui.view import InvoiceAppView from gui.controller import AppController from application.service import InvoiceProcessingService from application.strategies import OllamaExtractor view = InvoiceAppView() svc = InvoiceProcessingService(OllamaExtractor()) controller = AppController(view, svc) view.mainloop() ```