La regla que lo gobierna todo
Una cifra no puede existir sin decir de dónde sale. O apunta al hecho del que salió, o declara la fórmula que la produjo, o dice por qué está vacía. No hay un cuarto caso, y un hueco nunca es un cero.
Por qué existe
La fuente que usaba mi cartera servía beneficio bruto y resultado de explotación como cero cuando en realidad no había dato. El problema nunca fue no tener datos: fue que los datos malos parecían buenos. Un ratio calculado sobre un cero inventado sale con la misma pinta que uno bueno.
Lo que se gana yendo al origen son diez ejercicios completos en vez de los cuatro del agregador, con beneficio por acción, flujo de explotación, inversión y dividendos pagados etiquetados de forma nativa por el propio emisor.
Con qué está hecho
Ingesta
GoXBRL 2.1Lector de PDF propio
Almacén
PostgreSQLMigraciones
Contraste
ESEFxBRL-JSONLEI
Servicio
API RESTRailwayDocker distroless
Cómo funciona por dentro
Dos capas, y la de abajo es la que manda: lo que dice el documento no se toca nunca, y todo lo demás se recalcula desde ahí.
Origen
La CNMV
No hay una dirección por fichero: hay que conducir su formulario con cinco peticiones por emisor para que suelte un archivo con todo su histórico
Descarga
El documento, tal cual llegó
Se guarda comprimido con el resumen de su contenido. Ese resumen es la idempotencia: lo ya visto no se vuelve a escribir. Va despacio a propósito, sin concurrencia
Go
Capa de abajo
Hechos
Lo que dice el XBRL sin traducir, inmutable. Aquí no se corrige nada nunca
Capa de arriba
Vista anual derivada
La fila de cada ejercicio, calculada desde los hechos con los mapas de conceptos. Hay tres taxonomías (general, banca y seguros) que reutilizan los mismos códigos con significados distintos, así que el mapa va a estar mal varias veces y corregirlo tiene que ser recalcular en segundos
Control
Contraste contra ESEF
El informe europeo del mismo emisor, unido por su identificador de entidad. Es el único control independiente del mapa de conceptos, y de ahí no sale ni un valor servido
Fuente aparte
Dividendos con fecha
Las cuentas anuales dicen cuánto se pagó, no cuándo. El cuándo son actos societarios que el emisor comunica en PDF, y eso se recorre solo cada día
Salida
API REST
Cuentas anuales, calendario de dividendos y previsiones, cada cifra con su procedencia o con el motivo de estar vacía. Es lo que consume Divr
Decisiones que cambiaron algo
- Dos capas separadas. Los hechos son inmutables y pesan; la vista se recalcula. Corregir un mapeo es volver a derivar en segundos y no volver a descargar ochenta megas por emisor, y deja la parte frágil como una función pura que se prueba sin red.
- La base de datos rechaza los datos sin procedencia. No es una convención que se respeta por buena voluntad: hay restricciones que impiden escribir un cero sin origen, un valor sin documento y un hueco sin motivo.
- El contraste existe porque un mapa mal hecho no da un error, da una cifra plausible. El resultado de banca apuntó una temporada al que incluye minoritarios en vez de al atribuido a la dominante, y sobrevivió a la investigación, al código y a un test en verde. En el informe europeo son dos conceptos distintos y se canta el primer día.
- Una discrepancia se registra, no se resuelve. Se marca el campo y se sigue sirviendo el dato oficial. La marca dice algo sobre nuestro mapa, no sobre el emisor.
- Una estimación no es un evento, y eso lo impone el esquema. Un evento no puede existir sin su anuncio, y la tabla de previsiones no tiene columna donde guardar uno. Confundir una fecha proyectada con una anunciada no es un descuido posible: es algo que no se puede escribir.
- Un calendario vacío y un recolector caído son la misma respuesta. Por eso la respuesta lleva hasta cuándo se ha recorrido el registro y cuántas comunicaciones se leyeron: con doce leídas y ningún dividendo, el silencio es del emisor; con cero, el silencio es nuestro.
- Las unidades no se infieren jamás y el orden de las fechas lo vigila la base. Una escala mal leída multiplica por mil sin romper un test, y dos fechas del ciclo de pago intercambiadas al leer un PDF es el fallo más fácil de cometer y el más difícil de ver.
Dónde está
El recorrido está completo de punta a punta: descarga, lectura, derivación, persistencia, contraste y API. Lo que falta no es código, es la primera carga de verdad y que alguien abra el informe publicado de un emisor de cada taxonomía y reconozca las cifras. Un mapa de conceptos mal escrito no produce un error, produce un dato creíble, y eso no lo cierra ningún test.
Verlo funcionando
El repositorio es privado. El servicio está levantado y su portada trae un probador: pegas una clave, eliges una ruta y la petición sale desde tu propio navegador. Las claves se emiten a mano, porque redistribuir estos registros a terceros es una pregunta que todavía no está resuelta y un alta automática la estaría respondiendo por la vía de los hechos.