Cada aviso es una regla fija sobre los datos que hay cargados, no una opinión. Si un bloque está en «Ejemplo», su alerta también lo está — mira la etiqueta antes de actuar. Las reglas y sus umbrales están escritas en la pestaña Guía.
Cada fila se alimenta de una hoja de Google distinta. Mientras una hoja no esté conectada, la fila muestra un guion — nunca un cero ni una nota máxima.
| KPI | MTD | Objetivo | vs obj. | YTD | vs año ant. | Estado |
|---|
Ingreso de 12 meses, sep 25 – ago 26.
Odoo guarda la hora de cada ticket, así que este mapa se llena con datos reales en cuanto exista el volcado. Martes cerrado.
Desliza el mapa a la derecha para ver el resto de la tarde.
| Métrica | Valor | Detalle |
|---|
Subir el attachment de accesorios del 5 % al 12 % es margen limpio sobre tráfico que ya entra por la puerta. Y con un 90-94 % de exclusividad por juego, las promos cruzadas entre juegos no van a funcionar.
| Juego | Ingreso 12 m | % TCG | Valor stock | En exceso | Durmiente | Sobres neg. |
|---|
El «exceso» de Riftbound y One Piece no es interpretable hasta desmontar las cajas: sus sobres en negativo significan que Odoo sigue contando entera una caja ya abierta.
Ojo: estas cuatro cifras no son conjuntos disjuntos y por eso no se apilan en una sola barra — el exceso (84.714 €) supera al valor de stock de las referencias con venta (75.937 €), lo que significa que las definiciones se solapan. Reconciliarlas es una de las tareas de F0 del plan.
Esto es distinto del stock muerto: aquí están las referencias que sí vendieron alguna vez en el año pero llevan tiempo paradas. 535 referencias no venden nada desde hace más de 180 días y acumulan 41.718 €. Sumado a las 1.324 que no vendieron nunca, el retrato es el mismo por dos caminos distintos. El primer tramo sale en negativo por las referencias con stock por debajo de cero.
Solo 4.321 € del inventario están en estado «en orden». Todo lo demás está en exceso, durmiente o en negativo. La barra negativa no es un error de dibujo: es el valor que Odoo se resta a sí mismo por las 677 referencias con stock por debajo de cero.
Mediana: 12 meses de cobertura. Y 276 referencias pasan de 24 meses — a ese ritmo, comprado hoy se vendería en 2028. Para accesorios y alimentación lo normal serían 1 a 2 meses; para sellado de TCG, 3 a 6.
321 referencias de 1.748 — el 18 % — hacen el 80 % del ingreso. Las mil de la clase C dejan 20.531 € entre todas, un 5 %. Ahí es donde vive casi todo el stock muerto y donde el trabajo de mantener ficha, precio y espacio no se paga solo.
Euros a coste, sin ratios derivados: los importes de este fichero no cuadran entre sí lo bastante como para fiarse de una división. Magic y Riftbound se llevan casi la mitad del exceso, y One Piece casi todo el durmiente. Con la salvedad de siempre: hasta desmontar las cajas, el stock de Riftbound y One Piece está inflado, así que su exceso real será menor.
Las filas ordenan por cuánto facturan (A hace el primer 80 %); las columnas, por si esa demanda es estable o errática. En cada celda: el ingreso de doce meses arriba y el número de referencias debajo.
Desliza a la derecha para ver la columna de totales.
La celda AZ concentra 285.000 € — el 70 % del ingreso de producto — en 264 referencias. Ahí está el negocio, y es justo la esquina que el manual dice que no se automatiza nunca: demanda errática, se decide lanzamiento a lanzamiento. Enfrente, las 967 referencias de CZ dejan 19.000 € entre todas.
1.588 de las 1.743 referencias clasificadas salen Z. No es un fallo del cálculo: el ABC/XYZ asume demanda repetible y aquí se venden lanzamientos. El eje que sí informa está en Lanzamientos. Quedan fuera 5 referencias sin clase XYZ.
| Paso | Volumen | Estado |
|---|
El orden importa: hasta que 1 y 2 no estén hechos, el margen por producto y el exceso no significan nada.
La cifra a la izquierda de cada barra es lo que se va en la primera semana. Riftbound coloca casi la mitad de sus unidades en siete días y el 69 % en el primer mes; Magic solo el 39 % y arrastra un 36 % después del día 90. Eso decide cuánto sacar el día de salida y cuánto retener — no cuánto pedir.
Hay sets que se venden casi enteros antes de salir. En una curva de lanzamiento normal eso parece una salida floja —el mes de la salida no tiene pico— cuando en realidad se vendió completo, solo que antes. Esta vista separa las dos cosas mirando dónde cae el pico de cada set: si es el primer mes, fue una salida clásica; si el dinero se acumula antes de llegar al pico, se vendió por delante.
Lo que esto no sabe todavía, y conviene decirlo: el panel no conoce la fecha oficial de salida de cada set, así que usa el pico como referencia. Eso distingue bien la forma de la curva —que es lo que se ve— pero no puede decir cuánto se vendió literalmente antes del día de salida. Para eso hacen falta las fechas: o las apuntas en el pipeline de aquí abajo, o se sacan solas del export de movimientos de producto, donde la primera recepción de cada referencia marca cuándo llegó la caja a la tienda.
| Set | Fecha | Solicitado | Asignado | % servido | Reservas | Estado |
|---|
«Solicitado» y «asignado» se registran a mano al recibir la proforma. La diferencia mide al distribuidor, no a compras: en Pokémon, One Piece y Riftbound la cantidad la asigna él.
No es opcional el orden: hasta que 1 y 2 no estén hechos, el margen por producto y el «exceso» de cada juego son números inventados.
Lo mismo que el saneo de costes, visto por lo que cuesta no hacerlo: cada fila es facturación real sobre la que hoy no se puede decir cuánto se gana. Ordenado por euros desbloqueados.
| Tipo de producto | Facturación | Con coste | Margen medido | Sin referencia |
|---|
Referencias cuyo coste unitario en Odoo es mayor que su propio precio de venta. Casi siempre es el coste de la caja metido en el producto suelto. Entre las tres primeras se llevan unos 35.000 € de margen ficticio, así que arreglarlas cambia de golpe el margen de Magic y de alimentación.
| Producto | Coste | PVP | Uds 12 m | Margen ficticio |
|---|
Odoo cree tener menos de cero. Dos causas y dos soluciones distintas: las cajas de TCG sin desmontar se arreglan con el módulo tcg_unpack y la hoja Box_a_Pack del análisis; las bebidas y chuches son entradas de compra que no se registraron.
| Producto | Stock | Causa probable |
|---|
El análisis empareja cada sobre en negativo con la caja de la que salió, por código de set y parecido de nombre. Estas diez son las de confianza alta y las de más volumen. Comprueba los sobres por caja antes de tocar Odoo: ese dato no viene del ERP, se dedujo del nombre.
| Sobre en negativo | Juego | Faltan | Caja propuesta | Stock caja |
|---|
Esto es lo que cambia la conversación: 16.719 € del «muerto» entró hace menos de 90 días. Eso no es stock podrido, es material recién llegado que aún no ha tenido tiempo de venderse. El problema de verdad son los 40.130 € con más de 180 días.
«Sin categoría» se lleva 20.124 €, el 27 % del muerto. No es un juego: es producto sin clasificar. Hasta que no tenga taxonomía no se sabe ni qué es.
| Producto | Juego | Uds | Coste ud. | Valor | Días |
|---|
Las dos primeras suman 9.205 € y llevan 65 y 122 días en el almacén: todavía están a tiempo de venderse solas. Las de más de 250 días son las candidatas a rebaja.
Mueve el descuento y el porcentaje que crees que se colocaría de verdad. El PVP se estima aplicando tu margen bruto medio sobre el coste, porque el análisis solo trae coste — no es un precio de tarifa, es una aproximación.
Y una nota que no es menor: esta simulación no dice qué se vendería. Dice qué pasaría si se vendiera lo que tú marques en «se coloca». La única forma de saberlo es probar con un lote pequeño y medir.
Gastado real más compromisos futuros. Por encima del 30 % en un solo proveedor conviene diversificar.
| Proveedor | Plazo | % servido | Incid. 90 d | Pago |
|---|
Hoy este gráfico mide sobre todo si se registran las entradas, no si se compra de más. One Piece aparece recibiendo 823 unidades y vendiendo 6.623: eso es imposible, y es exactamente el problema de las cajas sin desmontar y las compras sin recepcionar. Los dos que sí destacan por arriba son Pokémon (1,3 entradas por salida) y juegos de mesa (1,71) — ahí sí entra más de lo que sale. Cuando el saneo esté hecho, este es el indicador que avisa del exceso antes de que se convierta en muerto.
Solo las referencias marcadas como reponibles: accesorios, alimentación, mesa y miniaturas. En TCG no aplica porque la cantidad la fija la preventa o la asignación. El EOQ va a Odoo como cantidad múltiple de la regla de reabastecimiento y el punto de pedido como mínimo. Ojo: casi todas las de arriba tienen stock negativo, así que primero hay que registrar las entradas que faltan o la regla pedirá de más.
| Producto | Familia | Ingreso 12 m | Stock | EOQ | Punto de pedido |
|---|
Lo que se pidió en mostrador y no se pudo vender por falta de material. Un tick por petición en la hoja de captura. Es la única forma de separar «no vendimos» de «no había».
El histórico real ya existe en el Sheet financiero desde sep 2024, cargado a mano por juego y mes. Se importa una vez y a partir de ahí sale del Excel de inscripciones.
| Evento | Inscritos | Recaudación | Premios | Arbitraje | Margen | Venta del día |
|---|
Como los premios se calculan sobre la recaudación, el margen directo siempre es pequeño. La columna que decide si un torneo merece la pena es la última.
Hoy se sabe lo que se vende, no lo que se va sin comprar. Con la escasez de Pokémon, lo segundo es probablemente el dato que más falta hace.
Los dos primeros escalones son reales: 26.585 tickets en 12 meses y un 4 % con cliente identificado. El de visitantes está en gris porque no se mide todavía — y es justo el que diría cuánta gente entra y se va. El salto de «compra» a «lo conocemos» es lo que resuelve el programa de socios.
Cada tipo vive hoy en un sitio distinto: lanzamientos en el correo, torneos en el Excel, fiscales en el calendario AEAT del Sheet y los pagos en Compras Comprometidas. Aquí se superponen las cuatro capas.
El panel tiene catorce pantallas y nadie las usa todas. Esto es lo que le sirve a cada puesto y cada cuánto.
| Puesto | Cuándo | Qué abre | Para decidir |
|---|---|---|---|
| Fer · dirección y tesorería | Cada mañana, 2 min | Hoy | Si hay algo en rojo que cambie el día |
| Fer · lunes | Semanal, 5 min | Importar | Soltar los exports de la semana y refrescar todo |
| Fer · cierre de mes | Mensual, 45 min | Resumen · Ventas · Compras | Objetivos del mes siguiente y qué pedir |
| Dani · operaciones y compras | Lunes, 30 min | Stock · Saneo · Compras | Qué bloque contar y qué proveedor apretar |
| Dani · antes de un pedido | Por lanzamiento | Salidas | Cuánto sacar el día de salida y cuánto retener |
| Gabri · mostrador | Cada turno | Agenda · Tareas | Qué llega hoy y qué hay que anotar |
| Gestoría y banco | Trimestral | Resumen · Agenda | Cifras de cierre y vencimientos fiscales |
Cuatro áreas, y cada una responde a una pregunta distinta:
Es la capa de lectura del negocio. No sustituye al Sheet financiero ni al análisis de stock: los agrega. Lo que se teclea sigue teclándose en su sitio, y lo que se simula —stress test, valoración, viabilidad de cómics— se queda en la hoja de cálculo, que es la herramienta correcta para eso.
La regla que separa las dos mitades: Google Sheets para lo que se teclea, la web para lo que se mira.
Dos vías, y puedes usar solo la primera:
Lo que se importa se procesa en tu navegador: el fichero no se sube a ningún sitio y el panel guarda solo el resultado agregado, no las 40.000 líneas. La contrapartida es que vive en ese navegador — por eso está la segunda vía.
Y lo que Odoo no sabe sigue capturándose a mano: peticiones no atendidas, asignación solicitada frente a servida, incidencias de proveedor, conteo de tráfico e inscripciones. Eso va en las hojas de Google o directamente en el Excel del que tires.
No hay nada interpretativo: cada aviso es un umbral fijo.
Siguen siendo manuales: la descarga del CSV de Cardmarket y CardTrader (no hay API), el alta de lanzamientos en el calendario, la asignación solicitada frente a servida, las incidencias de proveedor, el conteo de tráfico y las inscripciones de torneo. Todo eso está en las checklists.
Por este orden: si la etiqueta dice «Ejemplo», no es un dato; si dice «Real», mira en Ajustes de cuándo son los datos; y si sigue sin cuadrar, casi siempre es un problema de origen —coste a cero, stock en negativo o una unidad de medida mal configurada— y no del panel.
Ideas que no están construidas pero que salen de datos que ya existen o que costaría poco capturar. Anotadas aquí para no perderlas.
| Persona | Cuándo | Qué | Tiempo |
|---|
La checklist diaria es la que se encoge sola en cuanto el volcado esté automatizado: hoy el Sheet pide nueve tareas de tecleo al día y siete de ellas desaparecen.
Cada fila es un juego o familia con todo lo que sabemos de él en un sitio. El semáforo compara contra el resto de la tienda, no contra un ideal de manual: verde es «de los mejores aquí», rojo es «de los peores aquí».
| Línea | Ingreso | Margen | Stock | Cobertura | Stock en exceso | Descuento | Refs en neg. |
|---|
El margen solo cuenta las líneas con coste fiable, así que para juegos con muchas referencias sin coste está infravalorado. La cobertura de los que tienen cajas sin desmontar está inflada. Y el descuento excluye los singles, que no tienen tarifa real contra la que comparar.
Arriba a la izquierda es donde quieres estar: margen alto y poco stock parado. Abajo a la derecha, lo contrario. El tamaño del punto es la facturación, así que un punto grande mal colocado pesa mucho más que uno pequeño.
Por debajo de 1 el retail destruye valor: el dinero parado en el almacén rinde menos de lo que costó tenerlo ahí. El TCG sale a 0,37 y los accesorios a 1,16 — el sellado mueve el dinero y los accesorios lo rentabilizan. Con dos salvedades: el stock de TCG está inflado por las cajas sin desmontar, y quedan fuera las referencias sin coste.
Periodo: —. Todos los números de esta pantalla miran el mismo, para que se puedan restar entre sí.
Los doce indicadores del cuadro clásico. Cada uno dice de dónde sale; el que no tiene dato enseña un guion y qué hace falta para tenerlo, en vez de un cero que parecería un resultado.
El margen bruto sale de restar coste a lo vendido, y en Odoo no todo lo vendido tiene coste. Esta tabla dice de qué parte de la facturación se mide de verdad, cuánto margen deja cada tipo de producto y cuánto ingreso desbloquea arreglar cada fila. Las filas en rojo no aportan ni un euro de referencia.
| Tipo de producto | Facturación | Con coste | Margen medido | Sin referencia |
|---|
Los seis indicadores en blanco no están en blanco por capricho: hacen falta tres cosas, y una de ellas desbloquea la mitad.
Y una advertencia sobre dos de los doce, para no montar pantallas que no sirvan: el pendiente de cobro en una tienda de mostrador es casi cero, porque se cobra en caja; solo tiene sentido si facturas a empresas. Y el coste de captación mide poco mientras no hagas captación de pago — el número útil para ti no es cuánto cuesta traer un cliente, sino cuánto vale el que ya viene.
Los filtros se aplican a todo lo de abajo a la vez. También puedes filtrar pinchando directamente en las barras y en los bloques del mapa, o arrastrando sobre la serie temporal para quedarte con un periodo.
Arrastra sobre el gráfico para seleccionar un periodo: los filtros de arriba y todo lo de abajo se recalculan con esa selección. Doble clic para deshacerla.
Pincha en una barra para quedarte solo con ese juego; vuelve a pincharla para soltarlo. Se pueden marcar varios.
El área de cada bloque es la facturación. Es la vista que deja claro de un vistazo cuánto pesa el sellado frente a todo lo demás.
Día de la semana contra franja horaria. El martes aparece cerrado y el domingo solo por la tarde porque así abre la tienda. Cuando entren las líneas reales de Odoo, este mapa es el que dice si merece la pena mover un turno o alargar una tarde.
La tienda física sigue siendo casi todo. Filtrando por canal se ve qué producto tira de cada uno.
| Juego · Tipo | Ingreso | Uds | Precio medio | Margen de ficha | Líneas |
|---|
Pincha en una cabecera para ordenar. El CSV baja exactamente lo que estés viendo, filtros incluidos, para llevártelo a una hoja de cálculo.
Un display es un coste conjunto: sale una chase de 60 € y doscientas comunes de cinco céntimos, y repartir su coste por número de cartas daría márgenes absurdos en las dos puntas. Aquí el coste va por set: el real cuando la apertura está registrada, y precio × k cuando no. La k se ajusta en Importar.
| Set | Juego | Ingreso | Coste | k | Margen | Origen |
|---|
Magic aparece con 76 € en todo el año. Siendo el juego de singles por excelencia, eso no es un dato de negocio: es la prueba de que las ventas de cartas sueltas no pasan por el TPV. Lo que se ve aquí es básicamente el mostrador de los juegos nuevos, donde el cliente pide una carta suelta y se le cobra en caja.
El pico de enero (5.500 €) y el valle de diciembre (782 €) siguen a los lanzamientos, no a la campaña de Navidad: los singles se mueven en las semanas siguientes a que salga un set, cuando la gente completa mazo. Es un negocio pegado al calendario de salidas, igual que el sellado.
| Set | Juego | Uds | Ingreso | Precio medio | Últ. venta |
|---|
El precio medio por set dice mucho: Digimon BT24 sale a 25,05 € por unidad y BT25 a 9,42 €. No es que uno sea mejor juego, es que en uno se vendieron cartas caras y en otro se vendió a granel. Esa diferencia es la que se pierde cuando todo el set va en una sola referencia.
Hoy este bloque responde a «cuánto se cobró en caja por cartas sueltas». Para que responda a «cuánto gana la tienda con los singles» faltan tres cosas, en este orden:
Y una nota sobre el orden de las cosas: el backlog de listado y la máquina de clasificar atacan el cuello de botella de meter cartas en Cardmarket. Pero medir cuánto deja el canal se puede hacer antes de resolver ese cuello de botella, y conviene: si resulta que los singles dejan menos margen del que cuesta listarlos, eso cambia la prioridad de la máquina.
Separar volumen de precio evita confundir un buen mes con uno caro. Los picos son las dos cosas a la vez: en febrero se vendieron 4.590 unidades a 8,91 € de media y en diciembre 3.363 a 6,43 €. Es decir, en los meses de lanzamiento no solo entra más gente: compran producto más caro — cajas en vez de sobres sueltos.
Cada fila está normalizada sobre su propio máximo, así que el color dice «este fue su mejor mes», no «este juego vende más». Es la forma de ver el patrón de cada uno sin que One Piece aplaste al resto.
Desliza a la derecha para ver el resto del año.
Qué compara exactamente. Por cada línea vendida: lo que se cobró de verdad frente a lo que habría salido al precio de la ficha de Odoo. Los dos con IVA, que es como está puesto el PVP de estantería. Si vendes tres sobres cuya ficha dice 6 € y cobras 18 €, el descuento es cero; si cobras 15 €, es un 17 %.
Dos cosas quedan fuera a propósito. Los singles, porque su PVP de ficha es un marcador de 1 € o 5 € mientras la carta se vende a precio de mercado — no hay tarifa contra la que comparar. Y cualquier línea que se venda más de un 50 % por encima de su ficha, que no es una venta rara sino una ficha sin rellenar.
Y una advertencia sobre cómo leerlo: esto no mide «cuánto regalamos». Mide la distancia entre el precio de la etiqueta y el que acaba en el ticket, y buena parte de esa distancia no son descuentos conscientes: son packs, redondeos, premios de torneo entregados en material y fichas que se quedaron con un precio viejo. Sirve para encontrar dónde mirar, no para culpar a nadie.
El margen de Booster Pack sale a −18.335 €, y no es que vender sobres pierda dinero: es el Spider-Man con el coste de la caja metido en el sobre. Hasta arreglar los veinte costes, esta columna miente. Singles aparece a cero porque no tienen coste en Odoo, no porque no dejen margen.
| Producto | Juego | Margen 12 m | Ingreso | % margen |
|---|
Ordenado por margen, no por ingreso, que es la lista que casi nunca se mira. Aparecen cosas que no salen en el top de facturación: una lata de Monster deja un 42,9 % y un Commander de Final Fantasy un 43,3 %. Solo entran referencias con coste fiable, así que faltan los singles y todo lo que tenga el coste a cero.
| Set | Uds | Semana 1 | Mes 1 | Tras el día 90 |
|---|
Los dos extremos lo dicen todo: Riftbound Origins colocó el 65 % en siete días, y Tarkir de Magic solo el 1,5 %, con un 72 % vendiéndose después del día 90. El primero hay que sacarlo entero el día de salida; el segundo es un producto de fondo de estantería y comprarlo como si fuera un pico es lo que llena el almacén.
Tal y como salen, sin tocar nada. Acepta .xlsx y .csv, y puedes soltar varios de golpe. El panel mira las pestañas y las cabeceras, reconoce qué fichero es y calcula lo demás.
Este es el paso que hace que los datos te sigan. Publicar sube lo que acabas de importar a tu documento de Google, y a partir de ahí el panel se abre con datos en el móvil, en el portátil y en la tienda. Si todavía no has instalado el script, ve a Ajustes: son diez minutos y se hace una sola vez.
No hace falta que exportes todo el histórico cada vez. Exporta de Odoo solo el periodo nuevo —la semana, el mes— y publícalo: el libro suma, no sustituye. Si vuelves a subir un periodo que ya estaba, se corrige en vez de duplicarse. Dentro de dos años seguirás exportando un mes, no veintiséis.
La descarga en Excel es la alternativa manual: el mismo contenido en las once pestañas, para subirlo a Drive tú. Sirve de copia de seguridad, pero para el día a día el botón es Publicar.
El «Precio de venta» del export de movimientos viene con IVA, y el coste de Odoo viene sin él. Si no se descuenta, el margen sale unos ocho puntos por encima del real y la facturación no cuadra con el análisis de stock. El panel lo convierte a base imponible al importar.
Los tipos por defecto son los de la AEAT para 2026: 21 % general y 10 % en alimentación. Con una excepción que el panel ya aplica sola: los refrescos azucarados o edulcorados y las bebidas energéticas van al 21 %, así que Monster, Coca-Cola o Fanta se calculan al general aunque sean bebida; el agua y el café, al reducido. Si cambias un tipo, vuelve a importar el fichero para que se recalcule.
Una carta no tiene coste propio: sale de un display que costó un dinero y del que salieron cientos de cartas de valor muy distinto. Repartir ese coste entre el número de cartas daría un 99 % de margen en la chase y un −84 % en las comunes, y las dos cifras serían mentira. Lo que se hace es el método del minorista: el coste de una carta es su precio por una constante k del juego. Así todas las cartas del mismo set tienen el mismo margen —que es la verdad— y una caída de precio no se disfraza de venta mala.
Esto es el plan B. Si rellenas la pestaña Aperturas del libro con lo que abres de cada expansión, el panel deja de estimar: usa el coste real de ese set y además mide la k de verdad, que es la que aparece arriba como «medida». La k manual solo se usa para los sets de los que no hay apertura registrada.
No todas las pestañas del libro funcionan igual, y la diferencia importa para saber qué exportar:
| Pestaña | Qué hace al publicar | Qué exportar |
|---|---|---|
| hechos, ventas_mes, marketplace, eventos, tráfico, calendario, pipeline | Acumula Añade lo nuevo y corrige lo que ya estaba. Nada se borra. | Solo el periodo nuevo |
| stock, curva, kpis, proveedores, ventas_canal, franjas | Sustituye Es una foto del momento: la última manda. | El análisis completo |
La razón es simple: «cuánto vendí en julio» es historia y no cambia; «cuánto stock tengo» es una foto y solo vale la de hoy. Por eso el análisis de stock hay que sacarlo entero cada vez —es rápido, es una sola consulta— mientras que las ventas solo necesitan el trozo nuevo.
Las filas de hechos se agregan por día, hora, juego, tipo y canal antes de subirlas. Un año de ventas son unas quince mil filas, no cuarenta mil: el libro aguanta años sin acercarse a los límites de Google. Y el panel solo se descarga los últimos 25 meses al abrirse, así que abrir en el móvil no se hace más lento con el tiempo.
Lo que importas se procesa en tu navegador: el fichero no sale de tu ordenador, no se sube a ningún sitio. El panel guarda solo el resultado —unas decenas de filas ya agregadas—, no las 40.000 líneas del export.
Eso tiene una consecuencia práctica: los datos importados viven en ese navegador. Si abres el panel en el móvil, estará vacío hasta que importes allí también, o hasta que conectes las hojas de Google. Por eso están las dos vías.
Para leer .xlsx el panel carga una librería desde un CDN la primera vez que importas. Si no hay internet en ese momento, exporta de Odoo en .csv y funciona igual sin depender de nada.
Esta es la vía recomendada para trabajar desde varios sitios. Un solo documento de Google con las once pestañas: importas los exports una vez desde donde los tengas, pulsas Publicar, y el panel se abre con datos en el móvil, en el portátil y en la tienda. Debajo tienes el script que hay que instalar una vez y las instrucciones.
/exec, no en /dev) y pégala arriba, junto con la URL del documento y la misma clave.El libro de finanzas va aparte, y también por el script. Si además de las once pestañas quieres que el panel lea tu hoja de saldos, cashflow y transacciones, pon su id en ID_FINANZAS, en las primeras líneas del código. El id es el trozo largo de su URL, entre /d/ y /edit. Al leerla el script —que se ejecuta como tú— esa hoja puede seguir siendo privada: no hay que compartirla con nadie. De ahí salen la caja disponible, los compromisos de pago, los gastos de explotación y el flujo de caja.
Si cambias el código, hay que volver a implementar. Es el fallo número uno con Apps Script y no avisa: guardar no publica nada. Cuando pegues una versión nueva del código, ve a Implementar → Gestionar implementaciones, edita la que ya tienes con el lápiz, elige Versión: nueva versión y guarda. La URL no cambia, así que no hay que tocar nada aquí arriba.
Por qué «cualquier usuario»: Google solo permite que una página externa hable con el script si el acceso es abierto. Por eso lleva clave: sin ella, el script no escribe ni devuelve nada. Trátala como una contraseña — quien la tenga puede leer y sobrescribir tus datos.
El enlace para el móvil lleva la clave dentro. Va detrás de una almohadilla, así que no llega a ningún servidor, pero trátalo como tratarías una contraseña: mándatelo por un canal privado y no lo pegues en un grupo.
Lo bueno de instalar el script: el documento de Google puede quedarse privado, porque el panel lee a través del script. Si prefieres no instalarlo, también funciona compartiendo el documento con «Cualquier persona con el enlace: Lector» — pero entonces esa URL es la única barrera entre tus márgenes y quien la tenga.
Esto es la segunda vía, para tener histórico compartido y que el móvil abra con datos. Si solo quieres ver tus números ya, usa Importar y suelta el export de Odoo tal cual. Aquí pega la URL completa de la pestaña de Google Sheets en cada casilla — el id y el gid se extraen solos. Se guarda al momento en este navegador; no hace falta tocar el fichero.
#gid= al final; si no, se usa la primera pestaña.La primera fila de la pestaña son las cabeceras y tienen que llamarse como las que pide cada bloque. El panel lee la hoja tal cual: si una columna cambia de nombre, ese bloque avisa y se queda con los datos de ejemplo en vez de romperse.
La configuración vive en el navegador desde el que la escribes, no en el servidor. Eso significa que si la montas en el ordenador de la tienda, el móvil sigue sin ella. Para llevarla de un sitio a otro:
.json, que además sirve de copia de seguridad.Y una advertencia honesta: esta página no tiene contraseña. Cualquiera que llegue a la URL ve el panel y los ajustes. Si eso importa, la protección tiene que ponerla el hosting (autenticación básica o acceso por IP); un candado hecho en JavaScript aquí no protegería nada.