BreviariumBreviarium
LibreríasBreviarium Core

Cómo funciona por dentro

El recorrido de una fecha hasta los textos, la estructura de la base de datos y cómo contribuir.

Esta página es para quien quiera entender o mejorar la librería. Para usarla no hace falta.

De la fecha al texto

Cuando llamas, por ejemplo, a getLaudes(fecha):

  1. Día litúrgico. Romcal, con el calendario de España (@romcal/calendar.spain), genera el calendario del año civil. Del día pedido se toma la primera celebración que no es opcional. El resultado incluye un id (ordinary_time_11_monday), el ciclo dominical, la semana del salterio y la feria correspondiente (weekday).

  2. Búsqueda del formulario. En la colección de la hora (all_laudes.json) se busca el registro con ese id, por este orden:

    • el que coincide con el ciclo dominical del año;
    • el de ciclo ANY;
    • cualquiera con ese id.

    Además, si la celebración tiene una feria asociada, se busca también el registro de la feria.

  3. Combinación. Los registros guardan números, no textos. Cuando una memoria no tiene un texto propio, el número es -1, y la librería lo sustituye por el valor del registro de la feria.

  4. Resolución de textos. Cada número se traduce a su texto en las tablas comunes (himnos, salmos_textos, oraciones_finales…). Si un número no existe, el texto queda como ''.

  5. Respuesta. Un mapper por hora da a los campos sus nombres finales (s1_t → primer_salmo_texto).

Completas es la excepción: no pasa por Romcal y elige uno de los siete formularios semanales según el día de la semana.

Estructura de la base de datos

src/prayers/db/
├── all_invitatorium.json      # un registro por celebración: { id, val }
├── all_officium.json          # Oficio de lectura
├── all_laudes.json
├── all_tertia.json
├── all_sexta.json
├── all_nona.json
├── all_vesperae.json
├── all_lectures.json          # lecturas de la Misa, un registro por id y ciclo
└── es/
    ├── commons/               # tablas de textos { id, val }
    │   ├── himnos.json
    │   ├── salmos_citas.json · salmos_antifonas.json · salmos_textos.json
    │   ├── lectura_breve_citas.json · lectura_breve_textos.json
    │   ├── responsorios.json · oraciones_finales.json
    │   ├── preces_intro.json · preces_respuesta.json · preces_contenido.json
    │   ├── oficio_titulos.json · oficio_citas.json · oficio_textos.json
    │   ├── lecturas_referencia.json · lecturas_texto.json
    │   ├── invitatorios.json · invitatory_psalms.json
    │   └── …
    └── completorium/          # 1.json (domingo) … 7.json (sábado), con los textos completos

Este es el registro real de Laudes del lunes de la 11ª semana del Tiempo Ordinario:

{
  "id": "ordinary_time_11_monday",
  "cycle": "ANY",
  "himno": 192,
  "himno_latino": 9500,
  "s1_c": 189, "s1_a": 188, "s1_t": 190,
  "s2_c": 190, "s2_a": 189, "s2_t": 191,
  "s3_c": 191, "s3_a": 190, "s3_t": 192,
  "lb_c": 188, "lb_t": 189,
  "responsorios": [2963, 2964, 2965, 2966, 2967, 2968],
  "ce_a": 112,
  "preces_i": 123, "preces_r": 123, "preces_c": [2050, 2051, 2052, 2053],
  "invi_pn": 42,
  "o_final": 190
}

Y así se ve una memoria que toma la salmodia de la feria (Santa Águeda, MEMORY_FERIAL2): todos los campos s1_*, s2_* y s3_* valen -1, y la librería los rellena con los de la feria de ese día.

ClaveCampo de salida
s1_c, s1_a, s1_tprimer_salmo_cita, _antifona, _texto (igual con s2_* y s3_*)
lb_c, lb_tlectura_biblica_cita, lectura_biblica
ce_acantico_evangelico_antifona
preces_i, preces_r, preces_cpreces_intro, preces_respuesta, preces_contenido
invi_pninvitacion_padrenuestro
o_finaloracion_final
himno_latinoNo se expone todavía en la respuesta

Gracias a esta normalización, un salmo que se reza muchas veces al año se guarda una sola vez.

Asociación entre textos y fechas

La parte delicada del proyecto es saber qué se celebra cada día: muchas fiestas dependen de la Pascua, y además hay precedencias entre celebraciones, traslados y memorias. Siguiendo la filosofía del proyecto, en lugar de reprogramar esos cálculos se usa Romcal, una librería open-source especializada. Los textos se asocian a los identificadores de celebración de Romcal mediante unos scripts en Python durante la preparación de la base de datos.

Contribuir

git clone [email protected]:Breviarium-app/breviarium--core.git
cd breviarium--core
make install   # dependencias
make test      # tests con Vitest
make build     # genera dist/
  • Corregir un texto: busca el texto en la tabla de es/commons/ que corresponda y edítalo. El cambio se aplica a todos los días que lo usan.
  • Un día devuelve un texto equivocado: comprueba el registro del id en la colección de la hora (all_*.json) y los números a los que apunta.
  • Avisos id … Not found in …: indican un número sin texto en la tabla correspondiente. Son buenos candidatos para una corrección.

Las incidencias y propuestas se gestionan en GitHub Issues.

On this page