From 8ea0ba52973a699350530365b213844373bf9662 Mon Sep 17 00:00:00 2001 From: Janne Asmala Date: Thu, 22 Oct 2026 17:49:30 +0800 Subject: [PATCH] feat(vaccinations): Add dengue and tuberculosis to the catalogue Dengue: Two doses three months apart and no booster. It's listed with the travel vaccines. Tuberculosis: One dose at birth and no booster. It's listed under childhood, since that's where it appears on most vaccination cards. Both cite the relevant WHO position paper. The names are translated in all eight languages, and the OpenAPI spec is regenerated to include the two new vaccines. --- CHANGELOG.md | 9 +++++++ docs/api/openapi.yaml | 8 ++++-- messages/de.json | 2 ++ messages/en.json | 2 ++ messages/es.json | 2 ++ messages/fr.json | 2 ++ messages/it.json | 2 ++ messages/ko.json | 2 ++ messages/nl.json | 2 ++ messages/pl.json | 2 ++ src/lib/vaccinations/vaccine-catalog.ts | 33 +++++++++++++++++++++++++ 11 files changed, 64 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b09a56d1..9cb8bc97d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [Unreleased] + +### Added + +- **Dengue and tuberculosis in the vaccine catalogue.** Dengue is listed + with the travel vaccines (two doses three months apart) and tuberculosis + with the childhood ones (one dose at birth); neither has a booster. Each + cites its WHO position paper, and searching "bcg" finds tuberculosis. + ## [1.44.1] — 2026-10-22 ### Security diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index da8fbac66..2230542fa 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -33383,7 +33383,7 @@ components: maxLength: 100 components: minItems: 1 - maxItems: 26 + maxItems: 28 type: array items: type: string @@ -33414,6 +33414,8 @@ components: - yellow-fever - japanese-encephalitis - cholera + - dengue + - tuberculosis typicalSeriesDoses: anyOf: - type: integer @@ -33442,7 +33444,7 @@ components: maxLength: 100 components: minItems: 1 - maxItems: 26 + maxItems: 28 type: array items: type: string @@ -33473,6 +33475,8 @@ components: - yellow-fever - japanese-encephalitis - cholera + - dengue + - tuberculosis typicalSeriesDoses: anyOf: - type: integer diff --git a/messages/de.json b/messages/de.json index 27d928e45..0858e1de1 100644 --- a/messages/de.json +++ b/messages/de.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Gelbfieber", "japanese-encephalitis": "Japanische Enzephalitis", "cholera": "Cholera", + "dengue": "Dengue", + "tuberculosis": "Tuberkulose", "td": "Td (Tetanus, Diphtherie)", "tdap": "Tdap (Tetanus, Diphtherie, Pertussis)", "tdap-ipv": "Tdap-IPV (Vierfachimpfung)", diff --git a/messages/en.json b/messages/en.json index 00bd35af2..8e5ade2f3 100644 --- a/messages/en.json +++ b/messages/en.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Yellow fever", "japanese-encephalitis": "Japanese encephalitis", "cholera": "Cholera", + "dengue": "Dengue", + "tuberculosis": "Tuberculosis", "td": "Td (tetanus, diphtheria)", "tdap": "Tdap (tetanus, diphtheria, pertussis)", "tdap-ipv": "Tdap-IPV (four-in-one)", diff --git a/messages/es.json b/messages/es.json index 60d87894d..55a01c502 100644 --- a/messages/es.json +++ b/messages/es.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Fiebre amarilla", "japanese-encephalitis": "Encefalitis japonesa", "cholera": "Cólera", + "dengue": "Dengue", + "tuberculosis": "Tuberculosis", "td": "Td (tétanos, difteria)", "tdap": "Tdap (tétanos, difteria, tos ferina)", "tdap-ipv": "Tdap-IPV (tetravalente)", diff --git a/messages/fr.json b/messages/fr.json index 5d94ed83e..52d56f161 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Fièvre jaune", "japanese-encephalitis": "Encéphalite japonaise", "cholera": "Choléra", + "dengue": "Dengue", + "tuberculosis": "Tuberculose", "td": "dT (tétanos, diphtérie)", "tdap": "dTca (tétanos, diphtérie, coqueluche)", "tdap-ipv": "dTca-VPI (quadruple)", diff --git a/messages/it.json b/messages/it.json index 99c97f0ad..7d06008ba 100644 --- a/messages/it.json +++ b/messages/it.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Febbre gialla", "japanese-encephalitis": "Encefalite giapponese", "cholera": "Colera", + "dengue": "Dengue", + "tuberculosis": "Tubercolosi", "td": "Td (tetano, difterite)", "tdap": "Tdap (tetano, difterite, pertosse)", "tdap-ipv": "Tdap-IPV (tetravalente)", diff --git a/messages/ko.json b/messages/ko.json index db2d6a0b6..c552a13f5 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -10426,6 +10426,8 @@ "yellow-fever": "황열", "japanese-encephalitis": "일본뇌염", "cholera": "콜레라", + "dengue": "뎅기열", + "tuberculosis": "결핵", "td": "Td(파상풍, 디프테리아)", "tdap": "Tdap(파상풍, 디프테리아, 백일해)", "tdap-ipv": "Tdap-IPV(4종 혼합)", diff --git a/messages/nl.json b/messages/nl.json index 5c1fe7411..c824c7fbc 100644 --- a/messages/nl.json +++ b/messages/nl.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Gele koorts", "japanese-encephalitis": "Japanse encefalitis", "cholera": "Cholera", + "dengue": "Dengue", + "tuberculosis": "Tuberculose", "td": "Td (tetanus, difterie)", "tdap": "Tdap (tetanus, difterie, kinkhoest)", "tdap-ipv": "Tdap-IPV (vier-in-één)", diff --git a/messages/pl.json b/messages/pl.json index 0acd8f32d..e1011409c 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -10426,6 +10426,8 @@ "yellow-fever": "Żółta gorączka", "japanese-encephalitis": "Japońskie zapalenie mózgu", "cholera": "Cholera", + "dengue": "Denga", + "tuberculosis": "Gruźlica", "td": "Td (tężec, błonica)", "tdap": "Tdap (tężec, błonica, krztusiec)", "tdap-ipv": "Tdap-IPV (poczwórna)", diff --git a/src/lib/vaccinations/vaccine-catalog.ts b/src/lib/vaccinations/vaccine-catalog.ts index 7be67c2a6..218af2643 100644 --- a/src/lib/vaccinations/vaccine-catalog.ts +++ b/src/lib/vaccinations/vaccine-catalog.ts @@ -77,6 +77,8 @@ export const ANTIGEN_SLUGS = [ "yellow-fever", "japanese-encephalitis", "cholera", + "dengue", + "tuberculosis", ] as const; export type AntigenSlug = (typeof ANTIGEN_SLUGS)[number]; @@ -317,6 +319,21 @@ export const VACCINE_CATALOG: readonly VaccineSeed[] = [ source: STIKO, synonyms: ["human papillomavirus"], }, + { + // One dose, at birth where tuberculosis is common, and no booster after + // it: revaccination is advised against. Off the standing-committee + // schedule since 1998, so it cites the WHO position paper instead — but + // older Passes carry it, and in much of the world it is the first line + // of a child's. + slug: "tuberculosis", + atc: "J07AN01", + components: ["tuberculosis"], + typicalSeriesDoses: 1, + boosterIntervalMonths: null, + category: "childhood", + source: "WHO position paper on BCG vaccines", + synonyms: ["bcg", "tb", "bacillus calmette-guérin"], + }, // ── Monovalent: by indication ─────────────────────────────────────────── { @@ -420,6 +437,22 @@ export const VACCINE_CATALOG: readonly VaccineSeed[] = [ category: "travel", source: "WHO position paper on cholera vaccines", }, + { + // Two doses three months apart: the schedule of the live-attenuated + // tetravalent preparation in current use. No booster has been + // established after it, so null rather than an interval invented to + // fill the field. The older preparation runs three doses and is limited + // to people with a confirmed past infection; the record's own + // `seriesDoses` override is there for the Pass that says three. + slug: "dengue", + atc: "J07BX04", + components: ["dengue"], + typicalSeriesDoses: 2, + boosterIntervalMonths: null, + category: "travel", + source: "WHO position paper on dengue vaccines", + synonyms: ["dengue fever", "breakbone fever"], + }, // ── Combinations ──────────────────────────────────────────────────────── {