""" Helpers para construir respuestas de scan y commit (formato unificado). """ from typing import Dict, Any, List, Optional def scan_result( job_id: str, processed_rows: int, error_count: int, errors_detail: List[Dict[str, Any]], ) -> Dict[str, Any]: """Respuesta de scan_file (waiting_confirmation).""" return { "status": "waiting_confirmation", "job_id": job_id, "total_rows": processed_rows, "error_count": error_count, "valid_rows": processed_rows - error_count, "errors": errors_detail, } def commit_result( status: str, inserted: int, skipped_invalid: int, skipped_missing_fk: int, skipped_duplicate: int, skipped_details: List[Dict[str, Any]], message: Optional[str] = None, error: Optional[str] = None, ) -> Dict[str, Any]: """Respuesta de insert_valid_rows (finished / warning / failed).""" out = { "status": status, "inserted": inserted, "skipped_invalid": skipped_invalid, "skipped_missing_fk": skipped_missing_fk, "skipped_duplicate": skipped_duplicate, "skipped_details": skipped_details, } if message: out["message"] = message if error: out["error"] = error return out