Un café, un billete de autobús, una libreta. Es fácil olvidar las compras pequeñas antes de abrir una hoja de cálculo. ¿Y si bastara un mensaje de Telegram para registrarlas y otro para consultar el mes?
En este tutorial crearás Pocket Ledger, un registro de gastos en Telegram con Google Sheets. Envía una compra, confirma los datos propuestos y pregunta por el total mensual. La hoja guarda las filas y hace los cálculos; el bot lleva la conversación. Este es el resultado final.

El mismo resultado en la hoja. El café de 4,50 EUR aumenta los 7,70 EUR a 12,20 EUR; los 6,00 USD siguen separados.
Las capturas muestran una demostración real con gastos ficticios. Contrastamos la fila guardada con la llamada a la Action en Inbox y comparamos ambas respuestas de Telegram con los valores devueltos por Google Sheets. Los identificadores personales y las credenciales están ocultos en las capturas publicadas.
El primer objetivo es guardar un café. El segundo es obtener un total que puedas comprobar en la hoja. También aprenderás por qué «guardado» en una respuesta del chat solo es la mitad de la evidencia.
Descarga el kit de configuración de Pocket Ledger con el libro inicial ya diseñado, avatar, prompt, ajustes de las Actions y hoja de pruebas. Importa el libro en la hoja creada por Quickchat AI y sigue los pasos siguientes. Los ejemplos para copiar usan inglés y noviembre de 2026 para que puedas comparar tus resultados con las capturas.
¿Qué necesitas para crear un registro de gastos en Telegram?
Necesitas Telegram, una cuenta de Google y una de Quickchat AI. La configuración utiliza ajustes del panel y una fórmula de hoja de cálculo; no tienes que alojar un programa.
- Crea una cuenta de Quickchat AI, completa la verificación y crea un Agent llamado
Pocket Ledger. - Prepara una cuenta de Google para la nueva hoja. Empieza con los registros ficticios de abajo.
- Utiliza un bot de Telegram nuevo para este ejercicio. Ten disponible una segunda cuenta de Telegram de confianza para la prueba de acceso final.
El plan Free de Quickchat AI está destinado al aprendizaje personal y no comercial e incluye un cupo limitado. Las conversaciones de AI y Simulation Testing consumen créditos. Consulta los planes y cupos actuales antes de elegir un plan para uso continuado.
Dos direcciones, dos Actions. Guardar una fila no permite al Agent leer totales anteriores.
Paso 1: ¿Cómo conectas tu bot privado de Telegram?
BotFather crea la identidad del bot. Quickchat AI proporciona el Agent que responde a sus mensajes.
Abre el @BotFather oficial, envía /newbot, llama al bot Pocket Ledger y elige un nombre de usuario disponible que termine en bot. Usa /setuserpic para subir el avatar del kit. Mantén privado el token; lo pegarás directamente en Quickchat AI.

En Quickchat AI, abre External Apps → Telegram → Your own bot. En el diálogo Connect to Telegram, pega la credencial en Bot Token. Activa Enable your own bot y pulsa Save. La guía de BotFather explica las pantallas en detalle.
El bot conectado tiene el mismo nombre Pocket Ledger que verás en Telegram.
Abre el enlace del nuevo bot en Telegram, envía /start y después Hello en el chat privado. /start envía el mensaje de bienvenida; el mensaje normal crea la conversación en Inbox y los metadatos del remitente que necesitarás más adelante. Mantén inactivas las Actions de datos personales mientras las configuras.

Abre esta conversación en Quickchat AI, en Inbox → Details → Visitor. Busca Telegram User Id y Telegram Chat Type (las claves de metadatos son telegram_user_id y telegram_chat_type). Copia el ID numérico mediante el control que aparece al pasar el cursor y confirma que el tipo de chat sea private.
Obtén tu ID de remitente de este campo. Los identificadores personales están ocultos en la captura; usa tu valor real.
El ID procede de los metadatos del remitente de Telegram. Tu nombre de usuario, un número escrito en un mensaje y el ID del propio bot son cosas distintas. En los siguientes pasos utilizarás el ID del remitente para restringir ambas Actions.
Paso 2: ¿Cómo preparas la hoja de Google Sheets?
La integración de Google Sheets crea una hoja de cálculo y una Action inicial. Reutiliza ese archivo para que la Action y el permiso de Google se refieran al mismo recurso.
- Abre Actions & MCPs → Add Action → Google Sheets y autoriza tu cuenta de Google. La guía de conexión de Google Sheets explica el consentimiento y la configuración inicial.
- Desactiva inmediatamente la Action inicial. Se crea activa. Conserva su nombre,
log_lead_to_google_sheet, porque la reconexión lo utiliza para encontrarla. Cambiaremos su función para guardar gastos. - Abre la hoja creada y llámala
Pocket Ledger demo. En este nuevo archivo de demostración, elige File → Import → Upload, seleccionapocket-ledger-starter.xlsxdel kit y elige Replace spreadsheet. Después, haz clic en Import data. Esto preparaExpensesySummarydentro del archivo al que Quickchat AI puede acceder. Usa esta opción solo en la nueva hoja de demostración. - Comprueba las tres filas iniciales de abajo. En
Summary, los totales iniciales deben ser EUR 7.70 y USD 6.00. El paso 6 explica la fórmula y conecta la Action de lectura.
Empieza con la conexión a Google Sheets. Su autorización crea la hoja que usan ambas Actions.
¿Prefieres crear las pestañas manualmente? Renombra la inicial como Expenses. Para estos ejemplos en inglés, configura File → Settings → Locale → United States. Da formato Plain text a A:D y F:H, y Number con dos decimales a E; después pega el bloque de abajo en A1. Inmoviliza la cabecera y ensancha las columnas. Añade Summary siguiendo el paso 6. Google también explica cómo importar un libro de Excel en una hoja existente.
Copia los tres gastos iniciales
date month item category amount currency note conversation_url
2026-11-01 2026-11 coffee food 4.50 EUR synthetic example
2026-11-02 2026-11 bus ticket transport 3.20 EUR synthetic example
2026-11-03 2026-11 notebook stationery 6.00 USD synthetic example
Tres gastos iniciales, listos para el cuarto. Los importes son números en E; los códigos de moneda son textos separados en F.
La columna conversation_url enlazará cada gasto nuevo con su conversación. Déjala vacía en los tres ejemplos introducidos manualmente. El permiso drive.file de Google abarca archivos creados por la aplicación o autorizados expresamente; esta receta usa la hoja creada por la integración y no concede acceso a todo tu Drive.
Paso 3: ¿Cómo restringes los gastos a tu propio chat?
Configura Run only when en todas las Actions que lean o escriban en el registro. Deben cumplirse las dos condiciones, por lo que tu ID por sí solo no basta en un chat de grupo.
| Clave de metadatos | Comparación | Valor |
|---|---|---|
telegram_user_id | equals | Tu ID numérico real de remitente del paso 1 |
telegram_chat_type | equals | private |
- Abre la Action inactiva
log_lead_to_google_sheety localiza Run only when. - Añade las dos condiciones anteriores. Usa las claves exactas y los dígitos de tu ID, sin nombre de usuario ni prefijo
@. - Guarda la Action manteniéndola inactiva. Aplica las mismas condiciones a la Action de lectura cuando la crees en el paso 6.
Las condiciones de la Action de guardado en la demostración local. Sustituye el ID ficticio por tu ID real de remitente y repite ambas condiciones en la Action de lectura.
Ambas condiciones deben aplicarse a ambas Actions. Otro remitente o un chat de grupo deben fallar la comprobación antes de que una petición HTTP llegue a Google Sheets.
Son condiciones de Actions aplicadas por el servidor. Escribir «respóndeme solo a mí» en el prompt no es un control de acceso. Restringe también los permisos de compartición de la hoja y el acceso a tu cuenta de Quickchat AI.
Paso 4: ¿Cómo haces que el bot guarde un gasto confirmado?
Adapta la Action inicial para añadir una fila siguiendo el orden de las columnas. Selecciona When to run → AI decides para que pueda esperar la confirmación. Después, antes de activarla, da al Agent una regla de confirmación.
Configura los campos del gasto
En What to ask the user first, sustituye los campos de leads por estos parámetros. Conserva sus nombres exactamente como aparecen.
| Parámetro | Formato | Obligatorio | Descripción que debes introducir |
|---|---|---|---|
date | Text | Sí | Fecha del gasto en YYYY-MM-DD, confirmada por el propietario. Preguntar si falta. |
month | Text | Sí | YYYY-MM extraído de la fecha confirmada. |
item | Text | Sí | Nombre breve de la compra. |
category | Text | Sí | Categoría sencilla acordada con el propietario, como comida o transporte. |
amount | Decimal Number | Sí | Importe numérico positivo, sin símbolo de moneda. |
currency | Text | Sí | Código ISO de moneda confirmado, como EUR o USD. Aclarar símbolos ambiguos. |
note | Text | No | Nota opcional. Dejar vacía si no se proporcionó ninguna. |
Conserva el ID real de la hoja del API Endpoint existente. Cambia el rango a Expenses!A:H, mantén el método POST y establece Query Params como valueInputOption=RAW e insertDataOption=INSERT_ROWS. Elimina parámetros duplicados si ya están en la URL.
Copia la referencia de la petición de append
POST https://sheets.googleapis.com/v4/spreadsheets/YOUR_CREATED_SHEET_ID/values/Expenses!A:H:append
Query Params:
valueInputOption = RAW
insertDataOption = INSERT_ROWS
Headers:
Authorization = Bearer {{google_sheets_access_token}}
Content-Type = application/json
YOUR_CREATED_SHEET_ID es un marcador explicativo. Conserva el ID real que ya aparece en la URL inicial; no lo sustituyas por ese marcador. Selecciona el System Token existente de Google Sheets en el valor Authorization y la variable incorporada de URL de conversación en el cuerpo.
En la pestaña Body, introduce:
{"values":[["{{date}}","{{month}}","{{item}}","{{category}}","{{amount}}","{{currency}}","{{note}}","{{conversation_url}}"]]}
Configuración local de la Action de gastos. El cuerpo define el orden de las celdas; el formato del parámetro de importe define su tipo numérico.
Conserva las comillas alrededor de {{amount}} en el editor. Como este marcador exacto se refiere a un parámetro Decimal Number, la sustitución produce un número JSON como 4.5. Quitar las comillas hace que el JSON del editor sea inválido. Comprueba en la hoja resultante que E sea numérica y esté incluida en la fórmula.
La API append de Google añade la fila. RAW conserva literalmente textos como una nota que empiece por =, sin evaluarlos como fórmula. El parámetro numérico proporciona el tipo del importe.
Copia la descripción de la Action de guardado
Save one personal expense to the configured Google Sheet. Call only after the owner explicitly confirms the proposed date, item, category, amount and currency. Ask for missing or ambiguous fields before saving. After confirmation, append one row once. Report success only after a successful API response. If the outcome is uncertain, tell the owner to inspect the Sheet before submitting again.
Dale instrucciones a Pocket Ledger
Abre Identity → Main Prompt y pega lo siguiente. Nombra ambas Actions para que el segundo objetivo funcione cuando añadas la lectura del resumen.
Main Prompt está en Identity. Esta captura local permite localizar el campo; utiliza el bloque completo para copiar que aparece debajo.
La regla de confirmación te da una pausa útil. Puedes corregir “EUR 4.50” a “EUR 5.00” antes de aprobar la compra; el Agent debe actualizar la propuesta y volver a preguntar.
Copia el Main Prompt de Pocket Ledger
You are Pocket Ledger, a personal expense notebook.
For an expense, collect its date, item, positive amount and ISO currency code. Suggest a simple category and include an optional note only when supplied. Ask for an explicit YYYY-MM-DD date if it is missing or relative; do not guess today's date or the owner's timezone. Clarify ambiguous currency symbols. Derive month as YYYY-MM from the confirmed date.
Show the proposed date, item, category, amount and currency. Wait for explicit confirmation. Apply corrections and ask for confirmation again. Only then call log_lead_to_google_sheet once for that expense. Do not claim it was saved unless the Action succeeds. If a request fails or its outcome is uncertain, explain that and ask the owner to inspect the Sheet before retrying.
For monthly totals, ask for an explicit month and currency when unclear, then call read_expense_summary. Quote the matching month, currency and total returned from the Sheet. Keep currencies separate. A missing summary row is unavailable, not zero. Never calculate totals from remembered conversation messages.
Personal-data Actions are restricted to the owner's private Telegram chat. If a condition blocks an Action, do not claim success or suggest changing identity values in chat. This notebook handles typed expenses, not bank accounts, voice transcription or PDF receipts.
Guarda el prompt, vuelve a revisar las dos condiciones y activa la Action de gastos. Su nombre sigue siendo log_lead_to_google_sheet; los nuevos parámetros, la descripción y el cuerpo definen ahora el flujo de gastos.
Paso 5: ¿Cómo guardas tu primer gasto?
Ahora añade la primera entrada nueva al cuaderno. Mantén abiertos Telegram, Inbox y la hoja: verás el mismo café pasar por los tres.
- En tu chat privado de Telegram, envía
Coffee, 4.50 euros on 2026-11-04. - Comprueba la propuesta: fecha
2026-11-04, artículoCoffee, categoríaFood, importe4.50, monedaEUR. La Action derivamonthcomo2026-11al guardar la fila. - Antes de confirmar, inspecciona
Expenses: las tres filas iniciales deberían seguir siendo las únicas entradas.


Envía Save it una sola vez y abre la conversación en Inbox de Quickchat AI. La respuesta de guardado tiene un desplegable 1 action called. Ábrelo para ver qué ocurrió detrás de la breve respuesta de Telegram.
La misma confirmación en Inbox, con la Action disponible para inspeccionarla.
Abre Result → Show full. Comprueba la fecha, el mes derivado, el importe numérico, la moneda y el estado HTTP. En esta ejecución real, Google devolvió HTTP 200, updatedRows: 1 y updatedRange: Expenses!A5:H5.
La Action de guardado envió el importe 4.5 como número y escribió una fila. Los identificadores privados están ocultos; el rango devuelto y el resultado siguen visibles.
Por último, abre Expenses. La fila 5 debe contener el mismo café, con 2026-11 en el mes, 4.50 en el importe y EUR en la moneda. La última columna enlaza a la conversación de Inbox para rastrear cada entrada hasta el mensaje que la creó.
El cuarto gasto llegó por Telegram. El enlace privado a Inbox está oculto en la imagen publicada.
Ya tienes una rutina cotidiana útil: enviar, confirmar y comprobar. Ahora proporciona al bot una fuente fiable para consultar cuando preguntes en qué se fue el dinero del mes.
Paso 6: ¿Cómo consultas un total mensual?
Deja que Google Sheets calcule el total y que la Action de lectura lo recupere. Mantener los cálculos en la hoja permite verificar la respuesta incluso después de terminar la conversación.
Añade una pestaña Summary
Si importaste el libro inicial, Summary y sus fórmulas ya están preparados. Sus valores iniciales son EUR 7.70 y USD 6.00; guardar el café solo cambia la fila EUR. Si creas la hoja manualmente, sigue los pasos siguientes.
El punto de partida: dos monedas, dos totales independientes.
- Crea una pestaña llamada
Summary. Establece A:B como Plain text y escribemonth,currency,totalen A1:C1. - Introduce
2026-11yEURen A2:B2, y después2026-11yUSDen A3:B3. - Introduce esta fórmula en C2 y rellena hacia abajo hasta C3. Formatea C como número con dos decimales.
=SUMIFS(Expenses!$E$2:$E$501,Expenses!$B$2:$B$501,A2,Expenses!$F$2:$F$501,B2)
La función SUMIFS suma los importes cuyo mes y moneda coinciden con la fila del resumen. Si la configuración regional de tu hoja requiere punto y coma entre argumentos, sustituye las comas de la fórmula por punto y coma. Los números de las peticiones JSON siguen usando punto decimal.
Selecciona C2 para ver la fórmula detrás de 12,20 EUR. La fila USD sigue en 6,00.
Los 7,70 EUR iniciales más el nuevo café de 4,50 EUR dan 12,20 EUR. El cuaderno de 6,00 USD pertenece a su propio total.
La fórmula inicial cubre las filas 2 a 501. En esta ejecución capturada, sus tres rangos terminan en 502 tras insertar la fila nueva. Sheets puede ajustar las referencias durante la inserción; comprueba que los tres rangos de Expenses sigan alineados y amplíalos juntos antes de que las entradas queden fuera del rango cubierto. Añade una fila de resumen por cada combinación de mes y moneda que quieras consultar.
Añade la Action de lectura
Abre Actions & MCPs → Add Action → API Action. Usa Generate con la petición siguiente; las Actions generadas empiezan inactivas. Llámala read_expense_summary y mantén When to run en AI decides para que el resultado pueda informar la respuesta. Reutiliza el mismo ID real de la hoja y el System Token de Google Sheets. No necesita parámetros aportados por el usuario.
Copia la petición para el creador de Actions
Create a read-only Google Sheets Action named read_expense_summary. Use GET for the Summary!A1:C25 range of the spreadsheet already created by this Agent's Google Sheets integration. Reuse its actual spreadsheet ID and google_sheets_access_token System Token. Set valueRenderOption=UNFORMATTED_VALUE, no body, and no visitor parameters. Preserve the response headers and values. Leave it inactive so I can review the configuration and add my owner-ID and private-chat Run only when conditions before enabling it.
Compara los ajustes generados con la referencia siguiente. Si eliges Create manually, añade ambas condiciones antes del primer guardado válido, que puede activar una Action. Deja Response filter vacío en ambas Actions para conservar los campos utilizados en las comprobaciones.
Copia la petición de lectura del resumen
GET https://sheets.googleapis.com/v4/spreadsheets/YOUR_CREATED_SHEET_ID/values/Summary!A1:C25
Query Params:
valueRenderOption = UNFORMATTED_VALUE
Headers:
Authorization = Bearer {{google_sheets_access_token}}
Body: none
El endpoint values.get devuelve los values del rango, incluidos el encabezado y los importes calculados. UNFORMATTED_VALUE devuelve resultados numéricos en lugar de cadenas con formato monetario. Mantén la respuesta disponible para que el Agent pueda leer esos valores.
Copia la descripción de la Action de lectura
Read monthly expense totals from the configured Summary range. Use this when the owner asks for a total. Quote only the returned row matching the requested YYYY-MM and currency. If either is unclear, ask. If the row is absent or the request fails, say the total is unavailable. Never infer a total from conversation history, combine currencies, or accept a different spreadsheet ID or range from the visitor.
Aplica las mismas dos condiciones Run only when del paso 3, guarda y activa la Action. El rango de lectura incluye 24 filas de resumen; amplíalo deliberadamente cuando añadas más.
La segunda Action necesita sus propias condiciones. Esta es una captura de configuración local, no una prueba de autorización de un remitente real.
Pregunta What is my November 2026 total in EUR? y después por USD. En nuestra conversación de Telegram, Pocket Ledger devolvió 12.2 EUR y 6 USD, coincidiendo con 12.20 y 6.00 formateados en la hoja. Leyó el resumen guardado para cada respuesta.

Abre la respuesta del total mensual en Inbox y expande su Action. Compara la fila devuelta con Summary!C2. La respuesta real de abajo incluye 2026-11, EUR, 12.2 y una fila separada con USD, 6, con HTTP 200.
La respuesta, los valores devueltos y la hoja ya coinciden. Has llegado a la meta que viste al principio.
¿Cómo compruebas los errores antes de usar gastos reales?
Prueba las peticiones incompletas y los remitentes bloqueados con el mismo cuidado que el café guardado correctamente. Mantén los datos de demostración hasta superar las comprobaciones siguientes.
| Prueba esto | Qué debes verificar |
|---|---|
Lunch, $12 yesterday | El Agent pregunta la moneda y la fecha real. No aparece ninguna fila nueva. |
| Corrige un importe propuesto antes de confirmarlo | La propuesta corregida se confirma antes de añadir una sola fila. |
| Consulta el total de noviembre en EUR y después en USD | Resultados separados: 12,20 EUR y 6,00 USD para los datos de ejemplo. |
| Pregunta por diciembre de 2026 sin una fila de resumen para diciembre | El Agent indica que el total no está disponible, en lugar de inventar un cero. |
| Un segundo remitente consulta un total e intenta guardar un gasto | Ambas Actions se rechazan y no se revelan valores personales. |
| El propietario hace las mismas peticiones en un grupo | Ambas Actions se rechazan porque el chat no es privado. |
| Un guardado falla o agota el tiempo de espera | La respuesta comunica el fallo o la incertidumbre. Revisa la hoja antes de reintentar. |
Para pruebas de lenguaje repetibles, abre Testing → Create Dataset → Paste messages y usa los mensajes y criterios de evaluación del kit. Ejecuta aparte una conversación completa para la secuencia de confirmación. Los metadatos de Preview o Simulation son datos de prueba; no demuestran que se bloquee a un segundo remitente real de Telegram.
El conjunto de datos local está preparado para las pruebas. Su presencia no equivale a una ejecución de Simulation completada ni demuestra una escritura en Google Sheets.
Si un comportamiento falla, cambia una instrucción relevante, repite la misma entrada y vuelve a inspeccionar la llamada y la hoja. Por ejemplo, un append prematuro exige revisar la redacción de confirmación de la Action de guardado. La confirmación es una instrucción, no una garantía de unicidad en la base de datos. Tras un tiempo de espera agotado, comprobar la hoja importa más que volver a enviar.
Cuando funcione el recorrido, elimina las filas de gastos ficticios, conserva encabezados y fórmulas y añade resúmenes para los meses y monedas que realmente uses. Tu primera compra real puede seguir la misma pequeña rutina del café.
¿Puede un asistente de AI ayudar a configurar Pocket Ledger?
Un asistente conectado de gestión de cuentas puede preparar el Agent y revisar los ajustes de Actions. Sigue Manage with AI con la ficha de ChatGPT o la ficha de Claude de Quickchat AI. Proporciónale el kit y esta petición:
Help me configure Pocket Ledger from this setup kit. Inspect the available Quickchat AI tools first. Prepare the Main Prompt and the two HTTP Actions using the exact field names, numeric amount type and fixed ranges. Keep log_lead_to_google_sheet as the starter name. Ask me to complete Google OAuth and Telegram Bot Token setup in the dashboard. Apply both owner/private run conditions before enabling either Action. Do not run credit-consuming tests or append expenses until I ask. Report any setting your tools cannot configure so I can complete it in the dashboard.
El propietario completa el consentimiento de Google y la conexión de Telegram. Revisa los ajustes y ejecuta las mismas comprobaciones anteriores independientemente de quién los introdujera.
Preguntas frecuentes
¿Cómo registro gastos en Telegram con Google Sheets?
Conecta un bot de Telegram a un Quickchat AI Agent y autoriza Google Sheets. Configura una Action para añadir un gasto tras confirmarlo y otra para leer un resumen mensual calculado con fórmulas. Restringe ambas Actions a tu ID de usuario de Telegram y un chat privado.
¿Puede el bot decirme cuánto he gastado este mes?
Sí, si el mes y la moneda solicitados tienen una fila en el rango Summary configurado. Google Sheets calcula el total con SUMIFS y la Action de lectura lo recupera. Una Action que solo añade filas no puede consultar totales, y una fila de resumen ausente no equivale a cero.
¿Puede otra persona leer mis gastos a través del bot de Telegram?
Ambas Actions de datos personales deben exigir tu telegram_user_id verificado y telegram_chat_type igual a private. Estas condiciones bloquean llamadas de otros remitentes y grupos. Prueba ambos casos antes de añadir datos personales y restringe también el acceso a la hoja y a la cuenta de Quickchat AI.
¿Es gratuito este registro de gastos en Telegram?
Crear un bot de Telegram es gratis. El plan Free de Quickchat AI permite aprendizaje personal no comercial con un cupo limitado de créditos de AI. Las respuestas de AI y Simulation Testing consumen créditos; el uso continuado depende del cupo y el plan disponibles.
¿Necesito Apps Script, Python o un servidor de automatización?
Esta receta usa Quickchat AI Actions y una fórmula de Google Sheets. Pegas los ajustes de las peticiones, el cuerpo JSON y el prompt proporcionados en el panel; no despliegas Apps Script, un bot de Python ni un servidor de automatización.
¿Puedo usar mi hoja de gastos existente?
Esta receta usa la hoja creada por la integración de Google Sheets de Quickchat AI. Su autorización drive.file no le concede acceso sin restricciones a tu Drive. No sustituyas el ID de la hoja por el de un archivo existente cualquiera suponiendo que será accesible.
¿Puede el bot leer fotos de recibos o notas de voz?
Este tutorial cubre gastos escritos. La extracción de recibos requiere una prueba propia de entrega de imágenes y confirmación en Telegram antes de confiar en ella. La transcripción de voz y la lectura de recibos PDF no forman parte de esta configuración.
¿Cómo gestiona distintas monedas y entradas duplicadas?
Cada moneda tiene su propio total mensual; esta receta no convierte monedas. La confirmación reduce las entradas accidentales, pero no ofrece prevención atómica de duplicados. Si un guardado agota el tiempo de espera, inspecciona la hoja antes de enviarlo otra vez.