Capítulo 16

Le botteghe

Un buen mercader no solo sabe cuánto gana, sino dónde lo gana y dónde lo pierde.
— Francesco di Marco Datini, mercader de Prato, c. 1390

Marco tiene tresbotteghe(tiendas): una en Florencia donde vende telas finas, una en Venecia especializada en especias, y una en Brujas que comercia con ambas. Las tres comparten el mismo catálogo de cuentas y el mismo libro mayor.

Marco quiere saber:cuál de mis tres tiendas es la más rentable?La solución ingenua sería crear cuentas separadas para cada tienda: "Ventas-Florencia", "Ventas-Venecia", "Ventas-Brujas", y lo mismo para cada cuenta de gasto. Pero esto multiplica las cuentas rápidamente.

Supongamos que Marco tiene 20 cuentas y 3 tiendas. Si crea cuentas separadas, necesita 60 cuentas. Ahora agrega 4 lineas de producto (especias, telas, vinos, joyería) y necesita 240. Agrega 3 proyectos y ya son 720 cuentas.

Es insostenible. La solución son lasdimensiones: etiquetas que se agregan a cada línea de una póliza sin multiplicar las cuentas.

Una dimensión es unatributo adicionalen una línea de póliza que permite clasificar el movimiento sin crear nuevas cuentas. En XBRL-GL se llamanidentifierReference; en la práctica, son etiquetas clave-valor.

Con dimensiones, Marco mantiene sus 20 cuentas originales y agrega metadatos:

La misma cuenta4100 Venditesirve para Florencia, Venecia y Brujas. La dimensiónbotteganos dice dónde ocurrió la venta, ylineanos dice qué tipo de producto se vendió.

Se pueden combinar libremente: una línea puede tener 1, 2, 5 o ninguna dimensión. La validación impide claves duplicadas en la misma línea (no puedes tener dos vecesbottegaen el mismo movimiento).

La funciónfindByDimensionsdel StorageAdapter permite filtrar pólizas por sus dimensiones. Marco puede preguntar:

• "Todas las ventas de la tienda de Venecia"-- filtro:{`{bottega: "venezia"}`}en cuentas de ingreso

• "Gastos del proyecto del banquete del Duque"-- filtro:{`{progetto: "banchetto-del-duca"}`}

• "Ventas de especias en Brujas"-- filtro:{`{bottega: "brujas", linea: "spezie"}`}

El filtro de multiples dimensiones usa AND: todas las condiciones deben cumplirse en lamisma líneade la póliza.

Con dimensiones, Marco puede generar unestado de resultados por tienda:

Venecia es la más rentable (400 FIO), Florencia la segunda (250 FIO), y Brujas la que menos aporta (70 FIO). Sin dimensiones, Marco solo vería la utilidad total de 720 FIO -- sin saber donde se genera.

Algunas cuentas pueden exigir que ciertas dimensiones estén presentes. Si Marco quiere quetodaventa incluya obligatoriamente la dimensiónbottega, configura la cuenta así:

Esto garantiza datos completos para los reportes dimensionales.

Terminemos con un problema práctico que muestra el poder de las dimensiones. Marco organiza un banquete para el Duque de Florencia. Hay 8 invitados. La cuenta del banquete es:

Las reglas: es el cumpleaños deGiovanni, así que él no paga. Los otros 7 invitados dividen la cuentacompartida(vino, carne, pasta, dulces = 80 FIO + propina). El plato especial (12 FIO) lo paga solo Giovanni como festejado... pero espera, Giovanni no paga. Entonces los 7 lo cubren también. YAlessandropagó su parte por separado al mesero (ya la pagó).

Con dimensiones, cada pago se registra con{`{progetto: "banchetto-del-duca", invitato: "nombre"}`}. Marco puede verificar después que todos pagaron su parte.