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):
-
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 unid(ordinary_time_11_monday), el ciclo dominical, la semana del salterio y la feria correspondiente (weekday). -
Búsqueda del formulario. En la colección de la hora (
all_laudes.json) se busca el registro con eseid, 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.
-
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. -
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''. -
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 completosEste 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.
| Clave | Campo de salida |
|---|---|
s1_c, s1_a, s1_t | primer_salmo_cita, _antifona, _texto (igual con s2_* y s3_*) |
lb_c, lb_t | lectura_biblica_cita, lectura_biblica |
ce_a | cantico_evangelico_antifona |
preces_i, preces_r, preces_c | preces_intro, preces_respuesta, preces_contenido |
invi_pn | invitacion_padrenuestro |
o_final | oracion_final |
himno_latino | No 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
iden 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.