LOOPIAN · MATERIAL DEL CURSO
Lección opcional: preparar un borrador con el PDF de prueba
Resultado: un borrador en Gmail con un único PDF de homologación. El alumno lo revisa y decide, desde Gmail, si lo envía manualmente. El módulo no envía correos, no consulta ARCA y no autoriza comprobantes.
Esta lección agrega únicamente Correo.gs al proyecto existente. Conservá los cuatro archivos del tutorial tal como están. No pegues las pruebas locales en Apps Script. No hace falta desplegar una aplicación ni habilitar servicios avanzados.
Antes de empezar
- Usá la planilla original, en Mi unidad, con su cuenta propietaria y Gmail disponible. No uses una copia con el diario y las propiedades del sistema anterior.
- Elegí una venta ficticia ya autorizada en homologación, con evento
PDF conservado en Registro_ARCA. El correo debió cargarse antes de autorizarla. Para la práctica, usá una dirección tuya que puedas revisar; no datos de clientes reales.
- Conservá tu respaldo. No borres el diario ni las propiedades del proyecto o de usuario.
- El módulo no necesita la revisión cada minuto. Si estaba activa y querés una práctica completamente manual, desactivala desde el menú original antes de comenzar. Instalar Correo no modifica ese activador.
Una celda que dice «facturado en pruebas» o contiene un enlace no prueba que exista un PDF autorizado. Correo lo comprueba en el diario existente.
Pantalla 1 · Abrir el editor
- Abrí la planilla original en Google Sheets con la cuenta propietaria.
- Entrá en Extensiones → Apps Script.
- En Archivos, tocá + → Secuencia de comandos.
- Escribí
Correo. El editor mostrará Correo.gs.
- Reemplazá únicamente el contenido del archivo nuevo por todo el contenido del
Correo.gs entregado y guardá.
Comprobación: siguen estando los cuatro archivos originales y aparece un quinto. No reemplaces onOpen: el menú original debe seguir funcionando.
Pantalla 2 · Instalar manualmente
- En el selector de funciones del editor, elegí correoInstalar.
- Tocá Ejecutar.
- Si Google pide autorización, elegí la misma cuenta propietaria y leé los permisos.
- Tras autorizar, si no terminó la instalación, ejecutá
correoInstalar otra vez. Instalar de nuevo no crea borradores ni borra su historial.
- Volvé a la planilla y cerrá el aviso de instalación.
Si aparece una advertencia de aplicación no verificada, comprobá que estás ejecutando tu propio proyecto y el código revisado. No eludas bloqueos de un administrador de Workspace. Si Gmail está deshabilitado o faltan permisos, la práctica no puede completarse en esa cuenta.
Qué permisos estás otorgando
GmailApp.createDraft requiere el alcance amplio https://mail.google.com/. Google puede describirlo como acceso para leer, redactar, enviar y eliminar correo. No existe un permiso «solo crear borradores» para esta llamada de GmailApp. Por eso no se puede prometer que la autorización OAuth impida enviar: la limitación de este ejemplo está en su código, que solo llama a createDraft y al getId del resultado. No contiene métodos de envío ni lectura de la bandeja. No agregamos el alcance separado script.send_mail. Referencia oficial de GmailApp.
También se utilizan los permisos del proyecto para Sheets, Drive, identidad del usuario y gestión de activadores. Apps Script normalmente detecta los permisos al leer el código; si tu proyecto tiene una lista manual de alcances, deberá revisarse por separado. No reemplaces el manifiesto del tutorial con uno improvisado. Autorización de Apps Script.
No compartas el proyecto con editores que no sean de confianza: alguien que modifique el código podría utilizar los permisos amplios. Si tu requisito es que OAuth prohíba técnicamente el envío, esta implementación con GmailApp no cumple ese requisito y no deberías instalarla.
Pantalla 3 · Revisar el activador
- En Apps Script, abrí Activadores, el icono de reloj de la barra lateral.
- Buscá
correoAlAbrir: origen Hoja de cálculo, evento Al abrir.
- Debe haber uno para esa función, instalado por vos. No agregues un activador de tiempo ni uno para
correoPrepararSeleccion.
El activador solo agrega el menú. Los activadores instalables se ejecutan con la identidad de quien los creó; por eso abrir la planilla no puede iniciar trabajo de correo. Correo comprueba además el usuario activo en cada acción manual. Activadores instalables.
correoInstalar reemplaza únicamente los activadores correoAlAbrir de la cuenta actual. Conserva los otros activadores y el onOpen original.
Pantalla 4 · Elegir la venta
- Volvé a Sheets; si no aparece el menú, recargá la pestaña.
- Abrí la hoja Ventas.
- Seleccioná una celda de una sola fila de datos. También sirve un rango continuo dentro de esa misma fila.
- Entrá en Correo · Pruebas → Estado / ayuda de la fila.
«Sin intento» significa que ese UID todavía no tiene un intento de correo. No garantiza que la venta sea apta: los controles completos se hacen al preparar.
No selecciones encabezados, varias filas ni rangos separados. No copies la columna oculta de UID. Si cambiás el correo, el cliente, los importes o los conceptos después de autorizar, el módulo bloqueará la creación.
Pantalla 5 · Preparar el borrador
- Con la fila seleccionada, elegí Correo · Pruebas → Preparar borrador de la fila.
- Esperá el aviso. No edites la fila durante la preparación.
- Si indica «Borrador creado y registrado», copiá la referencia de control
CORREO-HOMO-… que aparece en el aviso.
El módulo usa el destinatario del snapshot, es decir, la copia de datos conservada al autorizar. Adjunta el archivo identificado por el evento PDF, nunca el enlace editable de la fila. El archivo debe ser PDF, privado, de tu propiedad, fuera de la papelera y conservar la marca que lo vincula al snapshot. Correo no cambia permisos ni regenera archivos. El límite propio de esta lección es 20 MiB por PDF. Métodos de File en Drive.
Pantalla 6 · Revisar en Gmail
- Abrí Gmail con la misma cuenta propietaria.
- Entrá en Borradores o pegá la referencia en el buscador.
- Abrí el borrador. El asunto y el cuerpo deben incluir PRUEBA SIN VALIDEZ FISCAL.
- Verificá destinatario, adjunto, datos ficticios y leyenda de homologación dentro del PDF.
- Podés dejarlo sin enviar. Si decidís enviarlo, usá vos el botón de Gmail después de revisar todo.
Enviar el adjunto manualmente entrega una copia al destinatario; que el archivo de Drive siga privado no impide esa entrega. Borrar o enviar el borrador no habilita otro intento automático para ese UID.
Si aparece un bloqueo
| Mensaje o situación |
Qué hacer |
| Correo de la fila cambiado |
Revisá el dato original conservado. Restaurá el dato solo si fue una edición accidental. Si el destinatario del snapshot era incorrecto, ese registro no sirve para esta práctica: no lo reescribas. Podés usar otra venta ficticia independiente con el correo correcto cargado antes de autorizar. |
| Correo conservado vacío o inválido |
No alcanza con llenar la celda después. Usá otra venta de prueba preparada correctamente. Se acepta una dirección ASCII simple, sin nombre visible, listas ni saltos de línea; se rechazan algunos formatos poco habituales aunque puedan existir. |
| Falta PDF confirmado |
Correo no puede repararlo. Revisá el resultado del tutorial y su procedimiento de recuperación por separado. No ejecutes «Procesar ventas» con otras filas listas inadvertidamente: ese proceso sí pertenece al circuito ARCA de homologación. |
| Archivo no verificable |
Revisá el PDF correcto en Drive: propiedad, papelera y accesos. No reemplaces el enlace de la celda para saltar el control. |
| Otra cuenta, copia o cambio de propietario |
Volvé al original y su cuenta. Una transferencia requiere revisión técnica; no reinstales borrando la vinculación ni el historial. |
| Preparando, resultado incierto o registro corrupto |
Aplicá la resolución manual que sigue. No reintentes borrando propiedades. |
Resolver manualmente un resultado incierto
- Abrí Estado / ayuda para obtener la referencia, sin mostrar direcciones, CUIT, CAE o IDs privados.
- En la cuenta correcta de Gmail buscá
in:anywhere CORREO-HOMO-…, reemplazando la referencia completa. Revisá Borradores, Enviados y Papelera; quitá otros filtros. Si alguien editó el asunto, revisá también los borradores recientes.
- Si existe un borrador, revisalo allí. Si ya fue enviado, no lo vuelvas a enviar. Si fue eliminado, conservá el registro igualmente.
- Si no aparece, la ausencia en una búsqueda no prueba que nunca haya existido. Dejá bloqueada esa venta para Correo y pedí al docente revisar el caso. Solo después de una revisión humana concluyente podrá decidirse una preparación manual en Gmail; este módulo no ofrece un botón de reintento ni de borrado del registro.
- Anotá el resultado de la revisión en tus apuntes privados. No alteres
Registro_ARCA, el UID ni las propiedades para desbloquear la venta.
Cómo evita duplicados y qué límites tiene
La secuencia es: tomar el bloqueo del documento → validar cuenta, selección, diario y PDF → guardar y releer preparando → crear una vez → guardar y releer borrador creado con draftId. Un error posterior a la primera marca impide repetir automáticamente. El registro está en propiedades de usuario, bajo una clave por UID, y no ocupa columnas nuevas. PropertiesService.
Se usa setupLocked_, que ya obtiene un DocumentLock, sin tomar otro bloqueo dentro. Los avisos se muestran después de liberarlo. Ese bloqueo coordina ejecuciones de scripts, no impide que una persona edite Sheets; por eso se releen los datos antes de crear el borrador y el destinatario siempre sale del snapshot. LockService.
No se consulta MailApp.getRemainingDailyQuota: mide destinatarios disponibles para envíos, no una cantidad de borradores disponibles, y requeriría un permiso separado de envío. Crear borradores sigue sujeto a límites del servicio; un fallo se trata de forma conservadora. Documentación de la cuota.
La cadena del diario detecta alteraciones frente a su cabecera conservada. No es un archivo legal inalterable: un propietario con acceso al código y a las propiedades puede modificar el sistema. El tutorial guarda una marca hash del snapshot en el PDF, no un hash de los bytes originales del PDF; Correo verifica identidad, marca, formato y privacidad, pero no puede demostrar que el propietario nunca reemplazó el contenido. No edites esos archivos. No se prometen garantías ante borrado deliberado de propiedades, modificaciones del proyecto o de permisos durante una ejecución.
Desinstalar la parte opcional
En Activadores, eliminá únicamente correoAlAbrir. Después podés quitar Correo.gs y recargar la planilla. Conservá las propiedades y los borradores existentes; no hay limpieza automática. La revocación de permisos de la aplicación en la cuenta de Google afecta al proyecto completo, incluido el tutorial, no solo a este archivo.
Pruebas locales y alcance de la entrega
Con Node.js 18 o posterior, descomprimí el ZIP, abrí una terminal en la carpeta y ejecutá:
node tests/correo.test.cjs
No requiere npm install, claves, archivos de cuenta ni conexión a Internet. Los mocks simulan Gmail, Drive, Sheets, propiedades y fallos. Hay fragmentos de las funciones base para probar el diario, los hashes, la cuenta y el bloqueo; la validación fiscal de ventas se sustituye por un mock con el mismo contrato. Las pruebas no recertifican el tutorial fiscal.
La entrega fue comprobada localmente, no instalada ni ejecutada en tu Google. La comprobación manual de las pantallas anteriores es el paso pendiente del alumno. Consultas documentales: 17 de septiembre de 2026.