Flujo Automatizado para la Recepción de Facturas en Power Automate (Paso a paso)

Recepción de Facturas
🎯 Objetivo del flujo
Este flujo de Power Automate Cloud automatiza la recepción de facturas por correo, procesa adjuntos XML, extrae datos clave de la factura, consolida la información en un Excel y organiza los archivos en una estructura de carpetas por RUC / Año / Mes / Día. ✅
🧩 Conectores y componentes clave
- Outlook (Office 365): leer adjuntos del correo.
- OneDrive for Business: crear/buscar/eliminar archivos y guardar XML.
- Excel Online (Business): insertar filas en una tabla del archivo Excel.
- Scopes + Condiciones + For each: estructura modular y controlada del flujo.
🧭 Arquitectura del flujo (Scopes principales)
1) 🧱 Scope: Inicializa Variables
Aquí se definen los “parámetros base” que usará todo el proceso.
✅ Paso a paso
- Compose – Nombre_CARPETA
- Define la carpeta raíz: «CARPETA».
- Compose – Nombre_Excel
- Define el archivo de consolidación: «FACTURAS.xlsx».
- Compose – Archivo_Excel
- Contiene el archivo Excel en Base64 (plantilla embebida) para crearlo si aún no existe.
🔎 Por qué es importante: este patrón convierte el flujo en reutilizable: cambias “CARPETA” y «FACTURAS.xlsx» y el resto se adapta.
2) 📁 Scope: Genera Archivo Excel
Este bloque garantiza que exista el Excel antes de insertar datos.
✅ Paso a paso
- Crear_Temporal (OneDrive)
- Crea un archivo temporal en
/CARPETA(por ejemploGUID.txtcon “OK”). - 👉 Se usa como “ancla” para asegurar acceso/creación y evitar problemas de disponibilidad.
- Crea un archivo temporal en
- Buscar_archivos_en_la_carpeta_por_ruta_de_acceso (OneDrive Search)
- Busca FACTURAS.xlsx dentro de
/CARPETA.
- Busca FACTURAS.xlsx dentro de
- Condición – Existe_Excel
- Si la búsqueda devuelve 0 resultados, entonces:
- Crear_archivo_Excel: crea
/CARPETA/FACTURAS.xlsxusando el contenido de Archivo_Excel (Base64).
- Eliminar_Temporal
- Elimina el archivo temporal para no ensuciar la carpeta.
✅ Resultado: siempre tendrás el Excel listo para consolidar.
3) 🔁 Scope: Recorre Archivos
Este bloque procesa cada adjunto del correo.
✅ Paso a paso
- For each – attachments
- Itera todos los adjuntos del mensaje:
triggerOutputs()?['body/attachments']
- Itera todos los adjuntos del mensaje:
- Obtener_datos_adjuntos (V2) – Outlook
- Descarga el adjunto usando
messageIdyattachmentId.
- Descarga el adjunto usando
- Condición – Existe_XML
- Solo continúa si el tipo de contenido es text/xml.
- Si NO es XML, lo ignora (actualmente no registra el descarte).
🧾 Extracción de datos del XML (Scope: Extrae XML)
Dentro de “Existe_XML”, el flujo transforma el contenido y extrae campos con XPath.
✅ Paso a paso
- Redactar_XML
- Convierte el adjunto:
base64ToString(contentBytes)→xml()- Resultado: objeto XML listo para XPath.
- Composes con XPath (campos clave)
- Serie/Número (Invoice/ID)
- Fecha (Invoice/IssueDate)
- Tipo Comprobante (Invoice/InvoiceTypeCode)
- Moneda (Invoice/DocumentCurrencyCode)
- RUC y Razón Social Emisor (AccountingSupplierParty…)
- RUC y Razón Social Cliente (AccountingCustomerParty…)
- Subtotal (LegalMonetaryTotal/LineExtensionAmount)
- IGV (TaxTotal/TaxAmount)
- Total (LegalMonetaryTotal/PayableAmount)
📌 Mapeo de datos hacia Excel
Luego de extraer, el flujo inserta una fila en la tabla Facturas dentro de FACTURAS.xlsx.
✅ Acción
- Excel Online (Business) – Agregar_una_fila_a_una_tabla
- Archivo:
/CARPETA/FACTURAS.xlsx - Tabla: Facturas
- Columnas alimentadas con los valores extraídos (RUC, Razón social, fecha, montos, etc.)
- Archivo:
🧷 Resumen de campos que consolida
- Emisor: RUC + Razón Social
- Cliente: RUC + Razón Social
- Documento: Fecha, Tipo, Serie-Número, Moneda
- Montos: Subtotal, IGV, Total
{
"RUC Emisor": "@{outputs('Redactar_Emisor_RUC')}",
"Razon Social Emisor": "@{outputs('Redactar_Emisor_Razon_Social')}",
"RUC Cliente": "@{outputs('Redactar_Cliente_RUC')}",
"Razon Social Cliente": "@{outputs('Redactar_Cliente_Razon_Social')}",
"Fecha": "@{outputs('Redactar_Fecha')}",
"Tipo Comprobante": "@{outputs('Redactar_TipoComprobante')}",
"Serie Numero": "@{outputs('Redactar_SerieNumero')}",
"Moneda": "@{outputs('Redactar_Moneda')}",
"SUB TOTAL": "@{outputs('Redactar_SUBTOTAL')}",
"IGV": "@{outputs('Redactar_IGV')}",
"TOTAL": "@{outputs('Redactar_TOTAL')}"
}✅ Beneficio: el Excel se vuelve tu “registro maestro” de facturas procesadas.
🗂️ Archivado del XML por estructura de carpetas
Finalmente, el flujo guarda el archivo XML en una ruta organizada dinámicamente.
✅ Ruta de almacenamiento
Se construye así:
/CARPETA/{RUC_Emisor}/{Año}/{Mes}/{Día}/{SerieNumero}.xml
✅ Acción
- OneDrive – Crear_archivo_XML
- Nombre:
{SerieNumero}.xml - Contenido:
contentBytesdel adjunto (sin alterar) - Ruta: usando
formatDateTime(Fecha,'yyyy'),MM,dd
- Nombre:
🎯 Resultado: orden perfecto por emisor y fecha, ideal para auditorías y búsquedas.
🧠 Conceptos clave destacados (para estudiantes)
- Scopes: agrupan lógica por etapas (inicialización, preparación, procesamiento).
- For each: procesa múltiples adjuntos de forma repetible.
- Condiciones: filtran por tipo de archivo (solo XML).
- Funciones:
base64ToString(),xml(),xpath(),first(),formatDateTime() - Excel Table: insertar filas requiere una tabla definida (no rango suelto).
✅ Conclusiones
- Este flujo implementa un patrón muy útil en finanzas: Ingesta → Normalización → Consolidación → Archivado.
- La lógica de “crear Excel si no existe” lo hace robusto para ejecución continua.
- La extracción con XPath permite capturar los datos más relevantes de un XML de factura sin intervención manual.
🚀 Con este flujo logramos que cada factura XML que llegue por correo se procese automáticamente: se extraen datos clave, se consolida en Excel y se archiva ordenadamente por RUC y fecha.
✅ Menos digitación, más control, trazabilidad y orden documental.

