diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml index 3cb5984..1d441c1 100644 --- a/.idea/appInsightsSettings.xml +++ b/.idea/appInsightsSettings.xml @@ -3,6 +3,20 @@ + diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml new file mode 100644 index 0000000..8ec256a --- /dev/null +++ b/.idea/render.experimental.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 75bd145..2e66bef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,16 +11,21 @@ plugins { } android { - compileSdk 34 + compileSdk 36 defaultConfig { applicationId "org.apphatchery.gatbreferenceguide" minSdk 24 - targetSdk 34 - versionCode 34 - versionName "1.13" + targetSdk 36 + versionCode 54 + versionName "2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + // 16KB page size support + ndk { + abiFilters 'arm64-v8a', 'x86_64' + } } buildFeatures { @@ -28,112 +33,133 @@ android { } buildTypes { + debug { + buildConfigField "String", "DYNAMIC_LINK_DOMAIN", '"https://gatbreferenceguide.page.link"' + } + release { minifyEnabled false + buildConfigField "String", "DYNAMIC_LINK_DOMAIN", '"https://apphatcherygatbreferenceguide.page.link"' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug + ndk { + debugSymbolLevel 'FULL' + } } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = "17" } namespace 'org.apphatchery.gatbreferenceguide' + buildToolsVersion '36.0.0' + ndkVersion '28.2.13676358' } +// 16KB page size configuration +//configurations.configureEach { + //resolutionStrategy { + // Force compatible versions for 16KB page size + //force 'androidx.core:core:1.15.0+' + // force 'androidx.appcompat:appcompat:1.8.0+' + // } +//} + dependencies { - implementation 'androidx.core:core-ktx:1.13.1' - implementation 'androidx.appcompat:appcompat:1.7.0' - implementation 'com.google.android.material:material:1.12.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + // Core AndroidX libraries + implementation 'androidx.core:core-ktx:1.18.0' + implementation 'androidx.appcompat:appcompat:1.7.1' + implementation 'com.google.android.material:material:1.13.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'com.google.ai.client.generativeai:generativeai:0.9.0' + implementation 'com.google.firebase:firebase-crashlytics-buildtools:3.0.6' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.2.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' + androidTestImplementation 'androidx.test.ext:junit:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' //BOM // Firebase implementation 'com.google.firebase:firebase-core:21.1.1' implementation 'com.google.firebase:firebase-database-ktx:21.0.0' - implementation 'com.google.firebase:firebase-crashlytics:19.0.2' - implementation 'com.google.firebase:firebase-analytics:22.1.2' + implementation 'com.google.firebase:firebase-crashlytics:20.0.4' + implementation 'com.google.firebase:firebase-analytics:23.2.0' implementation 'com.google.firebase:firebase-dynamic-links-ktx:22.1.0' - implementation 'com.google.firebase:firebase-storage:21.0.0' - implementation("com.google.firebase:firebase-config:22.0.1") + implementation 'com.google.firebase:firebase-storage:22.0.1' + implementation("com.google.firebase:firebase-config:23.0.1") //implementation 'com.google.firebase:firebase-config-ktx:23.0.0' // Retrofit + GSON - implementation "com.squareup.retrofit2:retrofit:2.9.0" - implementation "com.squareup.retrofit2:converter-gson:2.9.0" - implementation("com.squareup.retrofit2:converter-scalars:2.9.0") - implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' + implementation "com.squareup.retrofit2:retrofit:3.0.0" + implementation "com.squareup.retrofit2:converter-gson:3.0.0" + implementation("com.squareup.retrofit2:converter-scalars:3.0.0") + implementation 'com.squareup.okhttp3:logging-interceptor:5.2.1' // Glide - implementation "com.github.bumptech.glide:glide:4.14.2" + implementation "com.github.bumptech.glide:glide:5.0.5" // Dagger Hilt - implementation 'com.google.dagger:hilt-android:2.51.1' - kapt 'com.google.dagger:hilt-android-compiler:2.51.1' - kapt "androidx.hilt:hilt-compiler:1.2.0" + implementation 'com.google.dagger:hilt-android:2.57.2' + kapt 'com.google.dagger:hilt-android-compiler:2.57.2' + kapt "androidx.hilt:hilt-compiler:1.3.0" // Pendo - implementation group:'sdk.pendo.io' , name:'pendoIO', version:'3.3.0.6597', changing:true + implementation group:'sdk.pendo.io' , name:'pendoIO', version:'3.11.3.8950', changing:true // Coroutines - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2' // Retrofit + GSON - implementation "com.squareup.retrofit2:retrofit:2.9.0" - implementation "com.squareup.retrofit2:converter-gson:2.9.0" + implementation "com.squareup.retrofit2:retrofit:3.0.0" + implementation "com.squareup.retrofit2:converter-gson:3.0.0" // Room - implementation "androidx.room:room-runtime:2.6.1" - kapt "androidx.room:room-compiler:2.6.1" - implementation "androidx.room:room-ktx:2.6.1" + implementation "androidx.room:room-runtime:2.8.2" + kapt "androidx.room:room-compiler:2.8.2" + implementation "androidx.room:room-ktx:2.8.2" // LiveData - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.3" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.9.4" // Fragment - implementation 'androidx.fragment:fragment-ktx:1.8.1' + implementation 'androidx.fragment:fragment-ktx:1.8.9' // Navigation components - implementation "androidx.navigation:navigation-fragment-ktx:2.7.7" - implementation "androidx.navigation:navigation-ui-ktx:2.7.7" + implementation "androidx.navigation:navigation-fragment-ktx:2.9.5" + implementation "androidx.navigation:navigation-ui-ktx:2.9.5" // Architectural Components - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.4" // Coroutines - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2' // Coroutine Lifecycle Scopes - implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.3" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.9.4" // Lifecycle implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" // Activity KTX for viewModels() - implementation "androidx.activity:activity-ktx:1.9.0" + implementation "androidx.activity:activity-ktx:1.11.0" //DataStore - implementation "androidx.datastore:datastore-preferences:1.1.1" + implementation "androidx.datastore:datastore-preferences:1.1.7" //Gson - implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.google.code.gson:gson:2.13.2' - implementation 'org.jsoup:jsoup:1.15.4' + implementation 'org.jsoup:jsoup:1.21.2' //RecyclerViewSwipeDecorator /*A simple utility class to add a background, an icon and a label to a RecyclerView item while swiping it left or right.*/ implementation 'it.xabaras.android:recyclerview-swipedecorator:1.4' - implementation 'androidx.webkit:webkit:1.11.0' + implementation 'androidx.webkit:webkit:1.14.0' } \ No newline at end of file diff --git a/app/src/main/assets/assets/Chevron.png b/app/src/main/assets/assets/Chevron.png new file mode 100644 index 0000000..2a9bfba Binary files /dev/null and b/app/src/main/assets/assets/Chevron.png differ diff --git a/app/src/main/assets/assets/c_lab_diagnosis_image_1.png b/app/src/main/assets/assets/c_lab_diagnosis_image_1.png new file mode 100644 index 0000000..27d02c5 Binary files /dev/null and b/app/src/main/assets/assets/c_lab_diagnosis_image_1.png differ diff --git a/app/src/main/assets/assets/chapter_1_image_1.png b/app/src/main/assets/assets/chapter_1_image_1.png new file mode 100644 index 0000000..681fa78 Binary files /dev/null and b/app/src/main/assets/assets/chapter_1_image_1.png differ diff --git a/app/src/main/assets/assets/chapter_1_image_2.png b/app/src/main/assets/assets/chapter_1_image_2.png new file mode 100644 index 0000000..dec218a Binary files /dev/null and b/app/src/main/assets/assets/chapter_1_image_2.png differ diff --git a/app/src/main/assets/assets/chapter_1_image_3.png b/app/src/main/assets/assets/chapter_1_image_3.png new file mode 100644 index 0000000..ec45332 Binary files /dev/null and b/app/src/main/assets/assets/chapter_1_image_3.png differ diff --git a/app/src/main/assets/assets/chapter_1_image_4.png b/app/src/main/assets/assets/chapter_1_image_4.png new file mode 100644 index 0000000..b02070c Binary files /dev/null and b/app/src/main/assets/assets/chapter_1_image_4.png differ diff --git a/app/src/main/assets/assets/considerations_image_1.png b/app/src/main/assets/assets/considerations_image_1.png new file mode 100644 index 0000000..3584f4a Binary files /dev/null and b/app/src/main/assets/assets/considerations_image_1.png differ diff --git a/app/src/main/assets/assets/ic_chapter.svg b/app/src/main/assets/assets/ic_chapter.svg new file mode 100644 index 0000000..338eedd --- /dev/null +++ b/app/src/main/assets/assets/ic_chapter.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/assets/assets/ic_chart.svg b/app/src/main/assets/assets/ic_chart.svg new file mode 100644 index 0000000..af6fea6 --- /dev/null +++ b/app/src/main/assets/assets/ic_chart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/assets/assets/ic_title_icon.SVG b/app/src/main/assets/assets/ic_title_icon.SVG new file mode 100644 index 0000000..c16364e --- /dev/null +++ b/app/src/main/assets/assets/ic_title_icon.SVG @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/assets/assets/image_1.png b/app/src/main/assets/assets/image_1.png new file mode 100644 index 0000000..42eff84 Binary files /dev/null and b/app/src/main/assets/assets/image_1.png differ diff --git a/app/src/main/assets/assets/image_2.png b/app/src/main/assets/assets/image_2.png new file mode 100644 index 0000000..58b20d3 Binary files /dev/null and b/app/src/main/assets/assets/image_2.png differ diff --git a/app/src/main/assets/assets/image_3.png b/app/src/main/assets/assets/image_3.png new file mode 100644 index 0000000..e6cdac7 Binary files /dev/null and b/app/src/main/assets/assets/image_3.png differ diff --git a/app/src/main/assets/assets/main.js b/app/src/main/assets/assets/main.js new file mode 100644 index 0000000..4539c12 --- /dev/null +++ b/app/src/main/assets/assets/main.js @@ -0,0 +1,136 @@ +// function to handle tab switching for any table +function activateTab(tableContainer, tabIndex) { + if (!tableContainer) return; + + tableContainer + .querySelectorAll(".tab-button, .tab, .tab, .tab") + .forEach((tab) => { + tab.classList.remove("active-option", "active-tab"); + }); + + tableContainer + .querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + ) + .forEach((content) => { + content.classList.remove("active-option", "active-tab"); + }); + + // Add active class to selected tab and content + const selectedTab = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + )[tabIndex]; + const selectedContent = tableContainer.querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + )[tabIndex]; + + if (selectedTab) { + if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab-button")) { + selectedTab.classList.add("active-option"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } + } + + if (selectedContent) { + if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("option-content")) { + selectedContent.classList.add("active-option"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } + } +} + +// Function to handle tab switching with event +function handleTabSwitch(event, tabIndex) { + // Get the clicked button from the event + const clickedButton = event.currentTarget; + + const tableContainer = clickedButton.closest(".uk-overflow-auto"); + if (!tableContainer) return; + + // Get all tab buttons in this container + const tabButtons = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + ); + + // Find the index of the clicked button within its container + const clickedIndex = Array.from(tabButtons).indexOf(clickedButton); + + // Generate a unique ID for the container if it doesn't have one + if (!tableContainer.id) { + tableContainer.id = "table-" + Math.random().toString(36).substr(2, 9); + } + + // Switch to the correct tab + activateTab(tableContainer, clickedIndex); +} + +function switchTab(tabIndex, event) { + handleTabSwitch(event, tabIndex); +} + +// For Dropdown Togglers +function toggleItem(clickedTitle) { + const itemContent = clickedTitle.nextElementSibling; + + itemContent.classList.toggle("active"); + + const chevronUp = clickedTitle.querySelector(".chevron-up"); + chevronUp.classList.toggle("active"); +} + +document.addEventListener("DOMContentLoaded", function () { + const tooltips = document.querySelectorAll(".info-icon"); + + document.addEventListener("click", function (event) { + if (!event.target.closest(".info-icon")) { + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + activeIcon.classList.remove("active"); + }); + } + }); + + tooltips.forEach(function (icon) { + let tooltip = icon.querySelector(".tooltip"); + if (!tooltip) { + tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + tooltip.textContent = + icon.getAttribute("data-tooltip") || "Additional information"; + + // Get positioning class from data attribute + const positionClass = + icon.getAttribute("data-tooltip-position") || "tooltip-center"; + tooltip.classList.add(positionClass); + + icon.appendChild(tooltip); + } + + let isTooltipVisible = false; + + icon.addEventListener("click", function (event) { + event.stopPropagation(); + + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + if (activeIcon !== icon) { + activeIcon.classList.remove("active"); + const otherTooltip = activeIcon.querySelector(".tooltip"); + if (otherTooltip) otherTooltip.style.display = "none"; + } + }); + + isTooltipVisible = !this.classList.contains("active"); + this.classList.toggle("active"); + tooltip.style.display = isTooltipVisible ? "block" : "none"; + }); + }); +}); diff --git a/app/src/main/assets/assets/selected_diagnosis_image_1.png b/app/src/main/assets/assets/selected_diagnosis_image_1.png new file mode 100644 index 0000000..a2a20d0 Binary files /dev/null and b/app/src/main/assets/assets/selected_diagnosis_image_1.png differ diff --git a/app/src/main/assets/assets/style.css b/app/src/main/assets/assets/style.css index 07298c8..aad57e0 100644 --- a/app/src/main/assets/assets/style.css +++ b/app/src/main/assets/assets/style.css @@ -1,30 +1,144 @@ /* Import from the UIkit.css file */ :root { color-scheme: light dark; - --background-color: #fff; - --body-color: #666; - --link-color: #ba6233; - --table-title-color: #8c352d; + --primary-color: #5182ff; + --white-color: #ffffff; + --yellow-color: #ffc107; + --green-color: #009c8e; + --background-color: #f7f7f7; + --background-color-secondary: var(--white-color); + --body-color: #747474; + --body-color-secondary: #000; + --body-color-alt: #343434; + --link-color: var(--primary-color); + --table-title-color: var(--primary-color); --titles-color: #333; + --inactive-tab-color: var(--white-color); + --inactive-tab-text-color: var(--body-color-secondary); + --active-tab-color: var(--primary-color); + --active-tab-text-color: var(--white-color); + --tab-radius: 5px; + --tab-box-shadow: 0px 0px 32px 0px rgba(187, 187, 187, 0.25); + --transition-duration: 500ms; + --list-title-color: var(--yellow-color); + --divider-color: #c6c6c8; + --last-updated-color: #636366; } @media screen and (prefers-color-scheme: dark) { :root { - --background-color: #202025; - --body-color: #fff; - --link-color: #f3a479; - --table-title-color: #d7958f; - --titles-color: #fff; - /* --title-color: #ff8080; - --subhead-color: #80ff80; - --link-color: #93d5ff; */ + --primary-color: #7090fd; + --white-color: #ffffff; + --yellow-color: #ffc107; + --green-color: #009c8e; + --background-color: #2a2a2a; + --background-color-secondary: #343434; + --body-color: #d5d5d5; + --body-color-secondary: #f9f9f9; + --body-color-alt: #cbcbcb; + --link-color: var(--primary-color); + --table-title-color: var(--primary-color); + --titles-color: var(--white-color); + --inactive-tab-color: var(--background-color-secondary); + --inactive-tab-text-color: #ececec; + --active-tab-color: var(--primary-color); + --active-tab-text-color: #f9f9f9; + --tab-radius: 5px; + --tab-box-shadow: 0px 0px 32px 0px rgba(0, 0, 0, 0.2); + --transition-duration: 500ms; + --list-title-color: var(--yellow-color); + --divider-color: #c6c6c8; + --last-updated-color: #b9b9b9; + } +} + +/* Keyframes + Animations */ +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes slideInTop { + from { + opacity: 0; + /* height: 0; */ + transform: translateY(-100%); + } + to { + opacity: 1; + /* height: auto; */ + transform: translateY(0); + } +} + +@keyframes slideOutTop { + from { + opacity: 1; + height: auto; + transform: translateY(0); + } + to { + opacity: 0; + height: 0; + transform: translateY(-20%); + } +} + +@keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-10%); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes slideOutRight { + from { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(-10%); + } +} + +@keyframes slideInBottom { + from { + opacity: 0; + transform: translateY(10%); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideOutBottom { + from { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(-10%); } } html { /* 1 */ - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 16px; + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", + Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; font-weight: normal; line-height: 1.5; /* 2 */ @@ -36,6 +150,9 @@ html { body { margin: 0; + line-height: 1.7; + padding-top: 2rem; + padding-bottom: 2rem; } a:active, @@ -48,6 +165,9 @@ a, color: #1e87f0; text-decoration: none; cursor: pointer; + word-wrap: break-word; + overflow-wrap: anywhere; + white-space: normal; } a:hover, .uk-link:hover, @@ -66,6 +186,87 @@ strong { font-weight: bolder; } +/* Headings */ +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--titles-color); +} + +ul { + list-style: disc; + font-style: normal !important; +} + +img { + height: 100%; + width: 100%; + object-fit: contain; +} + +.ic_chapter_icon { + height: 24px !important; + width: 24px !important; + object-fit: fill !important; +} + +.ic_title_icon { + height: 50px !important; + width: 50px !important; + object-fit: fill !important; +} + +.chapter-header { + display: inline-flex; + flex-direction: column; + justify-content: start; + align-items: start; + margin: 0; + padding: 0; +} + +.chapter-header .header-title .chapter-title { + font-size: 16px; + padding: 0; + margin: 0; +} + +.header-title { + display: flex; + gap: 10px; + align-items: start; + justify-content: start; + margin-bottom: 16px; +} + +.header-title > div { + flex: 0 0 auto; +} + +.last-updated { + color: var(--last-updated-color); + font-size: 15px; + text-align: start; + font-style: italic; + font-weight: 300; + line-height: 16px; + letter-spacing: -0.408px; + margin-top: 0; + padding-bottom: 16px; +} + +hr { + border-color: var(--divider-color) !important; + border-left: none !important; + border-right: none !important; + border-bottom: none !important; + margin: 0 !important; + padding: 16px 0 !important; +} + /* ======================================================================== Component: Table ========================================================================== */ @@ -81,11 +282,12 @@ strong { /* 2 */ width: 100%; /* 3 */ - margin-bottom: 20px; + margin-bottom: 1.25rem; + background-color: var(--background-color-secondary); } /* Add margin if adjacent element */ * + .uk-table { - margin-top: 20px; + margin-top: 1.25rem; } /* Header cell ========================================================================== */ @@ -93,7 +295,7 @@ strong { * 1. Style */ .uk-table th { - padding: 16px 12px; + padding: 1rem 0.75rem; text-align: left; vertical-align: bottom; /* 1 */ @@ -105,7 +307,7 @@ strong { /* Cell ========================================================================== */ .uk-table td { - padding: 16px 12px; + padding: 1rem 0.75rem; vertical-align: top; } /* @@ -171,11 +373,11 @@ strong { ========================================================================== */ .uk-table-small th, .uk-table-small td { - padding: 10px 12px; + padding: 0.625rem 0.75rem; } .uk-table-large th, .uk-table-large td { - padding: 22px 12px; + padding: 1.375rem 0.75rem; } /* Justify modifier ========================================================================== */ @@ -193,7 +395,7 @@ strong { width: 1px; } .uk-table-expand { - min-width: 150px; + min-width: 9.375rem; } /* Cell link modifier ========================================================================== */ @@ -205,49 +407,12 @@ strong { } .uk-table-link > a { display: block; - padding: 16px 12px; + padding: 1rem 0.75rem; } .uk-table-small .uk-table-link > a { - padding: 10px 12px; -} -/* Responsive table - ========================================================================== */ -/* Phone landscape and smaller */ -@media (max-width: 959px) { - .uk-table-responsive, - .uk-table-responsive tbody, - .uk-table-responsive th, - .uk-table-responsive td, - .uk-table-responsive tr { - display: block; - } - .uk-table-responsive thead { - display: none; - } - .uk-table-responsive th, - .uk-table-responsive td { - width: auto !important; - max-width: none !important; - min-width: 0 !important; - overflow: visible !important; - white-space: normal !important; - } - .uk-table-responsive th:not(:first-child):not(.uk-table-link), - .uk-table-responsive td:not(:first-child):not(.uk-table-link), - .uk-table-responsive .uk-table-link:not(:first-child) > a { - padding-top: 5px !important; - } - .uk-table-responsive th:not(:last-child):not(.uk-table-link), - .uk-table-responsive td:not(:last-child):not(.uk-table-link), - .uk-table-responsive .uk-table-link:not(:last-child) > a { - padding-bottom: 5px !important; - } - .uk-table-justify.uk-table-responsive th, - .uk-table-justify.uk-table-responsive td { - padding-left: 0; - padding-right: 0; - } + padding: 0.625rem 0.75rem; } + .uk-table tbody tr { transition: background-color 0.1s linear; } @@ -278,11 +443,16 @@ th.uk-text-truncate, td.uk-text-truncate { max-width: 0; } +.uk-text-wrap { + white-space: wrap !important; +} /* End of import from UIkit.css file */ -table, td, th { - border: 1px solid #adadad; +table, +td, +th { + border: 1px solid #adadad; } .res-width { @@ -290,44 +460,469 @@ table, td, th { } .border-left-hidden { - border-left: hidden; + border-left: hidden; } .border-right-hidden { - border-right: hidden; + border-right: hidden; } .border-left-right-hidden { - border-right: hidden; - border-left: hidden; + border-right: hidden; + border-left: hidden; } .border-bottom-left-right-hidden { - border-right: hidden; - border-bottom: hidden; - border-left: hidden; + border-right: hidden; + border-bottom: hidden; + border-left: hidden; } .reddish { - color: var(--table-title-color); + color: var(--table-title-color); } .orange { - color: var(--link-color); + color: var(--link-color); } a { - font-style: italic; - text-decoration: none !important; - color: var(--link-color) !important; + font-style: normal; + text-decoration: underline !important; + color: var(--link-color) !important; } .uk-table th { - padding: 16px 12px; - text-align: left; - vertical-align: bottom; - font-size: 1rem; - font-weight: bold; - color: #ba6233; - text-transform: capitalize; + padding: 1rem 0.75rem; + text-align: left; + vertical-align: bottom; + font-size: 1rem; + font-weight: bold; + color: var(--table-title-color); + text-transform: none; +} + +.uk-table td { + color: var(--body-color-secondary); +} + +.tab-content .uk-table { + table-layout: fixed; + width: 100%; +} + +/* .tab-content .uk-table th.uk-text-wrap { + width: 32%; +} */ + +/* Tabs */ + +.uk-tabs-container .tabs { + display: flex; + flex-direction: row; + justify-content: center; + /* justify-items: center; */ + flex-wrap: wrap; + align-items: stretch; + align-content: start; + gap: 24px; + width: 100%; + list-style: none; + padding: 0; + margin: 0; +} + +.tab, +.tab-button { + display: inline-flex; + justify-items: center; + justify-content: center; + align-items: center; + gap: 1rem; + padding: 0.75rem; + text-align: center; + vertical-align: bottom; + font-size: 0.87rem; + background-color: var(--inactive-tab-color); + color: var(--inactive-tab-text-color); + text-transform: capitalize; + cursor: pointer; + border: none; + border-radius: var(--tab-radius); + box-shadow: var(--tab-box-shadow); + min-width: 120px; + max-width: 200px; + width: auto; + height: auto; + white-space: normal; + word-wrap: break-word; + min-height: 70px; + box-sizing: border-box; +} + +.tab.active-tab, +.tab-button.active-option, +.option.active-option { + background-color: var(--active-tab-color); + color: var(--active-tab-text-color); + box-shadow: var(--tab-box-shadow); +} + +.tab-content, +.option-content { + display: none; + border: none; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + margin: 0; + margin-top: 32px; + padding: 0; + opacity: 0; +} + +.tab-content.active-tab, +.option-content.active-option { + display: table; + opacity: 1; +} + +th, +td { + vertical-align: middle !important; +} + +td { + animation: slideInBottom var(--transition-duration) ease-in-out; +} + +td ul { + padding-left: 1.25rem; + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} + +h3.highlight { + margin-top: 1rem; + padding-top: 0; +} + +.view-in-chapter-highlight { + color: var(--body-color-secondary); +} + +.duration { + font-size: 1rem; + margin-bottom: 0; + padding-bottom: 0; +} + +.nested-list { + list-style: none; + padding-left: 0; +} + +.th-no-highlight { + color: var(--body-color-secondary) !important; + font-weight: 400 !important; +} + +.uk-list { + padding-left: 1.5rem; + font-style: normal; +} + +.uk-list.togglers-list { + padding-left: 0; +} + +.uk-paragraph { + position: relative; + text-indent: 1em; + margin: 1rem 0; +} + +.uk-paragraph::before { + content: ""; + position: absolute; + left: 0; + top: -0.25rem; + height: 2rem; + width: 0.5rem; + background-color: var(--primary-color); + border-radius: 0.25rem; +} + +.uk-list-title, +.uk-table-title, +.custom-table-title { + position: relative; + padding-left: 1.5rem; +} + +.uk-list-title::before, +.uk-table-title::before, +.custom-table-title::before { + content: ""; + position: absolute; + left: 0; + top: -0.1875rem; + height: 2rem; + width: 0.5rem; + border-radius: 0.25rem; +} + +.uk-list-title::before { + top: -0.125rem; + background-color: var(--list-title-color); +} + +.custom-table-title::before { + background-color: var(--green-color); +} + +.highlight { + color: var(--primary-color); +} + +th.alt-color, +td.alt-color, +.alt-color { + color: var(--body-color-alt); + font-weight: 600; +} + +.no-margin { + margin: 0; +} + +.semibold { + font-weight: 600; +} + +/* Togglers */ +.toggle-title { + cursor: pointer; + position: relative; + display: flex; + justify-content: space-between; + align-items: center; + gap: 2rem; + width: 100%; + z-index: 10; + background-color: var(--background-color); + padding: 0.875rem 0; +} + +.chevron-up { + transform: rotate(-180deg); + transition: transform var(--transition-duration) ease-in-out; + font-size: 1.5rem; +} + +.chevron-up.active { + transform: rotate(0); + transition: transform var(--transition-duration) ease-in-out; +} + +.item { + max-height: 0; + overflow: hidden; + transition: max-height 800ms cubic-bezier(0.075, 0.82, 0.165, 1); +} + +.item.active { + max-height: 5000px; + transition: max-height 800ms cubic-bezier(0.4, 0, 1, 1); +} + +.with-info-icon { + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +.info-icon { + display: inline-flex; + justify-content: center; + align-items: center; + font-family: serif; + font-size: 0.8rem; + background-color: var(--primary-color); + color: white; + border-radius: 50%; + cursor: pointer; + width: 16px; + height: 16px; + line-height: 16px; + margin: 0 0rem; + position: relative; + transition: all 0.2s ease; +} + +.tooltip { + visibility: hidden; + position: absolute; + background-color: var(--primary-color); + font-weight: normal; + text-align: left; + border-radius: 6px; + padding: 10px; + /* font-size: 0.9em; */ + line-height: 1.4; + bottom: 100%; + margin-bottom: 10px; + opacity: 0; + transition: + opacity 0.3s, + visibility 0.3s; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + pointer-events: none; + white-space: normal; + word-wrap: break-word; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Oxygen, + Ubuntu, + Cantarell, + "Open Sans", + "Helvetica Neue", + sans-serif; + width: max-content; + max-width: calc(100% + 200px); + z-index: 5000 !important; +} + +/* Tooltip positioning variants */ +.tooltip-right { + left: 0px; + z-index: 5000 !important; +} + +.tooltip-center { + left: 50%; + transform: translateX(-50%); + z-index: 5000 !important; +} + +.tooltip-left { + right: 0px; + left: auto; + z-index: 5000 !important; +} + +.tooltip-bottom-center { + top: 100%; + bottom: auto; + left: auto; + transform: translateX(-50%); + margin-bottom: 0; + margin-top: 10px; + z-index: 5000 !important; +} + +.tooltip-bottom-center-center { + top: 100%; + bottom: auto; + left: auto; + transform: translateX(20%); + margin-bottom: 0; + margin-top: 10px; + z-index: 5000 !important; +} + +.tooltip-center-center { + bottom: -500px; + left: 30%; + margin-bottom: 0; + margin-top: 10px; + z-index: 5000 !important; +} + +/* Tooltip arrow */ +/* .tooltip::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: var(--primary-color) transparent transparent transparent; +} */ + +/* Show tooltip when active */ +.info-icon.active .tooltip { + visibility: visible; + opacity: 1; + overflow: scroll; + z-index: 5000 !important; +} + +/* Responsive table + ========================================================================== */ +/* Phone landscape and smaller */ +@media (max-width: 959px) { + .uk-table-responsive, + .uk-table-responsive tbody, + .uk-table-responsive th, + .uk-table-responsive td, + .uk-table-responsive tr { + display: block; + } + .uk-table-responsive thead { + display: none; + } + .uk-table-responsive th, + .uk-table-responsive td { + width: auto !important; + max-width: none !important; + min-width: 0 !important; + overflow: visible !important; + white-space: normal !important; + } + .uk-table-responsive th:not(:first-child):not(.uk-table-link), + .uk-table-responsive td:not(:first-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:first-child) > a { + padding-top: 5px !important; + } + .uk-table-responsive th:not(:last-child):not(.uk-table-link), + .uk-table-responsive td:not(:last-child):not(.uk-table-link), + .uk-table-responsive .uk-table-link:not(:last-child) > a { + padding-bottom: 5px !important; + } + .uk-table-justify.uk-table-responsive th, + .uk-table-justify.uk-table-responsive td { + padding-left: 0; + padding-right: 0; + } + + .uk-tabs-container .tabs { + display: grid; + grid-template-columns: repeat(4, 1fr); + align-content: center; + width: 100%; + } + + .tab, + .tab-button { + display: inline-block; + width: 100%; + } +} + +@media (max-width: 700px) { + .uk-tabs-container .tabs { + grid-template-columns: repeat(3, 1fr); + } +} + +@media (max-width: 500px) { + .uk-tabs-container .tabs { + grid-template-columns: repeat(2, 1fr); + } } diff --git a/app/src/main/assets/assets/uikit-icons.js b/app/src/main/assets/assets/uikit-icons.js index 4904e1c..1267116 100644 --- a/app/src/main/assets/assets/uikit-icons.js +++ b/app/src/main/assets/assets/uikit-icons.js @@ -31,7 +31,7 @@ "check": "", "chevron-double-left": "", "chevron-double-right": "", - "chevron-down": "", + "chevron-up": "", "chevron-left": "", "chevron-right": "", "chevron-up": "", diff --git a/app/src/main/assets/json/chapter.json b/app/src/main/assets/json/chapter.json index 21c3bd3..fd4af23 100644 --- a/app/src/main/assets/json/chapter.json +++ b/app/src/main/assets/json/chapter.json @@ -46,7 +46,7 @@ }, { "chapterId": 10, - "chapterTitle": "TB Infection Control: Hospital Isolation Procedures", + "chapterTitle": "TB Infection Prevention and Control in Healthcare Facilities", "chapterHomePosition": 0 }, { @@ -56,7 +56,7 @@ }, { "chapterId": 12, - "chapterTitle": "Alternative Housing Program for Homeless TB Patients in Georgia", + "chapterTitle": "Alternative Housing Program for Persons with TB Experiencing Homelessness in Georgia ", "chapterHomePosition": 0 }, { @@ -86,7 +86,7 @@ }, { "chapterId": 18, - "chapterTitle": "Hello and welcome clinical statement", + "chapterTitle": "Hello and Welcome clinical statement", "chapterHomePosition": 0 }, { diff --git a/app/src/main/assets/json/chart.json b/app/src/main/assets/json/chart.json index 280483e..7b50d91 100644 --- a/app/src/main/assets/json/chart.json +++ b/app/src/main/assets/json/chart.json @@ -59,91 +59,77 @@ "id": "table_9_pediatric_dosage_isoniazid_in_children_(birth_to_15_years)", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 9: Pediatric dosage - isoniazid in children (birth to 15 years)", + "chartTitle": "Table 9: Pediatric Dosage in Children ( birth to 15 years)", "chartHomePosition": 0 }, { - "id": "table_10_pediatric_dosages_rifampin_in_children_(birth_to_15_years)", + "id": "table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 10: Pediatric dosages - rifampin in children (birth to 15 years) dose for either daily or twice weekly therapy", + "chartTitle": "Table 10: Antituberculosis Antibiotics in Adult Patients with Renal Impairment", "chartHomePosition": 0 }, { - "id": "table_11_pediatric_dosages_ethambutol_in_children_(birth_to_15_years)", + "id": "table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 11: Pediatric dosages - Ethambutol in children (birth to 15 years)\nEthambutol is available in 100mg and 400 mg tablets", + "chartTitle": "Table 11: Antituberculosis Medications for Patients who have Contraindications to or Intolerance of First Line Agents or require IV Therapy during Acute or Critical Illness", "chartHomePosition": 0 }, { - "id": "table_12_pediatric_dosages_pyrazinamide_in_children_(birth_to_15_years)", + "id": "table_12_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 12: Pediatric Dosages - Pyrazinamide in children (birth to 15 years)\nPyrazinamide is available in 500 mg tablets which are scored and can be cut in ½.", + "chartTitle": "Table 12: Clinical Situations for which Standard Therapy cannot be given or is not well-tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)", "chartHomePosition": 0 }, { - "id": "table_13_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment", + "id": "table_13_when_to_start_hiv_therapy", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 13: Antituberculosis antibiotics in adult patients with renal impairment", + "chartTitle": "Table 13: When to Start HIV Therapy", "chartHomePosition": 0 }, { - "id": "table_14_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance", + "id": "table_14_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 14: Antituberculosis medications which may be used for patients who have contraindications to or intolerance of first line agents or who require IV therapy during acute or critical illness", + "chartTitle": "Table 14: What to start: Choice of TB Therapy and Antiretroviral Therapy (ART) when treating Co-infected Patients", "chartHomePosition": 0 }, { - "id": "table_15_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated", + "id": "table_15_summary_of_recommendations_for_treatment_of_active_tb_disease_in_persons_with_hiv", "subChapterTitle": "Special Clinical Situations", "subChapterId": 24, - "chartTitle": "Table 15: Clinical Situations for which standard therapy cannot be given or is not well- tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)", + "chartTitle": "Table 15: Summary of Recommendations for Treatment of Active TB Disease in Persons with HIV", "chartHomePosition": 0 }, { - "id": "table_16_when_to_start_hiv_therapy", + "id": "table_16_guidelines_for_treatment_of_extrapulmonary_tuberculosis", "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", "subChapterId": 28, - "chartTitle": "Table 16: HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment", + "chartTitle": "Table 16: Guidelines for Treatment of Extrapulmonary Tuberculosis: Length of Therapy and Adjunctive Use of Corticosteroids\n\n", "chartHomePosition": 0 }, { - "id": "table_17_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when)treating_co-infected_patients", + "id": "table_17_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure", "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", "subChapterId": 28, - "chartTitle": "Table 17: What to start: Choice of TB therapy and Antiretroviral Therapy (ART) when treating co-infected patients", + "chartTitle": "Table 17: Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculosis Meningitis, and Renal Failures", "chartHomePosition": 0 }, { - "id": "table_18_dosage_adjustments_for_art_and_rifamycins_when_used_in_combination", - "subChapterTitle": "Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis Disease", - "subChapterId": 28, - "chartTitle": "Table 18: Dosage Adjustments for ART and Rifamycins when used in Combination", - "chartHomePosition": 0 - }, - { - "id": "table_19_guidelines_for_treatment_of_extrapulmonary_tuberculosis", - "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy (Table 19)", - "subChapterId": 31, - "chartTitle": "Table 19: Guidelines for Treatment of Extrapulmonary* Tuberculosis: Length of therapy and Adjunctive Use of Corticosteroids", - "chartHomePosition": 0 - }, - { - "id": "table_20_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure", - "subChapterTitle": "Treatment of Active TB in Pregnancy", - "subChapterId": 33, - "chartTitle": "Table 20: Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculous Meningitis and Renal Failure", + "id": "table_18_grady_hospital_tb_isolation_policy", + "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy", + "subChapterId": 32, + "chartTitle": "Table 18: Grady Hospital TB Isolation Policy", "chartHomePosition": 0 }, { - "id": "table_21_grady_hospital_tb_isolation_policy", - "subChapterTitle": "Surveillance for Health Care Workers", - "subChapterId": 40, - "chartTitle": "Table 21: Grady Hospital TB Isolation Policy", + "id": "fig1_factors_to_be_considered", + "subChapterTitle": "Considerations", + "subChapterId": 22, + "chartTitle": "Figure 1: Factors to be considered in deciding to initiate treatment empirically for active tuberculosis (TB) (prior to microbiologic confirmation)", "chartHomePosition": 0 } ] diff --git a/app/src/main/assets/json/subchapter.json b/app/src/main/assets/json/subchapter.json index 38a94c7..20fe290 100644 --- a/app/src/main/assets/json/subchapter.json +++ b/app/src/main/assets/json/subchapter.json @@ -205,194 +205,210 @@ { "subChapterId": 30, "chapterId": 5, - "subChapterTitle": "Treatment of Extrapulmonary TB (Table 19)", + "subChapterTitle": "Treatment of Extrapulmonary TB", "url": "5_treatment_of_current_(active)_disease_therapy__i__treatment_of_extrapulmonary_tb", "lastUpdated": "June 2024" }, + { - "subChapterId": 31, + "subChapterId": 32, "chapterId": 5, - "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy (Table 19)", + "subChapterTitle": "Adjunctive Use of Corticosteroid Therapy", "url": "5_treatment_of_current_(active)_disease_therapy__j__adjunctive_use_of_corticosteroid_therapy", "lastUpdated": "June 2024" }, { - "subChapterId": 31, + "subChapterId": 33, "chapterId": 6, "subChapterTitle": "Introduction", "url": "6_pregnancy_and_tb", "lastUpdated": "June 2024" }, { - "subChapterId": 32, + "subChapterId": 34, "chapterId": 6, "subChapterTitle": "Treatment for LTBI and Risk Factors", "url": "6_pregnancy_and_tb__a__treatment_for_ltbi_and_risk_factors", "lastUpdated": "June 2024" }, { - "subChapterId": 33, + "subChapterId": 35, "chapterId": 6, "subChapterTitle": "Treatment of Active TB in Pregnancy", "url": "6_pregnancy_and_tb__b__treatment_of_active_tb_in_pregnancy", "lastUpdated": "June 2024" }, { - "subChapterId": 34, + "subChapterId": 36, "chapterId": 7, "subChapterTitle": "Children Tuberculosis", "url": "7_childhood_tuberculosis", "lastUpdated": "June 2024" }, { - "subChapterId": 35, + "subChapterId": 37, "chapterId": 7, "subChapterTitle": "Management Considerations", "url": "7_childhood_tuberculosis__a__management_considerations", "lastUpdated": "June 2024" }, { - "subChapterId": 36, + "subChapterId": 38, "chapterId": 8, "subChapterTitle": "Tuberculosis and Long-Term Care Facilities", "url": "8_tuberculosis_and_long_term_care_facilities", "lastUpdated": "June 2024" }, { - "subChapterId": 37, + "subChapterId": 39, "chapterId": 9, "subChapterTitle": "BCG Vaccination", "url": "9_bcg_vaccination", "lastUpdated": "June 2024" }, { - "subChapterId": 38, + "subChapterId": 40, "chapterId": 10, "subChapterTitle": "Introduction", "url": "10_tb_infection_control_hospital_isolation_procedures", "lastUpdated": "June 2024" }, { - "subChapterId": 39, + "subChapterId": 41, "chapterId": 10, "subChapterTitle": "Administrative Controls", "url": "10_tb_infection_control_hospital_isolation_procedures__a__administrative_controls", "lastUpdated": "June 2024" }, { - "subChapterId": 40, + "subChapterId": 42, "chapterId": 10, "subChapterTitle": "Surveillance for Health Care Workers", "url": "10_tb_infection_control_hospital_isolation_procedures__b__surveillance_for_health_care_workers", "lastUpdated": "June 2024" }, { - "subChapterId": 41, + "subChapterId": 43, "chapterId": 10, "subChapterTitle": "Environmental Controls", "url": "10_tb_infection_control_hospital_isolation_procedures__c__environmental_controls", "lastUpdated": "June 2024" }, { - "subChapterId": 42, + "subChapterId": 44, "chapterId": 10, "subChapterTitle": "Personal Respiratory Protection", "url": "10_tb_infection_control_hospital_isolation_procedures__d__personal_respiratory_protection", "lastUpdated": "June 2024" }, { - "subChapterId": 43, + "subChapterId": 45, "chapterId": 11, "subChapterTitle": "Introduction", "url": "11_community_tuberculosis_control", "lastUpdated": "June 2024" }, { - "subChapterId": 44, + "subChapterId": 46, "chapterId": 11, "subChapterTitle": "TB Surveillance in Georgia", "url": "11_community_tuberculosis_control__a__tb_surveillance_in_georgia", "lastUpdated": "June 2024" }, { - "subChapterId": 45, + "subChapterId": 47, + "chapterId": 11, + "subChapterTitle": "How to Report TB as a Notifiable Disease", + "url": "11_community_tuberculosis_control__b__how_to_report_tb_as_a_notifiable_disease", + "lastUpdated": "June 2024" + }, + { + "subChapterId": 48, "chapterId": 11, "subChapterTitle": "TB Case Definitions for Public Health Surveillance", - "url": "11_community_tuberculosis_control__b__tb_case_definitions_for_public_health_surveillance", + "url": "11_community_tuberculosis_control__c__tb_case_definitions_for_public_health_surveillance", "lastUpdated": "June 2024" }, { - "subChapterId": 46, + "subChapterId": 49, "chapterId": 11, "subChapterTitle": "Role of the Health Department", - "url": "11_community_tuberculosis_control__c__role_of_the_health_department", + "url": "11_community_tuberculosis_control__d__role_of_the_health_department", "lastUpdated": "June 2024" }, { - "subChapterId": 47, + "subChapterId": 50, "chapterId": 11, "subChapterTitle": "Hospital Discharge Planning for Patients with Suspected or Proven TB", - "url": "11_community_tuberculosis_control__d__hospital_discharge_planning_for_patients_with_suspected_or_proven_tb", + "url": "11_community_tuberculosis_control__e__hospital_discharge_planning_for_patients_with_suspected_or_proven_tb", "lastUpdated": "June 2024" }, { - "subChapterId": 48, + "subChapterId": 51, "chapterId": 11, - "subChapterTitle": "The U.S.-Mexico Binational Tuberculosis Referral Program (CureTB)", - "url": "11_community_tuberculosis_control__e__the_us_mexico_binational_tuberculosis_referral_program_(curetb)", + "subChapterTitle": "Interjurisdictional TB Notification (IJN)", + "url": "11_community_tuberculosis_control__f__interjurisdictional_tb_notification(ijn)", "lastUpdated": "June 2024" }, + { - "subChapterId": 48, + "subChapterId": 53, + "chapterId": 11, + "subChapterTitle": "CureTB Program (International Linkage to TB Care)", + "url": "11_community_tuberculosis_control__g__curetb_program_(internation_linkage_to_tb_care)", + "lastUpdated": "June 2024" + }, + { + "subChapterId": 54, "chapterId": 12, "subChapterTitle": "Alternative Housing Program for Homeless TB Patients in Georgia", "url": "12_alternative_housing_program_for_homeless_tb_patients_in_georgia", "lastUpdated": "June 2024" }, { - "subChapterId": 50, + "subChapterId": 55, "chapterId": 13, "subChapterTitle": "Georgia Department of Public Health (DPH) Community Guidelines for Respiratory Isolation of Patients With Active TB in the Community", "url": "13_georgia_department_of_public_health_(dph)_community_guidelines_for_respiratory", "lastUpdated": "June 2024" }, { - "subChapterId": 51, + "subChapterId": 56, "chapterId": 14, "subChapterTitle": "References", "url": "14_references", "lastUpdated": "June 2024" }, { - "subChapterId": 52, + "subChapterId": 57, "chapterId": 15, "subChapterTitle": "Appendix: District TB Coordinators (by district)", "url": "15_appendix_district_tb_coordinators_(by_district)", "lastUpdated": "June 2024" }, { - "subChapterId": 53, + "subChapterId": 58, "chapterId": 16, "subChapterTitle": "Abbreviations", "url": "16_abbreviations", "lastUpdated": "June 2024" }, { - "subChapterId": 54, + "subChapterId": 59, "chapterId": 17, "subChapterTitle": "Acknowledgements", "url": "17_acknowledgements", "lastUpdated": "June 2024" }, { - "subChapterId": 55, + "subChapterId": 60, "chapterId": 18, "subChapterTitle": "Hello and welcome clinical statement", "url": "18_hello_and_welcome_clinical_statement", "lastUpdated": "June 2024" }, { - "subChapterId": 56, + "subChapterId": 61, "chapterId": 19, "subChapterTitle": "For more information", "url": "19_for_more_information", diff --git a/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html b/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html index 0f701b3..c2fb73a 100644 --- a/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html +++ b/app/src/main/assets/pages/10_tb_infection_control_hospital_isolation_procedures.html @@ -15,11 +15,24 @@
-

- Effective infection control efforts are essential in preventing nosocomial transmission of +

+
+
+
+ +
+

X. TB Infection Prevention and Control in Healthcare Facilities

+
+

Last Updated April 2026

+
+
+
+ +

+ Effective infection prevention and control efforts are essential in preventing nosocomial transmission of TB. A hierarchy of control measures is recommended to prevent TB transmission in health care facilities.

-
+ diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__c__special_clinical_situations.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__c__special_clinical_situations.html index 6ced1a0..55e6bb5 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__c__special_clinical_situations.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__c__special_clinical_situations.html @@ -14,107 +14,48 @@
+
+
+
+
+ +
+

V. Treatment of Current (Active) Disease Therapy

+
+

Last Updated April 2026

+
+
+
  1. -

    Dosing for TB medications in adults with renal impairment is shown in Table 13 .

    +

    Dosing for TB medications in adults with renal impairment is shown in Table 10.

  2. Therapy for TB in clinical situations for which standard TB therapy may not be tolerated or may be - ineffective is shown in Table 14 and Table 15 .

  3. -
  4. There is a new regimen with a proof of concept that TB treatment can be completed in four months. At this time, Georgia Department of Public Health does not have the infrastructure for routine implementation of this treatment regimen. Current obstacles to implementation include:
      -
    • Supply of Rifepentine (cost and access)
    • -
    • Genotypic and phenotypic testing for FQ susceptibility (cost and access).
    -
  5. + ineffective is shown in Table 11 and Table 12.

    +
  6. There is a new 4-month TB treatment regimen for the treatment of drug-susceptible active TB disease as noted above. At this time, the Georgia Department of Public Health does not have the infrastructure for routine implementation of this 4-month treatment regimen.
  7. + +
  8. Current obstacles to implementation include: +
    +
      +
    • Supply of Rifapentine (cost and access)
    • +
    • Genotypic and phenotypic testing for fluoroquinolone (FQ) susceptibility (cost and access).
    +
    +
- -

Table 7: Recommended Regimens for Treatment of Adults and Children with Drug Susceptible TB Pulmonary TB

-

Figure 1. Factors to be considered in deciding to initiate treatment empirically for active tuberculosis (TB) (prior to microbiologic confirmation)

- - Figure 1

Abbreviations: AFB, acid-fast bacilli; HIV, human immunodeficiency virus; IGRA, interferon-γ release assay; Mtb, @@ -124,524 +65,249 @@

Figure 1. Factors to be considered in deciding to initiate trea

Unless provided in the caption above, the following copyright applies to the content of this slide: © The Author 2016. Published by Oxford University Press for the Infectious Diseases Society of America. All rights reserved. For - permissions, email journals.permissions@oup.com.

- + permissions, email journals.permissions@oup.com. +

- -

Table 8: First-Line TB Drugs: Dosing for Adults (ages 16 and over) Directly Observed Therapy (DOT) is mandatory

+

Table 10: Antituberculosis Antibiotics in Adult Patients with Renal Impairment

+

NOTE: Drug adjustments are based on the creatinine clearance (CrCl) which can be estimated as follows:

+

[(140-age in yrs)(Ideal body weight in kg) for men (x 0l85 for women)] / [(72) (serum creatinine, mg/dL)]

+

Ideal body weight for men: 50 kg + 2.3 kg per inch over 5 feet

+

Ideal body weight for women: 45.5 kg + 2.3 kg per inch over 5 feet

+ id="table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment"> +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+ + +

Important Note i

+ +

+ NOTE: Drug adjustments are based on the creatinine clearance (CrCl) which can be estimated as follows:
+ [(140-age in yrs)(Ideal body weight in kg) for men (x 0l85 for women)] / [(72) (serum creatinine, mg/dL)] + Ideal body weight for men: 50 kg + 2.3 kg per inch over 5 feet + Ideal body weight for women: 45.5 kg + 2.3 kg per inch over 5 feet +

+ +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
DrugsAdult Dose based on body weight in kilograms (kg)* - Adverse Reactions
DailyThrice-WeeklyTwice-Weekly
Isoniazid300 mg900 mg900 mg -
    -
  • Gastrointestinal (GI) upset
  • -
  • Liver enzyme elevation
  • -
  • Hepatitis
  • -
  • Mild effects on central nervous
  • -
  • Drug interactions
  • -
-
Rifampin600 mg600 mg600 mg -
    -
  • Orange discoloration of body fluids and secretions
  • -
  • Drug interactions
  • -
  • GI upset
  • -
  • Hepatitis
  • -
  • Bleeding problems
  • -
  • Influenze-like symptoms
  • -
  • Rash
  • -
  • Uveitis (rifabutin only)
  • -
-
Rifabutin300 mgNot recommendedNot recommended
Pyrazinamide**40-55 kg: 1000 mg40-55 kg: 1500 mg40-55 kg: 2000 mg -
    -
  • GI upset
  • -
  • Joint aches
  • -
  • Hepatitis
  • -
  • Rash
  • -
  • Hyperuricemia
  • -
  • Gout (rare)
  • -
-
56-75 kg: 1500 mg56-75 kg: 2500 mg56-75 kg: 3000 mg
76+ kg: 2000 mg76+ kg: 3000 mg76+ kg: 4000 mg
Ethambutol**40-55 kg: 800 mg40-55 kg: 1200 mg40-55 kg: 1600 mg -
    -
  • Optic neuritis
  • -
-
56-75 kg: 1200 mg56-75 kg: 2000 mg56-75 kg: 2400 mg
76+ kg: 2000 mg76+ kg: 2800 mg76+ kg: 4000 mg
Usual Dose (UD) Normal Renal Function300 mg/day
CrCl 30-90UD
CrCL <30 or HemodialysisUD
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
- -

*Formula used to convert pounds to kilograms: Divide pounds by 2.2 to get kilograms.

-

Example: Patient weighs 154 pounds ÷ 2.2 = 70 kilograms.

-

** Calculate pyrazinamide and ethambutol doses using actual body weight. Pyrazinamide and ethambutol dosage - adjustment is needed in patients with estimated creatinine clearance less than 50 ml/min or those with - end-stage renal disease on dialysis.

-

NOTE: Refer to current drug reference or drug package insert for a complete list of adverse drug reactions - and drug interactions.

- -
-
- -

Table 9: Pediatric Dosage - Isoniazid in Children (birth to 15 years)

-
- -
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 10-15 mg/kg POTwice-weekly Dose (mg) 20-30 mg/kg PO
6 - 103 - 4.550100mg PO
11 - 145.0 - 6.050150mg PO
14.5 - 186.5 – 8.0100200mg PO
18.5 - 21.58.5 – 9.5100250mg PO
22 – 2410.0 – 11150300mg PO
25 - 2911.5 - 13150350 mg PO
29.5 - 3213.5 - 14.5200400 mg PO
33 - 3515 - 16200450 mg PO
36 - 4016.5 - 18250500 mg PO
40.5 - 4318.5 - 19.5250550 mg PO
44 - 4820 - 21.5300600 mg PO
48.5 - 5122 - 23300650 mg PO
52 - 54.523.5 - 24.5300700 mg PO
55 - 57.525 - 26300750 mg PO
58 - 6226.5 - 28300800 mg PO
62.5 - 6528.5 - 29.5300850 mg PO
66 +30 +300900 mg PO
Usual Dose (UD) Normal Renal Function600 mg/day
CrCl 30-90UD
CrCL <30 or HemodialysisUD
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
- -

NOTE: Isoniazid tablets come in 50 mg, 100mg, 300 mg sizes and can be crushed for oral administration. - Isoniazid tablets are also scored.

-

Isoniazid Syrup (50mg/5ml) should not be refrigerated. It contains sorbitol and will cause diarrhea. It - should be used only when crushed tablets cannot accommodate the situation. (keep at room temperature).

-
-
- -

Table 10. Pediatric Dosages - Rifampin in Children (birth to 15 years)

-
-
+
- + + + + + + + + + + + + + - - - - + + - + +
Usual Dose (UD) Normal Renal Function15-25 mg/kg/day
CrCl 30-90UD
CrCL <30 or Hemodialysis20-25 mg/kg/dose thrice weekly
Child's Weight (lbs)Child's Weight (kg)Dose (mg) 10-20 mg/kgPeritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
+
+ +
+ + - - - + + - - - + + - - - + + - - - + + +
15 - 327 - 14.5150 mgUsual Dose (UD) Normal Renal Function25 mg/kg/ day (max 2 gm/day)
33 - 48.515 - 22300 mgCrCl 30-90UD
49 - 6522.5 - 29.5450 mgCrCL <30 or Hemodialysis25-35 mg/kg/dose thrice weekly
66 +30 +600 mgPeritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
-
- -

Table 11: Pediatric Dosages - Ethambutol in Children (birth to 15 years)

-
-
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Child’s Weight (lbs)Child’s Weight (kg)Daily Dose (mg) 15 – 25 mg/kg
11 – 155 – 7100 mg
16 – 318 – 14200 mg
32 – 4415 – 20300 mg
45 – 5521 – 25400 mg
56 – 6726 – 30.5500 mg
68 – 7631 – 34.5600 mg
77 – 8735 – 39.5700 mg
88 – 12140 – 55800 mg
122 – 16556 – 751200 mg
166 +76 +1600 mg
Usual Dose (UD) Normal Renal Function750 mg/day
CrCl 30-90UD
CrCL <30 or Hemodialysis750-1000 mg/dose thrice weekly
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
-
- -

Table 12: Pediatric Dosages - Pyrazinamide in Children (birth to 15 years)

-
- -
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 30-40 mg/kg POTwice-weekly Dose (mg) 50-70 mg/kg PO
13 - 236 - 10.5250 mg500 mg
24 - 2611 - 12250 mg750 mg
27 - 3112.5 - 14500 mg1000 mg
32 - 4114.5 - 18.5500 mg1250 mg
42 - 4719.0 - 21.5750 mg1250 mg
48 - 5422.0 - 24.5750 mg1500 mg
55 – 6325 – 28.51000 mg1750 mg
64 – 6729 – 30.51000 mg2000 mg
68 – 8031 – 36.51250 mg2000 mg
81 – 9337 – 42.51500 mg2000 mg
94 – 10643 – 48.51750 mg2000 mg
107 +49 +2000 mg2000 mg
Usual Dose (UD) Normal Renal Function400 mg/day
CrCl 30-90UD
CrCL <30 or HemodialysisUD
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
-
+
+ + + + + + + + + + + + + + + + + + + +
Usual Dose (UD) Normal Renal Function15 mg/kg/daily or thrice weekly
CrCl 30-90UD
CrCL <30 or Hemodialysis15 mg/kg/dose thrice weekly
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
+
-

Table 13: Antituberculosis Antibiotics in Adult Patients with Renal Impairment

-
-

NOTE: Drug adjustments are based on the creatinine clearance (CrCl) which can be estimated as follows:

-

[(140-age in yrs)(Ideal body weight in kg) for men (x 0l85 for women)] / [(72) (serum creatinine, mg/dL)]

-

Ideal body weight for men: 50 kg + 2.3 kg per inch over 5 feet

-

Ideal body weight for women: 45.5 kg + 2.3 kg per inch over 5 feet

-
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +
DrugUsual Dose (UD) Normal Renal FunctionCrCl 30-90CrCL <30 or HemodialysisPeritoneal Dialysis
INH300 mg/dayUDUDData currently are not available for patients receiving peritoneal dialysis. Until data - become available, begin with doses recommended for patients receiving hemodialysis and verify - adequacy of dosing using serum concentration monitoring. -
Rifampin600 mg/dayUDUD
Ethambutol15-25 mg/kg/dayUD20-25 mg/kg/dose thrice weekly
Pyrazinamide25 mg/kg d (max 2 gm/day)UD25-35 mg/kg/dose thrice weekly
Levofloxacin750 mg/dayUD750-1000 mg/dose thrice weekly
Moxifloxacin400 mg/dayUDUD
Amikacin15 mg/kg/daily or thrice weeklyUD15 mg/kg/dose thrice weekly
Linezolid600 mg/dayUDUD
Usual Dose (UD) Normal Renal Function600 mg/day
CrCl 30-90UD
CrCL <30 or HemodialysisUD
Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
+
+
  • Standard doses are given unless there is intolerance.
  • The medications should be given after hemodialysis on the day of hemodialysis.
  • @@ -659,156 +325,360 @@

    Table 13: Antituberculosis Antibiotics in Adult Patients with R

-

Table 14: Antituberculosis medications which may be used for patients who have contraindications to or intolerance of first line agents or who require IV therapy during acute or critical illness

+

Table 11: Antituberculosis medications which may be used for patients who have contraindications to or intolerance of first line agents or who require IV therapy during acute or critical illness

- - - - - - - - - - - - - - - - - - - - - - - - - - - + id="table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance"> + +
+
    +
  • + +
  • + +
  • + +
  • + +
  • +
+
+ +
+
Medication: Route(s)Dosing (A for adults, C for children)Adverse Reactions
Levofloxacin: PO/IVA: 750 mg daily C: 15 – 20 mg/kg daily Max dose 750 mgGI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture - (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia -
Moxifloxacin: PO/IVA: 400 mg daily C: no established dose
Linezolid: PO/IVA: 600 mg (once daily) C: 10 mg/kg/dose every 12 hours (max dose 600 mg)Myelosuppression, GI upset, optic and peripheral neuropathy (may be irreversible)
Amikacin: IVA: 10 to 15 mg/kg/day 5-7 days per week or 3 times per week - C: 15 to 30 mg/kg/day (max dose 1 gram) 5-7 days per week or 3 times per week - Auditory, vestibular and renal toxicity
+ + + + + + + + + + + + + +
Dosing + Adults
+ 750 mg

+ Children
+ 15 - 20 mg/kg

+ Max dose
750 mg +
FrequencyDaily
Adverse Reactions + GI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia +
+ +

Additional Notes:

+

+ Dosing above for persons with CrCL > 50 mL/min. For persons with renal impairment, see Table 10. Expert consultation is advised before use; agent is not approved for children less than 18 years of age. +

-
-

Table 15: Clinical Situations for which standard therapy cannot be given or is not well- tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)

-
-
- - - - - - - - - - +
+
Clinical SituationConcerns RaisedRegimenComments
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + +
Critical illness requiring vasopressorsPoor gut medication absorptionIV rifampin ≥ 10 mg/kg daily - PO pyrazinamide UD - PO ethambutol UD - IV isoniazid UD2,3 - IV levofloxacin or moxifloxacin UD 4 - IV linezolid UD 54 - IV amikacin UD5Oral medications are generally poorly bioavailable among critically ill patients.

Patients - receiving sedation are unable to report isoniazid or linezolid-induced neuropathies nor - aminoglycoside- induced otovestibular toxicity

Proven or suspected meningeal TBRapidly progressive and often fatal. High plasma levels needed to achieve adequate CNS penetration. - High index of suspicion necessary; microbiological diagnostic tests have low yield. - IV rifampin ≥ 10 mg/kg daily - PO or IV2 2 isoniazid UD - PO pyrazinamide UD - PO ethambutol UD (adults) - PO ethionamide (children) -

Consider adding IV levofloxacin or moxifloxacin UD in lieu of ethambutol

Rifampin has poor CNS penetration but is an essential drug for meningeal TB treatment. Isoniazid, - pyrazinamide, levofloxacin, and moxifloxacin have excellent CNS penetration. -

Ethambutol has poor CNS penetration. Early use of fluoroquinolones has been associated with - improved outcomes among patients with isoniazid-resistant meningeal TB

-
Patient age 75 years or greater6Increased risk for pyrazinamide-induced hepatotoxicityCan consider rifampin, isoniazid, and ethambutol without pyrazinamide when drug-susceptibility is - known and/or patient has low burden of disease - 3-drug regimens may increase risk of failure or acquired drug-resistance.
Disseminated TB with concern for poor absorption from gut6Disseminated TB is associated with gut edema which decreases po medication bioavailabilityStandard 4-drug regimen Consider increasing po Rifampin dose (15 to 20 mg/kg daily, minimum 600 mg) - Consider IV rifampin and IV isoniazid 1 for inpatients. - Consider obtaining TB drug levels in ensure po dosing achieves at least minimum levels
Patient receiving medications via nasogastric or PEG tube6Tube feeds may decrease TB drug bioavailabilityNo change in standard TB regimenHold tube feeds ≤2 hours prior and ≥1 hour after TB drug intake. Longer intervals are needed if - quinolone- containing regimens are given with divalent-cationcontainingtubefeeds -
Baseline elevation of liver enzymes6Consider limiting number of hepatotoxic drugs for patients with baseline ALT>3x UNL and/or advanced - liver disease. - Order of hepatotoxicity: PZA>INH>RIF - 1-RIF/INH/EMB +/- FQN 2-RIF/EMB/FQN +/- LZD or AG 3-EMB/FQN +/- LZD or AGConsider baseline liver enzyme elevation could be due to hepatic TB -

3-drug regimens may increase risk of failure or acquired drug-resistance.

-
Acute hepatitis after starting standard therapy6TB drug-induced hepatotoxicity - Stop TB drugs if ALT>3x UNL and patient symptomatic or ALT >5x UNL regardless of symptoms - Sequential re-introduction of TB drugs once ALT <2x UNL. - (1) Rifamycin x 5-7 days - (2) Isoniazid x 5-7 days - (3) Ethambutol x 5-7 days - (4) Need and choice of 4th agent depends on burden of disease and drug-susceptibility pattern. - Pyrazinamide is often the culprit and effective regimens can be designed without this drug. - Rifamycins are the drugs most important for sterilizing activity (i.e., cure) in TB treatment. - Consider adding a 4th drug if patient has high burden of disease. -
Dosing + Adults
+ 10 - 15 mg/kg

+ Children
+ No established dose

+ Max dose
400 mg +
FrequencyDaily
Adverse Reactions + GI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia +
+ +

Additional Notes:

+

Expert consultation is advised before use; agent is not approved for children less than 18 years of age.

+
+ +
+ + + + + + + + + + + + + + +
Dosing (A for adults, C for children) + Adults
+ 600 mg

+ + Children < 12 years +
    +
  • 5 – 10 kg: 15 mg/kg
  • +
  • 10 – 23 kg: 12 mg/kg
  • +
  • >23 kg: 10 mg/kg
  • +
+ + Childrenl ≥ 12 years
+ 10 mg/kg

+ + Max dose
600 mg +
FrequencyDaily
Adverse Reactions + Myelosuppression, GI upset, optic and peripheral neuropathy (may be irreversible) +
+
+ +
+ + + + + + + + + + + + + + + +
Dosing + Adults
+ 10 to 15 mg/kg/day

+ Children
+ 15 to 30 mg/kg/day (max dose 1 gram)

+
Frequency5-7 days per week or 3 times per week
Adverse Reactions + Auditory, vestibular and renal toxicity +
+ +

Additional Notes:

+

Dosing above for persons with CrCL > 50 mL/min. For persons with renal impairment, see Table 10.

+
+
+
+ +

Table 12: Clinical Situations for which Standard Therapy cannot be given or is not well-tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)

+
+
+ +
+
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedPoor gut medication absorption
Regimen +
    +
  • IV rifampin ≥ 10 mg/kg daily
  • +
  • PO pyrazinamide UD
  • +
  • PO ethambutol UD
  • +
+ Consider adding at least two of the following agents. +
    +
  • IV isoniazid UD i
  • +
  • IV levofloxacin or moxifloxacin UD
  • +
  • IV linezolid UD i
  • +
  • IV amikacin UD i
  • +
+
Comments +
    +
  • Oral medications are generally poorly bioavailable among critically ill patients.
  • +
  • Patients receiving sedation are unable to report isoniazid or linezolid-induced neuropathies nor aminoglycoside- induced otovestibular toxicity
  • +
+
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedRapidly progressive and often fatal. High plasma levels needed to achieve adequate CNS penetration. + High index of suspicion necessary; microbiological diagnostic tests have low yield.
Regimen +
    +
  • IV rifampin ≥ 10 mg/kg daily
  • +
  • PO or IV i isoniazid UD
  • +
  • PO pyrazinamide UD
  • +
  • PO ethambutol UD (adults)
  • +
  • PO ethionamide (children)
  • +
+

Consider adding IV levofloxacin or moxifloxacin UD in lieu of ethambutol, especially if there is concern for isoniazid-resistant TB.

+
CommentsRifampin has poor CNS penetration but is an essential drug for meningeal TB treatment. Isoniazid, + pyrazinamide, levofloxacin, and moxifloxacin have excellent CNS penetration. +
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedIncreased risk for pyrazinamide-induced hepatotoxicity
RegimenCan consider rifampin, isoniazid, and ethambutol without pyrazinamide when drug-susceptibility is + known and/or patient has low burden of disease
Comments3-drug regimens may increase risk of failure or acquired drug-resistance.
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedDisseminated TB is associated with gut edema which decreases po medication bioavailability
RegimenStandard 4-drug regimen Consider increasing po Rifampin dose (15 to 20 mg/kg daily, minimum 600 mg) + Consider IV rifampin and IV isoniazid i for inpatients.
CommentsConsider obtaining TB drug levels in ensure po dosing achieves at least minimum levels
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedTube feeds may decrease TB drug bioavailability
RegimenNo change in standard TB regimen
CommentsHold tube feeds ≤2 hours prior and ≥1 hour after TB drug intake. Longer intervals are needed if quinolone- containing regimens are given with divalent-cation containing tube feeds
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedConsider limiting number of hepatotoxic drugs for patients with baseline ALT>3x UNL and/or advanced + liver disease. + Order of hepatotoxicity: PZA>INH>RIF
Regimen +
    +
  • RIF/INH/EMB +/- FQN
  • +
  • RIF/EMB/FQN +/- LZD or AG
  • +
  • EMB/FQN +/- LZD or AG
  • +
+
Comments + Consider baseline liver enzyme elevation could be due to hepatic TB

+ 3-drug regimens may increase risk of failure or acquired drug-resistance. +
+
+ +
+ + + + + + + + + + + + + + + +
Concerns RaisedTB drug-induced hepatotoxicity + Stop TB drugs if ALT>3x UNL and patient symptomatic or ALT >5x UNL regardless of symptoms
RegimenSequential re-introduction of TB drugs once ALT <2x UNL.
+ (1) Rifamycin x 5-7 days
+ (2) Isoniazid x 5-7 days
+ (3) Ethambutol x 5-7 days
+ (4) Need and choice of 4th agent depends on burden of disease and drug-susceptibility pattern. +
CommentsPyrazinamide is often the culprit and effective regimens can be designed without this drug. + Rifamycins are the drugs most important for sterilizing activity (i.e., cure) in TB treatment. + Consider adding a 4th drug if patient has high burden of disease.
+
+

Abbreviations: UD, usual dose; UNL, upper normal limit.

-

TABLE 15 NOTES

-

1-Some of these recommendations differ or are not addressed by 2016 ATS/CDC/IDSA drug-susceptible TB - guidelines. Drug-susceptibility testing for second-line drugs should be requested if these agents are - used.

-

2-Limited availability

-

3-Associated with peripheral neuropathy. Add B6 ≥50 mg/daily

-

4-Associated with irreversible peripheral and optic neuritis. Add B6 ≥ 50 mg/daily

-

5-Associated with otovestibular toxicity

-

6-These recommendations are meant for patients with known drug-susceptible TB or at low risk for drug- - resistant TB

+ +

Additional Notes:
+ 1. These recommendations are meant for patients with known drug-susceptible TB or at low risk for drug- resistant TB

+
@@ -816,4 +686,6 @@

Table 15: Clinical Situations for which standard therapy cannot + + diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__d__drug_resistance.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__d__drug_resistance.html index 01c8e75..53508b5 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__d__drug_resistance.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__d__drug_resistance.html @@ -16,29 +16,39 @@
+
+
+
+
+ +
+

V. Treatment of Current (Active) Disease Therapy

+
+

Last Updated April 2026

+
+
+
+

+ Seek expert consultation for all patients with suspected or proven drug-resistant TB. Treatment of active TB disease caused by drug- resistant organisms should be done by or in close consultation with an expert in the management of these difficult situations. +

-

Seek expert consultation for all patients with suspected or proven drug-resistant TB. Treatment of TB caused by - drug- - resistant organisms should be done by or in close consultation with an expert in the management of these - difficult - situations. INH-resistant TB is the most common form of drug-resistant TB (with a global prevalence of >10%). - Newly - updated ATS/CDC/ IDSA recommendations for the treatment of drug-resistant TB recommend the addition of later - generation fluoroquinolones (i.e., levofloxacin or moxifloxacin) to rifampin, pyrazinamide, and ethambutol for - the - treatment of INH-resistant TB, although there are limited data on the benefit of the addition of the - fluoroquinolone - in these circumstances. Multidrug-resistant (MDR)-TB is defined as resistance to at least INH and rifampin. New - and - repurposed anti-TB drugs included in treatment regimens have provided new options for the treatment of MDR-TB. +

+ INH-resistant TB is the most common form of drug-resistant TB (with a global prevalence of >10%). Updated ATS/CDC/ IDSA recommendations for the treatment of drug-resistant TB recommend the addition of later generation fluoroquinolones (i.e., levofloxacin or moxifloxacin) to rifampin, pyrazinamide, and ethambutol for the treatment of INH-resistant TB, although there are limited data on the benefit of the addition of the fluoroquinolone in these circumstances. +

+ +

+ Multidrug-resistant (MDR)-TB is defined as resistance to at least INH and rifampin. New and repurposed anti-TB drugs included in treatment regimens have provided new options for the treatment of MDR-TB including 6-9 month regimens using BPaL (bedaquiline, pretomanid, and levofloxacin) or BPaLM (BPaL plus moxifloxacin). +

+

As noted, consultation with an expert is required for MDR-TB and other drug-resistant TB cases. Second line treatment regimens often represent the patient’s last best hope for being cured. Inappropriate management can have - life-threatening consequences. If you think, identify, or suspect rifampin-resistant or MDR disease in a - person with TB, contact the state consultants by direct email, Susan Ray sray02@emory.edu or Marcos Schechter - mcoutin@emory.edu, or by telephoning the State TB Program at 404-657-2597 for diagnostic and treatment support. - There are multiple strategies to pursue rapid genotypic assessment for drug resistance. Additionally, there are + life-threatening consequences.

+

+ If you think, identify, or suspect rifampin-resistant or MDR-TB disease in a person with TB, contact the state consultants by direct email, Dr. Susan Ray sray02@emory.edu or Dr. Marcos Schechter mcoutin@emory.edu, or by telephoning the Georgia Department of Public Health TB Program at 404-657-2597 for diagnostic and treatment support. There are multiple strategies to pursue rapid genotypic assessment for drug resistance. +

+

Additionally, there are several exciting new regimens with strong outcomes that require expert consultation. See Appendix and/or website for making contact with an appropriate expert in your diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__e__monitoring_patients_on_therapy_for_response_and_adverse_events.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__e__monitoring_patients_on_therapy_for_response_and_adverse_events.html index 2106562..2f1b1bf 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__e__monitoring_patients_on_therapy_for_response_and_adverse_events.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__e__monitoring_patients_on_therapy_for_response_and_adverse_events.html @@ -15,95 +15,82 @@

+
+
+
+
+ +
+

V. Treatment of Current (Active) Disease Therapy

+
+

Last Updated April 2026

+
+
+
    -
  1. Response to Treatment
  2. -
      -
    1. For patients with pulmonary TB, obtain sputum for AFB smear and culture at least monthly until two - consecutive sputum samples are culture negative. Some authorities prefer to obtain monthly AFB sputum - smear - and cultures throughout the course of therapy. -
    2. +
    3. + Response to Treatment +
      +
        +
      1. + For patients with pulmonary TB, obtain sputum for AFB smear and culture at least monthly until two consecutive sputum samples are culture negative. Some authorities prefer to obtain monthly AFB sputum smear and cultures throughout the course of therapy. +
      2. +
      3. + Patients with cavitary pulmonary TB who have a positive 2-month sputum culture are at increased risk for relapse if treated with only 6 months of therapy for drug-susceptible TB. If the 2-month culture remains positive or if symptoms do not resolve, request repeat drug susceptibility testing to evaluate for acquired drug resistance. Additionally, review information -
      4. Patients with cavitary pulmonary TB who have a positive 2 -month sputum culture are at increased risk - for - relapse if treated with only 6 months of therapy. If the 2-month culture remains positive or if symptoms - do - not resolve, request repeat drug susceptibility testing to evaluate for acquired drug resistance. - Additionally, review information related to treatment adherence. For any patient receiving - self-administered - therapy (this should be very rare as DOT is our standard of care) who has a positive 2-month culture, - DOT - should be initiated. -
      5. - -
      6. For patients with drug susceptible disease who have positive 2-month culture and have cavitary disease - on - their initial CXR, the continuation phase should be increased to 7 months so that they receive a total - of 9 - months of therapy. -
      7. - -
      8. Factors to be considered in deciding whether to prolong treatment in patients with either cavitation on - initial CXR or a positive culture after 2 months of therapy (but not both) include being more than 10% - underweight at diagnosis, having HIV infection or having extensive involvement on CXR. -
      9. -
      10. HIV testing should be performed on all persons diagnosed with TB.
      11. -
      -
    4. Monitoring for Adverse Reactions
    5. -
        -
      1. Obtain the following baseline measurements to detect any abnormality that would complicate the regimen - or - necessitate its modification: -
      2. -
          -
        • Hepaticenzyme (e.g.,AST) level, bilirubin, serumcreatinine, complete blood count and platelet count. -
        • -
        • Baseline visual acuity (if EMB is used)
        • -
        • Baseline audiometry (if Amikacin is used).
        • -
        • CD4 count and HIV viral load for patients with HIV infection.
        • -
        - -
      3. Patients with epidemiologic risk factors for hepatitis B or C (e.g., injection drug use, birth in Asia - or - Africa, HIV infection) should have serologic tests for these viruses performed. -
      4. - -
      5. All patients should be seen at least monthly and questioned about potential adverse reactions. If - symptoms - suggesting drug toxicity occur, appropriate laboratory testing should be performed to confirm or exclude - such toxicity. Patients should be instructed to report symptoms of hepatitis (which can be induced by - INH, - RIF and/or PZA) immediately. Such symptoms include nausea, loss of appetite, vomiting, jaundice (dark - urine, - yellow skin), malaise, unexplained fever for > 3 days, or abdominal tenderness. If patients have - jaundice or - symptoms of liver disease, discontinue medications immediately and consult a specialist. -
      6. - -
      7. Routine monthly laboratory monitoring is generally not required for those with normal baseline and no - underlying disease. Monitor hepatic enzymes monthly if baseline levels are elevated, and for those with - HIV - infection, history of alcoholism, chronic liver disease, concomitant use of other drugs which can cause - hepatotoxicity, or pregnancy. At least 20% of patients will have elevated hepatic enzymes; asymptomatic - elevation less than five times the upper limit of normal is not an indication to stop treatment in - asymptomatic patients. If patients have jaundice or symptomatic liver disease, discontinue medications - immediately and consult a specialist -
      8. - -
      9. Patients receiving EMB should be questioned regarding visual disturbances at monthly intervals; monthly - repeat testing of visual acuity and color vision is recommended for patients receiving an EMB dose - exceeding - 15—20 mg/ kg (recommended range) and for patients receiving EMB for more than two months. -
      10. - -
      11. Pyridoxine will usually prevent INH-induced neurotoxicity (peripheral neuropathy).
      12. -
      13. Hyperuricemia may occur in patients on PZA but acute gout is uncommon. Asymptomatic hyperuricemia is not - an - indication for discontinuing the drug. -
      14. - - -
      +related to treatment adherence. For any patient receiving self-administered therapy (this should be very rare as DOT is our standard of care) who has a positive 2-month culture, DOT should be initiated. + +
    6. + For patients with drug-susceptible active TB disease who have positive 2-month culture and have cavitary disease on their initial CXR, the continuation phase should be increased to 7 months so that they receive a total of 9 months of therapy. +
    7. +
    8. Factors to be considered in deciding whether to prolong treatment in patients with either cavitation on + initial CXR or a positive culture after 2 months of therapy (but not both) include being more than 10% + underweight at diagnosis, having HIV infection or having extensive involvement on CXR. +
    9. +
    10. HIV testing should be performed on all persons diagnosed with TB.
    11. +
    +
+ +
  • + Monitoring for Adverse Reactions +
    +
      +
    1. Obtain the following baseline measurements to detect any abnormality that would complicate the regimen + or necessitate its modification: +
        +
      • Hepatic enzyme (e.g., AST) level, bilirubin, serum creatinine, complete blood count and platelet count.
      • +
      • Baseline visual acuity (if EMB is used)
      • +
      • Baseline audiometry (if Amikacin is used).
      • +
      • CD4 count and HIV viral load for patients with HIV infection.
      • +
      +
    2. +
    3. Patients with epidemiologic risk factors for hepatitis B or C (e.g., injection drug use, birth in Asia + or Africa, HIV infection) should have serologic tests for these viruses performed. +
    4. +
    5. All patients should be seen at least monthly and questioned about potential adverse reactions. If + symptoms suggesting drug toxicity occur, appropriate laboratory testing should be performed to confirm or exclude + such toxicity. Patients should be instructed to report symptoms of hepatitis (which can be induced by + INH, RIF and/or PZA) immediately. Such symptoms include nausea, loss of appetite, vomiting, jaundice (dark + urine, yellow skin), malaise, unexplained fever for > 3 days, or abdominal tenderness. If patients have + jaundice or symptoms of liver disease, discontinue medications immediately and consult a specialist. +
    6. +
    7. + Routine monthly laboratory monitoring is generally not required for those with normal baseline and no underlying disease. Monitor hepatic enzymes monthly if baseline levels are elevated, and for those with HIV infection, history of alcohol use disorder, chronic liver disease, concomitant use of other drugs which can cause hepatotoxicity, or pregnancy. At least 20% of patients will have elevated hepatic enzymes; asymptomatic elevation less than five times the upper limit of normal is not an indication to stop treatment in asymptomatic patients. If patients have jaundice or symptomatic liver disease, discontinue medications immediately and consult a specialist. +
    8. +
    9. Patients receiving EMB should be questioned regarding visual disturbances at monthly intervals; monthly + repeat testing of visual acuity and color vision is recommended for patients receiving an EMB dose + exceeding 15—20 mg/ kg (recommended range) and for patients receiving EMB for more than two months. +
    10. +
    11. Pyridoxine will usually prevent INH-induced neurotoxicity (peripheral neuropathy) and is recommended for all patients on INH.
    12. +
    13. Hyperuricemia may occur in patients on PZA but acute gout is uncommon. Asymptomatic hyperuricemia is not + an indication for discontinuing the drug. +
    14. +
    15. + For patients who are unable to tolerate standard therapy, please contact the state consultants by direct email, Dr. Susan Ray sray02@emory.edu or Dr. Marcos Schechter mcoutin@emory.edu, or by telephoning the Georgia Department of Public Health TB Program at 404-657-2597 for diagnostic and treatment support. +
    16. +
    +
    +
  • @@ -111,4 +98,5 @@ + diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__f__tb_and_hiv.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__f__tb_and_hiv.html index d89a942..579897c 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__f__tb_and_hiv.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__f__tb_and_hiv.html @@ -1,6 +1,7 @@ + @@ -11,81 +12,1156 @@ + +
    +
    +
    +
    +
    + +
    +

    V. Treatment of Current (Active) Disease Therapy

    +
    +

    Last Updated April 2026

    +
    +
    +
    +

    + Treatment of persons living with HIV with active TB disease should be carried out in consultation with a + physician who has experience in the use of rifamycin drugs and antiretroviral agents. + Recommendations on the treatment of TB in combination with antiretroviral therapy continue to evolve, and it + is important to check for updated guidelines: + https://clinicalinfo.hiv.gov/en/guidelines and + + https://clinicalinfo.hiv.gov/en/guidelines/hiv-clinical-guidelines-adult-and-adolescent-arv/tuberculosishiv-coinfection?view=full + +

    + Antiretroviral therapy (ART) +
    +
      +
    • + Improves outcomes for persons living with HIV and decreases HIV-related mortality as well as risk of + relapse. Persons living with HIV in the United States with active TB disease commonly have advanced + HIV/AIDS with low CD4 counts and high plasma HIV RNA levels; all patients with TB who have HIV + co-infection should receive treatment for HIV with ART. +
    • +
    +
    + Timing of ART +
    +
      +
    • + Multiple studies have demonstrated the benefits of ART initiation among persons living with HIV + during TB treatment, including a reduction in mortality. +
    • +
    • + However, the use of ART among persons living with HIV with active TB disease is complicated by + overlapping toxicity profiles of some antituberculosis and antiretroviral drugs; complex drug-drug + interactions; and the occurrence of “paradoxical” reactions or immune reconstitution inflammatory + syndrome (IRIS). +
    • +
    +
    + All persons living with HIV who are diagnosed with active + TB disease and not on ART should be started on ART as follows: +
    +
      +
    • + CD4 T lymphocyte (CD4) cell counts <50 cells/mm3: HHS guidelines recommend + initiating ART as soon as possible, but within 2 weeks of starting TB treatment. +
    • +
    • + CD4 counts ≥50 cells/mm3: Initiate ART within 2 to 8 weeks of starting TB + treatment. +
    • +
    • + During pregnancy, regardless of CD4 count: Initiate ART as early as feasible for treatment of + the person with HIV and prevention of HIV transmission to the infant. +
    • +
    • + With TB meningitis: Initiate ART after TB meningitis is under control and after at least 2 + weeks of anti-TB treatment to reduce the risk of life-threatening inflammation in a closed space + (i.e., brain) as a result of immune reconstitution. Generally, initiation of ART in this setting is + recommended 4 to 8 weeks after initiation of therapy for TB meningitis. +
    • +
    +
    + + +

    + As noted above, there are certain situations where ART therapy should be delayed when treating persons with + active TB disease who have HIV co-infection. A study of people living with HIV with TB meningitis found that + early ART was associated with an increase in severe adverse events and no mortality benefit. Thus, timing of + ART initiation in persons with active TB disease who have HIV co-infection should take into account both the + degree of immune suppression and site of disease (see Table 13 and recommendations above). +

    +

    Table 13. Antiretroviral Therapy (ART) and Treatment of Persons Living with HIV and Active TB

    +
    + + + + + + + + + + + + + + + + + + + + + +
    HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment
    CD4 count and/or clinical status at time of TB diagnosisART Initiation
    < 50 cells/mm³ i within 2 weeks of starting TB therapy.
    > 50 cells/mm³ iby 8 to 12 weeks of starting TB therapy
    Pregnant, any CD4 countAs early as feasible
    + +

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant Women with HIV Infection and Interventions to Reduce Perinatal Transmission in the United States, last reviewed and updated April 15, 2019
    (https://clinicalinfo.hiv.gov/en/guidelines/hiv-clinical-guidelines-adult-and-adolescent-opportunistic-infections/mycobacterium?view=full).

    +
    + +

    Table 14. Antiretroviral Therapy (ART) and Treatment of Persons + Living with HIV and Active TB

    +
    +

    + + Principle: Despite Drug Interactions, a Rifamycin (Rifampin or Rifabutin) Should Be Included in TB Regimens for Patients Receiving ART, with Dosage Adjustment if Necessary + +

    + +
    +
      +
    • +
    • +
    • +
    +
    + +
    +

    + + Integrase-based ART regimens. Dolutegravir is the preferred integrase for TB/HIV co-infection treatment. + +

    + +

    1a. Patients receiving rifampin-based TB treatment.

    + + + + + + + + + + + + + + + + + + + +
    PreferredDTG (Tivicay) BID + TDF/FTC (Truvada)
    Alternative +
      +
    • DTG (Tivicay) BID + TAF/FTC (Descovy)
    • +
    • DTG (Tivicay) BID + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    NoteTriumeq is a combination of DTG/ABC/3tc
    + + +

    1b. Patients receiving rifabutin-based TB treatment

    + + + + + + + + + + + + + + + + + + + +
    PreferredDTG (Tivicay) + TDF/FTC (Truvada)
    Alternative +
      +
    • DTG (Tivicay) BID + TAF/FTC (Descovy)
    • +
    • DTG/ABC/3TC (Triumeq)
    • +
    +
    FrequencyDaily for both preferred and alternative
    NoteThe FDA does not recommend using TAF with rifampin or rifabutin
    + +

    Abbreviations:

    +
      +
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • +
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • +
    • PIs: protease inhibitors
    • +
    • /r: boosted with ritonavir
    • +
    • TDF: Tenofovir disoproxil fumarate
    • +
    • TAF: Tenofovir alafenamide
    • +
    • FTC: Emtricitabine
    • +
    • 3TC: Lamivudine
    • +
    • ABC: Abacavir
    • +
    • ATV/r: Atazanavir/ritonavir
    • +
    • DRV/r: Darunavir/ritonavir
    • +
    • DTG: Dolutegravir
    • +
    + +

    Source:

    + +
    + +
    +

    + + PI-based ART regimens + + (cannot be used with rifampin, must use with dose-adjusted rifabutin) + +

    + +

    2a

    + + + + + + + + + + + + + + + +
    PreferredATV/r + TDF/FTC (Truvada)
    Alternative +
      +
    • ATV/r + TAF/FTC (Descovy)
    • +
    • ATV/r + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    + + +

    2b

    + + + + + + + + + + + + + + + +
    PreferredDRV/r + TDF/FTC (Truvada)
    Alternative +
      +
    • DRV/r + TAF/FTC (Descovy)
    • +
    • DRV/r + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    + +

    Additional Notes:

    +
      +
    • PI’s have high barrier to resistance. However, given rifabutin is given at half-dose when used with PI’s adherence to ART should be closely monitored. Poor adherence to PI’s while on rifabutin increases risk for rifampin resistance.
    • +
    • The FDA does not recommend using TAF with rifampin or rifabutin.
    • +
    • Cobicistat cannot be used with rifabutin.
    • +
    + +

    Abbreviations:

    +
      +
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • +
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • +
    • PIs: protease inhibitors
    • +
    • /r: boosted with ritonavir
    • +
    • TDF: Tenofovir disoproxil fumarate
    • +
    • TAF: Tenofovir alafenamide
    • +
    • FTC: Emtricitabine
    • +
    • 3TC: Lamivudine
    • +
    • ABC: Abacavir
    • +
    • ATV/r: Atazanavir/ritonavir
    • +
    • DRV/r: Darunavir/ritonavir
    • +
    • DTG: Dolutegravir
    • +
    + +

    Source:

    + +
    + +
    +

    + + Choice for Pregnant Women living with HIV and with Active TB + +

    + +

    2a

    + + + + + + + +
    Notes +
      +
    • Expert consultation advised.
    • +
    • Options 1a and 1b are currently preferred in pregnancy.
    • +
    +
    + +

    Source:

    + +
    +
    + +

    + Persons who are already on ART at the time of TB diagnosis, generally should be continued on the ART + treatment (though ART regimen may need to be adjusted). +

    +

    Choice of ART

    +
    +
      +
    • + Because of the potential for significant drug interactions and overlapping toxicities, the choice of + ART among persons living with HIV who have active TB disease should be made only after direct + communication between HIV and tuberculosis care providers. +
    • +
    • + Any change in either the TB medications or the ART regimen should be immediately shared between the + two providers. +
    • +
    +
    + +

    There are clinically important drug-drug interactions between + the rifamycins (e.g., rifampin, rifabutin, rifapentene) and some of the antiretroviral drugs, especially + integrase and protease inhibitors.

    +
    +
      +
    • + The rifamycins are inducers of the cytochrome P450-3A (CYP3A) system in the liver and thereby + decrease serum concentrations of drugs metabolized by this system including integrase and protease + inhibitors. +
    • +
    • + Rifampin is a potent inducer of the CYP3A, while rifabutin is a less potent inducer. Rifampin cannot + be given with most protease inhibitors because it results in low serum levels of these drugs. +
    • +
    • + Rifabutin has less of an effect and therefore can be used with certain protease inhibitors as + described below. +
    • +
    • + Rifampin and rifabutin can be given with certain integrase inhibitors (https://clinicalinfo.hiv.gov/en/guidelines/hiv-clinical-guidelines-adult-and-adolescent-arv/coinfections-tuberculosis-hiv). +
    • +
    +
    +

    + The protease inhibitors also affect rifamycin metabolism and because the rifamycin metabolism is retarded by + these drugs, the dose of rifabutin needs to be reduced in order to avoid rifabutin related toxicity. +

    +

    + Despite these drug-drug interactions, a rifamycin (rifampin or rifabutin) should ALWAYS be included in the + treatment regimen for drug-susceptible TB among persons living with HIV. +

    + +

    Rifampin can be given with the following + antiretrovirals:

    +
    +
      +
    • + MOST Nucleoside/nucleotide reverse transcriptase inhibitors (NRTIs) (e.g., zidovudine, lamivudine, + emtricitabine, tenofovir disoproxil fumarate (TDF), + + abacavir). Tenofovir alafenamide (TAF) is not currently recommended for use in combination with + rifamycins. +
    • +
    • + SELECTED Non-nucleoside reverse transcriptase inhibitors (NNRTIs): efavirenz only (all others are + contraindicated for coadministration with rifampin). +
    • +
    • + Selected Integrase inhibitors: raltegravir and dolutegravir. The dose of raltegravir must be + increased to 800 mg twice daily (BID) and the dose of dolutegravir must be increased to 50 mg BID + for patients on rifampin. Neither raltegravir or dolutegravir require a dosing change when used with + rifabutin. Bictegravir (a component of Biktarvy) should NOT be given in combination with any + rifamycin drugs (rifampin, rifabutin, rifapentine). +
    • +
    +
    + +

    Rifampin should NOT be used with the following:

    +
    +
      +
    • + Tenofoviral afenamide (TAF) +
    • +
    • + Protease inhibitors +
    • +
    • + Nevirapine, etravirine, rilpivarine (NNRTIs) +
    • +
    • + Bictegravir (including Biktarvy), elvitegravir +
    • +
    +
    + +

    + A summary of preferred treatment options for patients with tuberculosis disease who are HIV co-infected is + shown in Table 15 and Table 16. For additional + information refer to updated HHS guidelines, visit https://clinicalinfo.hiv.gov/en/guidelines/hiv-clinical-guidelines-adult-and-adolescent-arv/tuberculosishiv-coinfection?view=full +

    +

    Table 15. Summary of Recommendations for Treatment of Active TB Disease in + Persons with HIV

    + + +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    +

    + When to start ART +

    + + + + + + + + + + + + +
    What to do +
      +
    • + CD4 <50: start ART within + 2 weeks of TB therapy +
    • +
    • + CD4 ≥50: start ART by + 8–12 weeks. +
    • +
    • + TB meningitis: defer starting ART and + seek expert advice as CNS TB IRIS may increase morbidity + and mortality +
    • +
    +
    Key details/caveats + Early ART ↓ mortality.
    + CNS TB early ART ↑ severe IRIS risk. +
    +
    + +
    +

    + How to prevent IRIS in TB/HIV +

    + + + + + + + + + + + + +
    What to do +
      +
    • + Consider prednisone 40 mg/day for + 2 weeks, then + 20 mg/day for + 2 weeks for patients with + CD4 ≤100 who starting ART within 30 days + of TB treatment initiation and are responding well to TB + therapy. +
    • +
    • Consult with expert in TB/HIV.
    • +
    +
    Key details/caveats + Contraindicated for patients with rifampin-resistant TB, + Kaposi sarcoma, or active hepatitis B. +
    +
    + +
    +

    + TB Regimen: Drug-susceptible TB (DS_TB) +

    + + + + + + + + + + + + +
    What to do + Use standard 6-month HRZE → HR regimen + (intensive phase 2 months HRZE, continuation phase 4-7 months + HR) +
    Key details/caveatsRemains the global standard for HIV-associated TB
    +
    + +
    +

    + Core ART principles with rifamycins +

    + + + + + + + + + + + +
    What to do + Rifamycins (rifampin, rifabutin, rifapentine) are the most + important TB drug in the treatment of DS-TB and every effort + should be made to include them in the treatment regimen. + However, rifamycins have many drug-drug interactions. + i +
    Key details/caveats + Rifamycins strongly induce CYP3A, UGT, P-gp, causing major ARV + interactions. +
    +
    -
    - -

    HIV is the most important risk factor for active TB disease and TB-related mortality. TB is one of the few - co-infections occurring in HIV-infected persons which is transmissible, curable and preventable. Importantly, - HIV is - a risk factor for active TB across all CD4 count levels.

    - -

    Persons with HIV infection may have diminished (or absent) tuberculin skin test reaction and/or negative IGRA - because of immunosuppression. Therefore, tuberculin reactions of > 5 mm of induration are considered indicative - of - TB infection in an HIV- infected individual (see B. Criteria for a Positive Tuberculin Test, by Risk Group). Standard IGRA cut-offs apply for patients - with - HIV despite reduced sensitivity of IGRA test among patients with HIV.

    - -

    Because HIV status is a critical factor in the treatment of TB, HIV counseling and testing should be offered to - all - patients with proven or suspected active TB disease.

    - -

    The clinical presentation of TB in a person living with HIV may differ from that in persons without HIV. Apical - pulmonary disease with cavitation, a classic finding in immunologically competent persons, is less common among - persons living with HIV, especially among those with low CD4 counts. HIV-infected patients may present with - infiltrates in any lung zone and/or with mediastinal or hilar lymphadenopathy. Extrapulmonary and disseminated - TB - are common among HIV-infected TB patients. -

    - -

    Treatment for Individuals with TB & HIV

    -
      -
    1. The treatment of TB in persons living with HIV is similar to that for patients without HIV infection. - However, - intermittent therapy should be avoided, and twice-weekly regimens are contraindicated. -
    2. - -
    3. Persons living with HIV with active TB disease should be initiated on a 4-drug treatment regimen (INH, RIF - (or - Rifabutin), PZA and EMB) and pyridoxine as outlined in Table 7, unless contraindications to - medication exist. The use of antiretroviral therapy and TB medications is discussed on Antiretroviral Therapy During the Course of TB Therapy. - Persons living with HIV with drug-susceptible TB disease generally respond well to standard anti-TB drugs. -
    4. - -
    5. Patients with HIV co-infection who have drug-susceptible TB disease should be treated for a minimum of 6 months with antituberculosis therapy. Duration of therapy should be prolonged for patients with delayed or slow - response to therapy. Persons living with HIV with TB disease should be monitored closely for clinical and - bacteriological response. Many experts extend treatment duration to 9 months for all patients with HIV, but - prolonged treatment beyond 6 months is especially recommended for patients who do not achieve HIV viral - suppression during TB treatment and/or are slow to respond to therapy, including patients who remain culture - positive after two months of therapy. Because patient adherence to therapy is critical for good outcomes, - DOT is - the standard of care and is strongly recommended for all patients with active TB including persons living - with - HIV. -
    6. - -
    7. Persons living with HIV with TB disease should be monitored very closely during therapy as they appear to - have a - greater frequency of adverse reactions to anti-TB drugs. -
    8. - -
    9. HIV viral load should be monitored very closely during TB therapy given drug-drug interactions. Viral load - should be measured prior to antiretroviral therapy (ART) initiation and within 2—4 weeks but no later than 8 - weeks after ART initiation. An HIV viral load should be measured every 3 months among patients with stable - ART - regimen and suppressed viral load. -
    10. - -
    11. After treatment for TB disease is completed, patients should be reminded that if symptoms reappear, they - should - seek prompt medical evaluation. -
    12. -
    - -
    +
    +

    + INSTIs with rifamycin +

    + + + + + + + + + + + + +
    What to do + Dolutegravir (DTG): Increase does to 50 mg + twice daily while on rifampin. + Bictegravir (BIC) (INSTI in Biktarvy) is + contraindicated with rifampin and other rifamycins. +
    Key details/caveats +
      +
    • DTG BID validated in HIV–TB.
    • +
    • BIC levels drop severely.
    • +
    +
    +
    + +
    +

    + NNRTIs with rifampin +

    + + + + + + + + + + + + +
    What to doEfavirenz 600 mg daily is compatible.
    Key details/caveats + Efavirenz generally maintained at therapeutic levels with + rifampin. +
    +
    + +
    +

    + Boosted PIs with rifampin +

    + + + + + + + + + + + + +
    What to do + Do NOT use rifampin with ritonavir- or + cobicistat-boosted PIs. Use rifabutin instead + of rifampin if PI required (can use with ritonavir, cannot use + with cobicistat). +
    Key details/caveats +
      +
    • Monitor for uveitis and neutropenia with rifabutin.
    • +
    • + Dose adjustment for rifabutin generally required; consult + with HIV/TB expert. +
    • +
    +
    +
    + +
    +

    + NRTI backbone +

    + + + + + + + + + + + + +
    What to do + Use TDF/FTC (Truvada) or + 3TC. General recommendations are to avoid + TAF (i.e., TAF/FTC [Descovy]) use with + rifamycins. However, TAF can be used with rifampin with + caution and close monitoring of virologic response per the + DHHS/NIH HIV treatment guidelines. +
    Key details/caveats + Rifamycins lower plasma TAF concentration, but intracellular + levels are preserved. +
    +
    + +
    +

    + TB-IRIS +

    + + + + + + + + + + + + +
    What to do + Continue ART. NSAIDs for mild IRIS. + Prednisone for moderate–severe IRIS. +
    Key details/caveats + ART should NOT be stopped except in life-threatening IRIS. +
    +
    + +
    +

    + TB Meningitis +

    + + + + + + + + + + + + +
    What to do + Use adjunctive steroids. Delay start of ART. + Seek expert advice as CNS TB IRIS may increase morbidity and + mortality +
    Key details/caveatsReduces mortality and CNS IRIS.
    +
    + +
    +

    Abbreviations:

    +
      +
    • ART – Antiretroviral therapy
    • +
    • ARV – Antiretroviral
    • +
    • BIC – Bictegravir
    • +
    • CNS – Central nervous system
    • +
    • CYP3A / CYP3A4 – Major drug-metabolizing enzymes
    • +
    • DS-TB – Drug-susceptible TB
    • +
    • DTG – Dolutegravir
    • +
    • EFV – Efavirenz
    • +
    • FTC – Emtricitabine
    • +
    • HRZE – TB intensive-phase regimen:
    • +
    • H = Isoniazid
    • +
    • R = Rifampin
    • +
    • Z = Pyrazinamide
    • +
    • E = Ethambutol
    • +
    • IRIS – Immune reconstitution inflammatory syndrome
    • +
    • INSTI – Integrase strand transfer inhibitor
    • +
    • NNRTI – Non-nucleoside reverse transcriptase inhibitor
    • +
    • + NRTI – Nucleoside/nucleotide reverse transcriptase inhibitor +
    • +
    • PI – Protease inhibitor
    • +
    • P-gp – P-glycoprotein (drug efflux transporter)
    • +
    • RFB (or RIFB) – Rifabutin
    • +
    • RPT – Rifapentine
    • +
    • TAF – Tenofovir alafenamide
    • +
    • TDF – Tenofovir disoproxil fumarate
    • +
    • + TB-IRIS – TB-associated immune reconstitution inflammatory + syndrome +
    • +
    • + UGT (UDP-glucuronosyltransferase): A liver enzyme family that + metabolizes many drugs. Rifamycins induce UGT1A1, lowering levels + of drugs like dolutegravir and bictegravir. +
    • +
    + +

    Source:

    + +
    +
    + +

    Table 16. Guidelines for Treatment of Extrapulmonary Tuberculosis

    +
    + +
    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerationsPursue microbiologic proof of diagnosis prior to starting Rx
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    CorticosteroidsNot recommended
    Additional management considerationsExtend to 12 months if hardware is present
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    CorticosteroidsNot recommended for TB rx but may be indicated for cord compression
    Additional management considerationsMost spine infection can be cured with medical Rx. Surgery indicated for relief of + cord + compression, progressive disease despite medical therapy, instability of the spine. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Length of therapy9 to 12 months
    CorticosteroidsStrongly recommended
    Steroid dosingA and C ≥ 25kg: 12 mg/day of dexamethasone x 3 weeks followed by 3-week taper +

    C < 25kg: 8 mg/day of dexamethasone for 3 weeks followed by 3-week taper

    +
    Additional management considerationsMost spine infection can be cured with medical Rx. Surgery indicated for relief of + cord + compression, progressive disease despite medical therapy, instability of the spine. +
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy9-12 months
    CorticosteroidsStrongly recommended
    Additional management considerationsNegative CSF culture or PCR test does NOT exclude this diagnosis +

    Follow CSF profile for response to therapy

    +
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerationsEmpyema may require decortication
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNO LONGER routinely RECOMMENDED
    Additional management considerationsConsider steroids for patients at highest risk of later constriction: + large pericardial effusions high levels of inflammatory cells or markers in + pericardial fluid those + with early signs of constriction
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerationsObtain cultures from blood, urine and sputum in addition to clinically apparent + sites of disease.
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    +
    + +
    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    +
    + +

    + 2 mg/kg prednisone daily over three weeks, followed by taper Maximum dose 60 mg
    OR
    + Dexamethasone 0.3-0.6 mg/kg daily over three weeks, followed by taper Round to nearest tablet size + (2, 4, 6 mg) Maximum dose 12 mg +

    +
    - + + + + diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__figure1.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__figure1.html deleted file mode 100644 index cd350aa..0000000 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__figure1.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -

    Figure 1. Factors to be considered in deciding to initiate treatment empirically for active tuberculosis (TB) (prior - to microbiologic confirmation)

    - -Figure 1 - -

    Abbreviations: AFB, acid-fast bacilli; HIV, human immunodeficiency virus; IGRA, interferon-γ release assay; Mtb, - Mycobacterium tuberculosis; TNF, tumor necrosis factor; TST, tuberculin skin test.

    -

    Clin Infect Dis, Volume 63, Issue 7, 1 October 2016, Pages 853–867, https://doi.org/10.1093/cid/ciw566 -

    - -

    Unless provided in the caption above, the following copyright applies to the content of this slide: © The Author - 2016. Published by Oxford University Press for the Infectious Diseases Society of America. All rights reserved. For - permissions, email journals.permissions@oup.com.

    - - - - diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__g__antiretroviral_therapy_(art)_and_treatment_of_persons.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__g__antiretroviral_therapy_(art)_and_treatment_of_persons.html deleted file mode 100644 index a09cfad..0000000 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__g__antiretroviral_therapy_(art)_and_treatment_of_persons.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - Antiretroviral Therapy (ART) and Treatment of HIV Seropositive Patients with Active Tuberculosis - - - - - - - - -
    - -

    Treatment of persons living with HIV with active TB disease should be carried out in consultation with a - physician - who has experience in the use of rifamycin drugs and antiretroviral agents. Recommendations on the treatment of - TB - in combination with antiretroviral therapy continue to evolve, and it is important to check for updated - guidelines: - https://aidsinfo.nih.gov/guidelines

    - -

    Antiretroviral therapy (ART) improves outcomes for persons living with HIV and decreases HIV-related mortality. - Patients in the United States with tuberculosis disease who are HIV co-infected commonly have advanced HIV/AIDS - with - low CD4 counts and high plasma HIV RNA levels; all TB patients with HIV co-infection should receive treatment - for - HIV with ART.

    - -

    Timing of ART

    - -

    Multiple studies have demonstrated the benefits of ART initiation among people living with HIV during TB - treatment, - including a reduction in mortality. However, the use of ART among persons living with HIV with active TB disease - is - complicated by overlapping toxicity profiles of some antituberculosis and antiretroviral drugs; complex - drug-drug - interactions; and the occurrence of ‘paradoxical” or immune reconstitution inflammatory syndrome (IRIS). There - are - certain situations where ART therapy should be delayed. A study of people living with HIV with TB meningitis - found - that early ART was associated with an increase in severe adverse events and no mortality benefit. Thus, timing - of - ART initiation in HIV-TB patients should take into account both the degree of immune suppression and site of - disease - (see Table 16). Patients who are already on ART at the time of TB diagnosis, generally should be continued on - the - ART treatment (though ART regimen may need to be adjusted).

    - -

    Choice of ART

    - -

    Because of the potential for significant drug interactions and overlapping toxicities, the choice of ART among - persons living with HIV who have active TB disease should be made only after direct communication between HIV - and - tuberculosis care providers. Any change in either the TB medications or the ART regimen should be immediately - shared - between the 2 providers.

    - -

    There are clinically important drug-drug interactions between the rifamycins (e.g., rifampin, rifabutin) and some - of - the antiretroviral drugs, especially integrase and protease inhibitors. The rifamycins are inducers of the - cytochrome P450-3A (CYP3A) system in the liver and thereby decrease serum concentrations of drugs metabolized by - this system including integrase and protease inhibitors. Rifampin is a potent inducer of the CYP3A, while - rifabutin - is a less potent inducer. Rifampin cannot be given with most protease inhibitors because it results in low serum - levels of these drugs. Rifabutin has less of an effect and therefore can be used with certain protease - inhibitors as - described below. Rifampin and rifabutin can be given with certain integrase inhibitors.

    - -

    The protease inhibitors also affect rifamycin metabolism and because the rifamycin metabolism is retarded by - these - drugs, the dose of rifabutin needs to be reduced in order to avoid rifabutin related toxicity.

    - -

    Despite these drug-drug interactions, a rifamycin (rifampin or rifabutin) should ALWAYS be included in the - treatment - regiment for drug susceptible TB among persons living with HIV.

    - -

    Rifampin can be given with the following antiretrovirals: -

      -
    • MOST Nucleoside/nucleotide reverse transcriptase inhibitors (NRTIs) (e.g.,zidovudine, lamivudine, - emtricitabine, - tenofovir disoproxil fumarate (TDF), abacavir). Tenofovir alafenamide (TAF) is not currently recommended for - use - in combination with rifamycins. -
    • -
    • SELECTED Non-nucleoside reverse transcriptase inhibitors (NNRTIs): efavirenz only (all others are - contraindicated for coadministration with rifampin). -
    • -
    • Selected Integrase inhibitors: raltegravir and dolutegravir. The dose of raltegravir must be increased to - 800 mg - bis in die (twice daily) (BID) and dose of dolutegravir must be increased to 50 mg BID for patients on - rifampin. - Neither drug requires a dosing change when used with rifabutin. -
    • -
    -

    - -

    Rifampin should NOT be used with the following: -

      -
    • Tenofoviral afenamide(TAF)
    • -
    • Protease inhibitors
    • -
    • Nevirapine, etravirine, rilpivarine (NNRTIs)
    • -
    • Bictegravir, elvitegravir
    • -
    - A summary of preferred treatment options for patients with tu- berculosis disease who are HIV infected is shown in - Table 18 and Table 19. For additional information refer to updated HHS guidelines, visit: https://aidsinfo.nih.gov/guidelines -

    - -

    Table 16. When to start HIV therapy

    - - - - - - - - - - - - - - - - - - - - - - - -
    HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment
    CD4 count and/or clinical status at time of TB diagnosisART Initiation
    < 50 cells/mm3**within 2 weeks of starting TB therapy.
    > 50 cells/mm3**by 8 to 12 weeks of starting TB therapy
    Pregnant, any CD4 countAs early as feasible
    - -

    ** EXCEPTION: tuberculous meningitis. To avoid life-threatening CNS immune reconstitution inflammatory syndrome - (IRIS), persons living with HIV and tuberculous meningitis should not be started on ART until AFTER 8 weeks of - TB - therapy

    - -

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines for - Use - of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant Women with HIV - Infection and Interventions to Reduce Perinatal Transmission in the United States, last reviewed and updated - April - 15, 2019 (https://aidsinfo.nih.gov/guidelines).

    - -

    Table 17. What to start: Choice of TB therapy and Antiretroviral Therapy (ART) when treating co-infected - patients

    - - - - - - - - - - - - - - - - - - - - - - - -
    Principle: Despite drug interactions, a rifamycin (rifampin or rifabutin) should be included in TB - regimens for patients receiving ART, with dosage adjustment if necessary (see Table SMR11 for dosage - adjustments). -
    Option 1: Rifabutin-based - ART regimen: Integrase inhibitor and 2 NRTIs - Preferred ART choices: RAL or DTG + TDF/FTC - Alternative ART choices: DTG + ABC/3TC - Contraindicated medications: TAF, other integrase inhibitors (Bictegravir, Elvitegravir) - NOTE: Dolutegravir has higher barrier to resistance compared to raltegravir. Dolutegravir is - preferred when there is high risk poor adherence. -
    Option 2: Rifampin-based ART regimen: Efavirenz and 2 NRTIs Preferred ART choices: Efavirenz (NNRTI) + (TDF/FTC) Alternative ART choices: Efavirenz + ABC/3TC Contraindicated medications: TAF, other NNRTIs: Nevaripine, Doravirine, Etravirine, or Rilpivirine NOTE: Efavirenz is not a preferred regimen for patients initiating ART. Integrase inhibitors DTG and RAL are preferred ART regimens for patients initiating ART but require BID dosing if used with rifampin. Efavirenz has low barrier to resistance making this regimen less suitable when there is high risk for poor adherence. Efavirenz is associated with neuropsychiatric side-effects. Screening for depression and suicidality is recommended prior to and during efavirenz-based regimens. - Efavirenz + ABC/3TC is associated with higher rates of virologic failure when baseline HIV viral load is >100.000 copies/ml. -
    Option 3: Rifabutin-based (dose adjusted) - ART regimen: boosted PI and 2 NRTIs - Preferred ART choices: ATV/r or ATV/c + TDF/FTC - DRV/r or DRV/c + TDF/FTC Alternative ART choices: ABC/3TC in place of TDF/FTC Contraindicated medications: TAF NOTE: PI’s have high barrier to resistance. However, given rifabutin is given at half-dose when used - with PI’s adherence to ART should be closely monitored. Poor adherence to PI’s while on rifabutin increases risk for rifampin resistance. -
    Option 4: Rifampin-based - ART regimen: dose adjusted integrase inhibitor + 2 NRTIs - Preferred ART choices: RAL (dose adjusted) or DTG (dose adjusted)+ TDF/FTC Alternative ART choices: - DTG (dose adjusted) + ABC/3TC - Contraindicated medications: TAF, other integrase inhibitors (Bictegravir, Elvitegravir) - NOTE: Dolutegravir has higher barrier to resistance compared to raltegravir. Dolutegravir is - preferred when there is high risk poor adherence. -
    Choice for Pregnant women with active TB and HIV infection: - TB regimen: Rifabutin –based (dose adjusted) - ART regimen: boosted PI (ARV/r or DRV/r) 2 + 2 NRTIs (TDF/FTC or ABC/3TC) - NOTE: Preliminary data suggest that there is an increased risk of neural tube defects in infants - born to women who were receiving DTG at the time of conception. DTG is contraindicated for pregnant - women during first trimester and for women who are planning to become pregnant or are not using - effective contraception. DTG is the preferred integrase inhibitor after first trimester 1. -
    - -
      -
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • -
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • -
    • PIs: protease inhibitors
    • -
    • /r: boosted with ritonavir
    • -
    • /c: boosted with cobicistat
    • -
    • TDF: Tenofovir disoproxil fumarate
    • -
    • TAF: Tenofovir alafenamide
    • -
    • FTC: Emtricitabine
    • -
    • 3TC: Lamivudine
    • -
    • ABC: Abacavir
    • -
    • ATV/r: Atazanavir/ritonavir
    • -
    • DRV/r: Daraunavir/ritonavir
    • -
    • RAL: Raltegravir
    • -
    • DTG: Dolutegravir
    • -
    - -

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines for - Use - of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant Women with HIV - Infection and Interventions to Reduce Perinatal Transmission in the United States, last reviewed and updated - April - 15, 2019 (http://aidsinfo.nih.gov/guidelines).

    - -

    1-Data on integrase inhibitors and pregnancy outcomes is rapidly evolving and DHHS guidelines are frequently - updated.

    - -

    2-Cobicistat is currently not recommended for pregnant women.

    - -

    Table 18. Dosage Adjustments for ART and Rifamycins when used in Combination

    - - -

    *Preliminary data suggest that there is an increased risk of neural tube defects in infants born to women who - were - receiving DTG at the time of conception. DTG is contraindicated for pregnant women during first trimester and - for - women who are planning to become pregnant or are not using effective contraception. DTG is the preferred - integrase - inhibitor after first trimester.

    - -
      -
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • -
    • PIs: protease inhibitors
    • -
    • ATV/r: Atazanavir/ritonavir
    • -
    • DRV/r: Daraunavir/ritonavir
    • -
    • LPV/r: Lopinavir/ritonavir
    • -
    • RAL: Raltegravir
    • -
    • DTG: Dolutegravir
    • -
    • /c : boosted with cobicistat
    • -
    - -

    Table 18 is based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on - Guidelines - for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant Women - with - HIV Infection and Interventions to Reduce Perinatal Transmission in the United States, last reviewed and updated - April 15, 2019 - (aidsinfo.nih.gov/guidelines)

    - -

    1-Data on integrase inhibitors and pregnancy outcomes is rapidly evolving and DHHS - guidelines are frequently updated.

    - -

    2-Cobicistat is currently not recommended for pregnant women.

    - -
    - - - - diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__h__immune_reconstitution_inflammatory_syndrome.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__h__immune_reconstitution_inflammatory_syndrome.html index 4dafdf8..7019e7c 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__h__immune_reconstitution_inflammatory_syndrome.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__h__immune_reconstitution_inflammatory_syndrome.html @@ -15,33 +15,47 @@
    - -

    The temporary exacerbation of TB symptoms and lesions after initiation of antituberculosis therapy—known as a +

    +
    +
    +
    + +
    +

    V. Treatment of Current (Active) Disease Therapy

    +
    +

    Last Updated April 2026

    +
    +
    +
    +

    The temporary exacerbation of TB symptoms and lesions after initiation of antituberculosis therapy—known as a paradoxical reaction or immune reconstitution inflammatory syndrome (IRIS) —has been described as a rare occurrence - in HIV-negative patients after the initiation of antituberculosis therapy. These “paradoxical reactions” are - thought - to be due to immune reconstitution and can occur among persons living with HIV who are started on antiretroviral - therapy early in the course of antituberculosis therapy. After initial clinical improvement, paradoxical - worsening - of disease (or IRIS) developed in up to 36% of HIV infected TB patients on ART compared with 7% of HIV - coinfected - patients treated for TB but who did not receive ART [Narita et al.].

    + in HIV-negative persons after the initiation of antituberculosis therapy. +

    +

    + These “paradoxical reactions” are thought to be due to immune reconstitution and can occur among persons living with + HIV who are started on antiretroviral therapy early in the course of antituberculosis therapy. Features of IRIS include + fever, recurrent symptoms, lymphadentitis, and worsening pulmonary infiltrates on chest radiographs. +

    +

    + After initial clinical improvement, paradoxical worsening of disease (or IRIS) developed in up to 18 of patients (range 4 to 54%) + in a pooled estimate derived from 40 observational studies (Ultman OA et al, Ann Intern Med 2015; 10:1077-99). TB-associated IRIS is + associated with significant morbidity and even mortality; up to 25% of patients with this syndrome are hospitalized.

    -

    Paradoxical or immune reconstitution manifestations depend on anatomical site of disease (e.g., headache in +

    Paradoxical or immune reconstitution manifestations depend on anatomical site of disease (e.g., headache in patient with meningeal TB). Additionally, IRIS can occur in an anatomical site of known disease and/or anatomical sites not previously known to be involved (e.g., lymph node suppuration in patient without previous adenopathy), a - process - known as “unmasking”. Of note, patients with HIV can have > 1 opportunistic infection and unmasking reactions + process known as “unmasking”.

    +

    Of note, patients with HIV can have > 1 opportunistic infection and unmasking reactions can occur that are from previously unsuspected infections (e.g., cryptococcal meningitis). The paradoxical reactions are associated with increased reactivity on tuberculin skin testing and a significant reduction in HIV viral load.

    -

    IRIS may be self-limited and can last 10 to 40 days. Mild to moderate reactions can be managed by reassurance and +

    IRIS may be self-limited and can last 10 to 40 days. Mild to moderate reactions can be managed by reassurance and nonsteroidal anti-inflammatory drugs. Severe reactions included those characterized by marked increase in adenopathy causing an anatomic problem (e.g., compromised breathing, swallowing or movement of the neck, or expanding @@ -51,10 +65,17 @@ ART) starting at a dose of prednisone at 1.25—1.5 mg/kg per day for 2 weeks and then tapering the therapy over a period of 6 to 12 weeks (or longer).

    -

    For persons living with HIV with active TB disease and at high risk for developing TB-associated immune - reconstitution inflammatory syndrome (TB-IRIS), pre-emptive prednisone is now rec- ommended as adjunctive - therapy - with the initiation of antiretroviral therapy. “High-risk” for IRIS is defined as CD4 count ≤ 100 cells/mm3 and +

    + A randomized controlled trial of prednisone (1.5 mg/kg per day for two weeks and then 0.75 mg/kg per day for 2 weeks) vs placebo for persons with HIV and active TB disease who developed moderate to severe IRIS (persons with life threatening IRIS were excluded) + +demonstrated that prednisone reduced the need (or duration) of hospitalization and facilitated improvements in symptoms, performance and quality of life (Meintjes G et al. AIDS 2010; 24:2381-90). +

    + +

    For persons living with HIV with active TB disease and at high risk for developing TB-associated immune reconstitution inflammatory syndrome (TB-IRIS), pre-emptive prednisone is now recommended as adjunctive therapy with the initiation of antiretroviral therapy + (Meintjes G et al. New Engl J Med 2018; 379:1915-25). + +

    +

    “High-risk” for IRIS is defined as a person living with HIV and CD4 count ≤ 100 cells/mm3 and starting ART within 30 days of initiating treatment for active TB. The prednisone regimen consists of 40 mg daily for 2 weeks followed by 20 mg daily for 2 weeks. Preemptive prednisone therapy for IRIS prevention should NOT be diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__i__treatment_of_extrapulmonary_tb.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__i__treatment_of_extrapulmonary_tb.html index 78bbdea..906855f 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__i__treatment_of_extrapulmonary_tb.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__i__treatment_of_extrapulmonary_tb.html @@ -15,32 +15,39 @@

    +
    +
    +
    +
    + +
    +

    V. Treatment of Current (Active) Disease Therapy

    +
    +

    Last Updated April 2026

    +
    +
    +
    -

    The basic principles that underlie the treatment of pulmonary TB also apply to extrapulmonary forms of the - disease. A - 6-month course of therapy is recommended for treating tuberculosis involving any site with the exception of the - meninges for which a 9 – to 12-month regimen is recommended. Prolongation of therapy also should be considered - for - patients with tuberculosis in any site that is slow to respond. The addition of corticosteroids is recommended - for - patients with meningitis as it decreases mortality as discussed below.

    +

    + The basic principles that underlie the treatment of pulmonary TB also apply to extrapulmonary forms of the disease. A 6-month course of therapy is recommended for treating tuberculosis involving any site with the exception of the meninges for which a 9 – to 12-month regimen is recommended. Prolongation of therapy also should be considered for patients with tuberculosis in any site that is slow to respond. The addition of corticosteroids is recommended for patients with TB meningitis as it is associated with a decrease in mortality as discussed below. +

    -

    Lymphatic and hematogenous TB are especially common among persons with HIV infection. Central nervous system +

    Lymphatic and hematogenous TB are especially common among persons with HIV infection. Central nervous system involvement has been reported and may be difficult to diagnose when it occurs in conjunction with other opportunistic CNS infections.

    -

    To establish the diagnosis of extrapulmonary TB, a variety of specimens including pleural fluid, peritoneal +

    To establish the diagnosis of extrapulmonary TB, a variety of specimens including pleural fluid, peritoneal fluid, pleural and peritoneal biopsy specimens, lymph node tissue, bone marrow, bone, blood, urine, brain, or cerebrospinal fluid may need to be obtained for mycobacterial culture.

    -

    Specimens must be examined microscopically and sent for AFB culture, but the inability to demonstrate AFB on +

    Specimens must be examined microscopically and sent for AFB culture, but the inability to demonstrate AFB on smear and the absence of granuloma formation does not exclude the diagnosis of TB. Surgery may be necessary to obtain specimens for diagnosis and to treat such processes as constrictive pericarditis or spinal cord compression from Pott’s disease. Evidence-based guidelines for the treatment of extrapulmonary TB and adjunctive use of - corticosteroids are shown in Table 20.

    + corticosteroids are shown in Table 17.

    diff --git a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__j__adjunctive_use_of_corticosteroid_therapy.html b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__j__adjunctive_use_of_corticosteroid_therapy.html index d702dd2..739b603 100644 --- a/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__j__adjunctive_use_of_corticosteroid_therapy.html +++ b/app/src/main/assets/pages/5_treatment_of_current_(active)_disease_therapy__j__adjunctive_use_of_corticosteroid_therapy.html @@ -1,128 +1,352 @@ - + - - - - + + + + Adjunctive Use of Corticosteroid Therapy (Table 19) - - - - - + + + + + - + +
    +
    +
    +
    +
    + +
    +

    + V. Treatment of Current (Active) Disease Therapy +

    +
    +

    Last Updated April 2026

    +
    +
    +
    +

    + Adjunct corticosteroid therapy is indicated in the treatment of + tuberculous meningitis +

    +
    +
      +
    • + As its use along with appropriate antituberculosis drugs is + associated with a lower mortality. +
    • +
    • + For patients with tuberculous meningitis, dexamethasone or + prednisolone is recommended as adjunct therapy for a total of 6 to 8 + weeks. An initial dose of 8 mg per day of dexamethasone for children + < 25 kg and 12 mg per day for children > 25 kg and adults can be + used. The initial dose is given for 3 weeks and then the dose should + be tapered during the following 3 weeks. +
    • +
    • + Adjunctive corticosteroids in treatment of pericardial tuberculosis + did not reduce mortality, tamponade or constrictive physiology in a + large randomized clinical trial and are thus no longer routinely + recommended. +
    • +
    • + Some experts would use corticosteroids in selected patients with TB + pericarditis: those with large effusions and/or high levels of + inflammation in pericardial fluid. +
    • +
    +
    -
    -

    Adjunct corticosteroid therapy is indicated in the treatment of - tuberculous meningitis as its use along with appropriate antituberculosis drugs is associated with a lower - mortality. For patients with tuberculous meningitis, dexamethasone or prednisolone is recommended for a total of 6 - to 8 weeks. An initial dose of 8 mg per day of dexamethasone for children < 25 kg and 12 mg per day for children > - 25 kg and adults can be used. The initial dose is given for 3 weeks and then the dose should be tapered during the - following 3 weeks. Adjunctive corticosteroids in treatment of pericardial tuberculosis did not reduce mortality, - tamponade or constrictive physiology in a large randomized clinical trial and are thus no longer routinely - recommended. Some experts would use corticosteroids in selected patients with TB pericarditis: those with large - effusions and/or high levels of inflammation in pericardial fluid.

    +

    + Table 16. Guidelines for Treatment of Extrapulmonary Tuberculosis: + Length of Therapy and Adjunctive Use of Corticosteroids +

    +
    +
    +
    + + + + + + + + + + +
    +
    -

    Table 19. Guidelines for Treatment of Extrapulmonary* Tuberculosis: Length of therapy and Adjunctive Use of - Corticosteroids

    + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations + Pursue microbiologic proof of diagnosis prior to starting Rx +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SiteLength of therapy with standard regimen and normal host (months)CorticosteroidsSteroid dosing A (adults) C (children)Additional management considerations
    Lymph node6Not recommendedPursue microbiologic proof of diagnosis prior to starting Rx
    Bone (non-vertebral) and joint6 to 9Not recommendedExtend to 12 months if hardware is present
    Spine without meningitis6 to 9Not recommended for TB rx but may be indicated for cord compressionMost spine infection can be cured with medical Rx. Surgery indicated for relief of cord - compression, progressive disease despite medical therapy, instability of the spine. -
    Spine with meningitis9 to 12Strongly recommendedA and C >= 25kg: 12 mg/day of dexamethasone x 3 weeks followed by 3- week taper

    C < - 25kg:8 mg /day of dexamethasone for 3 weeks followed by 3- week taper

    CNS tuberculosis including meningitis6 to 9Strongly recommendedNegative CSF culture or PCR test does NOT exclude this diagnosis

    Follow CSF profile for response - to therapy

    Pleural disease6Not recommendedEmpyema may require decortication
    Pericarditis6NO LONGER routinely RECOMMENDEDConsider steroids for patients at highest risk of later constriction: - large pericardial effusions high levels of inflammatory cells or markers in pericardial fluid those - with early signs of constriction -
    Disseminated disease6Not recommendedObtain cultures from blood, urine and sputum in addition to clinically apparent sites of disease. -
    Genitourinary6Not recommended
    Peritoneal6Not recommended
    + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    CorticosteroidsNot recommended
    Additional management considerationsExtend to 12 months if hardware is present
    -

    *ALWAYS EVALUATE for concomitant pulmonary involvement with respiratory samples for smear and culture (regardless of - chest imaging findings).

    + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    Corticosteroids + Not recommended for TB rx but may be indicated for cord + compression +
    Additional management considerations + Most spine infection can be cured with medical Rx. Surgery + indicated for relief of cord compression, progressive disease + despite medical therapy, instability of the spine. +
    -

    Based on CID 2016:63 (1 October) • Nahid et al

    -
    - - - + + + + + + + + + + + + + + + + + + + + + + + +
    Length of therapy9 to 12 months
    CorticosteroidsStrongly recommended
    Steroid Dosing for Adults + Adults ≥ 25kg
    + 12 mg/day of
    + dexamethasone x 3 weeks
    + followed by 3-week taper +
    Steroid Dosing for Children + Children ≥ 25kg
    + 12 mg/day of
    + dexamethasone x 3 weeks
    + followed by 3-week taper

    + Children < 25kg
    + 8 mg/day of
    + dexamethasone for 3 weeks
    + followed by 3-week taper +
    Additional management considerations + Most spine infection can be cured with medical Rx. Surgery + indicated for relief of cord compression, progressive disease + despite medical therapy, instability of the spine. +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Length of therapy9-12 months
    CorticosteroidsStrongly recommended
    Steroid Dosing for Adults + Adults ≥ 25kg
    12 mg/day of dexamethasone x 3 weeks followed by 3-week taper

    +
    Steroid Dosing for Children + Children ≥ 25kg
    12 mg/day of dexamethasone x 3 weeks followed by 3-week taper

    + Children < 25kg
    8 mg/day of dexamethasone for 3 weeks followed by 3-week taper +
    Additional management considerations + Negative CSF culture or PCR test does NOT exclude this diagnosis +

    Follow CSF profile for response to therapy

    +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerationsEmpyema may require decortication
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNO LONGER routinely RECOMMENDED
    Additional management considerations + Consider steroids for patients at highest risk of later + constriction: large pericardial effusions high levels of + inflammatory cells or markers in pericardial fluid those with + early signs of constriction +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations + Obtain cultures from blood, urine and sputum in addition to + clinically apparent sites of disease. +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    + +

    + ALWAYS EVALUATE for concomitant pulmonary involvement with respiratory + samples for smear and culture (regardless of chest imaging findings). +

    +

    Based on CID 2016:63 (1 October) • Nahid et al

    +
    +
    + + + + diff --git a/app/src/main/assets/pages/6_pregnancy_and_tb.html b/app/src/main/assets/pages/6_pregnancy_and_tb.html index ba6fe3c..8a92b64 100644 --- a/app/src/main/assets/pages/6_pregnancy_and_tb.html +++ b/app/src/main/assets/pages/6_pregnancy_and_tb.html @@ -16,11 +16,23 @@
    -

    List of Subchapters

    +
    +
    +
    +
    + +
    +

    VI. Pregnancy and TB

    +
    +

    Last Updated April 2026

    +
    +
    +
    +

    List of Subchapters

    -
      +
      • Treatment for LTBI and Risk Factors
      • -
      • Treatment of Active TB in Pregnancy
      • +
      • Treatment of Active TB Disease in Pregnancy
      • diff --git a/app/src/main/assets/pages/6_pregnancy_and_tb__a__treatment_for_ltbi_and_risk_factors.html b/app/src/main/assets/pages/6_pregnancy_and_tb__a__treatment_for_ltbi_and_risk_factors.html index 9b752d9..feaaf46 100644 --- a/app/src/main/assets/pages/6_pregnancy_and_tb__a__treatment_for_ltbi_and_risk_factors.html +++ b/app/src/main/assets/pages/6_pregnancy_and_tb__a__treatment_for_ltbi_and_risk_factors.html @@ -15,69 +15,128 @@
        - +
        +
        +
        +
        + +
        +

        VI. Pregnancy and TB

        +
        +

        Last Updated April 2026

        +
        +
        +
        +

        Screening for LTBI

        -

        Testing asymptomatic patients for latent TB infection (LTBI) during pregnancy is indicated only for pregnant patients with - significant risk factors for progression to active TB disease during pregnancy. High risk individuals are defined in - Targeted Testing and Diagnostic Tests for LTBI, including Table 3. This includes:

        -
          -
        • Those with recent contact with a patient with untreated active pulmonary TB)
        • -
        • Persons living with HIV who are not on antiretroviral therapy (ART) and those with CD4 count ≤200 cells/mm3
        • -
        • Patients with other significant immunocompromising conditions or on immunosuppressive medications
        • -
        -

        Diagnostic evaluation after positive diagnostic test for LTBI. Pregnant patients with a new positive diagnostic test +

        Testing asymptomatic patients for latent TB infection (LTBI) during pregnancy is indicated only for pregnant patients with + significant risk factors for progression to active TB disease during pregnancy. +

        + High risk individuals are defined in + Targeted Testing and Diagnostic Tests for LTBI, including Table 3. This includes: +
        +
          +
        • Those with recent contact with a patient with untreated active pulmonary TB)
        • +
        • Persons living with HIV who are not on antiretroviral therapy (ART) and those with CD4 count ≤200 cells/mm3
        • +
        • Patients with other significant immunocompromising conditions or on immunosuppressive medications
        • +
        +
        + Diagnostic evaluation after positive diagnostic test for LTBI +
        +

        Pregnant patients with a new positive diagnostic test for LTBI (i.e., tuberculin skin test [TST] or Interferon-γ release assay [IGRA]) must undergo clinical evaluation to rule out active TB. This includes evaluation for TB-related symptoms (e.g., fever, cough, weight loss), physical exam, and a chest - radiograph (a lead apron should cover the entire abdomen during the chest radiograph) regardless of gestational age. Some + radiograph (a lead apron should cover the entire abdomen during the chest radiograph) regardless of gestational age.

        +

        Some defer the chest radiograph until after the first trimester if the patient has no symptoms. Patients in whom there is a suspicion - for active TB disease should be further evaluated as discussed in Section IV. Laboratory Diagnosis of Active Tuberculosis. - Pregnant patients with active TB disease should be treated without delay as outlined below. Patients with a positive diagnostic - test for LTBI (TST or IGRA) with no evidence of active TB may be presumed to have latent TB and should be managed as discussed below.

        -

        Clinical manifestations. Persons (including those who are pregnant) with LTBI are asymptomatic and not contagious. There is no risk for + for active TB disease should be further evaluated as discussed in Section IV. Laboratory Diagnosis of Active Tuberculosis.

        +

        + Pregnant patients with active TB disease should be treated without delay as outlined below.

        +

        + Patients with a positive diagnostic + test for LTBI (TST or IGRA) with no evidence of active TB may be presumed to have latent TB and should be managed as discussed below.

        +
        + Clinical manifestations +
        +

        Persons (including those who are pregnant) with LTBI are asymptomatic and not contagious. There is no risk for vertical transmission of LTBI from mother to fetus.

        +
        -

        Treatment of LTBI in Pregnancy.

        -

        Timing of treatment.

        +

        Treatment of LTBI in Pregnancy.

        + Timing of treatment. +
        +
          +
        • The potential of adverse effects associated with LTBI treatment during pregnancy must be weighed against the potential risks of progression to active TB during pregnancy.
        • +
        • Pregnant women diagnosed with LTBI prior to pregnancy and started on treatment for LTBI for an appropriate indication should continue LTBI treatment during pregnancy; + the regimen should be modified if necessary (e.g., 3HP is not recommended during pregnancy for the treatment of LTBI because of lack of data on its use in this setting).
        • +
        • For many persons who are pregnant, not severely immunocompromised, and have LTBI, delay of treatment of LTBI until three months after delivery is recommended as discussed below.
        • +
        +
        + For patients with significant immunocompromise (excluding HIV infection) +
        +
        • the decision to treat during pregnancy or defer until after delivery should be based on individual clinical + circumstances including the degree of immunocompromise.
        • +
        • For those with significant immunocompromised status (e.g., organ transplantation, receiving a biologic agent, immunocompromising + drugs such as prednisone >15 mg/d [or equivalent] for more than 1 month) treatment of LTBI during pregnancy is recommended.
        +
        + +

        Persons living with HIV who are pregnant.

        + + The management of LTBI among pregnant women living with HIV depends on whether there was recent exposure to a patient with untreated active TB, + as well as the HIV infection management status. +
        +
          +
        • Recent Exposure/LTBI. Treatment is recommended for all persons living with HIV (regardless of CD4 count) diagnosed with LTBI who are pregnant with recent exposure to a patient with + untreated active pulmonary (or laryngeal) TB disease given the increased risk of progression to active TB in such cases.
        • +
        • Persons living with HIV not on antiretroviral therapy. Treatment of LTBI is recommend for those who are pregnant and living with HIV if they are not on antiretroviral therapy. + Antiretroviral therapy should be started in this group.
        • +
        • For pregnant women living with HIV on antiretroviral therapy with CD4 count ≤350 cells/mm3, LTBI treatment during pregnancy is recommended given increased risk of progression + to active TB. The CD4 cutoff for LTBI therapy is somewhat controversial; some experts favor a lower threshold (e.g., CD4 count ≤200 cells/mm3).
        • +
        • For those pregnant women living with HIV with a CD4 count >350 cells/mm3, LTBI therapy should be deferred until three months after delivery.
        • +
        +
        + The recommendation to defer LTBI therapy until three months after delivery is based on the results of a clinical trial (N Engl J Med 2019; 381:1333) demonstrating more frequent adverse + pregnancy outcomes among patients in high TB incidence settings treated with isoniazid during pregnancy than among patients treated three months after delivery. +
          -
        • The potential of adverse effects associated with LTBI treatment during pregnancy must be weighed against the potential risks of progression to active TB during pregnancy.
        • -
        • Pregnant women diagnosed with LTBI prior to pregnancy and started on treatment for LTBI for an appropriate indication should continue LTBI treatment during pregnancy; - the regimen should be modified if necessary (e.g., 3HP is not recommended during pregnancy for the treatment of LTBI because of lack of data on its use in this setting).
        • -
        • For many persons who are pregnant, not severely immunocompromised, and have LTBI, delay of treatment of LTBI until three months after delivery is recommended as discussed below.
        • +
        • The study included + 956 pregnant women living with HIV (CD4 count 351 to 670 cells/mm3 on antiretroviral therapy) randomly assigned to initiate LTBI treatment with isoniazid immediately or defer + treatment until 12 weeks after delivery.
        • + +
        • Study subjects were excluded if in the first trimester of pregnancy or if they had recent TB exposure; mothers and infants were followed + for 48 weeks after delivery.
        • +
        • The incidence of TB was comparable between the groups (0.60 versus 0.59 per 100 person-years).
        • + +
        • However, the composite adverse pregnancy outcome + (stillbirth or spontaneous abortion, low birth weight, preterm delivery, or congenital anomalies) was more commonly seen among those in the immediate LTBI treatment group compared to + the deferred group (23.6% versus 17.0%).
        • +
        • The rate of hepatotoxicity was similar between the groups (6.2 versus 7.2 percent).
        -

        For patients with significant immunocompromise (excluding HIV infection), the decision to treat during pregnancy or defer until after delivery should be based on individual clinical - circumstances including the degree of immunocompromise. For those with significant immunocompromised status (e.g., organ transplantation, receiving a biologic agent, immunocompromising - drugs such as prednisone >15 mg/d [or equivalent] for more than 1 month) treatment of LTBI during pregnancy is recommended.

        -

        Persons living with HIV who are pregnant. The management of LTBI among pregnant women living with HIV depends on whether there was recent exposure to a patient with untreated active TB, - as well as the HIV infection management status.

        +
        +

        The US Department of Health and Human Services (DHHS) guidelines + recommend delaying LTBI treatment among pregnant women living with HIV until three months after delivery in the absence of a recent TB exposure, but do not specify a CD4 threshold.

        + Recent TB infection +
          -
        • Recent Exposure/LTBI. Treatment is recommended for all persons living with HIV (regardless of CD4 count) diagnosed with LTBI who are pregnant with recent exposure to a patient with - untreated active respiratory TB given the increased risk of progression to active TB in such cases.
        • -
        • Persons living with HIV not on antiretroviral therapy. Treatment of LTBI is recommend for those who are pregnant and living with HIV if they are not on antiretroviral therapy. - Antiretroviral therapy should be started in this group.
        • -
        • For pregnant persons living with HIV on antiretroviral therapy with CD4 count ≤350 cells/mm3, LTBI treatment during pregnancy is recommended given increased risk of progression - to active TB. The CD4 cutoff for LTBI therapy is somewhat controversial; some experts favor a lower threshold (e.g., CD4 count ≤200 cells/mm3).
        • -
        • For those pregnant persons living with HIV with a CD4 count >350 cells/mm3m, LTBI therapy should be deferred until three months after delivery.
        • -
        -

        The recommendation to defer LTBI therapy until three months after delivery is based on the results of a clinical trial (N Engl J Med 2019; 381:1333) demonstrating more frequent adverse - pregnancy outcomes among patients in high TB incidence settings treated with isoniazid during pregnancy than among patients treated three months after delivery. The study included - 956 pregnant women living with HIV (CD4 count 351 to 670 cells/mm3 on antiretroviral thearpy) randomly assigned to initiate LTBI treatment with isoniazid immediately or defer - treatment until 12 weeks after delivery. Study subjects were excluded if in the first trimester of pregnancy or if they had recent TB exposure; mothers and infants were followed - for 48 weeks after delivery. The incidence of TB was comparable between the groups (0.60 versus 0.59 per 100 person-years). However, the composite adverse pregnancy outcome - (stillbirth or spontaneous abortion, low birth weight, preterm delivery, or congenital anomalies) was more commonly seen among those in the immediate LTBI treatment group compared to - the deferred group (23.6% versus 17.0%). The rate of hepatotoxicity was similar between the groups (6.2 versus 7.2 percent). The US Department of Health and Human Services (DHHS) guidelines - recommend delaying LTBI treatment among pregnant persons living with HIV until three months after delivery in the absence of a recent TB exposure, but do not specify a CD4 threshold.

        -

        Recent TB infection. For any pregnant woman with documented recent LTBI (e.g., exposure to a patient with untreated active pulmonary TB and documented recent infection based on an LTBI - diagnostic test) or recent (within two years) conversion of a diagnostic test for TB infection to positive, LTBI treatment is recommended with one of three regimens mentioned below.

        -

        HIV-uninfected Pregnant Women. For pregnant women without HIV infection who are not severely immunocompromised and have no recent exposure to a person with untreated active respiratory TB, - it is recommended that LTBI treatment be deferred until three months after delivery, to minimize the risk of drug-induced hepatitis (e.g., from isoniazid) and adverse pregnancy outcomes - associated with LTBI treatment during pregnancy. In such cases, close follow-up is required. For all pregnant persons with LTBI who have therapy deferred until three months after delivery, - a follow-up evaluation for active TB disease (including chest radiograph) to confirm that active TB did not develop in the interval since diagnosis of LTBI and the time that treatment for LTBI - begins should be carried out.

        -

        Selecting an LTBI treatment regimen. The same treatment regimens for LTBI that are used in non-pregnant persons can be used in pregnant and postpartum women with the EXCEPTION that 3HP - (isoniazid plus rifapentine given weekly x 12 weeks) should NOT be used in pregnant and postpartum women because of lack of data in these settings. Options for CDC recommended LTBI regimens - in pregnant and postpartum women include rifampin (for four months), isoniazid plus rifampin for 3 months, or isoniazid for 6-9 months. All pregnant persons receiving isoniazid for LTBI - should also receive pyridoxine (vitamin B6) 50 mg po daily.

        +
      • For any pregnant woman with documented recent infection due to M. tuberculosis (e.g., exposure to a patient with untreated active pulmonary TB and documented recent infection based on an LTBI + diagnostic test) or recent (within two years) conversion of a diagnostic test for TB infection to positive, LTBI treatment is recommended with one of three regimens mentioned below.
      +
    + HIV-uninfected Pregnant Women. +
    +
      +
    • For pregnant women without HIV infection who are not severely immunocompromised and have no recent exposure to a person with untreated active pulmonary (or laryngeal) TB, it is recommended that LTBI treatment be deferred until three months after delivery, to minimize the risk of drug-induced hepatitis (e.g., from isoniazid) and adverse pregnancy outcomes associated with LTBI treatment during pregnancy. In such cases, close follow-up is required.
    • +
    • For all pregnant persons with LTBI who have therapy deferred until three months after delivery, a follow-up evaluation for active TB disease (including chest radiograph) to confirm that active TB did not develop in the interval since diagnosis of LTBI and the time that treatment for LTBI begins should be carried out.
    +
    + Selecting an LTBI treatment regimen +
    +
    • + The same treatment regimens for LTBI that are used in non-pregnant persons can be used in pregnant and postpartum women with the EXCEPTION that 3HP (isoniazid plus rifapentine given weekly x 12 weeks) should NOT be used in pregnant and postpartum women because of lack of data in these settings. +
    • +
    • Options for CDC recommended LTBI regimens in pregnant and postpartum women include rifampin (for four months), isoniazid plus rifampin for 3 months, or isoniazid for 6-9 months. All pregnant persons receiving isoniazid for LTBI should also receive pyridoxine (vitamin B6) 50 mg po daily.
    + + + diff --git a/app/src/main/assets/pages/6_pregnancy_and_tb__b__treatment_of_active_tb_in_pregnancy.html b/app/src/main/assets/pages/6_pregnancy_and_tb__b__treatment_of_active_tb_in_pregnancy.html index 7ec512e..efb6084 100644 --- a/app/src/main/assets/pages/6_pregnancy_and_tb__b__treatment_of_active_tb_in_pregnancy.html +++ b/app/src/main/assets/pages/6_pregnancy_and_tb__b__treatment_of_active_tb_in_pregnancy.html @@ -10,150 +10,327 @@ +
    - -

    - TB disease discovered during pregnancy should be treated without delay. Because of the risk - for tuberculosis to the fetus, treatment of TB in pregnant women should be initiated whenever the - probability of maternal disease is moderate to high. Three sputum samples should be submitted for - examination. The outcome of the cultures and susceptibility test results will determine the regimen for - continuation of treatment.

    -
      -
    • Drug Treatment in - Pregnancy +
      +
      +
      +
      + +
      +

      VI. Pregnancy and TB

      +
      +

      Last Updated April 2026

      +
      +
      +
      +

      + TB disease discovered during pregnancy should be treated without delay. Because of + the risk for tuberculosis to the fetus, treatment of TB in pregnant women should be initiated whenever + the probability of maternal disease is moderate to high. A minimum of two sputum samples should be submitted + for examination. The outcome of the AFB cultures and drug susceptibility test results will determine the regimen for continuation of treatment.

      +
        +
      1. Drug Treatment in + Pregnancy
      2. +
        • The initial treatment regimen usually consists of INH, RIF and EMB; consideration should be given to including PZA.
        • Although detailed teratogenicity data are not available, PZA can probably be used safely during pregnancy and is recommended for use by the World Health Organization (WHO) and the International Union Against Tuberculosis and Lung Disease (IUATLD). In some U.S. jurisdictions, PZA has not been routinely recommended. PZA should be - included in the initial regimen for HIV seropostive wom- en and for HIV seronegative women who are thought to be - at high risk for drug resistant TB. If PZA is not includ- ed in the initial treatment regimen, the minimum dura- - tion of therapy is 9 months.
        • + included in the initial regimen for women living with HIV and for HIV seronegative women who are thought to be + at increased risk for drug resistant TB. If PZA is not included in the initial treatment regimen, the minimum duration of therapy for drug-susceptible TB is 9 months.
        • Pyridoxine (Vitamin B6) (25 mg/d) is recommended for all pregnant women taking INH.
        • Avoid: Aminoglycosides (e.g., streptomycin, amikacin) are contraindicated for all pregnant women because of potential adverse effects on the fetus. Fluoroquinolones (e.g., levofloxacin, moxifloxacin) have been associated with arthropathies in young animals; therefore, they should be avoided if possible in pregnant women.
        - -
      3. Breast Feeding +
      4. +
      5. Breast Feeding
      6. +

        The small concentrations of first line TB drugs in breast milk do not have a toxic effect on nursing newborns and breast feeding should not be discouraged. Conversely, drugs in breast milk should not be considered to serve as effective treatment for disease or as treatment of LTBI in a nursing infant.

        - -
    -

    Table 20. Use of Anti-TB Medications in Special Situations:
    Pregnancy, Tuberculous Meningitis +

    + +

    Table 17. Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculous Meningitis and Renal Failure

    -
    +
    + +
    +
    + + + + + + + + + + + +
    + + +
    - + - - - - + + - - - + + + + + +
    DrugSafety in Pregnancy (1)Central Nervous System Penetration (2)Dosage in Renal Insufficiency (3)Safety in Pregnancy i Safe i
    IsoniazidSafe (4)Central Nervous System Penetration i Good (20-100%)
    Dosage in Renal Insufficiency i No change
    +
    + +
    + + - + - + + + + + + + + +
    RifampinSafety in Pregnancy i Safe (isolated reports of malformation)Fair, Inflamed meninges (10- 20%)
    Central Nervous System Penetration iFair, Inflamed meninges (10-20%)
    Dosage in Renal Insufficiency i No change
    +
    + +
    + + + + + + - - + + + + + +
    Safety in Pregnancy i Caution i
    PyrazinamideCaution (1)Central Nervous System Penetration i Good (75-100%)
    Dosage in Renal Insufficiency i Decrease dose/ Increase interval
    +
    + +
    + + - + + + + + + + + +
    EthambutolSafety in Pregnancy i Safe
    Central Nervous System Penetration i Inflamed meninges only (4-64%)
    Dosage in Renal Insufficiency i Decrease dose/ Increase interval
    +
    + +
    + + - + - - - + + + + + + + + +
    Aminoglycosides (Streptomycin, Kanamycin, Amikacin)Safety in Pregnancy i AvoidPoor (5)Decrease dose/ Increase interval (6)
    CapreomycinCentral Nervous System Penetration iPoor i
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + - - + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration i PoorDecrease dose/ Increase interval (6)
    Levofloxacin, Moxifloxacin GatifloxacinDosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + - - + + + + +
    Safety in Pregnancy i Do not use
    Central Nervous System Penetration i Fair (5-10%) Inflamed meninges (50-90%)Decrease dose/ Increase interval (7)
    EthionamideDosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration i Good (100%)
    Dosage in Renal Insufficiency i No change
    +
    + +
    + + - + + + + + + + + +
    CycloserineSafety in Pregnancy i Avoid
    Central Nervous System Penetration i Good (50-100%)
    Dosage in Renal Insufficiency i Decrease dose/ Increase interval
    +
    + +
    + + - + - + + + + + + + + +
    Para-amino-silicylic acidSafety in Pregnancy i SafeInflamed meninges - only (50-100%) -
    Central Nervous System Penetration iInflamed meninges only (50-100%)
    Dosage in Renal Insufficiency i Incomplete data
    +
    + +
    + + - + + + + + + + -
    ClofazimineSafety in Pregnancy i Avoid
    Central Nervous System Penetration i Unknown
    Dosage in Renal Insufficiency i Probably no change
    - -

    Safe: Drug has not been demonstrated to have teratogenic effects.

    -

    Avoid: Limited data on safety or for aminoglycosides associated with hearing impairment and/or - other toxicity.

    -

    Do Not Use: Associated with premature labor, congenital malformations or teratogenicity.

    -

    NOTES: Table 20 Special Situations

    - -

    (1) As - with all medications given during pregnancy, anti-TB drugs should be used with caution. The risk of TB to the - fetus far outweighs the risk of medications. Pregnant patients with active TB should be treated. Data are - limited on the safety of some anti-TB drugs during pregnancy. Table 20 presents a consensus of published data - and recommendations. Although detailed teratogenic data is not available, PZA can probably be used safely for - pregnant patients. Concentrations of anti-TB drugs in breast milk are low; treatment with these medications is - not a contraindication to breastfeeding. (Conversely, medication present in breast milk is not sufficient to - prevent or treat TB in the newborn.) Consult a medical expert when treating a pregnant patient who has TB. For - treatment of LTBI, most authorities recommend beginning INH several months after delivery, unless the woman is - at high risk for progression to active TB (e.g., recent TST or IGRA conversion, HIV-infected).

    -

    (2) Steroid treatment appears to improve outcome in TB meningitis, particularly in patients with altered mental - status.

    -

    (3) If possible, monitor serum drug levels of patients with renal insufficiency. See page 71 for dosage.

    -

    (4) Supplement with pyridoxine (Vitamin B6) during pregnancy.

    -

    (5) Has been used intrathecally; efficacy not documented.

    -

    (6) Avoid aminoglycosides and capreomycin in patients with reversible renal damage, if possible.

    -

    (7) Fluoroquinolones may accumulate in renal failure and are poorly removed by dialysis. Dose adjustment indicated. -

    + +
    + +
      +
    • Safe: Drug has not been demonstrated to have teratogenic effects.
    • +
    • Avoid: Limited data on safety or for aminoglycosides associated with hearing impairment and/or other toxicity.
    • +
    • Do Not Use: Associated with premature labor, congenital malformations or teratogenicity.
    • +
    + + + + diff --git a/app/src/main/assets/pages/7_childhood_tuberculosis.html b/app/src/main/assets/pages/7_childhood_tuberculosis.html index be6b962..9ed7992 100644 --- a/app/src/main/assets/pages/7_childhood_tuberculosis.html +++ b/app/src/main/assets/pages/7_childhood_tuberculosis.html @@ -16,21 +16,32 @@
    -

    The basic +

    +
    +
    +
    + +
    +

    VII. Childhood Tuberculosis

    +
    +

    Last Updated April 2026

    +
    +
    +
    +

    The basic principles for treatment of TB disease and infection in children and adolescents are similar to adults. The objective of treatment is to kill the tuberculous bacilli in the shortest amount of time while preventing the development of resistance. Dosage adjustments of medications may often be required based on weight. When possible, crushed tablets or the mixed contents of capsules are preferred over suspensions that may be difficult to access and may contain fewer desirable additives.

    -

    Either TST +

    Either TST or immunologic-based testing (IGRAs) may be used to aid in LTBI or TB disease diagnosis in immune competent - children age 2 years or older. For children under 2 years of age, TST is preferred; however, if the child has - a negative TST but is at high risk for TB disease or LTBI, then an IGRA may be performed. The involvement of a + children of any age. The involvement of a provider with expertise in management of children with tuberculosis infection or disease is beneficial in guiding diagnostic evaluation and treatment.

    -
      +
      • A. Management Considerations
      • diff --git a/app/src/main/assets/pages/7_childhood_tuberculosis__a__management_considerations.html b/app/src/main/assets/pages/7_childhood_tuberculosis__a__management_considerations.html index 2645a01..292e313 100644 --- a/app/src/main/assets/pages/7_childhood_tuberculosis__a__management_considerations.html +++ b/app/src/main/assets/pages/7_childhood_tuberculosis__a__management_considerations.html @@ -5,7 +5,7 @@ - Management + Management Considerations @@ -15,68 +15,66 @@
        - -
          +
          +
          +
          +
          + +
          +

          VII. Childhood Tuberculosis

          +
          +

          Last Updated April 2026

          +
          +
          +
          +
          • TB disease in infants and children younger than 4 years of age is much more likely to disseminate; therefore, prompt evaluation and treatment should be started when the diagnosis is suspected.
          • -
          • Mycobacterial culture of respiratory specimens for children with suspected pulmonary TB is recommended. - Acceptable specimens include induced sputa or early morning gastric aspirates on - 3 consecutive days for children who cannot produce sputa. In cases when the adult source case is known, it - is - acceptable to rely on the results of susceptibility tests of specimens from the adult source case to guide - the - treatment regimen. However, when the M. tuberculosis isolate from the presumed source patient is not - available or in cases of suspected drug-resistant TB, obtaining induced sputa or early morning gastric - aspirates - from the young child should be performed. In certain situations, bronchoalveolar lavage or tissue biopsy may - be considered. +
          • Performing Mycobacterial culture, smear and nucleic acid antigen tests from respiratory + specimens of children with suspected pulmonary TB is generally recommended, particularly + when the source patient is unknown or there is concern for drug-resistant TB. Acceptable + specimens include induced sputa or early morning gastric aspirates on 3 consecutive days + for children who cannot produce sputa. . In certain situations, bronchoalveolar lavage or + tissue biopsy may be considered. If the adult source case is known, it may be reasonable to + rely on the results of susceptibility tests of specimens from the adult source case to guide + the pediatric treatment regimen, particularly if the child is well, the sole reason for + evaluation is contact investigation, and obtaining pediatric specimens is technically challenging or burdensome. +
          • + +
          • Children 3 months-15 years of age with non-severe pulmonary TB (including intrathoracic TB) should receive an empiric + regimen of four drugs (INH, RIF, PZA, EMB) for 2 months and RIF and INH for the remaining 2 months when + drug resistance is not suspected (4 months total). A three-drug regimen (INH, RIF, PZA) can be used as empiric + therapy when the isolate (i.e. from source TB case) is known to be fully drug susceptible. Non-severe pulmonary + TB is defined as AFB smear-negative disease with the following radiographic features: uncomplicated hilar + adenopathy without evidence of airway obstruction, disease confined to less than one whole lobe, without complex pleural effusion, miliary pattern, or cavitary lesion.
          • -
          • Primary - intrathoracic TB (parenchymal infiltration, hilar adenopathy, or both, in a child with evidence of - tuberculosis - exposure) should be treated in the same manner as pulmonary TB. +
          • + Children who are severely ill, have a history of prematurity <37 weeks, are <3 months or >/=16 years of age, are + pregnant, who have underlying disease that could complicate interpretation of the response to TB therapy, or + who have a contraindication to any first line TB medication are not currently candidates for a 4- month treatment regimen.
          • -
          • An empiric regimen of four drugs (INH, RIF, PZA, EMB) for 2 months and RIF and INH for the remaining 4 - months when - the possibility of drug resistance is low is recommended. A three-drug regimen (INH, RIF, PZA) can be used - as - initial therapy when the isolate (i.e., from source TB case) is known to be fully drug susceptible. Children - and - adolescents with “adult-type” tuberculosis consisting of cavitation and AFB positive sputum samples should - receive a 4-drug regimen initially until susceptibility is proven. The persistence of cavitary lesions - and/or a - positive sputum culture after 2 months of therapy may warrant extension to a 9-month course of therapy. +
          • + Children with severe pulmonary TB, or who otherwise do not meet criteria for non-severe disease treatment, should receive an additional 2 months of RIF and INH, for a minimum duration of 6 months of therapy. Children and adolescents with “adult-type” tuberculosis consisting of cavitation and AFB positive sputum samples should receive a 4-drug regimen initially until susceptibility is proven. The persistence of cavitary lesions and/or a positive sputum culture after 2 months of effective therapy may warrant extension to a 9-month course of therapy.
          • -
          • When - clinical or epidemiologic circumstances suggest an increased probability of INH resistance, EMB can be used - safely at a - dose of 15—20 mg/kg per day as a fourth drug, even in children too young for routine eye testing. - Streptomycin, - kanamycin or amikacin can also be used as a fourth drug when necessary. Either an aminoglycoside or - ethionamide should be used as the fourth drug in cases of TB meningitis. +
          • In general, non-CNS extrapulmonary TB can be treated with the same regimen as pulmonary TB (i.e. 4- 6 months for drug-susceptible disease). Drug-susceptible peripheral lymph node TB is considered non-severe and can be treated for 4 months. All other disease forms should be treated for a minimum of 6 months.
          • -
          • In general, extrapulmonary TB, including cervical adenopathy (scrofula), can be treated with the same - regimen as - pulmonary TB (i.e., 6 months for drug-susceptible disease). Exceptions include TB meningitis for which 12 - months of therapy is currently recommended. +
          • Children with TB meningitis should receive 12 months of therapy.When clinical or epidemiologic circumstances suggest an increased probability of INH resistance, EMB can be used safely at a dose of 15—20 mg/kg per day as a fourth drug, even in children too young for routinevisual testing. Ethionamide should be used instead of ethambutol in cases of TB meningitis. Streptomycin, kanamycin or amikacin can be used as alternatives, if necessary, though should generally be avoided based on their significant toxicity profile. Directly observed therapy is the standard of care for all children.
          • -
          • Directly observed therapy is the standard of care for all children. HIV testing should be performed on all - individuals with TB disease (including children) as the treatment regimen (including need for antiretroviral - therapy) is altered with HIV infection. +
          • + HIV testing should be performed on all individuals with TB disease (including children) as the treatment regimen (including need for antiretroviral therapy) may need to be altered in people with HIV infection.
          • -
          • Clinical and radiographic examinations may be monitored for response to therapy. However, resolution of - abnormal - findings on chest radiography with pulmonary or intrathoracic lymphadenopathy may lag behind clinical - response. Chest radiography is usually not performed at the conclusion of a successful course of treatment - and - should not be used as a criterion for discontinuing anti-TB drugs. +
          • + Clinical and radiographic examinations may be monitored for response to therapy. However, resolution of abnormal findings on chest radiography with pulmonary or intrathoracic lymphadenopathy may lag behind clinical response. Chest radiography is usually not performed at the conclusion of a successful course of treatment and should not be used as a criterion for discontinuing anti-TB drugs.
          • Management of the newborn infant whose mother or other caregiver is suspected of having TB is based on individual considerations. Separation of the mother (or caregiver) and infant should be minimized, if - possible. Differing circumstances and resulting - recommendations are as follows: + possible.
          • + +
          • Differing circumstances and resulting + recommendations are as follows:
          • +
            • Mother or other caregiver who has a positive tuberculin skin test or IGRA and normal chest radiography. @@ -115,18 +113,42 @@ therapy can be documented and is no longer infectious, the infant’s INH may be discontinued.
            +
          -

          For a - mother/caregiver who has active TB disease and is infectious, the mother/caregiver and infant should be - separated until the mother/caregiver and infant have received appropriate anti-tuberculosis therapy. The +

        • For a + mother/caregiver who has active TB disease and is infectious,
        • +
          + +
        • + + the mother/caregiver and infant should be + separated until the mother/caregiver and infant have received appropriate anti-tuberculosis therapy. + +
        • +
        • + The mother/caregiver should wear a mask and follow appropriate infection control procedures until she/ he has been - judged to be noninfectious. The mother/caregiver should be separated from the infant in situations where + judged to be noninfectious. +
        • + +
        • + The mother/caregiver should be separated from the infant in situations where infection with MDR TB is possible and/or adherence to therapy cannot be documented. BCG immunization may be - considered for the infant in these situations. Women with tuberculosis disease who have received 2 weeks of - appropriate therapy and who are not considered to be infectious may breastfeed. A healthcare provider with + considered for the infant in these situations.
        • + +
        • + Women with tuberculosis disease who have received 2 weeks of + appropriate therapy and who are not considered to be infectious may directly breastfeed.
        • + +
        • + A healthcare provider with expertise in tuberculosis should be consulted to assist with recommendations in individual situations when a - woman receiving antituberculosis therapy wishes to provide human milk to an infant.

          + woman receiving antituberculosis therapy wishes to provide human milk to an infant.
        • +
        + + + diff --git a/app/src/main/assets/pages/8_tuberculosis_and_long-term_care_facilities.html b/app/src/main/assets/pages/8_tuberculosis_and_long-term_care_facilities.html deleted file mode 100644 index 1a1ab8c..0000000 --- a/app/src/main/assets/pages/8_tuberculosis_and_long-term_care_facilities.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - Tuberculosis and Long-Term Care Facilities - - - - - - - - -
        -

        - TB remains a problem in older individuals who may have been infected many years ago and did not develop active - disease at the time. Also, there is increasing documentation of outbreaks of TB occurring in nursing home - residents when a patient with TB disease infects a population of older people who are newly exposed to that - case.

        -

        - TB control in nursing homes and long-term care facilities must begin with a careful assessment of TB status upon - admission, including a diagnostic test for LTBI (TST or IGRA). For those with a positive diagnostic test for - LTBI, an assessment and chest x-ray should be performed as described above to exclude active TB disease.

        -

        - Since people over 50 years old may have diminished skin test reactivity, the two-step technique (see Two-Step Testing) of - tuberculin skin testing is recommended upon admission to the nursing home if the TST is the diagnostic test - being performed to screen for LTBI. A “booster effect” with the TST has been noted in elderly persons in whom - the delayed type hypersensitivity (DTH) reaction to tuberculin may have waned over the years. In these - situations, an initial tuberculin skin test may demonstrate a negative reaction, but it boosts the immune system - so that subsequent tuberculin skin tests may be increased in size and may be interpreted as positive. This - “boosted” response is considered as the valid baseline for the individual and thought to represent latent TB - infection (after active disease is excluded).

        -

        - Residents of nursing homes or long-term care facilities whose baseline two-step skin tests are negative (or - whose baseline IGRA is negative if the IGRA is being used to screen for LTBI) on admission should have repeat - testing performed when an exposure to a case of potentially infectious TB has occurred.

        -
          -
        • Any person who converts a TST or IGRA from negative to positive should be considered for - treatment of LTBI after active TB is ruled out (by chest x-ray at a minimum and sputum specimen if - indicated). -
        • -
        • Any resident with symptoms of TB regardless of TST (or IGRA) results should have a chest x-ray - performed to evaluate for active TB disease. -
        • -
        • Treatment of active TB disease (Class III) is the same as that used for younger adults.
        • -
        -

        - Employees of nursing homes or long-term care facilities should have two-step tuberculin testing when they start - to work in the nursing home if the TST is used for testing of health care workers (if they have not had a TST in - the year prior to initiating employment). The frequency of subsequent testing of healthcare workers is - described on page 102. Employees who are TST (or IGRA) positive at baseline should be evaluated for treatment of - LTBI (see pages 25—27). In addition, those with a recent TST conversion should be strongly encouraged to take - treatment for LTBI after active TB is excluded. Routine annual symptom screening for previously positive TST - employees is recommended instead of an annual CXR.

        -
        - - - diff --git a/app/src/main/assets/pages/8_tuberculosis_and_long_term_care_facilities.html b/app/src/main/assets/pages/8_tuberculosis_and_long_term_care_facilities.html index df12f5b..6424a0d 100644 --- a/app/src/main/assets/pages/8_tuberculosis_and_long_term_care_facilities.html +++ b/app/src/main/assets/pages/8_tuberculosis_and_long_term_care_facilities.html @@ -5,7 +5,7 @@ - GA TB Reference Guide + Tuberculosis and Long-Term Care Facilities @@ -15,47 +15,63 @@
        -

        - TB remains a problem in older individuals who may have been infected many years ago and did not develop active - disease at the time. Also, there is increasing documentation of outbreaks of TB occurring in nursing home - residents when a patient with TB disease infects a population of older people who are newly exposed to that - case.

        -

        - TB control in nursing homes and long-term care facilities must begin with a careful assessment of TB status upon - admission, including a diagnostic test for LTBI (TST or IGRA). For those with a positive diagnostic test for - LTBI, an assessment and chest x-ray should be performed as described above to exclude active TB disease.

        -

        - Since people over 50 years old may have diminished skin test reactivity, the two-step technique (see page 10) of +

        +
        +
        +
        + +
        +

        Tuberculosis and Long-Term Care Facilities

        +
        +

        Last Updated April 2026

        +
        +
        +
        +

        + TB remains a problem in older individuals who may have been infected many years ago and did not develop active + disease at the time. Also, there have been outbreaks of TB occurring in nursing home residents when a patient + with active TB disease infects a population of older people who are newly exposed to that case.

        +

        + TB prevention and control in nursing homes and long-term care facilities must begin with a careful assessment + of TB status upon admission, including a diagnostic test for LTBI (TST or IGRA). For those with a positive + diagnostic test for LTBI, an assessment and chest x-ray should be performed as described above to exclude active TB disease.

        +

        + Since people over 50 years old may have diminished skin test reactivity, the two-step technique (see Two-Step Testing) of tuberculin skin testing is recommended upon admission to the nursing home if the TST is the diagnostic test being performed to screen for LTBI. A “booster effect” with the TST has been noted in elderly persons in whom - the delayed type hypersensitivity (DTH) reaction to tuberculin may have waned over the years. In these + the delayed type hypersensitivity (DTH) reaction to tuberculin may have waned over the years. +

        +

        + In these situations, an initial tuberculin skin test may demonstrate a negative reaction, but it boosts the immune system so that subsequent tuberculin skin tests may be increased in size and may be interpreted as positive. This “boosted” response is considered as the valid baseline for the individual and thought to represent latent TB infection (after active disease is excluded).

        -

        - Residents of nursing homes or long-term care facilities whose baseline two-step skin tests are negative (or + + Residents of nursing homes or long-term care facilities whose baseline two-step skin tests are negative (or whose baseline IGRA is negative if the IGRA is being used to screen for LTBI) on admission should have repeat - testing performed when an exposure to a case of potentially infectious TB has occurred.

        + testing performed when an exposure to a case of potentially infectious TB has occurred. +
        • Any person who converts a TST or IGRA from negative to positive should be considered for treatment of LTBI after active TB is ruled out (by chest x-ray at a minimum and sputum specimen if indicated).
        • -
        • Any resident with symptoms of TB regardless of TST (or IGRA) results should have a chest x-ray +
        • Any resident with symptoms of TB regardless of LTBI diagnostic test result (TST or IGRA) should have a chest x-ray performed to evaluate for active TB disease.
        • Treatment of active TB disease (Class III) is the same as that used for younger adults.
        -

        - Employees of nursing homes or long-term care facilities should have two-step tuberculin testing when they start - to work in the nursing home if the TST is used for testing of health care workers (if they have not had a TST in - the year prior to initiating employment). The frequency of subsequent testing of healthcare workers is - described on page 102. Employees who are TST (or IGRA) positive at baseline should be evaluated for treatment of - LTBI (see pages 25—27). In addition, those with a recent TST conversion should be strongly encouraged to take - treatment for LTBI after active TB is excluded. Routine annual symptom screening for previously positive TST - employees is recommended instead of an annual CXR.

        +
        +

        + Employees of nursing homes or long-term care facilities should have two-step tuberculin testing when they start to work in the nursing home if the TST is used for testing of health care workers (if they have not had a TST in the year prior to initiating employment). The frequency of subsequent testing of healthcare workers is described on page 102.

        +

        + Employees who have a positive LTBI diagnostic test at baseline should be evaluated for treatment of LTBI (see pages 25—27). In addition, those with a recent LTBI diagnostic test conversion should be encouraged to take treatment for LTBI after active TB disease is excluded. Routine annual symptom screening for health care workers with a previously positive diagnostic test for LTBI (TST or IGRA) is recommended instead of an annual CXR. +

        + + + diff --git a/app/src/main/assets/pages/9_bcg_vaccination.html b/app/src/main/assets/pages/9_bcg_vaccination.html index e4b4e9c..096b465 100644 --- a/app/src/main/assets/pages/9_bcg_vaccination.html +++ b/app/src/main/assets/pages/9_bcg_vaccination.html @@ -15,19 +15,41 @@
        -

        - Bacille Calmette-Guerin (BCG) vaccine is one of the most commonly used vaccines in the world and is given in - the vast majority of low- and middle-income countries. BCG is recommended in higher TB incidence areas because +

        +
        +
        +
        + +
        +

        IX. BCG Vaccination

        +
        +

        Last Updated April 2026

        +
        +
        +
        +

        + Bacille Calmette-Guerin (BCG) vaccine is one of the most commonly used vaccines in the world and is given to infants in + the vast majority of low- and middle-income countries.

        + +

        BCG is recommended in higher TB incidence areas because it has a documented protective effect against TB meningitis and disseminated TB in young children. It does not prevent primary infection and, more importantly, does not prevent reactivation of latent pulmonary infection, - the principal source of bacillary spread in the community. The impact of BCG vaccination on + the principal source of bacillary spread in the community. +

        +

        The impact of BCG vaccination on transmission of M. tuberculosis is therefore very limited (or there is no impact). BCG has not impacted the global epidemiology of TB. Because of variable efficacy, BCG is NOT recommended for use in the U.S. - BCG is not a contraindication to a TST but as noted there can be cross reactions between BCG and the TST. - The primary advantage of IGRAs is that they do not cross react with BCG. Interpretation of a tuberculin skin - test reaction is not changed for patients who have received BCG. A reaction of > 10 mm (> - 5mm in HIV-infected persons) of induration should be considered infection with M. tuberculosis because: +

        + +

        + BCG is not a contraindication to a TST but as noted there can be cross reactions between BCG and the TST. + The primary advantage of IGRAs is that they do not cross react with BCG. Interpretation of a tuberculin skin + test reaction is not changed for patients who have received BCG.

        + + A reaction of > 10 mm (> + 5mm in persons living with HIV) of induration should be considered infection with M. tuberculosis because: +
        • Conversion rates after BCG vaccination are not 100%;
        • The mean reaction size among BCG vaccines are often less than 10 mm (a large reaction is more @@ -38,7 +60,8 @@ reaction is from infection, not vaccination.
        -

        +

        +

        Since many BCG-vaccinated persons come from areas of high TB incidence, it is important that persons with a positive TST be evaluated for presence of TB disease and managed accordingly. Appropriate follow-up includes a careful medical history, CXR to rule out active TB disease, and evaluation for treatment of LTBI. An IGRA is the @@ -47,4 +70,7 @@

        + + + diff --git a/app/src/main/assets/pages/c_lab_diagnosis_image_1.png b/app/src/main/assets/pages/c_lab_diagnosis_image_1.png new file mode 100644 index 0000000..27d02c5 Binary files /dev/null and b/app/src/main/assets/pages/c_lab_diagnosis_image_1.png differ diff --git a/app/src/main/assets/pages/fig1_factors_to_be_considered.html b/app/src/main/assets/pages/fig1_factors_to_be_considered.html index 42abcba..d340b73 100644 --- a/app/src/main/assets/pages/fig1_factors_to_be_considered.html +++ b/app/src/main/assets/pages/fig1_factors_to_be_considered.html @@ -13,7 +13,18 @@ - +
        +
        +
        +
        + +
        +

        Factors to be considered in deciding to initiate treatment empirically for active tuberculosis (TB) (prior to microbiologic confirmation)

        +
        +

        Last Updated April 2026

        +
        +
        +
        Figure 1

        Figure 1. Factors to be considered in deciding to initiate treatment empirically for active tuberculosis (TB) (prior to microbiologic confirmation)

        diff --git a/app/src/main/assets/pages/georgia_tb_privacy_policy.html b/app/src/main/assets/pages/georgia_tb_privacy_policy.html new file mode 100644 index 0000000..0faa8cd --- /dev/null +++ b/app/src/main/assets/pages/georgia_tb_privacy_policy.html @@ -0,0 +1,87 @@ + + +
        +
        PRIVACY NOTICE

        Last updated March 08, 2021



        Thank you for choosing to be part of our community at Georgia Clinical & Translational Science Alliance ("Company," "we," "us," or "our"). We are committed to protecting your personal information and your right to privacy. If you have any questions or concerns about this privacy notice or our practices with regard to your personal information, please contact us at morgan.greenleaf@emory.edu.

        This privacy notice describes how we might use your information if you:
      • Download and use our mobile applicationGeorgia TB Reference Guide
    • Engage with us in other related ways ― including any sales, marketing, or events
    In this privacy notice, if we refer to:
    • "App," we are referring to any application of ours that references or links to this policy, including any listed above
    • "Services," we are referring to our App, and other related services, including any sales, marketing, or events
    The purpose of this privacy notice is to explain to you in the clearest way possible what information we collect, how we use it, and what rights you have in relation to it. If there are any terms in this privacy notice that you do not agree with, please discontinue use of our Services immediately.

    Please read this privacy notice carefully, as it will help you understand what we do with the information that we collect.

    TABLE OF CONTENTS


    1. WHAT INFORMATION DO WE COLLECT?

    Personal information you disclose to us

    In Short: We collect personal information that you provide to us.

    We collect personal information that you voluntarily provide to us when you express an interest in obtaining information about us or our products and Services, when you participate in activities on the App or otherwise when you contact us.

    The personal information that we collect depends on the context of your interactions with us and the App, the choices you make and the products and features you use. The personal information we collect may include the following:

    All personal information that you provide to us must be true, complete and accurate, and you must notify us of any changes to such personal information.

    Information automatically collected

    In Short: Some information — such as your Internet Protocol (IP) address and/or browser and device characteristics — is collected automatically when you visit our App.

    We automatically collect certain information when you visit, use or navigate the App. This information does not reveal your specific identity (like your name or contact information) but may include device and usage information, such as your IP address, browser and device characteristics, operating system, language preferences, referring URLs, device name, country, location, information about how and when you use our App and other technical information. This information is primarily needed to maintain the security and operation of our App, and for our internal analytics and reporting purposes.

    The information we collect includes:
    • Log and Usage Data. Log and usage data is service-related, diagnostic, usage and performance information our servers automatically collect when you access or use our App and which we record in log files. Depending on how you interact with us, this log data may include your IP address, device information, browser type and settings and information about your activity in the App (such as the date/time stamps associated with your usage, pages and files viewed, searches and other actions you take such as which features you use), device event information (such as system activity, error reports (sometimes called 'crash dumps') and hardware settings).
    • Device Data. We collect device data such as information about your computer, phone, tablet or other device you use to access the App. Depending on the device used, this device data may include information such as your IP address (or proxy server), device and application identification numbers, location, browser type, hardware model Internet service provider and/or mobile carrier, operating system and system configuration information.
    • Location Data. We collect location data such as information about your device's location, which can be either precise or imprecise. How much information we collect depends on the type and settings of the device you use to access the App. For example, we may use GPS and other technologies to collect geolocation data that tells us your current location (based on your IP address). You can opt out of allowing us to collect this information either by refusing access to the information or by disabling your Location setting on your device. Note however, if you choose to opt out, you may not be able to use certain aspects of the Services.

    Information collected through our App

    In Short: We collect information regarding your mobile device, push notifications, when you use our App.

    If you use our App, we also collect the following information:
    • Mobile Device Access. We may request access or permission to certain features from your mobile device, including your mobile device's calendar, microphone, and other features. If you wish to change our access or permissions, you may do so in your device's settings.
    • Mobile Device Data. We automatically collect device information (such as your mobile device ID, model and manufacturer), operating system, version information and system configuration information, device and application identification numbers, browser type and version, hardware model Internet service provider and/or mobile carrier, and Internet Protocol (IP) address (or proxy server). If you are using our App, we may also collect information about the phone network associated with your mobile device, your mobile device’s operating system or platform, the type of mobile device you use, your mobile device’s unique device ID and information about the features of our App you accessed.
    • Push Notifications. We may request to send you push notifications regarding your account or certain features of the App. If you wish to opt-out from receiving these types of communications, you may turn them off in your device's settings.
    This information is primarily needed to maintain the security and operation of our App, for troubleshooting and for our internal analytics and reporting purposes.

    2. HOW DO WE USE YOUR INFORMATION?

    In Short: We process your information for purposes based on legitimate business interests, the fulfillment of our contract with you, compliance with our legal obligations, and/or your consent.

    We use personal information collected via our App for a variety of business purposes described below. We process your personal information for these purposes in reliance on our legitimate business interests, in order to enter into or perform a contract with you, with your consent, and/or for compliance with our legal obligations. We indicate the specific processing grounds we rely on next to each purpose listed below.

    We use the information we collect or receive:

    • For other business purposes. We may use your information for other business purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our App, products, marketing and your experience. We may use and store this information in aggregated and anonymized form so that it is not associated with individual end users and does not include personal information.
    • Research

    3. WILL YOUR INFORMATION BE SHARED WITH ANYONE?

    In Short: We only share information with your consent, to comply with laws, to provide you with services, to protect your rights, or to fulfill business obligations.

    We may process or share your data that we hold based on the following legal basis:
    • Consent: We may process your data if you have given us specific consent to use your personal information for a specific purpose.
    • Legitimate Interests: We may process your data when it is reasonably necessary to achieve our legitimate business interests.
    • Performance of a Contract: Where we have entered into a contract with you, we may process your personal information to fulfill the terms of our contract.
    • Legal Obligations: We may disclose your information where we are legally required to do so in order to comply with applicable law, governmental requests, a judicial proceeding, court order, or legal process, such as in response to a court order or a subpoena (including in response to public authorities to meet national security or law enforcement requirements).
    • Vital Interests: We may disclose your information where we believe it is necessary to investigate, prevent, or take action regarding potential violations of our policies, suspected fraud, situations involving potential threats to the safety of any person and illegal activities, or as evidence in litigation in which we are involved.
    More specifically, we may need to process your data or share your personal information in the following situations:
    • Business Transfers. We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.
    • Affiliates. We may share your information with our affiliates, in which case we will require those affiliates to honor this privacy notice. Affiliates include our parent company and any subsidiaries, joint venture partners or other companies that we control or that are under common control with us.
    • Business Partners. We may share your information with our business partners to offer you certain products, services or promotions.

    4. HOW LONG DO WE KEEP YOUR INFORMATION?

    In Short: We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.

    We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting or other legal requirements). No purpose in this notice will require us keeping your personal information for longer than 2 years.

    When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize such information, or, if this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.

    5. HOW DO WE KEEP YOUR INFORMATION SAFE?

    In Short: We aim to protect your personal information through a system of organizational and technical security measures.

    We have implemented appropriate technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security, and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our App is at your own risk. You should only access the App within a secure environment.

    6. DO WE COLLECT INFORMATION FROM MINORS?

    In Short: We do not knowingly collect data from or market to children under 18 years of age.

    We do not knowingly solicit data from or market to children under 18 years of age. By using the App, you represent that you are at least 18 or that you are the parent or guardian of such a minor and consent to such minor dependent’s use of the App. If we learn that personal information from users less than 18 years of age has been collected, we will deactivate the account and take reasonable measures to promptly delete such data from our records. If you become aware of any data we may have collected from children under age 18, please contact us at morgan.greenleaf@emory.edu.

    7. WHAT ARE YOUR PRIVACY RIGHTS?

    In Short: You may review, change, or terminate your account at any time.
    If you are a resident in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your local data protection supervisory authority. You can find their contact details here: https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.

    If you are a resident in Switzerland, the contact details for the data protection authorities are available here: https://www.edoeb.admin.ch/edoeb/en/home.html.

    8. CONTROLS FOR DO-NOT-TRACK FEATURES

    Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting you can activate to signal your privacy preference not to have data about your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that automatically communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice.

    9. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

    In Short: Yes, if you are a resident of California, you are granted specific rights regarding access to your personal information.

    California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits our users who are California residents to request and obtain from us, once a year and free of charge, information about categories of personal information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which we shared personal information in the immediately preceding calendar year. If you are a California resident and would like to make such a request, please submit your request in writing to us using the contact information provided below.

    If you are under 18 years of age, reside in California, and have a registered account with the App, you have the right to request removal of unwanted data that you publicly post on the App. To request removal of such data, please contact us using the contact information provided below, and include the email address associated with your account and a statement that you reside in California. We will make sure the data is not publicly displayed on the App, but please be aware that the data may not be completely or comprehensively removed from all our systems (e.g. backups, etc.).

    10. DO WE MAKE UPDATES TO THIS NOTICE?

    In Short: Yes, we will update this notice as necessary to stay compliant with relevant laws.

    We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.

    11. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?

    If you have questions or comments about this notice, you may email us at morgan.greenleaf@emory.edu or by post to:

    Georgia Clinical & Translational Science Alliance
    1440 Clifton Rd NE #134
    Atlanta, GA 30322
    United States

    12. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?

    Based on the applicable laws of your country, you may have the right to request access to the personal information we collect from you, change that information, or delete it in some circumstances. To request to review, update, or delete your personal information, please submit a request form by clicking here.
    +
    +
    This privacy policy was created using Termly's Privacy Policy Generator.
    diff --git a/app/src/main/assets/pages/hello_and_welcome_clinical_statement.html b/app/src/main/assets/pages/hello_and_welcome_clinical_statement.html new file mode 100644 index 0000000..69daced --- /dev/null +++ b/app/src/main/assets/pages/hello_and_welcome_clinical_statement.html @@ -0,0 +1,58 @@ + + + + + + + + Hello and Welcome Clinical Statement + + + + + + + + +
    +

    + Dear Clinician:

    + + The Georgia TB Reference Guide responds to clinicians’ questions about tuberculosis infection, disease, and prevention and control. The standards and guidelines are based on the work and recommendations of the American Thoracic Society (ATS), the Centers for Disease Control and Prevention (CDC), the Infectious Disease Society of America (IDSA), Emory University, and the World Health Organization (WHO). The Guide also provides guidance from the Georgia Department of Public Health (DPH) TB Program and contact information for District TB Coordinators. This updated edition of the Guide contains updated recommendations on the treatment of latent TB infection (LTBI) and treatment of active TB disease and an updated format inspired by users of the Guide app. + +

    +

    + The treatment of a person with TB always requires a clinician to exercise clinical and professional judgment. These guidelines provide a framework for the diagnosis and treatment of persons with TB infection or active TB disease. +

    +

    This is not an exhaustive review of the subjects covered. It is an accessible reference guide which provides guidance for diagnosis, treatment and prevention of TB. Since guidelines for treating, preventing, and controlling TB continue to evolve, it is appropriate for clinicians to check further for new treatment regimens.

    +

    + The Georgia TB Reference Guide app was redesigned and extensively updated in 2025 based on user feedback and new developments in the field of TB. +

    +

    Detailed information is available from:

    +
  • Your county public health department and the Georgia Department of Public Health (DPH) TB Program (phone: 404-657-2634 or online: https://dph.georgia.gov/health-topics/tuberculosis-tb-prevention-and-control).
  • +

    Sincerely,

    +
    +
    + Henry M. Blumberg, M.D +

    Henry M. Blumberg, M.D. + Emory University

    +
    + +
    + Marcos Schechter, M.D +

    Marcos Schechter, M.D. + Emory University

    +
    + +
    + Susan M. Ray, M.D +

    Susan M. Ray, M.D. + Emory University

    +
    +
    +
    + + + + + diff --git a/app/src/main/assets/pages/ic_chapter.svg b/app/src/main/assets/pages/ic_chapter.svg new file mode 100644 index 0000000..338eedd --- /dev/null +++ b/app/src/main/assets/pages/ic_chapter.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/assets/pages/main.js b/app/src/main/assets/pages/main.js new file mode 100644 index 0000000..4539c12 --- /dev/null +++ b/app/src/main/assets/pages/main.js @@ -0,0 +1,136 @@ +// function to handle tab switching for any table +function activateTab(tableContainer, tabIndex) { + if (!tableContainer) return; + + tableContainer + .querySelectorAll(".tab-button, .tab, .tab, .tab") + .forEach((tab) => { + tab.classList.remove("active-option", "active-tab"); + }); + + tableContainer + .querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + ) + .forEach((content) => { + content.classList.remove("active-option", "active-tab"); + }); + + // Add active class to selected tab and content + const selectedTab = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + )[tabIndex]; + const selectedContent = tableContainer.querySelectorAll( + ".option-content, .tab-content, .tab-content, .tab-content" + )[tabIndex]; + + if (selectedTab) { + if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab-button")) { + selectedTab.classList.add("active-option"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } else if (selectedTab.classList.contains("tab")) { + selectedTab.classList.add("active-tab"); + } + } + + if (selectedContent) { + if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("option-content")) { + selectedContent.classList.add("active-option"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } else if (selectedContent.classList.contains("tab-content")) { + selectedContent.classList.add("active-tab"); + } + } +} + +// Function to handle tab switching with event +function handleTabSwitch(event, tabIndex) { + // Get the clicked button from the event + const clickedButton = event.currentTarget; + + const tableContainer = clickedButton.closest(".uk-overflow-auto"); + if (!tableContainer) return; + + // Get all tab buttons in this container + const tabButtons = tableContainer.querySelectorAll( + ".tab-button, .tab, .tab, .tab" + ); + + // Find the index of the clicked button within its container + const clickedIndex = Array.from(tabButtons).indexOf(clickedButton); + + // Generate a unique ID for the container if it doesn't have one + if (!tableContainer.id) { + tableContainer.id = "table-" + Math.random().toString(36).substr(2, 9); + } + + // Switch to the correct tab + activateTab(tableContainer, clickedIndex); +} + +function switchTab(tabIndex, event) { + handleTabSwitch(event, tabIndex); +} + +// For Dropdown Togglers +function toggleItem(clickedTitle) { + const itemContent = clickedTitle.nextElementSibling; + + itemContent.classList.toggle("active"); + + const chevronUp = clickedTitle.querySelector(".chevron-up"); + chevronUp.classList.toggle("active"); +} + +document.addEventListener("DOMContentLoaded", function () { + const tooltips = document.querySelectorAll(".info-icon"); + + document.addEventListener("click", function (event) { + if (!event.target.closest(".info-icon")) { + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + activeIcon.classList.remove("active"); + }); + } + }); + + tooltips.forEach(function (icon) { + let tooltip = icon.querySelector(".tooltip"); + if (!tooltip) { + tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + tooltip.textContent = + icon.getAttribute("data-tooltip") || "Additional information"; + + // Get positioning class from data attribute + const positionClass = + icon.getAttribute("data-tooltip-position") || "tooltip-center"; + tooltip.classList.add(positionClass); + + icon.appendChild(tooltip); + } + + let isTooltipVisible = false; + + icon.addEventListener("click", function (event) { + event.stopPropagation(); + + document.querySelectorAll(".info-icon.active").forEach((activeIcon) => { + if (activeIcon !== icon) { + activeIcon.classList.remove("active"); + const otherTooltip = activeIcon.querySelector(".tooltip"); + if (otherTooltip) otherTooltip.style.display = "none"; + } + }); + + isTooltipVisible = !this.classList.contains("active"); + this.classList.toggle("active"); + tooltip.style.display = isTooltipVisible ? "block" : "none"; + }); + }); +}); diff --git a/app/src/main/assets/pages/privacy_policy.html b/app/src/main/assets/pages/privacy_policy.html deleted file mode 100644 index 26d6256..0000000 --- a/app/src/main/assets/pages/privacy_policy.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - - - GA TB Reference Guide Privacy Policy - - - - - - -
    - -
    - Last updated March 08, 2021 -

    Thank you for choosing to be part of our community at Georgia Clinical & Translational Science Alliance - ("Company," - "we," "us," or "our"). We are committed to protecting your personal information and your - right to privacy. If - you - have any questions or concerns about this privacy notice or our practices with regard to your personal - information, - please contact us at morgan.greenleaf@emory.edu.

    - -

    - This privacy notice describes how we might use your information if you: -

      -
    • Download and use our mobile application — Georgia TB Reference Guide
    • -
    • Engage with us in other related ways ― including any sales, marketing, or events
    • -
    - - - In this privacy notice, if we refer to:
    -

    - - -
      -
    • "App," we are referring to any application of ours that references or links to this policy, including - any listed - above -
    • -
    • "Services," we are referring to our App, and other related services, including any sales, marketing, - or events -
    • -
    -

    - The purpose of this privacy notice is to explain to you in the clearest way possible what information we - collect, - how we use it, and what rights you have in relation to it. If there are any terms in this privacy notice that - you do - not agree with, please discontinue use of our Services immediately. -

    - -

    Please read this privacy notice carefully, as it will help you understand what we do with the information that - we - collect.

    - -

    TABLE OF CONTENTS

    - -
      -
    1. WHAT INFORMATION DO WE COLLECT?
    2. -
    3. HOW DO WE USE YOUR INFORMATION?
    4. -
    5. WILL YOUR INFORMATION BE SHARED WITH ANYONE?
    6. -
    7. HOW LONG DO WE KEEP YOUR INFORMATION?
    8. -
    9. HOW DO WE KEEP YOUR INFORMATION SAFE?
    10. -
    11. DO WE COLLECT INFORMATION FROM MINORS?
    12. -
    13. WHAT ARE YOUR PRIVACY RIGHTS?
    14. -
    15. CONTROLS FOR DO-NOT-TRACK FEATURES
    16. -
    17. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?
    18. -
    19. DO WE MAKE UPDATES TO THIS NOTICE?
    20. -
    21. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?
    22. -
    23. HOW CAN YOU REVIEW, UPDATE OR DELETE THE DATA WE COLLECT FROM YOU?
    24. -
    - - -

    1. WHAT INFORMATION DO WE COLLECT?

    -

    Personal information you disclose to us

    - -

    In Short: We collect personal information that you provide to us.

    - -

    We collect personal information that you voluntarily provide to us when you express an interest in obtaining - information about us or our products and Services, when you participate in activities on the App or otherwise - when you contact us.

    -

    - The personal information that we collect depends on the context of your interactions with us and the App, the - choices you make and the products and features you use. The personal information we collect may include the - following:

    - -

    All personal information that you provide to us must be true, complete and accurate, and you must notify us of - any changes to such personal information.

    - -

    Information automatically collected

    - - In Short: Some information — such as your Internet Protocol (IP) address and/or browser and device - characteristics — is collected automatically when you visit our App. - -

    We automatically collect certain information when you visit, use or navigate the App. This information does not - reveal your specific identity (like your name or contact information) but may include device and usage - information, such as your IP address, browser and device characteristics, operating system, language - preferences, referring URLs, device name, country, location, information about how and when you use our App and - other technical information. This information is primarily needed to maintain the security and operation of our - App, and for our internal analytics and reporting purposes.

    - -

    The information we collect includes:

    -
      -
    • Log and Usage Data. Log and usage data is service-related, diagnostic, usage and performance - information our - servers automatically collect when you access or use our App and which we record in log files. Depending on - how you interact with us, this log data may include your IP address, device information, browser type and - settings and information about your activity in the App (such as the date/time stamps associated with your - usage, pages and files viewed, searches and other actions you take such as which features you use), device - event information (such as system activity, error reports (sometimes called 'crash dumps') and hardware - settings). -
    • - -
    • - Device Data. We collect device data such as information about your computer, phone, tablet or other - device - you use to access the App. Depending on the device used, this device data may include information such as - your IP address (or proxy server), device and application identification numbers, location, browser type, - hardware model Internet service provider and/or mobile carrier, operating system and system configuration - information. -
    • - -
    • Location Data. We collect location data such as information about your device's location, which can - be either precise or imprecise. How much information we collect depends on the type and settings of the - device you use to access the App. For example, we may use GPS and other technologies to collect geolocation - data that tells us your current location (based on your IP address). You can opt out of allowing us to - collect - this information either by refusing access to the information or by disabling your Location setting on your - device. Note however, if you choose to opt out, you may not be able to use certain aspects of the Services. -
    • -
    - - -

    Information collected through our App

    -

    In Short: We collect information regarding your mobile device, push notifications, when you use our - App.

    - -

    If you use our App, we also collect the following information:

    - -
      -
    • Mobile Device Access. We may request access or permission to certain features from your mobile device, - including your mobile device's calendar, microphone, and other features. If you wish to change our access or - permissions, you may do so in your device's settings. -
    • -
    • Mobile Device Data. We automatically collect device information (such as your mobile device ID, model and - manufacturer), operating system, version information and system configuration information, device and - application identification numbers, browser type and version, hardware model Internet service provider - and/or mobile carrier, and Internet Protocol (IP) address (or proxy server). If you are using our App, we - may also collect information about the phone network associated with your mobile device, your mobile - device’s operating system or platform, the type of mobile device you use, your mobile device’s unique device - ID and information about the features of our App you accessed. -
    • -
    • Push Notifications. We may request to send you push notifications regarding your account or certain features - of the App. If you wish to opt-out from receiving these types of communications, you may turn them off in - your device's settings. -
    • -
    - -

    This information is primarily needed to maintain the security and operation of our App, for troubleshooting and - for - our internal analytics and reporting purposes.

    - -

    2. HOW DO WE USE YOUR INFORMATION?

    - -

    In Short: We process your information for purposes based on legitimate business interests, the - fulfillment of our - contract with you, compliance with our legal obligations, and/or your consent.

    - -

    - We use personal information collected via our App for a variety of business purposes described below. We process - your personal information for these purposes in reliance on our legitimate business interests, in order to enter - into or perform a contract with you, with your consent, and/or for compliance with our legal obligations. We - indicate the specific processing grounds we rely on next to each purpose listed below.

    - -

    We use the information we collect or receive:

    - -
      -
    • For other business purposes. We may use your information for other business purposes, such as data analysis, - identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and - improve our App, products, marketing and your experience. We may use and store this information in - aggregated and anonymized form so that it is not associated with individual end users and does not include - personal information. -
    • -
    • Research
    • -
    - - -

    3. WILL YOUR INFORMATION BE SHARED WITH ANYONE?

    - -

    In Short: We only share information with your consent, to comply with laws, to provide you with - services, to protect - your rights, or to fulfill business obligations.

    - -

    We may process or share your data that we hold based on the following legal basis:

    - -
      -
    • Consent: We may process your data if you have given us specific consent to use your personal information for - a specific purpose. -
    • -
    • Legitimate Interests: We may process your data when it is reasonably necessary to achieve our legitimate - business interests. -
    • -
    • Performance of a Contract: Where we have entered into a contract with you, we may process your personal - information to fulfill the terms of our contract. -
    • -
    • Legal Obligations: We may disclose your information where we are legally required to do so in order to - proceeding, court order, or legal process, such as in response to a court order or a subpoena (including in - response to public authorities to meet national security or law enforcement requirements). -
    • -
    • Vital Interests: We may disclose your information where we believe it is necessary to investigate, prevent, - or take action regarding potential violations of our policies, suspected fraud, situations involving - potential threats to the safety of any person and illegal activities, or as evidence in litigation in which - we are involved. -
    • -
    -

    More specifically, we may need to process your data or share your personal information in the following - situations:

    -
      -
    • Business Transfers. We may share or transfer your information in connection with, or during negotiations of, - any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another - company. -
    • -
    • Affiliates. We may share your information with our affiliates, in which case we will require those - affiliates to honor this privacy notice. Affiliates include our parent company and any subsidiaries, joint - venture partners or other companies that we control or that are under common control with us. -
    • -
    • Business Partners. We may share your information with our business partners to offer you certain products, - services or promotions. -
    • -
    - -

    4. HOW LONG DO WE KEEP YOUR INFORMATION?

    - -

    In Short: We keep your information for as long as necessary to fulfill the purposes outlined in this - privacy notice - unless otherwise required by law.

    - - - We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy - notice, unless a longer retention period is required or permitted by law (such as tax, accounting or other legal - requirements). No purpose in this notice will require us keeping your personal information for longer than 2 years. - - When we have no ongoing legitimate business need to process your personal information, we will either delete or - anonymize such information, or, if this is not possible (for example, because your personal information has been - stored - in backup archives), then we will securely store your personal information and isolate it from any further - processing - until deletion is possible. - -

    5. HOW DO WE KEEP YOUR INFORMATION SAFE?

    - - In Short: We aim to protect your personal information through a system of organizational and technical security - measures. - -

    We have implemented appropriate technical and organizational security measures designed to protect the security - of - any - personal information we process. However, despite our safeguards and efforts to secure your information, no - electronic - transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we - cannot - promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to - defeat - our - security, and improperly collect, access, steal, or modify your information. Although we will do our best to - protect - your personal information, transmission of personal information to and from our App is at your own risk. You - should - only - access the App within a secure environment.

    - -

    6. DO WE COLLECT INFORMATION FROM MINORS?

    - -

    In Short: We do not knowingly collect data from or market to children under 18 years of age.

    - - -

    We do not knowingly solicit data from or market to children under 18 years of age. By using the App, you - represent - that - you are at least 18 or that you are the parent or guardian of such a minor and consent to such minor dependent’s - use - of - the App. If we learn that personal information from users less than 18 years of age has been collected, we will - deactivate the account and take reasonable measures to promptly delete such data from our records. If you become - aware - of any data we may have collected from children under age 18, please contact us at - morgan.greenleaf@emory.edu.

    - -

    7. WHAT ARE YOUR PRIVACY RIGHTS?

    -

    In Short: You may review, change, or terminate your account at any time.

    - -

    If you are a resident in the EEA or UK and you believe we are unlawfully processing your personal information, - you - also - have the right to complain to your local data protection supervisory authority. You can find their contact - details - here: - https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.

    - -

    If you are a resident in Switzerland, the contact details for the data protection authorities are available - here: - https://www.edoeb.admin.ch/edoeb/en/home.html. -

    -

    8. CONTROLS FOR DO-NOT-TRACK FEATURES

    - -

    Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") - feature - or - setting you can activate to signal your privacy preference not to have data about your online browsing - activities - monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT - signals - has - been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that - automatically - communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must - follow - in - the future, we will inform you about that practice in a revised version of this privacy notice. -

    -

    9. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

    - -

    In Short: Yes, if you are a resident of California, you are granted specific rights regarding access - to your - personal - information.

    - -

    - California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits our users who are - California - residents to request and obtain from us, once a year and free of charge, information about categories of - personal - information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of - all - third parties with which we shared personal information in the immediately preceding calendar year. If you are a - California resident and would like to make such a request, please submit your request in writing to us using the - contact - information provided below.

    - -

    If you are under 18 years of age, reside in California, and have a registered account with the App, you have the - right - to request removal of unwanted data that you publicly post on the App. To request removal of such data, please - contact - us using the contact information provided below, and include the email address associated with your account and - a - statement that you reside in California. We will make sure the data is not publicly displayed on the App, but - please - be - aware that the data may not be completely or comprehensively removed from all our systems (e.g. backups, etc.). -

    -

    10. DO WE MAKE UPDATES TO THIS NOTICE?

    - -

    In Short: Yes, we will update this notice as necessary to stay compliant with relevant laws.

    - -

    We may update this privacy notice from time to time. The updated version will be indicated by an updated - "Revised" - date - and the updated version will be effective as soon as it is accessible. If we make material changes to this - privacy - notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a - notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting - your - information. -

    -

    11. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?

    -

    If you have questions or comments about this notice, you may email us at morgan.greenleaf@emory.edu or by post - to:

    -
    - Georgia Clinical & Translational Science Alliance
    - 1440 Clifton Rd NE #134
    - Atlanta, GA 30322
    - United States - -
    - -

    12. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?

    - -

    Based on the applicable laws of your country, you may have the right to request access to the personal - information - we - collect from you, change that information, or delete it in some circumstances. To request to review, update, or - delete - your personal information, please submit a request form by clicking here.

    -

    This privacy policy was created using Termly's Privacy Policy Generator.

    - -
    - -
    - - - - diff --git a/app/src/main/assets/pages/table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html b/app/src/main/assets/pages/table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html new file mode 100644 index 0000000..3b441d2 --- /dev/null +++ b/app/src/main/assets/pages/table_10_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html @@ -0,0 +1,277 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + + +
    +
    +
    +
    + +
    +

    10. Antituberculosis Antibiotics in Adult Patients with Renal Impairment

    +
    +

    View in chapter → Special Clinical Situations

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
    + +

    Important Note i

    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function300 mg/day
    CrCl 30-90UD
    CrCl <30 or HemodialysisUD
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function600 mg/day
    CrCl 30-90UD
    CrCl <30 or HemodialysisUD
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function15-25 mg/kg/day
    CrCl 30-90UD
    CrCl <30 or Hemodialysis20-25 mg/kg/dose thrice weekly
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function25mg/kg/day (max 2 gm/day)
    CrCl 30-90UD
    CrCl <30 or Hemodialysis25-35 mg/kg/dose thrice weekly
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function750 mg/day
    CrCl 30-90UD
    CrCl <30 or Hemodialysis750-1000 mg/dose thrice weekly
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function400 mg/day
    CrCl 30-90UD
    CrCl <30 or HemodialysisUD
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function15 mg/kg/daily or thrice weekly
    CrCl 30-90UD
    CrCl <30 or Hemodialysis15 mg/kg/dose thrice weekly
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Usual Dose (UD) Normal Renal Function600 mg/day
    CrCl 30-90UD
    CrCl <30 or HemodialysisUD
    Peritoneal DialysisData currently are not available for patients receiving peritoneal dialysis. Until data + become available, begin with doses recommended for patients receiving hemodialysis and verify + adequacy of dosing using serum concentration monitoring. +
    +
    + +
      +
    • Standard doses are given unless there is intolerance.
    • +
    • The medications should be given after hemodialysis on the day of hemodialysis.
    • +
    • Monitoring of serum drug concentrations should be considered to ensure adequate drug absorption, without + excessive accumulation, and to assist in avoiding toxicity. +
    • +
    • In patients with 30–50 mL/min creatinine clearance, standard doses are used by experts, but measurement + of serum concentrations 2 and 6 hours after timed administration can be used to assist with optimizing + drug dosages. +
    • +
    +

    Based on Nahid et al. Clin Infect Dis + 2016;63(7):e147–95, Table 11

    +
    +
    + + + + + + + + diff --git a/app/src/main/assets/pages/table_10_pediatric_dosages_rifampin_in_children_(birth_to_15_years).html b/app/src/main/assets/pages/table_10_pediatric_dosages_rifampin_in_children_(birth_to_15_years).html deleted file mode 100644 index 11662c3..0000000 --- a/app/src/main/assets/pages/table_10_pediatric_dosages_rifampin_in_children_(birth_to_15_years).html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 10-20 mg/kg
    Child's Weight (lbs)Child's Weight (kg)Dose (mg) 10-20 mg/kg
    15 - 32 7 - 14.5150 mg
    33 - 48.515 - 22300 mg
    49 - 6522.5 - 29.5450 mg
    66 +30 +600 mg
    - - -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html b/app/src/main/assets/pages/table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html new file mode 100644 index 0000000..7e5df85 --- /dev/null +++ b/app/src/main/assets/pages/table_11_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html @@ -0,0 +1,180 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + + +
    +
    +
    +
    + +
    +

    11. Antituberculosis Medications for Patients who have Contraindications to or Intolerance of First Line Agents or require IV Therapy during Acute or Critical Illness.

    +
    +

    View in chapter → Special Clinical Situations

    +

    Last Updated April 2026

    +
    +
    +
    + +
    +
      +
    • + +
    • + +
    • + +
    • + +
    • +
    +
    + +
    + + + + + + + + + + + + + + + +
    Dosing + Adults
    + 750 mg

    + Children
    + 15-20 mg/kg

    + Max dose
    750 mg +
    FrequencyDaily
    Adverse Reactions + GI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia +
    + +

    Additional Notes:

    +

    + Dosing above for persons with CrCL > 50 mL/min. For persons with renal impairment, see Table 10. Expert consultation is advised before use; agent is not approved for children less than 18 years of age. +

    +
    + +
    + + + + + + + + + + + + + + + +
    Dosing + Adults
    + 10 - 15 mg/kg

    + Children
    + No established dose

    + Max dose
    400 mg +
    FrequencyDaily
    Adverse Reactions + GI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia +
    + +

    Additional Notes:

    +

    Expert consultation is advised before use; agent is not approved for children less than 18 years of age.

    +
    + +
    + + + + + + + + + + + + + + + + +
    Dosing (A for adults, C for children) + Adults
    + 600 mg

    + + Children < 12 years +
      +
    • 5 – 10 kg: 15 mg/kg
    • +
    • 10 – 23 kg: 12 mg/kg
    • +
    • >23 kg: 10 mg/kg
    • +
    + + Childrenl ≥ 12 years
    + 10 mg/kg

    + + Max dose
    600 mg +
    FrequencyDaily
    Adverse Reactions + Myelosuppression, GI upset, optic and peripheral neuropathy (may be irreversible) +
    +
    + +
    + + + + + + + + + + + + + + + +
    Dosing + Adults
    + 10 to 15 mg/kg/day

    + Children
    + 15 to 30 mg/kg/day (max dose 1 gram)

    +
    Frequency5-7 days per week or 3 times per week
    Adverse Reactions + Auditory, vestibular and renal toxicity +
    + +

    Additional Notes:

    +

    Dosing above for persons with CrCL > 50 mL/min. For persons with renal impairment, see Table 10.

    +
    +
    +
    + + + + + diff --git a/app/src/main/assets/pages/table_11_pediatric_dosages_ethambutol_in_children_(birth_to_15_years).html b/app/src/main/assets/pages/table_11_pediatric_dosages_ethambutol_in_children_(birth_to_15_years).html deleted file mode 100644 index 75dc41e..0000000 --- a/app/src/main/assets/pages/table_11_pediatric_dosages_ethambutol_in_children_(birth_to_15_years).html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Child’s Weight (lbs)Child’s Weight (kg)Daily Dose (mg) 15 – 25 mg/kg
    11 – 155 – 7100 mg
    16 – 318 – 14200 mg
    32 – 4415 – 20300 mg
    45 – 5521 – 25400 mg
    56 – 6726 – 30.5500 mg
    68 – 7631 – 34.5600 mg
    77 – 8735 – 39.5700 mg
    88 – 12140 – 55800 mg
    122 – 16556 – 751200 mg
    166 +76 +1600 mg
    -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_12_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html b/app/src/main/assets/pages/table_12_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html new file mode 100644 index 0000000..4861ca4 --- /dev/null +++ b/app/src/main/assets/pages/table_12_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html @@ -0,0 +1,243 @@ + + + + + + + + GA TB Reference Guide + + + + + + + +
    +
    +
    +
    + +
    +

    12. Clinical Situations for which Standard Therapy cannot be given or is not well-tolerated or may not be effective: Potential Alternative Regimens (Dosing and/or Drugs)

    +
    +

    View in chapter → Special Clinical Situations

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
    + + + + + + + +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedPoor gut medication absorption
    Regimen +
      +
    • IV rifampin ≥ 10 mg/kg daily
    • +
    • PO pyrazinamide UD
    • +
    • PO ethambutol UD
    • +
    + Consider adding at least two of the following agents. +
      +
    • IV isoniazid UD i
    • +
    • IV levofloxacin or moxifloxacin UD
    • +
    • IV linezolid UD i
    • +
    • IV amikacin UD i
    • +
    +
    Comments +
      +
    • Oral medications are generally poorly bioavailable among critically ill patients.
    • +
    • Patients receiving sedation are unable to report isoniazid or linezolid-induced neuropathies nor aminoglycoside- induced otovestibular toxicity
    • +
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedRapidly progressive and often fatal. High plasma levels needed to achieve adequate CNS penetration. + High index of suspicion necessary; microbiological diagnostic tests have low yield.
    Regimen +
      +
    • IV rifampin ≥ 10 mg/kg daily
    • +
    • PO or IV i isoniazid UD
    • +
    • PO pyrazinamide UD
    • +
    • PO ethambutol UD (adults)
    • +
    • PO ethionamide (children)
    • +
    +

    Consider adding IV levofloxacin or moxifloxacin UD in lieu of ethambutol, especially if there is concern for isoniazid-resistant TB.

    +
    CommentsRifampin has poor CNS penetration but is an essential drug for meningeal TB treatment. Isoniazid, + pyrazinamide, levofloxacin, and moxifloxacin have excellent CNS penetration. +

    Ethambutol has poor CNS penetration. Early use of fluoroquinolones has been associated with + improved outcomes among patients with isoniazid-resistant meningeal TB

    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedIncreased risk for pyrazinamide-induced hepatotoxicity
    RegimenCan consider rifampin, isoniazid, and ethambutol without pyrazinamide when drug-susceptibility is + known and/or patient has low burden of disease
    Comments3-drug regimens may increase risk of failure or acquired drug-resistance.
    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedDisseminated TB is associated with gut edema which decreases po medication bioavailability
    RegimenStandard 4-drug regimen Consider increasing po Rifampin dose (15 to 20 mg/kg daily, minimum 600 mg) + Consider IV rifampin and IV isoniazid i for inpatients.
    CommentsConsider obtaining TB drug levels in ensure po dosing achieves at least minimum levels
    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedTube feeds may decrease TB drug bioavailability
    RegimenNo change in standard TB regimen
    CommentsHold tube feeds ≤2 hours prior and ≥1 hour after TB drug intake. Longer intervals are needed if quinolone- containing regimens are given with divalent-cation containing tube feeds
    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedConsider limiting number of hepatotoxic drugs for patients with baseline ALT>3x UNL and/or advanced + liver disease. + Order of hepatotoxicity: PZA>INH>RIF
    Regimen +
      +
    • RIF/INH/EMB +/- FQN
    • +
    • RIF/EMB/FQN +/- LZD or AG
    • +
    • EMB/FQN +/- LZD or AG
    • +
    +
    Comments + Consider baseline liver enzyme elevation could be due to hepatic TB

    + 3-drug regimens may increase risk of failure or acquired drug-resistance. +
    +
    + +
    + + + + + + + + + + + + + + + +
    Concerns RaisedTB drug-induced hepatotoxicity + Stop TB drugs if ALT>3x UNL and patient symptomatic or ALT >5x UNL regardless of symptoms
    RegimenSequential re-introduction of TB drugs once ALT <2x UNL.
    + (1) Rifamycin x 5-7 days
    + (2) Isoniazid x 5-7 days
    + (3) Ethambutol x 5-7 days
    + (4) Need and choice of 4th agent depends on burden of disease and drug-susceptibility pattern. +
    CommentsPyrazinamide is often the culprit and effective regimens can be designed without this drug. + Rifamycins are the drugs most important for sterilizing activity (i.e., cure) in TB treatment. + Consider adding a 4th drug if patient has high burden of disease.
    +
    + +

    Abbreviations: UD, usual dose; UNL, upper normal limit.

    + +

    Additional Notes:
    + These recommendations are meant for patients with known drug-susceptible TB or at low risk for drug- resistant TB

    +
    +
    +
    + + + + + + diff --git a/app/src/main/assets/pages/table_12_pediatric_dosages_pyrazinamide_in_children_(birth_to_15_years).html b/app/src/main/assets/pages/table_12_pediatric_dosages_pyrazinamide_in_children_(birth_to_15_years).html deleted file mode 100644 index 9a714df..0000000 --- a/app/src/main/assets/pages/table_12_pediatric_dosages_pyrazinamide_in_children_(birth_to_15_years).html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 30-40 mg/kg POTwice-weekly Dose (mg) 50-70 mg/kg PO
    13 - 236 - 10.5250 mg500 mg
    24 - 2611 - 12250 mg750 mg
    27 - 3112.5 - 14500 mg1000 mg
    32 - 4114.5 - 18.5500 mg1250 mg
    42 - 4719.0 - 21.5750 mg1250 mg
    48 - 5422.0 - 24.5750 mg1500 mg
    55 – 6325 – 28.51000 mg1750 mg
    64 – 6729 – 30.51000 mg2000 mg
    68 – 8031 – 36.51250 mg2000 mg
    81 – 9337 – 42.51500 mg2000 mg
    94 – 10643 – 48.51750 mg2000 mg
    107 +49 +2000 mg2000 mg
    -
    -
    - - - - - - diff --git a/app/src/main/assets/pages/table_13_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html b/app/src/main/assets/pages/table_13_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html deleted file mode 100644 index eac6684..0000000 --- a/app/src/main/assets/pages/table_13_antituberculosis_antibiotics_in_adult_patients_with_renal_impairment.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -

    NOTE: Drug adjustments are based on the creatinine clearance (CrCl) which can be estimated as follows:

    -

    [(140-age in yrs)(Ideal body weight in kg) for men (x 0l85 for women)] / [(72) (serum creatinine, mg/dL)]

    -

    Ideal body weight for men: 50 kg + 2.3 kg per inch over 5 feet

    -

    Ideal body weight for women: 45.5 kg + 2.3 kg per inch over 5 feet

    - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DrugUsual Dose (UD) Normal Renal FunctionCrCl 30-90CrCL <30 or HemodialysisPeritoneal Dialysis
    INH300 mg/dayUDUDData currently are not available for patients receiving peritoneal dialysis. Until data - become available, begin with doses recommended for patients receiving hemodialysis and verify - adequacy of dosing using serum concentration monitoring. -
    Rifampin600 mg/dayUDUD
    Ethambutol15-25 mg/kg/dayUD20-25 mg/kg/dose thrice weekly
    Pyrazinamide25 mg/kg d (max 2 gm/day)UD25-35 mg/kg/dose thrice weekly
    Levofloxacin750 mg/dayUD750-1000 mg/dose thrice weekly
    Moxifloxacin400 mg/dayUDUD
    Amikacin15 mg/kg/daily or thrice weeklyUD15 mg/kg/dose thrice weekly
    Linezolid600 mg/dayUDUD
    -
      -
    • Standard doses are given unless there is intolerance.
    • -
    • The medications should be given after hemodialysis on the day of hemodialysis.
    • -
    • Monitoring of serum drug concentrations should be considered to ensure adequate drug absorption, without - excessive accumulation, and to assist in avoiding toxicity. -
    • -
    • In patients with 30–50 mL/min creatinine clearance, standard doses are used by experts, but measurement - of serum concentrations 2 and 6 hours after timed administration can be used to assist with optimizing - drug dosages. -
    • -
    -

    Based on Nahid et al. Clin Infect Dis - 2016;63(7):e147–95, Table 11

    -
    -
    - - - - - - diff --git a/app/src/main/assets/pages/table_13_when_to_start_hiv_therapy.html b/app/src/main/assets/pages/table_13_when_to_start_hiv_therapy.html new file mode 100644 index 0000000..e131f43 --- /dev/null +++ b/app/src/main/assets/pages/table_13_when_to_start_hiv_therapy.html @@ -0,0 +1,63 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + + +
    +
    +
    +
    + +
    +

    13. When to Start HIV Therapy

    +
    +

    View in chapter → Antiretroviral Therapy (ART) and Treatment of Persons Living with HIV and Active TB

    +

    Last Updated April 2026

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment
    CD4 count and/or clinical status at time of TB diagnosisART Initiation
    < 50 cells/mm³ iwithin 2 weeks of starting TB therapy.
    > 50 cells/mm³ iwithin 2-8 weeks of starting TB therapy
    Pregnant, any CD4 countAs early as feasible
    +

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant Women with HIV Infection and Interventions to Reduce Perinatal Transmission in the United States, last reviewed and updated April 15, 2019
    (https://clinicalinfo.hiv.gov/en/guidelines/hiv-clinical-guidelines-adult-and-adolescent-opportunistic-infections/mycobacterium?view=full).

    +
    +
    + + + + + + diff --git a/app/src/main/assets/pages/table_14_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html b/app/src/main/assets/pages/table_14_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html deleted file mode 100644 index d880e37..0000000 --- a/app/src/main/assets/pages/table_14_antituberculosis_medications_which_may_be_used_for_patients_who_have_contraindications_to_or_intolerance.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Medication: Route(s)Dosing (A for adults, C for children)Adverse Reactions
    Levofloxacin: PO/IVA: 750 mg daily C: 15 – 20 mg/kg daily Max dose 750 mgGI upset, dizziness, hypersensitivity, Headaches, QT prolongation, tendon rupture - (rare), arthralgia, increased risk for aortic dissection/rupture, hypo/hyperglycemia -
    Moxifloxacin: PO/IVA: 400 mg daily C: no established dose
    Linezolid: PO/IVA: 600 mg (once daily) C: 10 mg/kg/dose every 12 hours (max dose 600 mg)Myelosuppression, GI upset, optic and peripheral neuropathy (may be irreversible)
    Amikacin: IVA: 10 to 15 mg/kg/day 5-7 days per week or 3 times per week - C: 15 to 30 mg/kg/day (max dose 1 gram) 5-7 days per week or 3 times per week - Auditory, vestibular and renal toxicity
    -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_14_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients.html b/app/src/main/assets/pages/table_14_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients.html new file mode 100644 index 0000000..7c210ac --- /dev/null +++ b/app/src/main/assets/pages/table_14_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when_treating_co-infected_patients.html @@ -0,0 +1,251 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + + +
    +
    +
    +
    + +
    +

    14. What to start: Choice of TB Therapy and Antiretroviral Therapy (ART) when treating Co-infected Patients

    +
    +

    View in chapter → Antiretroviral Therapy (ART) and Treatment of Persons Living with HIV and Active TB

    +

    Last Updated April 2026

    +
    +
    +
    +

    + + Principle: Despite Drug Interactions, a Rifamycin (Rifampin or Rifabutin) Should Be Included in TB Regimens for Patients Receiving ART, with Dosage Adjustment if Necessary + +

    + +
    +
      +
    • +
    • +
    • +
    +
    + +
    +

    + + Integrase-based ART regimens. Dolutegravir is the preferred integrase for TB/HIV co-infection treatment. + +

    + +

    1a. Patients receiving rifampin-based TB treatment.

    + + + + + + + + + + + + + + + + + + + +
    PreferredDTG (Tivicay) BID + TDF/FTC (Truvada)
    Alternative +
      +
    • DTG (Tivicay) BID + TAF/FTC (Descovy)
    • +
    • DTG (Tivicay) BID + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    NoteTriumeq is a combination of DTG/ABC/3tc
    + + +

    1b. Patients receiving rifabutin-based TB treatment

    + + + + + + + + + + + + + + + + + + + +
    PreferredDTG (Tivicay) + TDF/FTC (Truvada)
    Alternative +
      +
    • DTG (Tivicay) + TAF/FTC (Descovy)
    • +
    • DTG/ABC/3TC (Triumeq)
    • +
    +
    FrequencyDaily for both preferred and alternative
    NoteThe FDA does not recommend using TAF with rifampin or rifabutin
    + +

    Abbreviations:

    +
      +
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • +
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • +
    • PIs: protease inhibitors
    • +
    • /r: boosted with ritonavir
    • +
    • TDF: Tenofovir disoproxil fumarate
    • +
    • TAF: Tenofovir alafenamide
    • +
    • FTC: Emtricitabine
    • +
    • 3TC: Lamivudine
    • +
    • ABC: Abacavir
    • +
    • ATV/r: Atazanavir/ritonavir
    • +
    • DRV/r: Darunavir/ritonavir
    • +
    • DTG: Dolutegravir
    • +
    + +

    Source:

    + +
    + +
    +

    + + PI-based ART regimens + + (cannot be used with rifampin, must use with dose-adjusted rifabutin) + +

    + +

    2a

    + + + + + + + + + + + + + + + +
    PreferredATV/r + TDF/FTC (Truvada)
    Alternative +
      +
    • ATV/r + TAF/FTC (Descovy)
    • +
    • ATV/r + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    + + +

    2b

    + + + + + + + + + + + + + + + +
    PreferredDRV/r + TDF/FTC (Truvada)
    Alternative +
      +
    • DRV/r + TAF/FTC (Descovy)
    • +
    • DRV/r + ABC/3TC
    • +
    +
    FrequencyDaily for both preferred and alternative
    + +

    Additional Notes:

    +
      +
    • PI’s have high barrier to resistance. However, given rifabutin is given at half-dose when used with PI’s adherence to ART should be closely monitored. Poor adherence to PI’s while on rifabutin increases risk for rifampin resistance.
    • +
    • The FDA does not recommend using TAF with rifampin or rifabutin.
    • +
    • Cobicistat cannot be used with rifabutin.
    • +
    + +

    Abbreviations:

    +
      +
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • +
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • +
    • PIs: protease inhibitors
    • +
    • /r: boosted with ritonavir
    • +
    • TDF: Tenofovir disoproxil fumarate
    • +
    • TAF: Tenofovir alafenamide
    • +
    • FTC: Emtricitabine
    • +
    • 3TC: Lamivudine
    • +
    • ABC: Abacavir
    • +
    • ATV/r: Atazanavir/ritonavir
    • +
    • DRV/r: Darunavir/ritonavir
    • +
    • DTG: Dolutegravir
    • +
    + +

    Source:

    + +
    + +
    +

    + + Choice for Pregnant Women living with HIV and with Active TB + +

    + +

    2a

    + + + + + + + +
    Notes +
      +
    • Expert consultation advised.
    • +
    • Options 1a and 1b are currently preferred in pregnancy.
    • +
    +
    + +

    Source:

    + +
    +
    +
    + + + + + diff --git a/app/src/main/assets/pages/table_15_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html b/app/src/main/assets/pages/table_15_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html deleted file mode 100644 index 025ae38..0000000 --- a/app/src/main/assets/pages/table_15_clinical_situations_for_which_standard_therapy_cannot_be_given_or_is_not_well_tolerated.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Clinical SituationConcerns RaisedRegimenComments
    Critical illness requiring vasopressorsPoor gut medication absorptionIV rifampin ≥ 10 mg/kg daily - PO pyrazinamide UD - PO ethambutol UD - IV isoniazid UD2,3 - IV levofloxacin or moxifloxacin UD 4 - IV linezolid UD 54 - IV amikacin UD5Oral medications are generally poorly bioavailable among critically ill patients.

    Patients - receiving sedation are unable to report isoniazid or linezolid-induced neuropathies nor - aminoglycoside- induced otovestibular toxicity

    Proven or suspected meningeal TBRapidly progressive and often fatal. High plasma levels needed to achieve adequate CNS penetration. - High index of suspicion necessary; microbiological diagnostic tests have low yield. - IV rifampin ≥ 10 mg/kg daily - PO or IV2 2 isoniazid UD - PO pyrazinamide UD - PO ethambutol UD (adults) - PO ethionamide (children) -

    Consider adding IV levofloxacin or moxifloxacin UD in lieu of ethambutol

    Rifampin has poor CNS penetration but is an essential drug for meningeal TB treatment. Isoniazid, - pyrazinamide, levofloxacin, and moxifloxacin have excellent CNS penetration. -

    Ethambutol has poor CNS penetration. Early use of fluoroquinolones has been associated with - improved outcomes among patients with isoniazid-resistant meningeal TB

    -
    Patient age 75 years or greater6Increased risk for pyrazinamide-induced hepatotoxicityCan consider rifampin, isoniazid, and ethambutol without pyrazinamide when drug-susceptibility is - known and/or patient has low burden of disease - 3-drug regimens may increase risk of failure or acquired drug-resistance.
    Disseminated TB with concern for poor absorption from gut6Disseminated TB is associated with gut edema which decreases po medication bioavailabilityStandard 4-drug regimen Consider increasing po Rifampin dose (15 to 20 mg/kg daily, minimum 600 mg) - Consider IV rifampin and IV isoniazid 1 for inpatients. - Consider obtaining TB drug levels in ensure po dosing achieves at least minimum levels
    Patient receiving medications via nasogastric or PEG tube6Tube feeds may decrease TB drug bioavailabilityNo change in standard TB regimenHold tube feeds ≤2 hours prior and ≥1 hour after TB drug intake. Longer intervals are needed if - quinolone- containing regimens are given with divalent-cationcontainingtubefeeds -
    Baseline elevation of liver enzymes6Consider limiting number of hepatotoxic drugs for patients with baseline ALT>3x UNL and/or advanced - liver disease. - Order of hepatotoxicity: PZA>INH>RIF - 1-RIF/INH/EMB +/- FQN 2-RIF/EMB/FQN +/- LZD or AG 3-EMB/FQN +/- LZD or AGConsider baseline liver enzyme elevation could be due to hepatic TB -

    3-drug regimens may increase risk of failure or acquired drug-resistance.

    -
    Acute hepatitis after starting standard therapy6TB drug-induced hepatotoxicity - Stop TB drugs if ALT>3x UNL and patient symptomatic or ALT >5x UNL regardless of symptoms - Sequential re-introduction of TB drugs once ALT <2x UNL. - (1) Rifamycin x 5-7 days - (2) Isoniazid x 5-7 days - (3) Ethambutol x 5-7 days - (4) Need and choice of 4th agent depends on burden of disease and drug-susceptibility pattern. - Pyrazinamide is often the culprit and effective regimens can be designed without this drug. - Rifamycins are the drugs most important for sterilizing activity (i.e., cure) in TB treatment. - Consider adding a 4th drug if patient has high burden of disease. -
    -

    Abbreviations: UD, usual dose; UNL, upper normal limit.

    -

    TABLE 15 NOTES

    -

    1-Some of these recommendations differ or are not addressed by 2016 ATS/CDC/IDSA drug-susceptible TB - guidelines. Drug-susceptibility testing for second-line drugs should be requested if these agents are - used.

    -

    2-Limited availability

    -

    3-Associated with peripheral neuropathy. Add B6 ≥50 mg/daily

    -

    4-Associated with irreversible peripheral and optic neuritis. Add B6 ≥ 50 mg/daily

    -

    5-Associated with otovestibular toxicity

    -

    6-These recommendations are meant for patients with known drug-susceptible TB or at low risk for drug- - resistant TB

    -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_15_summary_of_recommendations_for_treatment_of_active_tb_disease_in_persons_with_hiv.html b/app/src/main/assets/pages/table_15_summary_of_recommendations_for_treatment_of_active_tb_disease_in_persons_with_hiv.html new file mode 100644 index 0000000..e13cdbc --- /dev/null +++ b/app/src/main/assets/pages/table_15_summary_of_recommendations_for_treatment_of_active_tb_disease_in_persons_with_hiv.html @@ -0,0 +1,502 @@ + + + + + + + + GA TB Reference Guide + + + + + + + +
    +
    +
    +
    + +
    +

    + 15. Summary of Recommendations for Treatment of Active TB Disease in + Persons with HIV +

    +
    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    +

    + When to start ART +

    + + + + + + + + + + + + +
    What to do +
      +
    • + CD4 <50: start ART within + 2 weeks of TB therapy +
    • +
    • + CD4 ≥50: start ART by + 8–12 weeks. +
    • +
    • + TB meningitis: defer starting ART and + seek expert advice as CNS TB IRIS may increase morbidity + and mortality +
    • +
    +
    Key details/caveats + Early ART ↓ mortality.
    + CNS TB early ART ↑ severe IRIS risk. +
    +
    + +
    +

    + How to prevent IRIS in TB/HIV +

    + + + + + + + + + + + + +
    What to do +
      +
    • + Consider prednisone 40 mg/day for + 2 weeks, then + 20 mg/day for + 2 weeks for patients with + CD4 ≤100 who starting ART within 30 days + of TB treatment initiation and are responding well to TB + therapy. +
    • +
    • Consult with expert in TB/HIV.
    • +
    +
    Key details/caveats + Contraindicated for patients with rifampin-resistant TB, + Kaposi sarcoma, or active hepatitis B. +
    +
    + +
    +

    + TB Regimen: Drug-susceptible TB (DS_TB) +

    + + + + + + + + + + + + +
    What to do + Use standard 6-month HRZE → HR regimen + (intensive phase 2 months HRZE, continuation phase 4-7 months + HR) +
    Key details/caveatsRemains the global standard for HIV-associated TB
    +
    + +
    +

    + Core ART principles with rifamycins +

    + + + + + + + + + + + + +
    What to do + Rifamycins (rifampin, rifabutin, rifapentine) are the most + important TB drug in the treatment of DS-TB and every effort + should be made to include them in the treatment regimen. + However, rifamycins have many drug-drug interactions. + i +
    Key details/caveats + Rifamycins strongly induce CYP3A, UGT, P-gp, causing major ARV + interactions. +
    +
    + +
    +

    + INSTIs with rifamycin +

    + + + + + + + + + + + + +
    What to do + Dolutegravir (DTG): Increase does to 50 mg + twice daily while on rifampin. + Bictegravir (BIC) (INSTI in Biktarvy) is + contraindicated with rifampin and other rifamycins. +
    Key details/caveats +
      +
    • DTG BID validated in HIV–TB.
    • +
    • BIC levels drop severely.
    • +
    +
    +
    + +
    +

    + NNRTIs with rifampin +

    + + + + + + + + + + + + +
    What to doEfavirenz 600 mg daily is compatible.
    Key details/caveats + Efavirenz generally maintained at therapeutic levels with + rifampin. +
    +
    + +
    +

    + Boosted PIs with rifampin +

    + + + + + + + + + + + + +
    What to do + Do NOT use rifampin with ritonavir- or + cobicistat-boosted PIs. Use rifabutin instead + of rifampin if PI required (can use with ritonavir, cannot use + with cobicistat). +
    Key details/caveats +
      +
    • Monitor for uveitis and neutropenia with rifabutin.
    • +
    • + Dose adjustment for rifabutin generally required; consult + with HIV/TB expert. +
    • +
    +
    +
    + +
    +

    + NRTI backbone +

    + + + + + + + + + + + + +
    What to do + Use TDF/FTC (Truvada) or + 3TC. General recommendations are to avoid + TAF (i.e., TAF/FTC [Descovy]) use with + rifamycins. However, TAF can be used with rifampin with + caution and close monitoring of virologic response per the + DHHS/NIH HIV treatment guidelines. +
    Key details/caveats + Rifamycins lower plasma TAF concentration, but intracellular + levels are preserved. +
    +
    + +
    +

    + TB-IRIS +

    + + + + + + + + + + + + +
    What to do + Continue ART. NSAIDs for mild IRIS. + Prednisone for moderate–severe IRIS. +
    Key details/caveats + ART should NOT be stopped except in life-threatening IRIS. +
    +
    + +
    +

    + TB Meningitis +

    + + + + + + + + + + + + +
    What to do + Use adjunctive steroids. Delay start of ART. + Seek expert advice as CNS TB IRIS may increase morbidity and + mortality +
    Key details/caveatsReduces mortality and CNS IRIS.
    +
    + +
    +

    Abbreviations:

    +
      +
    • ART – Antiretroviral therapy
    • +
    • ARV – Antiretroviral
    • +
    • BIC – Bictegravir
    • +
    • CNS – Central nervous system
    • +
    • CYP3A / CYP3A4 – Major drug-metabolizing enzymes
    • +
    • DS-TB – Drug-susceptible TB
    • +
    • DTG – Dolutegravir
    • +
    • EFV – Efavirenz
    • +
    • FTC – Emtricitabine
    • +
    • HRZE – TB intensive-phase regimen:
    • +
    • H = Isoniazid
    • +
    • R = Rifampin
    • +
    • Z = Pyrazinamide
    • +
    • E = Ethambutol
    • +
    • IRIS – Immune reconstitution inflammatory syndrome
    • +
    • INSTI – Integrase strand transfer inhibitor
    • +
    • NNRTI – Non-nucleoside reverse transcriptase inhibitor
    • +
    • + NRTI – Nucleoside/nucleotide reverse transcriptase inhibitor +
    • +
    • PI – Protease inhibitor
    • +
    • P-gp – P-glycoprotein (drug efflux transporter)
    • +
    • RFB (or RIFB) – Rifabutin
    • +
    • RPT – Rifapentine
    • +
    • TAF – Tenofovir alafenamide
    • +
    • TDF – Tenofovir disoproxil fumarate
    • +
    • + TB-IRIS – TB-associated immune reconstitution inflammatory + syndrome +
    • +
    • + UGT (UDP-glucuronosyltransferase): A liver enzyme family that + metabolizes many drugs. Rifamycins induce UGT1A1, lowering levels + of drugs like dolutegravir and bictegravir. +
    • +
    + +

    Source:

    + +
    +
    +
    + + + + + + diff --git a/app/src/main/assets/pages/table_16_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html b/app/src/main/assets/pages/table_16_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html new file mode 100644 index 0000000..b51a05d --- /dev/null +++ b/app/src/main/assets/pages/table_16_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html @@ -0,0 +1,309 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + +
    +
    +
    +
    + +
    +

    16. Guidelines for Treatment of Extrapulmonary Tuberculosis: Length of Therapy and Adjunctive Use of Corticosteroids

    +
    +

    View in chapter → Adjunctive Use of Corticosteroid Therapy

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
    + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations + Pursue microbiologic proof of diagnosis prior to starting Rx +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    CorticosteroidsNot recommended
    Additional management considerationsExtend to 12 months if hardware is present
    + + + + + + + + + + + + + + + + +
    Length of therapy6 to 9 months
    Corticosteroids + Not recommended for TB rx but may be indicated for cord + compression +
    Additional management considerations + Most spine infection can be cured with medical Rx. Surgery + indicated for relief of cord compression, progressive disease + despite medical therapy, instability of the spine. +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Length of therapy9 to 12 months
    CorticosteroidsStrongly recommended
    Steroid Dosing for Adults + Adults ≥ 25kg
    + 12 mg/day of
    + dexamethasone x 3 weeks
    + followed by 3-week taper +
    Steroid Dosing for Children + Children ≥ 25kg
    + 12 mg/day of
    + dexamethasone x 3 weeks
    + followed by 3-week taper

    + Children < 25kg
    + 8 mg/day of
    + dexamethasone for 3 weeks
    + followed by 3-week taper +
    Additional management considerations + Most spine infection can be cured with medical Rx. Surgery + indicated for relief of cord compression, progressive disease + despite medical therapy, instability of the spine. +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Length of therapy9-12 months
    CorticosteroidsStrongly recommended
    Steroid Dosing for Adults + Adults ≥ 25kg
    12 mg/day of dexamethasone x 3 weeks followed by 3-week taper

    +
    Steroid Dosing for Children + Children ≥ 25kg
    12 mg/day of dexamethasone x 3 weeks followed by 3-week taper

    + Children < 25kg
    8 mg/day of dexamethasone for 3 weeks followed by 3-week taper +
    Additional management considerations + Negative CSF culture or PCR test does NOT exclude this diagnosis +

    Follow CSF profile for response to therapy

    +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerationsEmpyema may require decortication
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNO LONGER routinely RECOMMENDED
    Additional management considerations + Consider steroids for patients at highest risk of later + constriction: large pericardial effusions high levels of + inflammatory cells or markers in pericardial fluid those with + early signs of constriction +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations + Obtain cultures from blood, urine and sputum in addition to + clinically apparent sites of disease. +
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    + + + + + + + + + + + + + + + + +
    Length of therapy6 months
    CorticosteroidsNot recommended
    Additional management considerations
    + +

    + ALWAYS EVALUATE for concomitant pulmonary involvement with respiratory + samples for smear and culture (regardless of chest imaging findings). +

    +

    Based on CID 2016:63 (1 October) • Nahid et al

    +
    +
    + + + + + + diff --git a/app/src/main/assets/pages/table_16_when_to_start_hiv_therapy.html b/app/src/main/assets/pages/table_16_when_to_start_hiv_therapy.html deleted file mode 100644 index 1cc5130..0000000 --- a/app/src/main/assets/pages/table_16_when_to_start_hiv_therapy.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    View in chapter -> Antiretroviral Therapy (ART) and Treatment of Persons Living with HIV and Active TB

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    HHS Panel Recommendations on treatment of Tuberculosis Disease with HIV co-infection: Timing of Antiretroviral Therapy (ART) Initiation relative to TB treatment
    CD4 count and/or clinical status at time of TB diagnosisART Initiation
    < 50 cells/mm3**within 2 weeks of starting TB therapy.
    > 50 cells/mm3**by 8 to 12 weeks of starting TB therapy
    Pregnant, any CD4 countAs early as feasible
    -

    ** EXCEPTION: tuberculous meningitis. To avoid life-threatening CNS immune reconstitution inflammatory - syndrome (IRIS), persons living with HIV and tuberculous meningitis should not be started on ART until AFTER - 8 weeks of TB therapy

    -

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines - for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant - Women with HIV Infection and Interventions to Reduce Perinatal Transmission in the United States, last - reviewed and updated April 15, 2019 (https://aidsinfo.nih.gov/guidelines). -

    - -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_17_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html b/app/src/main/assets/pages/table_17_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html new file mode 100644 index 0000000..4771a22 --- /dev/null +++ b/app/src/main/assets/pages/table_17_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html @@ -0,0 +1,300 @@ + + + + + + + + GA TB Reference Guide + + + + + + + + +
    +
    +
    +
    + +
    +

    17. Use of Anti-TB Medications in Special Situations: Pregnancy, Tuberculosis Meningitis, and Renal Impairment

    +
    +

    View in chapter → Treatment of Active TB in Pregnancy

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
    + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Safe i
    Central Nervous System Penetration iGood (20-100%)
    Dosage in Renal Insufficiency iNo change
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Safe (isolated reports of malformation)
    Central Nervous System Penetration iFair, Inflamed meninges (10-20%)
    Dosage in Renal Insufficiency iNo change
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Caution i
    Central Nervous System Penetration iGood (75-100%)
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Safe
    Central Nervous System Penetration iInflamed meninges only (4-64%)
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration iPoor i
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration iPoor
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Do not use
    Central Nervous System Penetration iFair (5-10%) Inflamed meninges (50-90%)
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval i
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration iGood (100%)
    Dosage in Renal Insufficiency iNo change
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration iGood (50-100%)
    Dosage in Renal Insufficiency iDecrease dose/ Increase interval
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Safe
    Central Nervous System Penetration iInflamed meninges only (50-100%)
    Dosage in Renal Insufficiency iIncomplete data
    +
    + +
    + + + + + + + + + + + + + + + +
    Safety in Pregnancy i Avoid
    Central Nervous System Penetration iUnknown
    Dosage in Renal Insufficiency iProbably no change
    +
    + +
      +
    • Safe: Drug has not been demonstrated to have teratogenic effects.
    • +
    • Avoid: Limited data on safety or for aminoglycosides associated with hearing impairment and/or other toxicity.
    • +
    • Do Not Use: Associated with premature labor, congenital malformations or teratogenicity.
    • +
    +
    +
    +
    + + + + + + + diff --git a/app/src/main/assets/pages/table_17_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when)treating_co-infected_patients.html b/app/src/main/assets/pages/table_17_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when)treating_co-infected_patients.html deleted file mode 100644 index c17f535..0000000 --- a/app/src/main/assets/pages/table_17_what_to_start_choice_of_tb_therapy_and_antiretroviral_therapy_(art)_when)treating_co-infected_patients.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    View in chapter -> Antiretroviral Therapy (ART) and Treatment of Persons Living with HIV and Active TB

    -
    - - - - - - - - - - - - - - - - - - - - - -
    Principle: Despite drug interactions, a rifamycin (rifampin or rifabutin) should be included in TB - regimens for patients receiving ART, with dosage adjustment if necessary (see Table SMR11 for dosage - adjustments). -
    Option 1: Rifabutin-based - ART regimen: Integrase inhibitor and 2 NRTIs - Preferred ART choices: RAL or DTG + TDF/FTC - Alternative ART choices: DTG + ABC/3TC - Contraindicated medications: TAF, other integrase inhibitors (Bictegravir, Elvitegravir) - NOTE: Dolutegravir has higher barrier to resistance compared to raltegravir. Dolutegravir is - preferred when there is high risk poor adherence. -
    Option 2: Rifampin-based - ART regimen: Efavirenz and 2 NRTIs - Preferred ART choices: Efavirenz (NNRTI) + (TDF/FTC) Alternative ART choices: Efavirenz + ABC/3TC - Contraindicated medications: TAF, other NNRTIs: Nevaripine, Doravirine, Etravirine, or Rilpivirine - NOTE: Efavirenz is not a preferred regimen for patients initiating ART. Integrase inhibitors DTG and - RAL are preferred ART regimens for patients initiating ART but require BID dosing if used with - rifampin. Efavirenz has low barrier to resistance making this regimen less suitable when there is - high risk for poor adherence. Efavirenz is associated with neuropsychiatric side-effects. Screening - for depression and suicidality is recommended prior to and during efavirenz-based regimens. - Efavirenz + ABC/3TC is associated with higher rates of virologic failure when baseline HIV viral - load is >100.000 copies/ml. -
    Option 3: Rifabutin-based (dose adjusted) - ART regimen: boosted PI and 2 NRTIs - Preferred ART choices: ATV/r or ATV/c + TDF/FTC - DRV/r or DRV/c + TDF/FTC Alternative ART choices: ABC/3TC in place of TDF/FTC - Contraindicated medications: TAF - NOTE: PI’s have high barrier to resistance. However, given rifabutin is given at half-dose when used - with PI’s adherence to ART should be closely monitored. Poor adherence to PI’s while on rifabutin - increases risk for rifampin resistance. -
    Option 4: Rifampin-based - ART regimen: dose adjusted integrase inhibitor + 2 NRTIs - Preferred ART choices: RAL (dose adjusted) or DTG (dose adjusted)+ TDF/FTC Alternative ART choices: - DTG (dose adjusted) + ABC/3TC - Contraindicated medications: TAF, other integrase inhibitors (Bictegravir, Elvitegravir) - NOTE: Dolutegravir has higher barrier to resistance compared to raltegravir. Dolutegravir is - preferred when there is high risk poor adherence. -
    Choice for Pregnant women with active TB and HIV infection: - TB regimen: Rifabutin –based (dose adjusted) - ART regimen: boosted PI (ARV/r or DRV/r) 2 + 2 NRTIs (TDF/FTC or ABC/3TC) - NOTE: Preliminary data suggest that there is an increased risk of neural tube defects in infants - born to women who were receiving DTG at the time of conception. DTG is contraindicated for pregnant - women during first trimester and for women who are planning to become pregnant or are not using - effective contraception. DTG is the preferred integrase inhibitor after first trimester 1. -
    - -
      -
    • NRTIs: nucleoside/-tide reverse transcriptase inhibitors
    • -
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • -
    • PIs: protease inhibitors
    • -
    • /r: boosted with ritonavir
    • -
    • /c: boosted with cobicistat
    • -
    • TDF: Tenofovir disoproxil fumarate
    • -
    • TAF: Tenofovir alafenamide
    • -
    • FTC: Emtricitabine
    • -
    • 3TC: Lamivudine
    • -
    • ABC: Abacavir
    • -
    • ATV/r: Atazanavir/ritonavir
    • -
    • DRV/r: Daraunavir/ritonavir
    • -
    • RAL: Raltegravir
    • -
    • DTG: Dolutegravir
    • -
    - -

    Above based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on Guidelines - for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs in Pregnant - Women with HIV Infection and Interventions to Reduce Perinatal Transmission in the United States, last - reviewed and updated April 15, 2019 (http://aidsinfo.nih.gov/guidelines). -

    - -

    1-Data on integrase inhibitors and pregnancy outcomes is rapidly evolving and DHHS guidelines are frequently - updated.

    - -

    2-Cobicistat is currently not recommended for pregnant women.

    - -
    -
    - - - - diff --git a/app/src/main/assets/pages/table_18_dosage_adjustments_for_art_and_rifamycins_when_used_in_combination.html b/app/src/main/assets/pages/table_18_dosage_adjustments_for_art_and_rifamycins_when_used_in_combination.html deleted file mode 100644 index 6b0d379..0000000 --- a/app/src/main/assets/pages/table_18_dosage_adjustments_for_art_and_rifamycins_when_used_in_combination.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    Table 18. Dosage Adjustments for ART and Rifamycins when used in Combination

    - - -

    *Preliminary data suggest that there is an increased risk of neural tube defects in infants born to women - who were receiving DTG at the time of conception. DTG is contraindicated for pregnant women during first - trimester and for women who are planning to become pregnant or are not using effective contraception. - DTG is the preferred integrase inhibitor after first trimester.

    - -
      -
    • NNRTIs: non-nucleoside reverse transcriptase inhibitors
    • -
    • PIs: protease inhibitors
    • -
    • ATV/r: Atazanavir/ritonavir
    • -
    • DRV/r: Daraunavir/ritonavir
    • -
    • LPV/r: Lopinavir/ritonavir
    • -
    • RAL: Raltegravir
    • -
    • DTG: Dolutegravir
    • -
    • /c : boosted with cobicistat
    • -
    - -

    Table 18 is based on guidelines developed by the Department of Health and Human Services (DHHS) Panel on - Guidelines for Use of Antiretroviral Agents for Adults and Adolescents and Use of Antiretroviral Drugs - in Pregnant Women with HIV Infection and Interventions to Reduce Perinatal Transmission in the United - States, last reviewed and updated April 15, 2019 - (aidsinfo.nih.gov/guidelines)

    - -

    1-Data on integrase inhibitors and pregnancy outcomes is rapidly evolving and DHHS - guidelines are frequently updated.

    - -

    2-Cobicistat is currently not recommended for pregnant women.

    -
    - - - - - diff --git a/app/src/main/assets/pages/table_21_grady_hospital_tb_isolation_policy.html b/app/src/main/assets/pages/table_18_grady_hospital_tb_isolation_policy.html similarity index 51% rename from app/src/main/assets/pages/table_21_grady_hospital_tb_isolation_policy.html rename to app/src/main/assets/pages/table_18_grady_hospital_tb_isolation_policy.html index d496690..27df605 100644 --- a/app/src/main/assets/pages/table_21_grady_hospital_tb_isolation_policy.html +++ b/app/src/main/assets/pages/table_18_grady_hospital_tb_isolation_policy.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -16,40 +16,43 @@
    -

    View in chapter -> Surveillance for Health Care Workers

    -
    +
    +
    +
    + +
    +

    18. Grady Hospital TB Isolation Policy

    +
    +

    View in chapter → Surveillance for Health Care Workers

    +

    Last Updated April 2026

    +
    +
    +
    - - - - - - - + + - + - - + - +
    Grady Hospital TB Isolation Policy
    Criteria for IsolationLength of IsolationCriteria for IsolationLength of Isolation
    1. Active Pulmonary TBActive Pulmonary TB Duration of hospitalization if less than 4 weeks; if >4 weeks must have clinical response, drug susceptibility data and 2 negative AFB sputum smears
    2. "Rule Out" TB
    +
    "Rule Out" TB Any patient who has sputum for AFB collected or pulmonary TB is in the differential diagnosis. Until 2 sputum AFB smears are negative - Until 2 sputum AFB smears are negative
    3. HIV+ patient admitted with abnormal CXRPerson living with HIV admitted with abnormal CXR Until 2 sputum AFB smears are negative
    -
    diff --git a/app/src/main/assets/pages/table_19_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html b/app/src/main/assets/pages/table_19_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html deleted file mode 100644 index 80b51e0..0000000 --- a/app/src/main/assets/pages/table_19_guidelines_for_treatment_of_extrapulmonary_tuberculosis.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - - -
    -

    View in chapter -> Adjunctive Use of Corticosteroid Therapy

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SiteLength of therapy with standard regimen and normal host (months)CorticosteroidsSteroid dosing A (adults) C (children)Additional management considerations
    Lymph node6Not recommendedPursue microbiologic proof of diagnosis prior to starting Rx
    Bone (non-vertebral) and joint6 to 9Not recommendedExtend to 12 months if hardware is present
    Spine without meningitis6 to 9Not recommended for TB rx but may be indicated for cord compressionMost spine infection can be cured with medical Rx. Surgery indicated for relief of cord - compression, progressive disease despite medical therapy, instability of the spine. -
    Spine with meningitis9 to 12Strongly recommendedA and C >= 25kg: 12 mg/day of dexamethasone x 3 weeks followed by 3- week taper

    C < - 25kg:8 mg /day of dexamethasone for 3 weeks followed by 3- week taper

    CNS tuberculosis including meningitis6 to 9Strongly recommendedNegative CSF culture or PCR test does NOT exclude this diagnosis

    Follow CSF profile for response - to therapy

    Pleural disease6Not recommendedEmpyema may require decortication
    Pericarditis6NO LONGER routinely RECOMMENDEDConsider steroids for patients at highest risk of later constriction: - large pericardial effusions high levels of inflammatory cells or markers in pericardial fluid those - with early signs of constriction -
    Disseminated disease6Not recommendedObtain cultures from blood, urine and sputum in addition to clinically apparent sites of disease. -
    Genitourinary6Not recommended
    Peritoneal6Not recommended
    -

    *ALWAYS EVALUATE for concomitant pulmonary involvement with respiratory samples for smear and culture - (regardless of chest imaging findings).

    - -

    Based on CID 2016:63 (1 October) • Nahid et al

    -
    -
    - - - - - diff --git a/app/src/main/assets/pages/table_1_interpretation_criteria_for_the_quantiferon_tb_gold_plus_test.html b/app/src/main/assets/pages/table_1_interpretation_criteria_for_the_quantiferon_tb_gold_plus_test.html index e2308dc..8c0462e 100644 --- a/app/src/main/assets/pages/table_1_interpretation_criteria_for_the_quantiferon_tb_gold_plus_test.html +++ b/app/src/main/assets/pages/table_1_interpretation_criteria_for_the_quantiferon_tb_gold_plus_test.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -15,60 +15,117 @@
    -

    View in chapter -> Interferon-y Release Assays (IGRAs)

    -
    - +
    +
    +
    + +
    +

    1. Interpretation Criteria for the QuantiFERON-TB Gold Plus Test (QFT-Plus)

    +
    +

    View in chapter → Interferon-y Release Assays (IGRAs)

    +

    Last Updated April 2026

    +
    +
    +
    +

    Possible Test Results

    +
    +
      +
    • +
    • +
    • +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Nil (IU/ml) < 8.0
    TB1 minus Nil (IU/ml)> 0.35 and > 25% of Nil
    TB2 minus Nil (IU/ml)Any
    Mitogen minus NilAny
    Report/InterpretationM. tuberculosis infection likely
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nil (IU/ml) < 8.0
    TB1 minus Nil (IU/ml)< 0.35 or > 0.35 and < 25 % of Nil
    TB2 minus Nil (IU/ml)< 0.35 or > 0.35 and < 25% of Nil
    Mitogen minus Nil > 0.50
    Report/InterpretationM. tuberculosis infection not likely
    + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
    Nil (IU/ml)TB1 minus Nil (IU/ml)TB2 minus Nil (IU/ml)Mitogen minus NilQFT-Plus ResultReport/Interpretation
    < 8.0> 0.35 and > 25% of NilAnyAnyPositiveM. tuberculosis infection likely
    Any> 0.35 and > 25% of Nil
    < 0.35 or > 0.35 and < 25% of Nil< 0.35 or > 0.35 and < 25% of Nil> 0.50 NegativeM. tuberculosis infection NOT likely
    < 0.35 or > 0.35 and < 25 % of Nil< 0.35 or > 0.35 and < 25% of Nil< 0.50IndeterminateLikelihood of M. tuberculosis infection cannot be determined
    > 8.0Any
    Nil (IU/ml) < 8.0> 8.0
    TB1 minus Nil (IU/ml)< 0.35 or > 0.35 and < 25% of NilAny
    TB2 minus Nil (IU/ml)< 0.35 or > 0.35 and < 25% of NilAny
    Mitogen minus Nil < 0.50Any
    Report/InterpretationLikelihood of M. tuberculosis infection cannot be determined

    Source: Based on manufacturer recommendations for QuantiFERON-TB Gold Plus [Package insert].
    Available at: - - https://www.quantiferon.com/us/wp-content/uploads/sites/13/2020/01/L1095849-R06-QFT-Plus-ELISA-IFU.pdf + + https://www.qiagen.com/us/resources/resourcedetail?id=ac068fc7-a994-4443-ac7c-dda43ce2bc5e&lang=en

    + diff --git a/app/src/main/assets/pages/table_20_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html b/app/src/main/assets/pages/table_20_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html deleted file mode 100644 index edfe84c..0000000 --- a/app/src/main/assets/pages/table_20_use_of_anti-tb_medications_in_special_situations_pregnancy_tuberculosis_meningitis_and_renal_failure.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - GA TB Reference Guide - - - - - - - - -
    -

    View in chapter -> Treatment of Active TB in Pregnancy

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DrugSafety in Pregnancy (1)Central Nervous System Penetration (2)Dosage in Renal Insufficiency (3)
    IsoniazidSafe (4)Good (20-100%)No change
    RifampinSafe (isolated reports of malformation)Fair, Inflamed meninges (10- 20%)No change
    PyrazinamideCaution (1)Good (75-100%)Decrease dose/ Increase interval
    EthambutolSafeInflamed meninges only (4-64%)Decrease dose/ Increase interval
    Aminoglycosides (Streptomycin, Kanamycin, Amikacin)AvoidPoor (5)Decrease dose/ Increase interval (6)
    CapreomycinAvoidPoorDecrease dose/ Increase interval (6)
    Levofloxacin, Moxifloxacin GatifloxacinDo not useFair (5-10%) Inflamed meninges (50-90%)Decrease dose/ Increase interval (7)
    EthionamideAvoidGood (100%)No change
    CycloserineAvoidGood (50-100%)Decrease dose/ Increase interval
    Para-amino-silicylic acidSafeInflamed meninges - only (50-100%) - Incomplete data
    ClofazimineAvoidUnknownProbably no change
    - -

    Safe: Drug has not been demonstrated to have teratogenic effects.

    -

    Avoid: Limited data on safety or for aminoglycosides associated with hearing impairment and/or - other toxicity.

    -

    Do Not Use: Associated with premature labor, congenital malformations or teratogenicity.

    -

    NOTES: Table 20 Special Situations

    - -

    (1) As - with all medications given during pregnancy, anti-TB drugs should be used with caution. The risk of TB to - the - fetus far outweighs the risk of medications. Pregnant patients with active TB should be treated. Data are - limited on the safety of some anti-TB drugs during pregnancy. Table 20 presents a consensus of published - data - and recommendations. Although detailed teratogenic data is not available, PZA can probably be used safely - for - pregnant patients. Concentrations of anti-TB drugs in breast milk are low; treatment with these medications - is - not a contraindication to breastfeeding. (Conversely, medication present in breast milk is not sufficient to - prevent or treat TB in the newborn.) Consult a medical expert when treating a pregnant patient who has TB. - For - treatment of LTBI, most authorities recommend beginning INH several months after delivery, unless the woman - is - at high risk for progression to active TB (e.g., recent TST or IGRA conversion, HIV-infected).

    -

    (2) Steroid treatment appears to improve outcome in TB meningitis, particularly in patients with altered - mental - status.

    -

    (3) If possible, monitor serum drug levels of patients with renal insufficiency. See page 71 for dosage.

    -

    (4) Supplement with pyridoxine (Vitamin B6) during pregnancy.

    -

    (5) Has been used intrathecally; efficacy not documented.

    -

    (6) Avoid aminoglycosides and capreomycin in patients with reversible renal damage, if possible.

    -

    (7) Fluoroquinolones may accumulate in renal failure and are poorly removed by dialysis. Dose adjustment - indicated. -

    -
    -
    - - - - - diff --git a/app/src/main/assets/pages/table_2_interpretation_criteria_for_the_t_spot_tb_test.html b/app/src/main/assets/pages/table_2_interpretation_criteria_for_the_t_spot_tb_test.html index 99753e1..53f0201 100644 --- a/app/src/main/assets/pages/table_2_interpretation_criteria_for_the_t_spot_tb_test.html +++ b/app/src/main/assets/pages/table_2_interpretation_criteria_for_the_t_spot_tb_test.html @@ -1,92 +1,175 @@ - + - - - - + + + + GA TB Reference Guide - - - - - + + + + + - + +
    +
    +
    +
    + +
    +

    + 2. Interpretation Criteria for the T-SPOT.TB Test +

    +
    +

    + + View in chapter → + + + Interferon-y Release Assays (IGRAs) + + +

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • +
    • +
    • +
    • +
    +
    -
    -

    View in chapter -> Interferon-y Release Assays (IGRAs)

    -
    - - - - - - - - - +
    InterpretationNil*TB Response†Mitogen§
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +
    Positive¶≤ 10 spots≥ 8 spotsAny
    Borderline**≤ 10 spots5, 6, or 7 spotsAny
    Negative†† ≤ 10 spots>20 spots>20 spots
    Invalid**≤ 10 spotsAnyAny
    ≤ 10 spots<5 spots<20 spots
    Nil + i≤ 10 spots
    TB Response + i≥ 8 spots
    Mitogen + i + Any
    -
    -

    - Source: Based on Oxford Immunotec T-Spot.TB package insert.
    - Available at: - http://www.oxfordimmunotec.com/international/wp-content/uploads/sites/3/Final-File-PI-TB-US-V6.pdf - -

    + + + + + + + + + + + + + + + +
    Nil + i + < 10 spots
    TB Response + i + 5, 6, or 7 spots
    Mitogen + i + Any
    -

    * The number of spots resulting from incubation of PBMCs in culture media without antigens.
    - † The greater number of spots resulting from stimulation of peripheral - blood mononuclear cells (PBMCs) with two separate cocktails of peptides - representing early secretory antigenic target-6 (ESAT-6) or culture filtrate - protein-10 (CFP-10) minus Nil.
    - § The number of spots resulting from stimulation of PBMCs with mitogen - without adjustment for the number of spots resulting from incubation of - PBMCs without antigens.
    - ¶ Interpretation indicating that Mycobacterium tuberculosis infection is - likely.
    - ** Interpretation indicating an uncertain likelihood of M. tuberculosis infection. In the case of Invalid - results, these should be reported as “Invalid” - and it is recommended to collect another sample and retest the individual.
    - †† Interpretation indicating that M. tuberculosis infection is not likely.

    + + + + + + + + + + + + + + + +
    Nil + i + ≤ 10 spots
    TB Response + i + > 20 spots
    Mitogen + i + > 20 spots
    -
    - + + + + + + + + + + + + + + + + + + +
    Nil + i + ≤ 10 spots≤ 10 spots
    TB Response + i + Any< 5 spots
    Mitogen + i + Any< 20 spots
    +
    +

    + Source: Based on Oxford Immunotec T-Spot.TB package insert.
    + Available at: + + http://www.oxfordimmunotec.com/international/wp-content/uploads/sites/3/Final-File-PI-TB-US-V6.pdf + +

    +

    + 1. Interpretation indicating that Mycobacterium tuberculosis infection + is likely.
    + 2. Interpretation indicating an uncertain likelihood of M. tuberculosis + infection. In the case of Invalid results, these should be reported as + “Invalid” and it is recommended to collect another sample and retest the + individual.
    + 3. Interpretation indicating that M. tuberculosis infection is not + likely. +

    +
    + - - + + + diff --git a/app/src/main/assets/pages/table_3_high_prevalence_and_high_risk_groups.html b/app/src/main/assets/pages/table_3_high_prevalence_and_high_risk_groups.html index 46728f5..c9b57f5 100644 --- a/app/src/main/assets/pages/table_3_high_prevalence_and_high_risk_groups.html +++ b/app/src/main/assets/pages/table_3_high_prevalence_and_high_risk_groups.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -15,28 +15,37 @@
    -

    View in chapter -> Targeted Testing and Diagnostic Tests

    -
    +
    +
    +
    + +
    +

    3. High Prevalence and High Risk Groups

    +
    +

    View in chapter → Targeted Testing and Diagnostic Tests

    +

    Last Updated April 2026

    +
    +
    +
    - - + + - - + - - - - +
    Groups with a High Prevalence of Latent TB Infection Groups with a High Risk of Progression to Active TB Disease if Infected with M. - tuberculosisGroups With a High Prevalence of Latent TB Infection Groups With a High Risk of Progression to Active TB Disease if Infected with M. tuberculosis
    Persons born in countries with high rates of TBPersons living with HIV Persons who are close contacts of persons with infectious active TB + Persons living with HIV Persons who are close contacts of persons with infectious active TB
    Groups with poor access to healthcareChildren less than 5 years of ageChildren less than 6 years of age
    Persons who live or spend time in certain facilities (e.g., nursing homes, correctional institutions, - homeless shelters, drug treatment centers) + homeless shelters, drug treatment centers) Persons with recent infection with M. tuberculosis (e.g., have had a diagnostic test result for LTBI convert to positive in the past 1-2 years) Persons who have chest radiographs suggestive of old TB @@ -44,13 +53,8 @@
    Persons who inject drugsPersons with certain medical conditions*
    *Diabetes mellitus, silicosis, prolonged therapy with corticosteroids, immunosuppressive - therapy particularly TNF-α blockers, leukemia, Hodgkin’s disease, head and neck cancers, - severe kidney disease, certain intestinal conditions, malnutrition - Persons with certain medical conditions i
    @@ -60,4 +64,5 @@ - \ No newline at end of file + + diff --git a/app/src/main/assets/pages/table_4_recommendations_for_regimens_to_treat_latent_tuberculosis_infection.html b/app/src/main/assets/pages/table_4_recommendations_for_regimens_to_treat_latent_tuberculosis_infection.html index 7be6c67..cfdbd84 100644 --- a/app/src/main/assets/pages/table_4_recommendations_for_regimens_to_treat_latent_tuberculosis_infection.html +++ b/app/src/main/assets/pages/table_4_recommendations_for_regimens_to_treat_latent_tuberculosis_infection.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -15,67 +15,92 @@
    -

    View in chapter -> Treatment Regimens for LTBI

    -
    - - - - - - - - - +
    +
    +
    + +
    +

    4. Recommendations for Regimens to Treat Latent Tuberculosis Infection

    +
    +

    View in chapter → Treatment Regimens for LTBI

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • +
    • +
    +
    + +
    Priority rank* RegimenRecommendation (strong or conditional)Evidence (high, moderate, low, or very low)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
    Preferred3 mos isoniazid plus rifapentine given once weeklyStrongModerate
    4 mos rifampin given dailyModerate (HIV negative)†
    3 mos isoniazid plus rifampin given dailyConditionalVery low (HIV negative)
    Low (HIV positive)
    Alternative6 mos isoniazid given dailyStrong§Moderate (HIV negative
    ConditionalModerate (HIV positive)
    9 mos isoniazid given dailyModerate
    Regimes3 months isoniazid plus rifapentine4 months rifampin3 months isoniazid plus rifampin
    FrequencyOnce weeklyDailyDaily
    Recommendation (Strong or Conditional)StrongStrongConditional
    Evidence (High, Moderate, Low, or Very Low)ModerateModerate (HIV negative) i Very low (HIV negative) / Low (HIV positive) i
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Regimes6 months isoniazid6 months isoniazid9 months isoniazid
    FrequencyDailyDailyDaily
    Recommendation (Strong or Conditional)Strong iConditionalConditional
    Evidence (High, Moderate, Low, or Very Low)Moderate (HIV negative)Moderate (if living with HIV)Moderate
    -

    Abbreviation: HIV = human immunodeficiency virus
    - * Preferred: excellent tolerability and efficacy, shorter treatment duration, - higher completion rates than longer regimens, and therefore higher - effectiveness. Alternative: excellent efficacy but concerns regarding longer - treatment duration, lower completion rates, and therefore lower effectiveness. -
    † No evidence reported in HIV-positive persons.
    - § Strong recommendation for those persons unable to take a preferred - regimen (e.g., due to drug intolerability or drug-drug interactions). -

    + +

    Abbreviation: HIV = human immunodeficiency virus

    +

    1. Preferred: excellent tolerability and efficacy, shorter treatment duration, higher completion rates than longer regimens, and therefore higher effectiveness.
    + 2. Alternative: excellent efficacy but concerns regarding longer treatment duration, lower completion rates, and therefore lower effectiveness.

    + + diff --git a/app/src/main/assets/pages/table_5_dosages_for_recommended_lbti_treatment_regimens.html b/app/src/main/assets/pages/table_5_dosages_for_recommended_lbti_treatment_regimens.html index 295cf0c..bccc94a 100644 --- a/app/src/main/assets/pages/table_5_dosages_for_recommended_lbti_treatment_regimens.html +++ b/app/src/main/assets/pages/table_5_dosages_for_recommended_lbti_treatment_regimens.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -15,124 +15,160 @@
    -

    View in chapter -> Treatment Regimens for LTBI

    -

    - * Isoniazid is formulated as 100-mg and 300-mg tablets.
    - † Rifapentine is formulated as 150-mg tablets in blister packs that should be kept - sealed until use.
    - § Intermittent regimens must be provided via directly observed therapy (i.e., a - health care worked observes the ingestion of medication).
    - ¶ Rifampin (rifampicin) is formulated as 150-mg and 300-mg capsules.
    - ** The American Academy of Pediatrics acknowledges that some experts use - rifampin at 20 - 30 mg/kg for the daily regimen when prescribing for infants and - toddlers. (Source: American Academy of Pediatrics. Tuberculosis. In: Kimberlin - DW, Brady MT, Jackson MA, Long SS, eds. Red Book: 2018 Report of the - Committee on Infectious Diseases. 31st ed. Itasca, IL: American Academy of - Pediatrics; 2018:829-53).
    - †† The American Academy of Pediatrics recommends an isoniazid dosage of - 10 - 15 mg/kg for the daily regimen and 20 - 30 mg/kg for the twice-weekly - regimen. -
    - Adapted from MMWR Recomm Rep 2020; 69(1):1-11. + 1. Isoniazid is formulated as 100-mg and 300-mg tablets.
    + 2. Rifapentine is formulated as 150-mg tablets in blister packs that should be kept sealed until use. Rifapentine should not be used for children <2 years of age due to lack of pharmacokinetic data.
    + 3. Rifampin (rifampicin) is formulated as 150-mg and 300-mg capsules.

    - + + + diff --git a/app/src/main/assets/pages/table_6_ltbi_treatment_drug_adverse_reactions.html b/app/src/main/assets/pages/table_6_ltbi_treatment_drug_adverse_reactions.html index f74ae72..ccd5e93 100644 --- a/app/src/main/assets/pages/table_6_ltbi_treatment_drug_adverse_reactions.html +++ b/app/src/main/assets/pages/table_6_ltbi_treatment_drug_adverse_reactions.html @@ -1,97 +1,228 @@ - + - - - + + + GA TB Reference Guide - - - - + + + + + -
    -

    View in chapter -> Treatment Regimens for LTBI

    -
    - - +
    +
    +
    + +
    +

    6. LTBI Treatment Drug Adverse Reactions

    +
    +

    + + View in chapter → + + + Treatment Regimens for LTBI + + + +

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    + - - - - + + - + + + + + + + + + +
    DrugAdverse ReactionsMonitoringCommentsAdverse Reactions + Gastrointestinal (GI) upset, hepatic enzyme elevations, + hepatitis, peripheral neuropathy, mild effects on central + nervous system (CNS), drug interactions +
    Monitoring + Order baseline hepatic chemistry blood tests (at least AST or + ALT) for patients with specific conditions: Living with HIV, + liver disorders, postpartum period (<3 months after delivery), + regular alcohol use, injection drug use, or use of medications + with known possible interactions. [Some clinicians prefer to + obtain baseline tests on all adults]. Repeat measurements if: + baseline results are abnormal + client is at high-risk for adverse reactions + client has symptoms of adverse reactions +
    Comments + Hepatitis risk increases with age and alcohol consumption. + Pyridoxine can prevent isoniazid-induced peripheral neuropathy. +
    + + - - + - + + + - + + + + +
    Isoniazid (INH)Gastrointestinal (GI) upset, hepatic enzyme elevations, hepatitis, peripheral - neuropathy, mild effects on central nervous system (CNS), drug interactions + Adverse Reactions + Orange discoloration of body fluids (secretions, tears, urine) , + GI upset, drug interactions, hepatitis, thrombocytopenia, rash, + fever, influenza-like symptoms, hypersensitivity reaction + i + Many drug-drug interactions Order baseline hepatic chemistry blood tests (at least AST or ALT) for patients with the following - specific conditions: HIV infection, liver disorders, postpartum period (≤ 3 months after - delivery), regular alcohol use, injection drug use, or use of medica-tions with known possible inter - -actions.
    -
    - [some providers prefer to obtain baseline tests on all adults].
    -
    - Repeat measurements if: * baseline results are abnormal * client is at high-risk for adverse - reactions * client has symptoms of adverse reactions +
    Monitoring + Complete blood count (CBC), platelets and liver function tests. + Repeat measurements if: + baseline results are abnormal + client has symptoms of adverse reactions  Prior to starting RIF + or RPT: need to carefully review all medications being taken by + the patient with LTBI and ensure there is no contraindication to + the use of that medication and RIF, RBT or RPT. Hepatitis risk increases with age and alcohol consumption. Pyridoxine can prevent isoniazid-induced - peripheral neuropathy. +
    Comments + Hepatitis risk increases with age and alcohol consumption. + Rifampin monotherapy is associated with lower risk of + hepatotoxicity compared to INH monotherapy for patients being + treated for LTBI. Need to carefully review for possible + drug-drug interactions prior to starting RIF, RBT or RPT and + ensure there are no contraindications to these agents prior to + using them for the treatment of LTBI.
    + + + - - - + - + + + - - - - +
    Rifampin (RIF) and Rifapentine (RPT)Orange discoloration of body fluids (secretions, tears, urine) , GI upset, drug - interactions, hepatitis, thrombocytopenia, rash, fever, influenza-like symptoms, hypersensitivity - reaction* Many drug-drug interactionsComplete blood count (CBC), platelets and liver function tests.
    - Repeat measurements if: * baseline results are abnormal * client has symptoms of adverse - reactions Prior to starting RIF or RPT: need to carefully review all medications - being taken by the patient with LTBI and ensure there is no contraindication to the use of that - medication and RIF or RPT. +
    Adverse Reactions + See adverse effects associated with isoniazid alone and a + rifamycin alone (see above) Hepatitis risk increases with age and alcohol consumption. Rifampin monotherapy is associated with - lower risk of hepatotoxicity compared to INH monotherapy for patients being treated for LTBI. Need - to carefully review for possible drug-drug interactions prior to starting RIF or RPT and ensure - there are no contraindications to these agents prior to using them for the treatment of LTBI. +
    Monitoring + Complete blood count (CBC), platelets and liver function tests. + Repeat measurements if: + baseline results are abnormal + client has symptoms of adverse reactions  Prior to starting RIF + or RPT: need to carefully review all medications being taken by + the patient with LTBI and ensure there is no contraindication to + the use of that medication and RIF or RPT.
    Isoniazid plus rifapentine (3HP)See adverse effects associated with isoniazid alone and a rifamycin alone (see above) See above recommendations for isoniazid and rifamycin drugsApproximately 4% of all patients using 3HP experience flu-like or other systemic drug reactions, - with fever, headache, dizziness, nausea, muscle and bone pain, rash, itching, red eyes, or other - symptoms. Approximately 5% of persons discontinue 3HP because of adverse events, including systemic - drug reactions; these reactions typically occur after the first 3–4 doses, and begin - approximately 4 hours after ingestion of medication. + Comments + Approximately 4% of all patients using 3HP experience flu-like + or other systemic drug reactions, with fever, headache, + dizziness, nausea, muscle and bone pain, rash, itching, red + eyes, or other symptoms. Approximately 5% of persons discontinue + 3HP because of adverse events, including systemic drug + reactions; these reactions typically occur after the first 3–4 + doses, and begin approximately 4 hours after ingestion of + medication.
    -

    - * Hypersensitivity reaction to rifamycins (rifampin or rifapentine): reactions may - include a flu-like syndrome (e.g. fever, chills, headaches, dizziness, musculoskeletal pain), - thrombocytopenia, shortness of breath or other signs and symptoms including wheezing, acute bronchospasm, - urticaria, petechiae, purpura, - pruritus, conjunctivitis, angioedema, hypotension or shock. If moderate to - severe reaction (e.g. thrombocytopenia, hypotension), hospitalization or lifethreatening event: Discontinue - treatment. If mild reaction (e.g. rash, dizziness, - fever): Continue to monitor patient closely with a low threshold for discontinuing treatment. A flu-like - syndrome appears to be the most common side effect - profile leading to discontinuation of the 3HP regimen. -

    +

    Additional Notes:

    +
      +
    • Hypersensitivity reaction to rifamycins (rifampin, rifabutin, or rifapentine): reactions may include a flu-like syndrome (e.g. fever, chills, headaches, dizziness, musculoskeletal pain), thrombocytopenia, shortness of breath or other signs and symptoms including wheezing, acute bronchospasm, urticaria, petechiae, purpura, pruritus, conjunctivitis, angioedema, hypotension or shock.
    • +
    • If moderate to severe reaction (e.g. thrombocytopenia, hypotension), hospitalization or life-threatening event: Discontinue treatment.
    • +
    • If mild reaction (e.g. rash, dizziness, fever): Continue to monitor patient closely with a low threshold for discontinuing treatment.
    • +
    • A flu-like syndrome appears to be the most common side effect profile leading to discontinuation of the 3HP regimen.
    • +
    • Rifabutin can rarely cause uveitis.
    • +
    + diff --git a/app/src/main/assets/pages/table_7_recommended_regimens_for_treatment_of_adults_and_children_with_drug_susceptible_tb_pulmonary_tb.html b/app/src/main/assets/pages/table_7_recommended_regimens_for_treatment_of_adults_and_children_with_drug_susceptible_tb_pulmonary_tb.html index 5ee3387..9b0b79d 100644 --- a/app/src/main/assets/pages/table_7_recommended_regimens_for_treatment_of_adults_and_children_with_drug_susceptible_tb_pulmonary_tb.html +++ b/app/src/main/assets/pages/table_7_recommended_regimens_for_treatment_of_adults_and_children_with_drug_susceptible_tb_pulmonary_tb.html @@ -4,89 +4,244 @@ - + GA TB Reference Guide + + +
    +
    +
    +
    + +
    +

    + 7. Recommended Regimens for Treatment of Adults and Children with + Drug-Susceptible TB (Pulmonary TB) +

    +
    +

    + View in chapter → + + + Standard Therapy for Current (Active) TB Disease + + + +

    +

    Last Updated April 2026

    +
    +
    + + + + diff --git a/app/src/main/assets/pages/table_8_first-line_tb_drugs_dosing_for_adults_(ages_16_and_over)_directly_observed_therapy_(dot)_is_mandatory.html b/app/src/main/assets/pages/table_8_first-line_tb_drugs_dosing_for_adults_(ages_16_and_over)_directly_observed_therapy_(dot)_is_mandatory.html index 39326b1..1d1da53 100644 --- a/app/src/main/assets/pages/table_8_first-line_tb_drugs_dosing_for_adults_(ages_16_and_over)_directly_observed_therapy_(dot)_is_mandatory.html +++ b/app/src/main/assets/pages/table_8_first-line_tb_drugs_dosing_for_adults_(ages_16_and_over)_directly_observed_therapy_(dot)_is_mandatory.html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -15,126 +15,239 @@
    - -

    View in chapter -> Special Clinical Situations

    +
    +
    +
    + +
    +

    8. First-line TB Drugs: Dosing for Adults (ages 16 and over) Directly Observed Therapy (DOT) is mandatory

    +
    +

    View in chapter → Standard Therapy for Current (Active) TB Disease

    +

    Last Updated April 2026

    +
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    DrugsAdult Dose based on body weight in kilograms (kg)* - Adverse Reactions
    DailyThrice-WeeklyTwice-Weekly
    Isoniazid300 mg900 mg900 mg -
      -
    • Gastrointestinal (GI) upset
    • -
    • Liver enzyme elevation
    • -
    • Hepatitis
    • -
    • Mild effects on central nervous
    • -
    • Drug interactions
    • -
    -
    Rifampin600 mg600 mg600 mg -
      -
    • Orange discoloration of body fluids and secretions
    • -
    • Drug interactions
    • -
    • GI upset
    • -
    • Hepatitis
    • -
    • Bleeding problems
    • -
    • Influenze-like symptoms
    • -
    • Rash
    • -
    • Uveitis (rifabutin only)
    • -
    -
    Rifabutin300 mgNot recommendedNot recommended
    Pyrazinamide**40-55 kg: 1000 mg40-55 kg: 1500 mg40-55 kg: 2000 mg -
      -
    • GI upset
    • -
    • Joint aches
    • -
    • Hepatitis
    • -
    • Rash
    • -
    • Hyperuricemia
    • -
    • Gout (rare)
    • -
    -
    56-75 kg: 1500 mg56-75 kg: 2500 mg56-75 kg: 3000 mg
    76+ kg: 2000 mg76+ kg: 3000 mg76+ kg: 4000 mg
    Ethambutol**40-55 kg: 800 mg40-55 kg: 1200 mg40-55 kg: 2000 mg -
      -
    • Optic neuritis
    • -
    -
    56-75 kg: 1200 mg56-75 kg: 2000 mg56-75 kg: 2800 mg
    76+ kg: 1600 mg76+ kg: 2400 mg76+ kg: 4000 mg
    +
    +
      +
    • +
    • +
    • +
    • +
    • +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease). +
    FrequencyDailyThrice-Weekly
    Standard Adult Dose 300 mg900 mg
    Adverse Reactions +
      +
    • Gastrointestinal (GI) upset
    • +
    • Liver enzyme elevation
    • +
    • Hepatitis
    • +
    • Mild effects on central nervous
    • +
    • Drug interactions
    • +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease). +
    NoteUse Rifampin or Rifabutin, but not both.
    FrequencyDailyThrice-Weekly
    Standard Adult Dose 600 mg600 mg
    Adverse Reactions +
      +
    • Orange discoloration of body fluids and secretions
    • +
    • Drug interactions
    • +
    • GI upset
    • +
    • Hepatitis
    • +
    • Bleeding problems
    • +
    • Influenze-like symptoms
    • +
    • Rash
    • +
    • Uveitis (rifabutin only)
    • +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease). +
    NoteUse Rifampin or Rifabutin, but not both.
    FrequencyDailyThrice-Weekly
    Standard Adult Dose 300 mgNot recommended
    Adverse Reactions +
      +
    • Orange discoloration of body fluids and secretions
    • +
    • Drug interactions
    • +
    • GI upset
    • +
    • Hepatitis
    • +
    • Bleeding problems
    • +
    • Influenze-like symptoms
    • +
    • Rash
    • +
    • Uveitis (rifabutin only)
    • +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease). +
    FrequencyDailyThrice-Weekly
    Adult Dose Based on Body Weight in Kilograms (kg) i40-55 kg: 1000 mg40-55 kg: 1500 mg
    56-75 kg: 1500 mg56-75 kg: 2500 mg
    76+ kg: 2000 mg76+ kg: 3000 mg
    Adverse Reactions +
      +
    • GI upset
    • +
    • Joint aches
    • +
    • Hepatitis
    • +
    • Rash
    • +
    • Hyperuricemia
    • +
    • Gout (rare)
    • +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease). +
    FrequencyDailyThrice-Weekly
    Adult Dose Based on Body Weight in Kilograms (kg) i40-55 kg: 800 mg40-55 kg: 1200 mg
    56-75 kg: 1200 mg56-75 kg: 2000 mg
    76+ kg: 1600 mg76+ kg: 2400 mg
    Adverse Reactions +
      +
    • Optic neuritis
    • +
    +
    +
    + +
      +
    1. Calculate pyrazinamide and ethambutol doses using actual body weight. Pyrazinamide and ethambutol dosage adjustment is needed in patients with estimated creatinine clearance less than 50 ml/min or those with end-stage renal disease on dialysis.
    2. +
    + +

    Additional Note: Refer to current drug reference or drug package insert for a complete list of adverse drug reactions and drug interactions.

    Source: https://academic.oup.com/cid/article/63/7/e147/2196792?login=trueas

    - -

    *Formula used to convert pounds to kilograms: Divide pounds by 2.2 to get kilograms.

    -

    Example: Patient weighs 154 pounds ÷ 2.2 = 70 kilograms.

    -

    ** Calculate pyrazinamide and ethambutol doses using actual body weight. Pyrazinamide and ethambutol dosage - adjustment is needed in patients with estimated creatinine clearance less than 50 ml/min or those with - end-stage renal disease on dialysis.

    -

    NOTE: Refer to current drug reference or drug package insert for a complete list of adverse drug reactions - and drug interactions.

    -
    + + diff --git a/app/src/main/assets/pages/table_9_pediatric_dosage_isoniazid_in_children_(birth_to_15_years).html b/app/src/main/assets/pages/table_9_pediatric_dosage_isoniazid_in_children_(birth_to_15_years).html index bd63638..58ef433 100644 --- a/app/src/main/assets/pages/table_9_pediatric_dosage_isoniazid_in_children_(birth_to_15_years).html +++ b/app/src/main/assets/pages/table_9_pediatric_dosage_isoniazid_in_children_(birth_to_15_years).html @@ -4,7 +4,7 @@ - + GA TB Reference Guide @@ -16,130 +16,307 @@
    -

    View in chapter -> Special Clinical Situations

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 10-15 mg/kg POTwice-weekly Dose (mg) 20-30 mg/kg PO
    6 - 103 - 4.550100mg PO
    11 - 145.0 - 6.050150mg PO
    14.5 - 186.5 – 8.0100200mg PO
    18.5 - 21.58.5 – 9.5100250mg PO
    22 – 2410.0 – 11150300mg PO
    25 - 2911.5 - 13150350 mg PO
    29.5 - 3213.5 - 14.5200400 mg PO
    33 - 3515 - 16200450 mg PO
    36 - 4016.5 - 18250500 mg PO
    40.5 - 4318.5 - 19.5250550 mg PO
    44 - 4820 - 21.5300600 mg PO
    48.5 - 5122 - 23300650 mg PO
    52 - 54.523.5 - 24.5300700 mg PO
    55 - 57.525 - 26300750 mg PO
    58 - 6226.5 - 28300800 mg PO
    62.5 - 6528.5 - 29.5300850 mg PO
    66 +30 +300900 mg PO
    - -

    NOTE: Isoniazid tablets come in 50 mg, 100mg, 300 mg sizes and can be crushed for oral administration. - Isoniazid tablets are also scored.

    -

    Isoniazid Syrup (50mg/5ml) should not be refrigerated. It contains sorbitol and will cause diarrhea. It - should be used only when crushed tablets cannot accommodate the situation. (keep at room temperature).

    +
    +
    +
    + +
    +

    9. Pediatric Dosage in Children (Birth to 15 Years)

    +
    +

    View in chapter → Standard Therapy for Current (Active) TB Disease

    +

    Last Updated April 2026

    +
    +
    +
    +
    +
      +
    • +
    • +
    • +
    • +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease).
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 10-15 mg/kg PO
    6 - 103 - 4.550
    11 - 145.0 - 6.050
    14.5 - 186.5 – 8.0100
    18.5 - 21.58.5 – 9.5100
    22 – 2410.0 – 11150
    25 - 2911.5 - 13150
    29.5 - 3213.5 - 14.5200
    33 - 3515 - 16200
    36 - 4016.5 - 18250
    40.5 - 4318.5 - 19.5250
    44 - 4820 - 21.5300
    48.5 - 5122 - 23300
    52 - 54.523.5 - 24.5300
    55 - 57.525 - 26300
    58 - 6226.5 - 28300
    62.5 - 6528.5 - 29.5300
    66 +30 +300
    + +

    NOTE: Isoniazid tablets come in 50 mg, 100mg, 300 mg sizes and can be crushed for oral administration. + Isoniazid tablets are also scored.

    +

    Isoniazid Syrup (50mg/5ml) should not be refrigerated. It contains sorbitol and will cause diarrhea. It + should be used only when crushed tablets cannot accommodate the situation. (keep at room temperature).

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease).
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 10-20 mg/kg
    15 - 32 7 - 14.5150 mg
    33 - 48.515 - 22300 mg
    49 - 6522.5 - 29.5450 mg
    66 +30 +600 mg
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease).
    Child’s Weight (lbs)Child’s Weight (kg)Daily Dose (mg) 15 – 25 mg/kg
    11 – 155 – 7100 mg
    16 – 318 – 14200 mg
    32 – 4415 – 20300 mg
    45 – 5521 – 25400 mg
    56 – 6726 – 30.5500 mg
    68 – 7631 – 34.5600 mg
    77 – 8735 – 39.5700 mg
    88 – 12140 – 55800 mg
    122 – 16556 – 751200 mg
    166 +76 +1600 mg
    +

    Additional Notes:
    + The maximum recommendation for ethambutol is 1g daily. +

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Principle: Initiation of therapy for active TB disease requires a multi-drug regimen, typically including Isoniazid, Rifampin, Pyrazinamide, and Ethambutol (for suspected or proven drug-susceptible TB disease).
    Child's Weight (lbs)Child's Weight (kg)Daily Dose (mg) 30-40 mg/kg
    13 - 236 - 10.5250 mg
    24 - 2611 - 12250 mg
    27 - 3112.5 - 14500 mg
    32 - 4114.5 - 18.5500 mg
    42 - 4719.0 - 21.5750 mg
    48 - 5422.0 - 24.5750 mg
    55 – 6325 – 28.51000 mg
    64 – 6729 – 30.51000 mg
    68 – 8031 – 36.51250 mg
    81 – 9337 – 42.51500 mg
    94 – 10643 – 48.51750 mg
    107 +49 +2000 mg
    +
    + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index f8333ac..b3acf43 100644 Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/app/App.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/app/App.kt index bc0bc85..83a0f72 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/app/App.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/app/App.kt @@ -1,6 +1,8 @@ package org.apphatchery.gatbreferenceguide.app import android.app.Application +import android.content.Context +import android.content.res.Configuration import androidx.appcompat.app.AppCompatDelegate import androidx.preference.PreferenceManager import com.google.firebase.FirebaseApp @@ -11,6 +13,12 @@ import sdk.pendo.io.Pendo @HiltAndroidApp class App : Application() { + override fun attachBaseContext(base: Context) { + val configuration = Configuration(base.resources.configuration) + configuration.fontScale = 1.0f + super.attachBaseContext(base.createConfigurationContext(configuration)) + } + override fun onCreate() { super.onCreate() diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/Database.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/Database.kt index a101324..a88f4f2 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/Database.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/Database.kt @@ -1,10 +1,9 @@ package org.apphatchery.gatbreferenceguide.db +import android.util.Log import androidx.room.Database import androidx.room.RoomDatabase -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch +import androidx.room.withTransaction import org.apphatchery.gatbreferenceguide.db.dao.* import org.apphatchery.gatbreferenceguide.db.entities.* @@ -19,7 +18,7 @@ import org.apphatchery.gatbreferenceguide.db.entities.* GlobalSearchEntity::class, HtmlInfoEntity::class, Contact::class, - ], version = 1 + ], version = 2 ) abstract class Database : RoomDatabase() { abstract fun chapterDao(): ChapterDao @@ -32,16 +31,14 @@ abstract class Database : RoomDatabase() { abstract fun recentDao(): RecentDao abstract fun contactDao(): ContactDao - @OptIn(DelicateCoroutinesApi::class) - fun purgeData(){ - GlobalScope.launch { + suspend fun purgeData() { + Log.w("DB_PURGE", "purgeData() called", Throwable("purgeData stack")) + withTransaction { chapterDao().deleteAll() chartDao().deleteAll() subChapterDao().deleteAll() htmlInfoDao().deleteAll() globalSearchDao().deleteAll() } - - - } + } } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/BookmarkDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/BookmarkDao.kt index 0e4a7aa..2c0f013 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/BookmarkDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/BookmarkDao.kt @@ -10,6 +10,9 @@ interface BookmarkDao { @Insert suspend fun insert(data: BookmarkEntity) + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insertIgnore(data: BookmarkEntity) + @Delete suspend fun delete(data: BookmarkEntity) @@ -22,6 +25,58 @@ interface BookmarkDao { @Query("SELECT * FROM BookmarkEntity WHERE bookmarkId=:id") fun getBookmarkById(id: String): Flow + @Query("SELECT * FROM BookmarkEntity WHERE bookmarkId=:id LIMIT 1") + suspend fun getBookmarkByIdOnceOrNull(id: String): BookmarkEntity? + + @Query("UPDATE BookmarkEntity SET bookmarkTitle=:title, subChapter=:subChapter WHERE bookmarkId=:id") + suspend fun updateBookmarkFields(id: String, title: String, subChapter: String): Int + + @Query( + "UPDATE BookmarkEntity SET bookmarkId=:newId, bookmarkTitle=:title, subChapter=:subChapter " + + "WHERE bookmarkId=:oldId" + ) + suspend fun updateBookmarkIdAndFields(oldId: String, newId: String, title: String, subChapter: String): Int + + @Query("DELETE FROM BookmarkEntity WHERE bookmarkId=:id") + suspend fun deleteById(id: String): Int + + /** + * One-time repair when legacy bookmarks are redirected. + * + * - If the PK (bookmarkId) changes, @Update() can't update the original row. + * - This performs an in-place SQL UPDATE of the PK when possible. + * - If the redirected ID already exists, it merges and deletes the old row (dedupe). + */ + @Transaction + suspend fun repairRedirect( + oldId: String, + newId: String, + newTitle: String, + newSubChapter: String, + ) { + if (oldId == newId) { + updateBookmarkFields(oldId, newTitle, newSubChapter) + return + } + + val target = getBookmarkByIdOnceOrNull(newId) + if (target != null) { + // Dedupe: keep the redirected row, and delete the legacy row. + // Prefer the provided title if non-blank. + val mergedTitle = if (newTitle.isNotBlank()) newTitle else target.bookmarkTitle + val mergedSubChapter = if (newSubChapter.isNotBlank()) newSubChapter else target.subChapter + updateBookmarkFields(newId, mergedTitle, mergedSubChapter) + deleteById(oldId) + return + } + + val updated = updateBookmarkIdAndFields(oldId, newId, newTitle, newSubChapter) + if (updated == 0) { + // Nothing to update (row missing). Avoid creating duplicates by ignoring conflicts. + insertIgnore(BookmarkEntity(bookmarkId = newId, bookmarkTitle = newTitle, subChapter = newSubChapter)) + } + } + @Query("DELETE FROM BookmarkEntity") suspend fun clearBookmarks() diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChapterDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChapterDao.kt index a374eb1..b5802ca 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChapterDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChapterDao.kt @@ -14,13 +14,23 @@ interface ChapterDao { fun insert(data: List) - @Query("SELECT * FROM ChapterEntity WHERE chapterTitle LIKE '%' || :keyword || '%' ORDER BY chapterId") + @Query( + "SELECT * FROM ChapterEntity " + + "WHERE chapterTitle LIKE '%' || :keyword || '%' " + + "ORDER BY CASE WHEN chapterId = 18 THEN 0 ELSE 1 END, chapterId" + ) fun getChapterEntity(keyword: String = ""): Flow> @Query("SELECT * FROM ChapterEntity WHERE chapterId =:id") fun getChapterById(id: Int): Flow + @Query("SELECT * FROM ChapterEntity WHERE chapterId =:id LIMIT 1") + fun getChapterByIdOrNull(id: Int): Flow + @Query("DELETE FROM ChapterEntity") suspend fun deleteAll() + + @Query("SELECT COUNT(*) FROM ChapterEntity") + suspend fun count(): Int } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChartDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChartDao.kt index de32afb..0fb05e8 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChartDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/ChartDao.kt @@ -8,26 +8,50 @@ import org.apphatchery.gatbreferenceguide.db.entities.ChartEntity @Dao interface ChartDao { - @Insert(onConflict = OnConflictStrategy.IGNORE) - suspend fun insert(data: List) - - @Delete - suspend fun delete(data: ChartEntity) - - @Transaction - @Query("SELECT * FROM ChartEntity JOIN SubChapterEntity USING(subChapterTitle)") - fun getChartAndSubChapter(): Flow> - - - @Transaction - @Query("SELECT * FROM ChartEntity JOIN SubChapterEntity USING(subChapterTitle)") - suspend fun getChartAndSubChapterSuspend(): List - - @Transaction - @Query("SELECT * FROM ChartEntity JOIN SubChapterEntity USING(subChapterTitle) WHERE ChartEntity.id=:id") - fun getChartAndSubChapterById(id: String): Flow - - @Query("DELETE FROM ChartEntity") - suspend fun deleteAll() + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insert(data: List) + + @Delete + suspend fun delete(data: ChartEntity) + + @Transaction + @Query( + "SELECT * FROM ChartEntity " + + "INNER JOIN SubChapterEntity " + + "ON ChartEntity.subChapterId = SubChapterEntity.subChapterId" + ) + fun getChartAndSubChapter(): Flow> + + @Transaction + @Query( + "SELECT * FROM ChartEntity " + + "INNER JOIN SubChapterEntity " + + "ON ChartEntity.subChapterId = SubChapterEntity.subChapterId" + ) + suspend fun getChartAndSubChapterSuspend(): List + + @Transaction + @Query( + "SELECT * FROM ChartEntity " + + "INNER JOIN SubChapterEntity " + + "ON ChartEntity.subChapterId = SubChapterEntity.subChapterId " + + "WHERE ChartEntity.id = :id" + ) + fun getChartAndSubChapterById(id: String): Flow + + @Transaction + @Query( + "SELECT * FROM ChartEntity " + + "INNER JOIN SubChapterEntity " + + "ON ChartEntity.subChapterId = SubChapterEntity.subChapterId " + + "WHERE ChartEntity.id = :id LIMIT 1" + ) + fun getChartAndSubChapterByIdOrNull(id: String): Flow + + @Query("DELETE FROM ChartEntity") + suspend fun deleteAll() + + @Query("SELECT COUNT(*) FROM ChartEntity") + suspend fun count(): Int } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/GlobalSearchDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/GlobalSearchDao.kt index ec4e7d5..8eac27b 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/GlobalSearchDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/GlobalSearchDao.kt @@ -14,8 +14,9 @@ interface GlobalSearchDao { suspend fun insert(data: List) @Query( - """SELECT * FROM GlobalSearchEntity WHERE GlobalSearchEntity - MATCH :keyword ORDER BY GlobalSearchEntity.chapterId ASC, GlobalSearchEntity.subChapterId ASC""" + """SELECT DISTINCT * FROM GlobalSearchEntity + WHERE GlobalSearchEntity MATCH :keyword + ORDER BY GlobalSearchEntity.chapterId ASC, GlobalSearchEntity.subChapterId ASC""" ) fun getGlobalSearchEntity(keyword: String =""): Flow> @@ -32,4 +33,7 @@ interface GlobalSearchDao { @Query("DELETE FROM GlobalSearchEntity") suspend fun deleteAll() + @Query("SELECT COUNT(*) FROM GlobalSearchEntity") + suspend fun count(): Int + } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/HtmlInfoDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/HtmlInfoDao.kt index 6b511ff..946c344 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/HtmlInfoDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/HtmlInfoDao.kt @@ -22,4 +22,7 @@ interface HtmlInfoDao { @Query("DELETE FROM HtmlInfoEntity") suspend fun deleteAll() + @Query("SELECT COUNT(*) FROM HtmlInfoEntity") + suspend fun count(): Int + } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/NoteDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/NoteDao.kt index a776047..bb73c88 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/NoteDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/NoteDao.kt @@ -2,6 +2,7 @@ package org.apphatchery.gatbreferenceguide.db.dao import androidx.room.* import kotlinx.coroutines.flow.Flow +import org.apphatchery.gatbreferenceguide.db.data.NoteTargetRow import org.apphatchery.gatbreferenceguide.db.entities.NoteEntity @Dao @@ -24,6 +25,15 @@ interface NoteDao { @Update suspend fun update(data: NoteEntity) + @Query("SELECT noteIdPrimaryKey, noteId, subChapterId FROM NoteEntity") + suspend fun getAllNoteTargets(): List + + @Query("UPDATE NoteEntity SET noteId = :newNoteId WHERE noteIdPrimaryKey = :pk") + suspend fun updateNoteTargetByPk(pk: Int, newNoteId: String): Int + + @Query("UPDATE NoteEntity SET noteId = :newNoteId, subChapterId = :newSubChapterId WHERE noteIdPrimaryKey = :pk") + suspend fun updateNoteTargetAndSubChapterByPk(pk: Int, newNoteId: String, newSubChapterId: Int): Int + @Query("DELETE FROM NoteEntity") suspend fun clearNotes() } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/SubChapterDao.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/SubChapterDao.kt index 8258d20..3a8bff9 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/SubChapterDao.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/dao/SubChapterDao.kt @@ -37,6 +37,15 @@ interface SubChapterDao { @Query("SELECT * FROM SubChapterEntity WHERE subChapterId=:id OR subChapterTitle=:id") fun getSubChapterById(id: String): Flow + @Query("SELECT * FROM SubChapterEntity WHERE subChapterId=:id OR subChapterTitle=:id LIMIT 1") + fun getSubChapterByIdOrNull(id: String): Flow + + @Query( + "SELECT * FROM SubChapterEntity " + + "WHERE subChapterId=:key OR subChapterTitle=:key OR url=:key LIMIT 1" + ) + suspend fun findSubChapterByKeyOnceOrNull(key: String): SubChapterEntity? + fun getSubChapterEntity( keyword: String = "", @@ -47,4 +56,7 @@ interface SubChapterDao { keyword ) } + + @Query("SELECT COUNT(*) FROM SubChapterEntity") + suspend fun count(): Int } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/ChartAndSubChapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/ChartAndSubChapter.kt index b088f9f..9ac405a 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/ChartAndSubChapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/ChartAndSubChapter.kt @@ -9,10 +9,10 @@ import org.apphatchery.gatbreferenceguide.db.entities.SubChapterEntity @Parcelize data class ChartAndSubChapter( - @Embedded val chartEntity: ChartEntity, - @Relation( - parentColumn = "subChapterTitle", - entityColumn = "subChapterTitle" - ) - val subChapterEntity: SubChapterEntity -) : Parcelable +@Embedded val chartEntity: ChartEntity, +@Relation( +parentColumn = "subChapterId", +entityColumn = "subChapterId" +) +val subChapterEntity: SubChapterEntity +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/NoteTargetRow.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/NoteTargetRow.kt new file mode 100644 index 0000000..c901bb4 --- /dev/null +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/data/NoteTargetRow.kt @@ -0,0 +1,7 @@ +package org.apphatchery.gatbreferenceguide.db.data + +data class NoteTargetRow( + val noteIdPrimaryKey: Int, + val noteId: String, + val subChapterId: Int, +) diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/repositories/Repository.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/repositories/Repository.kt index 0fa7c49..7af2b94 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/db/repositories/Repository.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/db/repositories/Repository.kt @@ -17,7 +17,7 @@ class Repository @Inject constructor( private val subChapterDao = db.subChapterDao() private val chartDao = db.chartDao() - fun purgeData(){ + suspend fun purgeData() { db.purgeData() } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/di/AppModule.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/di/AppModule.kt index ca55987..8a6f3d0 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/di/AppModule.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/di/AppModule.kt @@ -2,6 +2,8 @@ package org.apphatchery.gatbreferenceguide.di import android.content.Context import androidx.room.Room +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase import com.bumptech.glide.Glide import com.bumptech.glide.RequestManager import com.bumptech.glide.request.RequestOptions @@ -19,6 +21,27 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) object AppModule { + private val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(db: SupportSQLiteDatabase) { + // v2 introduces the Contact table. Creating it preserves existing tables/data. + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS `Contact` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + `fullName` TEXT NOT NULL, + `additionalInfo` TEXT NOT NULL, + `contactCell` TEXT NOT NULL, + `contactEmail` TEXT NOT NULL, + `contactAddress` TEXT NOT NULL, + `officePhone` TEXT NOT NULL, + `officeFax` TEXT NOT NULL, + `personalNote` TEXT + ) + """.trimIndent() + ) + } + } + @Singleton @Provides fun providesGlide( @@ -31,7 +54,7 @@ object AppModule { fun providesRoomDB( @ApplicationContext context: Context ) = Room.databaseBuilder(context, Database::class.java, "ga_tb_reference_guide.db") - .fallbackToDestructiveMigration() + .addMigrations(MIGRATION_1_2) .build() @Singleton diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/ActionBarController.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/ActionBarController.kt new file mode 100644 index 0000000..cc93386 --- /dev/null +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/ActionBarController.kt @@ -0,0 +1,8 @@ +package org.apphatchery.gatbreferenceguide.ui + +interface ActionBarController { + fun setActionBarTitle(title: String) + fun setActionBarConfig(title: String, showBackButton: Boolean) + fun setActionBarSearchVisible(visible: Boolean) + fun setupActionBarSearch(onSearchAction: (String) -> Unit, onSearchIconClick: (String) -> Unit) +} \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/BaseFragment.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/BaseFragment.kt index 7dd3ef1..974a824 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/BaseFragment.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/BaseFragment.kt @@ -12,18 +12,28 @@ import androidx.activity.result.ActivityResultLauncher import androidx.annotation.LayoutRes import androidx.fragment.app.Fragment import org.apphatchery.gatbreferenceguide.R +import android.view.inputmethod.EditorInfo +import android.widget.EditText abstract class BaseFragment(@LayoutRes layoutRes: Int) : Fragment(layoutRes) { abstract override fun onViewCreated(view: View, savedInstanceState: Bundle?) -// override fun onAttach(context: Context) { -// try { -// requireActivity().getBottomNavigationView().toggleVisibility(false) -// } catch (e: Exception) { -// } -// super.onAttach(context) -// } + // Action bar control methods + protected fun setActionBarTitle(title: String) { + (requireActivity() as? ActionBarController)?.setActionBarTitle(title) + } + + protected fun setActionBarConfig(title: String, showBackButton: Boolean = true) { + (requireActivity() as? ActionBarController)?.setActionBarConfig(title, showBackButton) + } + + protected fun setActionBarSearchVisible(visible: Boolean) { + (requireActivity() as? ActionBarController)?.setActionBarSearchVisible(visible) + } + protected fun setupActionBarSearch(onSearchAction: (String) -> Unit, onSearchIconClick: (String) -> Unit) { + (requireActivity() as? ActionBarController)?.setupActionBarSearch(onSearchAction, onSearchIconClick) + } fun voiceSearchListener(resultLauncher: ActivityResultLauncher) = resultLauncher.launch( @@ -53,6 +63,4 @@ abstract class BaseFragment(@LayoutRes layoutRes: Int) : Fragment(layoutRes) { inflater.inflate(R.menu.fragment_global_search_menu, menu) super.onCreateOptionsMenu(menu, inflater) } - - } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/MainActivity.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/MainActivity.kt index fbd757c..0791312 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/MainActivity.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/MainActivity.kt @@ -1,13 +1,19 @@ package org.apphatchery.gatbreferenceguide.ui +import android.content.Context import android.content.SharedPreferences import android.content.pm.ActivityInfo +import android.content.res.Configuration import android.os.Bundle import android.util.Log import android.view.View +import android.widget.ImageView +import android.widget.TextView import android.widget.Toast import androidx.activity.viewModels +import androidx.appcompat.app.ActionBar import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.navigation.NavController import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration @@ -28,52 +34,382 @@ import org.apphatchery.gatbreferenceguide.databinding.ActivityMainBinding import org.apphatchery.gatbreferenceguide.prefs.UserPrefs import org.apphatchery.gatbreferenceguide.utils.* import javax.inject.Inject +import android.widget.EditText +import android.view.inputmethod.EditorInfo +import androidx.activity.enableEdgeToEdge +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding @AndroidEntryPoint -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), ActionBarController { private lateinit var binding: ActivityMainBinding private lateinit var navController: NavController private lateinit var bottomNavigationView: BottomNavigationView private lateinit var preferenceManager: SharedPreferences + + // Action bar components + private lateinit var actionBarTitle: TextView + private lateinit var actionBarBackButton: ImageView + private lateinit var actionBarSpacer: View + + // Search view properties - will be initialized when needed + private var searchViewContainer: View? = null + + override fun attachBaseContext(newBase: Context) { + val configuration = Configuration(newBase.resources.configuration) + configuration.fontScale = 1.0f + super.attachBaseContext(newBase.createConfigurationContext(configuration)) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) - supportActionBar?.elevation = 0f + + setupActionBar() + setupNavigation() + setupRemoteConfig() + preferenceManager = PreferenceManager.getDefaultSharedPreferences(this) + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + searchState.exitSearchMode() + window.statusBarColor = ContextCompat.getColor(this, R.color.reddish) + enableEdgeToEdge() + + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + + binding.statusBarBackground.updateLayoutParams { + height = insets.top + } + + view.updatePadding( + left = insets.left, + right = insets.right, + bottom = insets.bottom + ) + + WindowInsetsCompat.CONSUMED + } + } + + private fun setupActionBar() { + supportActionBar?.elevation = 0f + supportActionBar?.let { actionBar -> + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM) + actionBar.setCustomView(R.layout.custom_action_bar_title) + + // Get references to action bar components + val customView = actionBar.customView + actionBarTitle = customView.findViewById(R.id.action_bar_title) + actionBarBackButton = customView.findViewById(R.id.action_bar_back_button) + actionBarSpacer = customView.findViewById(R.id.action_bar_spacer) + + // Set up back button click listener + actionBarBackButton.setOnClickListener { + onSupportNavigateUp() + } + } + } + + private fun setupNavigation() { navController = findNavController(R.id.nav_host_fragment_container) bottomNavigationView = findViewById(R.id.bottomNavigationView) + bottomNavigationView.itemIconTintList = null + bottomNavigationView.itemTextColor = ContextCompat.getColorStateList(this, R.color.bottom_nav_text_color) + navController.addOnDestinationChangedListener { _, destination, _ -> + // Handle bottom navigation visibility when (destination.id) { - R.id.chapterFragment, R.id.subChapterFragment, R.id.bodyFragment, R.id.body_web_view, R.id.chartFragment -> bottomNavigationView.visibility = - View.GONE - + R.id.chapterFragment, R.id.subChapterFragment, R.id.bodyFragment, + R.id.body_web_view, R.id.chartFragment -> bottomNavigationView.visibility = View.GONE else -> bottomNavigationView.visibility = View.VISIBLE } + + // icon switching + updateBottomNavIcons(destination.id) + + // Update action bar based on destination + updateActionBar(destination.id, destination.label?.toString()) + } + + binding.bottomNavigationView.setupWithNavController(navController) + + // Intercept bottom navigation selections so that selecting any bottom-nav + // item always navigates to that destination (popping back to it if it's + // already in the back stack). This guarantees the Home button always + // leads to the mainFragment regardless of intermediate navigation. + binding.bottomNavigationView.setOnItemSelectedListener { item -> + when (item.itemId) { + R.id.mainFragment -> { + // If mainFragment is already in the back stack, pop back to it. + // Otherwise navigate to it. + val popped = navController.popBackStack(R.id.mainFragment, false) + if (!popped) navController.navigate(R.id.mainFragment) + true + } + R.id.globalSearchFragment -> { + val popped = navController.popBackStack(R.id.globalSearchFragment, false) + if (!popped) navController.navigate(R.id.globalSearchFragment) + true + } + R.id.settingsFragment -> { + val popped = navController.popBackStack(R.id.settingsFragment, false) + if (!popped) navController.navigate(R.id.settingsFragment) + true + } + else -> false + } } + // Keep a reselection handler for when the user taps the already-selected + // item (e.g., scroll-to-top or ensure we are on the root of that tab). + binding.bottomNavigationView.setOnItemReselectedListener { item -> + when (item.itemId) { + R.id.mainFragment -> navController.popBackStack(R.id.mainFragment, false) + R.id.globalSearchFragment -> navController.popBackStack(R.id.globalSearchFragment, false) + R.id.settingsFragment -> navController.popBackStack(R.id.settingsFragment, false) + } + } + // Removed this line to the prevent default back arrow: + // setupActionBarWithNavController(navController, AppBarConfiguration(navController.graph)) + } + + private fun setupRemoteConfig() { val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings) + } + + private fun updateActionBar(destinationId: Int, destinationLabel: String?) { + when (destinationId) { + R.id.mainFragment -> { + setActionBarConfig( + title = getString(R.string.guide), + showBackButton = false + ) + setActionBarSearchVisible(false) // Contract toolbar + } + R.id.savedFragment -> { + setActionBarConfig( + title = "My Bookmarks", + showBackButton = true + ) + setActionBarSearchVisible(false) // Contract toolbar + } + R.id.chapterFragment -> { + setActionBarConfig( + title = "All Chapters", + showBackButton = true + ) + setActionBarSearchVisible(false) // Contract toolbar + } + R.id.subChapterFragment -> { + setActionBarConfig( + title = destinationLabel ?: "Chapters", + showBackButton = true + ) + setActionBarSearchVisible(false) // Contract toolbar + } + R.id.bodyFragment -> { + setActionBarConfig( + title = "", // Will be set by BodyFragment + showBackButton = true + ) + } + R.id.chartFragment -> { + setActionBarConfig( + // prefer the nav destination label (from nav_graph). fallback to "All Tables" + title = destinationLabel ?: "All Tables", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.globalSearchFragment -> { + setActionBarConfig( + title = "Search", + showBackButton = false + ) + setActionBarSearchVisible(false) + } + R.id.settingsFragment -> { + setActionBarConfig( + title = "Settings", + showBackButton = false + ) + setActionBarSearchVisible(false) + } + R.id.contactFragment -> { + setActionBarConfig( + title = "Contacts", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.contactAddFragment -> { + setActionBarConfig( + title = "New Contact", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.privacyPolicy -> { + setActionBarConfig( + title = "Privacy Policy", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.about -> { + setActionBarConfig( + title = "About Us", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.contactDetailsFragment -> { + setActionBarConfig( + title = "Public Contact", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + R.id.myContactDetailsFragment -> { + setActionBarConfig( + title = "Private Contact", + showBackButton = true + ) + setActionBarSearchVisible(false) + } + else -> { + setActionBarConfig( + title = destinationLabel ?: getString(R.string.guide), + showBackButton = true + ) + setActionBarSearchVisible(false) + } + } + } + + // Implement ActionBarController interface + override fun setActionBarTitle(title: String) { + // guard for config/theme changes where fragments may call this before the action bar view is re-created + if (::actionBarTitle.isInitialized) { + actionBarTitle.text = title + } else { + // Defer the update until views are available to prevent lateinit crash during activity relaunch + window.decorView.post { + if (::actionBarTitle.isInitialized) { + actionBarTitle.text = title + } + } + } + } + + override fun setActionBarConfig(title: String, showBackButton: Boolean) { + // Apply title safely in case action bar components are not yet initialized after a relaunch + if (::actionBarTitle.isInitialized) { + actionBarTitle.text = title + } else { + window.decorView.post { + if (::actionBarTitle.isInitialized) actionBarTitle.text = title + } + } + + if (::actionBarBackButton.isInitialized && ::actionBarSpacer.isInitialized) { + if (showBackButton) { + actionBarBackButton.visibility = View.VISIBLE + actionBarSpacer.visibility = View.VISIBLE + } else { + actionBarBackButton.visibility = View.GONE + actionBarSpacer.visibility = View.GONE + } + } else { + // Defer visibility changes if needed during configuration relaunch + window.decorView.post { + if (::actionBarBackButton.isInitialized && ::actionBarSpacer.isInitialized) { + if (showBackButton) { + actionBarBackButton.visibility = View.VISIBLE + actionBarSpacer.visibility = View.VISIBLE + } else { + actionBarBackButton.visibility = View.GONE + actionBarSpacer.visibility = View.GONE + } + } + } + } + } + // Implement the new interface methods + override fun setActionBarSearchVisible(visible: Boolean) { + Log.d("MainActivity", "setActionBarSearchVisible called with: $visible") + // Find the search view container in the current fragment + val navHostFragment = findViewById(R.id.nav_host_fragment_container) + val searchView = navHostFragment?.findViewById(R.id.search_view_include) + + searchView?.visibility = if (visible) View.VISIBLE else View.GONE + + Log.d("MainActivity", "Search view visibility: ${searchView?.visibility}") + } + + override fun setupActionBarSearch(onSearchAction: (String) -> Unit, onSearchIconClick: (String) -> Unit) { + val navHostFragment = findViewById(R.id.nav_host_fragment_container) + val searchView = navHostFragment?.findViewById(R.id.search_view_include) + val searchEditText = searchView?.findViewById(R.id.search_edit_text) + + searchEditText?.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + val searchQuery = searchEditText.text.toString().trim() + if (searchQuery.isNotEmpty()) { + onSearchAction(searchQuery) + } + true + } else { + false + } + } + } - binding.bottomNavigationView.setupWithNavController(navController) - setupActionBarWithNavController(navController, AppBarConfiguration(navController.graph)) - requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT - searchState.exitSearchMode() + private fun updateBottomNavIcons(currentDestinationId: Int) { + val menu = bottomNavigationView.menu + // Reset all to inactive icons + menu.findItem(R.id.mainFragment)?.setIcon(R.drawable.ic_baseline_home) + menu.findItem(R.id.globalSearchFragment)?.setIcon(R.drawable.ic_baseline_search) + menu.findItem(R.id.settingsFragment)?.setIcon(R.drawable.ic_baseline_settings_2) + // Set active icon based on current destination + when (currentDestinationId) { + R.id.mainFragment -> { + menu.findItem(R.id.mainFragment)?.setIcon(R.drawable.ic_baseline_home_color) + } + R.id.globalSearchFragment -> { + menu.findItem(R.id.globalSearchFragment)?.setIcon(R.drawable.ic_baseline_search_color) + } + R.id.settingsFragment -> { + menu.findItem(R.id.settingsFragment)?.setIcon(R.drawable.ic_baseline_settings_color) + } + } } - + override fun onSupportNavigateUp(): Boolean { + // Let the current fragment handle the toolbar back first (e.g., WebView history) + val navHost = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_container) + val current = navHost?.childFragmentManager?.primaryNavigationFragment + if (current is org.apphatchery.gatbreferenceguide.ui.OnToolbarBackPressed) { + val consumed = try { current.onToolbarBackPressed() } catch (e: Exception) { false } + if (consumed) return true + } return navController.navigateUp() || super.onSupportNavigateUp() } + } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/OnToolbarBackPressed.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/OnToolbarBackPressed.kt new file mode 100644 index 0000000..cb65a7a --- /dev/null +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/OnToolbarBackPressed.kt @@ -0,0 +1,10 @@ +package org.apphatchery.gatbreferenceguide.ui + +interface OnToolbarBackPressed { + /** + * Called when the Activity toolbar/back button is pressed. Return true if + * the fragment consumed the event (no nav pop), false to let the Activity + * handle navigation. + */ + fun onToolbarBackPressed(): Boolean +} diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAChapterAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAChapterAdapter.kt index 3c569ae..3300099 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAChapterAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAChapterAdapter.kt @@ -12,6 +12,10 @@ import org.apphatchery.gatbreferenceguide.utils.ROMAN_NUMERALS class FAChapterAdapter : ListAdapter(DiffUtilCallBack()) { + private companion object { + const val UNNUMBERED_CHAPTER_ID = 18 + } + class DiffUtilCallBack : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: ChapterEntity, newItem: ChapterEntity) = @@ -33,10 +37,20 @@ class FAChapterAdapter : fun onBinding(chapterEntity: ChapterEntity, index: Int) = bind.apply { - (ROMAN_NUMERALS[index].uppercase() + ". " + chapterEntity.chapterTitle).also { - textView.text = it + if (chapterEntity.chapterId == UNNUMBERED_CHAPTER_ID) { + textView.text = chapterEntity.chapterTitle + return@apply } + // Number chapters using their position among numbered chapters only, + // so inserting an unnumbered item doesn't shift the Roman numerals. + val numberedIndex = currentList + .subList(0, index + 1) + .count { it.chapterId != UNNUMBERED_CHAPTER_ID } - 1 + + val roman = ROMAN_NUMERALS.getOrNull(numberedIndex)?.uppercase() + textView.text = if (roman != null) "$roman. ${chapterEntity.chapterTitle}" else chapterEntity.chapterTitle + } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAGlobalSearchAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAGlobalSearchAdapter.kt index fdd2030..f7d4f3e 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAGlobalSearchAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAGlobalSearchAdapter.kt @@ -11,6 +11,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.text.HtmlCompat +import androidx.core.content.ContextCompat import androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider @@ -99,31 +100,25 @@ class FAGlobalSearchAdapter @Inject constructor( FROM_HTML_MODE_LEGACY ) searchTitle.text = HtmlCompat.fromHtml(globalSearchEntity.subChapter,FROM_HTML_MODE_LEGACY) + // Set chart icon before title + val icon = ContextCompat.getDrawable(root.context, org.apphatchery.gatbreferenceguide.R.drawable.ic_baseline_charts_2) + searchTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null) + searchTitle.compoundDrawablePadding = 6 } else { searchTitle.text = "$romanChapterID. ${HtmlCompat.fromHtml(globalSearchEntity.searchTitle,FROM_HTML_MODE_LEGACY)}" subChapter.text = HtmlCompat.fromHtml(globalSearchEntity.subChapter,FROM_HTML_MODE_LEGACY) + // Set chapter icon before title + val icon = ContextCompat.getDrawable(root.context, org.apphatchery.gatbreferenceguide.R.drawable.ic_baseline_chapter_2) + searchTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null) + searchTitle.compoundDrawablePadding = 6 } textInBody.text = HtmlCompat.fromHtml(globalSearchEntity.textInBody, FROM_HTML_MODE_LEGACY) + // Programmatic start-ellipsis: show leading "..." for overflow + textInBody.maxLines = 1 + textInBody.ellipsize = TextUtils.TruncateAt.START }.invokeOnCompletion { - val bodyWithTags = globalSearchEntity.textInBody - val pattern = ".*(.*?).*".toRegex() - val matchResult = pattern.find(bodyWithTags) - val extractedSearchValue = matchResult?.groupValues?.get(1) ?: "" - - val locationOfTarget = textInBody.text.indexOf(extractedSearchValue) - - if (locationOfTarget != -1) { - textInBody.maxLines = 2 - textInBody.ellipsize = TextUtils.TruncateAt.MARQUEE - - // Add 2ms delay using Handler - textInBody.postDelayed({ - val line = textInBody.layout.getLineForOffset(locationOfTarget) - val y = textInBody.layout.getLineTop(line) - textInBody.scrollTo(0, y) - }, 5) // 2 milliseconds delay - } + // When using single-line start ellipsis we skip marquee/scroll logic } } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChapterAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChapterAdapter.kt index d3f96dd..8efc3ac 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChapterAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChapterAdapter.kt @@ -5,6 +5,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import org.apphatchery.gatbreferenceguide.R import org.apphatchery.gatbreferenceguide.databinding.FragmentMainFirst6ChapterItemBinding import org.apphatchery.gatbreferenceguide.db.entities.ChapterEntity @@ -33,6 +34,14 @@ class FAMainFirst6ChapterAdapter : fun onBinding(chapterEntity: ChapterEntity) = first6ChapterItemBinding.apply { button.text = chapterEntity.chapterTitle + + if (chapterEntity.chapterTitle == "All Chapters>") { + button.setBackgroundResource(R.drawable.ic_shape_bg_chapter_see_all_chapter) + button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_see_all_content, 0, 0, 0) + } else { + button.setBackgroundResource(R.drawable.ic_shape_bg_chapter) + button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_chapter_1, 0, 0, 0) + } } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChartAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChartAdapter.kt index d514755..62f519b 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChartAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FAMainFirst6ChartAdapter.kt @@ -5,6 +5,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import org.apphatchery.gatbreferenceguide.R import org.apphatchery.gatbreferenceguide.databinding.FragmentMainFirst6ChartItemBinding import org.apphatchery.gatbreferenceguide.db.data.ChartAndSubChapter import org.apphatchery.gatbreferenceguide.db.entities.SubChapterEntity @@ -12,6 +13,16 @@ import org.apphatchery.gatbreferenceguide.db.entities.SubChapterEntity class FAMainFirst6ChartAdapter : ListAdapter(DiffUtilCallBack()) { + private var titleOverrides: Map = emptyMap() + + fun setTitleOverrides(overrides: Map) { + titleOverrides = overrides + notifyDataSetChanged() + } + + private fun displayTitle(item: ChartAndSubChapter): String = + titleOverrides[item.chartEntity.id] ?: item.chartEntity.chartTitle + class DiffUtilCallBack : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: ChartAndSubChapter, newItem: ChartAndSubChapter) = @@ -35,7 +46,14 @@ class FAMainFirst6ChartAdapter : RecyclerView.ViewHolder(first6ChartItemBinding.root) { fun onBinding(chapterEntity: ChartAndSubChapter) = first6ChartItemBinding.apply { - button.text = chapterEntity.chartEntity.chartTitle + val title = displayTitle(chapterEntity) + button.text = title + + if (title == "All Tables>" || title == "All Charts>") { + button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_see_all_content, 0, 0, 0) + } else { + button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_charts_1, 0, 0, 0) + } } init { @@ -47,7 +65,6 @@ class FAMainFirst6ChartAdapter : } } } - } } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteAdapter.kt index 136c89c..ff96fab 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteAdapter.kt @@ -34,7 +34,7 @@ class FANoteAdapter(val viewInChapter: Int = View.GONE) : fun onBinding(note: NoteEntity) = fragmentNoteItemBinding.apply { - view.setBackgroundColor(Color.parseColor(note.noteColor)) + noteLeftBar.setBackgroundColor(Color.parseColor(note.noteColor)) textviewNoteBody.text = note.noteText ("Note - Last edited " + note.lastEditDateFormat).also { textviewNoteTitle.text = @@ -45,7 +45,7 @@ class FANoteAdapter(val viewInChapter: Int = View.GONE) : init { fragmentNoteItemBinding.apply { textviewShowChapter.visibility = viewInChapter - root.setOnClickListener { + noteEditIcon.setOnClickListener { if (RecyclerView.NO_POSITION != adapterPosition) { val currentClickedItem = currentList[adapterPosition] onItemClickListAdapter?.let { @@ -61,7 +61,9 @@ class FANoteAdapter(val viewInChapter: Int = View.GONE) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( FragmentNoteItemBinding.inflate( - LayoutInflater.from(parent.context) + LayoutInflater.from(parent.context), + parent, + false ) ) diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteColorAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteColorAdapter.kt index 5d91c8e..d19055e 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteColorAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FANoteColorAdapter.kt @@ -34,12 +34,20 @@ class FANoteColorAdapter(private val context: Context) : fun onBinding(noteColor: NoteColor) = dialogNoteColorItemBinding.apply { - colorSchema.background.setTint(Color.parseColor(noteColor.color)) + val color = Color.parseColor(noteColor.color) + if (selectedColor == noteColor.color) { - dialogNoteColorItemBinding.root.background = - ContextCompat.getDrawable(context, R.drawable.shape_circle_border) + // Show selected state + unselectedTag.visibility = android.view.View.GONE + selectedTag.visibility = android.view.View.VISIBLE + selectedColorInner.visibility = android.view.View.VISIBLE + selectedColorInner.background.setTint(color) } else { - dialogNoteColorItemBinding.root.background = null + // Show unselected state + unselectedTag.visibility = android.view.View.VISIBLE + selectedTag.visibility = android.view.View.GONE + selectedColorInner.visibility = android.view.View.GONE + unselectedTag.background.setTint(color) } } diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASavedBookmarkAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASavedBookmarkAdapter.kt index 1535146..476ee5b 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASavedBookmarkAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASavedBookmarkAdapter.kt @@ -5,11 +5,17 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import org.apphatchery.gatbreferenceguide.databinding.FragmentWithRecyclerviewItemBinding +import org.apphatchery.gatbreferenceguide.databinding.FragmentBookmarkItemBinding +import org.apphatchery.gatbreferenceguide.databinding.FragmentChartBookmarkItemBinding import org.apphatchery.gatbreferenceguide.db.entities.BookmarkEntity class FASavedBookmarkAdapter : - ListAdapter(DiffUtilCallBack()) { + ListAdapter(DiffUtilCallBack()) { + + companion object { + private const val TYPE_CHAPTER = 0 + private const val TYPE_CHART = 1 + } class DiffUtilCallBack : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: BookmarkEntity, newItem: BookmarkEntity) = @@ -22,19 +28,34 @@ class FASavedBookmarkAdapter : fun itemClickCallback(listener: ((BookmarkEntity) -> Unit)) { onItemClickListAdapter = listener } + + fun itemEditCallback(listener: ((BookmarkEntity) -> Unit)) { + onItemEditListAdapter = listener + } private var onItemClickListAdapter: ((BookmarkEntity) -> Unit)? = null + private var onItemEditListAdapter: ((BookmarkEntity) -> Unit)? = null + override fun getItemViewType(position: Int): Int { + return if (getItem(position).bookmarkId.startsWith("table_")) { + TYPE_CHART + } else { + TYPE_CHAPTER + } + } - inner class ViewHolder(private val bind: FragmentWithRecyclerviewItemBinding) : + inner class ChapterViewHolder(private val bind: FragmentBookmarkItemBinding) : RecyclerView.ViewHolder(bind.root) { fun onBinding(data: BookmarkEntity, index: Int) = bind.apply { - textView.text = data.bookmarkTitle + textviewBookmarkTitle.text = data.bookmarkTitle + textviewBookmarkName.text = data.bookmarkTitle // Bookmark name with chapter icon + textviewChapterSource.text = data.subChapter // Chapter source from subChapter field } init { + // Card click - navigate to content bind.root.setOnClickListener { if (RecyclerView.NO_POSITION != adapterPosition) { val currentClickedItem = currentList[adapterPosition] @@ -44,17 +65,73 @@ class FASavedBookmarkAdapter : } } + // Edit icon click - show edit dialog + bind.bookmarkEditIcon.setOnClickListener { + if (RecyclerView.NO_POSITION != adapterPosition) { + val currentClickedItem = currentList[adapterPosition] + onItemEditListAdapter?.let { + it(currentClickedItem) + } + } + } } + } + inner class ChartViewHolder(private val bind: FragmentChartBookmarkItemBinding) : + RecyclerView.ViewHolder(bind.root) { + + fun onBinding(data: BookmarkEntity, index: Int) = + bind.apply { + textviewChartTitle.text = data.bookmarkTitle + textviewChartSource.text = data.subChapter + } + + init { + // Card click - navigate to content + bind.root.setOnClickListener { + if (RecyclerView.NO_POSITION != adapterPosition) { + val currentClickedItem = currentList[adapterPosition] + onItemClickListAdapter?.let { + it(currentClickedItem) + } + } + } + + // Edit icon click - show edit dialog + bind.chartEditIcon.setOnClickListener { + if (RecyclerView.NO_POSITION != adapterPosition) { + val currentClickedItem = currentList[adapterPosition] + onItemEditListAdapter?.let { + it(currentClickedItem) + } + } + } + } } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( - FragmentWithRecyclerviewItemBinding.inflate( - LayoutInflater.from(parent.context) - ) - ) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return when (viewType) { + TYPE_CHART -> ChartViewHolder( + FragmentChartBookmarkItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + else -> ChapterViewHolder( + FragmentBookmarkItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } + } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.onBinding(getItem(position), position) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is ChapterViewHolder -> holder.onBinding(getItem(position), position) + is ChartViewHolder -> holder.onBinding(getItem(position), position) + } } } \ No newline at end of file diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASearchRecentAdapter.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASearchRecentAdapter.kt index a477f81..02f2562 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASearchRecentAdapter.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/adapters/FASearchRecentAdapter.kt @@ -29,14 +29,13 @@ class FASearchRecentAdapter( recentSearches.addAll(recentSearchesString?.split(",")?.map { RecentSearchItem(it) } ?: emptyList()) } - fun updateRecentSearches(newSearch : String){ - + fun updateRecentSearches(newSearch: String) { if (newSearch.trim().isNotEmpty()) { val item = RecentSearchItem(newSearch) if (!recentSearches.contains(item)) { recentSearches.add(0, item) if (recentSearches.size > 3) { - recentSearches.removeLast() + recentSearches.removeAt(recentSearches.lastIndex) } saveRecentSearches() notifyDataSetChanged() diff --git a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/fragments/BodyFragment.kt b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/fragments/BodyFragment.kt index 786213e..f821dc8 100644 --- a/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/fragments/BodyFragment.kt +++ b/app/src/main/java/org/apphatchery/gatbreferenceguide/ui/fragments/BodyFragment.kt @@ -5,6 +5,7 @@ import android.animation.ValueAnimator import android.annotation.SuppressLint import android.app.Dialog import android.content.ActivityNotFoundException +import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.graphics.Color @@ -18,8 +19,6 @@ import android.text.style.BackgroundColorSpan import android.text.style.ForegroundColorSpan import android.util.Log import android.view.LayoutInflater -import android.view.Menu -import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup @@ -28,6 +27,7 @@ import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Button +import android.widget.CheckBox import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView @@ -40,15 +40,11 @@ import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY import androidx.core.view.MenuHost -import androidx.core.view.MenuProvider -import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels -import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.preference.PreferenceManager import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -73,8 +69,6 @@ import org.apphatchery.gatbreferenceguide.ui.adapters.FANoteAdapter import org.apphatchery.gatbreferenceguide.ui.adapters.FANoteColorAdapter import org.apphatchery.gatbreferenceguide.ui.adapters.SwipeDecoratorCallback import org.apphatchery.gatbreferenceguide.ui.viewmodels.FABodyViewModel -import org.apphatchery.gatbreferenceguide.ui.viewmodels.MainActivityViewModel -import org.apphatchery.gatbreferenceguide.utils.* import org.apphatchery.gatbreferenceguide.utils.ANALYTICS_BOOKMARK_EVENT import org.apphatchery.gatbreferenceguide.utils.ANALYTICS_PAGE_EVENT import org.apphatchery.gatbreferenceguide.utils.EXTENSION @@ -82,7 +76,6 @@ import org.apphatchery.gatbreferenceguide.utils.NOTE_COLOR import org.apphatchery.gatbreferenceguide.utils.PAGES_DIR import org.apphatchery.gatbreferenceguide.utils.alertDialog import org.apphatchery.gatbreferenceguide.utils.dialog -import org.apphatchery.gatbreferenceguide.utils.getActionBar import org.apphatchery.gatbreferenceguide.utils.getBottomNavigationView import org.apphatchery.gatbreferenceguide.utils.isChecked import org.apphatchery.gatbreferenceguide.utils.observeOnce @@ -92,15 +85,26 @@ import org.apphatchery.gatbreferenceguide.utils.snackBar import org.apphatchery.gatbreferenceguide.utils.toast import sdk.pendo.io.Pendo import javax.inject.Inject -import kotlin.math.log +import android.view.inputmethod.InputMethodManager +import android.view.inputmethod.EditorInfo +import android.widget.EditText +import androidx.core.content.ContextCompat +import android.text.TextWatcher +import android.text.Editable +import android.text.SpannableStringBuilder +import androidx.activity.OnBackPressedCallback +import android.widget.LinearLayout +import android.widget.RelativeLayout +import com.google.android.material.bottomsheet.BottomSheetDialog +import org.apphatchery.gatbreferenceguide.BuildConfig +import org.apphatchery.gatbreferenceguide.utils.toShortTableTitle @AndroidEntryPoint -class BodyFragment : BaseFragment(R.layout.fragment_body) { +class BodyFragment : BaseFragment(R.layout.fragment_body), org.apphatchery.gatbreferenceguide.ui.OnToolbarBackPressed { private val TAG = "MyFragmentLifecycle" companion object { - const val DOMAIN_LINK = "https://gatbreferenceguide.page.link" const val LOGO_URL = "https://raw.githubusercontent.com/AppHatchery/GA-TB-Reference-Guide-Web/main/assets/logo.jpg" } @@ -116,6 +120,16 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { private var chartAndSubChapter: ChartAndSubChapter? = null private var bookmarkType: BookmarkType = BookmarkType.SUBCHAPTER private lateinit var subChapterEntity: SubChapterEntity + private lateinit var searchContainer: RelativeLayout + private lateinit var searchEditText: EditText + private lateinit var searchClear: ImageView + private lateinit var searchCounter: TextView + private lateinit var searchPrevious: ImageView + private lateinit var searchNext: ImageView + private var backPressedCallback: OnBackPressedCallback? = null + private var isExpanded = false + private var currentMatch = 0 + private var totalMatches = 0 private lateinit var chapterEntity: ChapterEntity private var baseURL = "" private var filesURL = "" @@ -123,6 +137,12 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { private lateinit var id: String private lateinit var title: String + // Analytics context for WebView-driven interactions (e.g., info icons inside HTML). + private var analyticsPageUrl: String = "" + private var analyticsPageTitle: String = "" + + private var subChapterByUrl: Map = emptyMap() + private lateinit var webViewFont: WebView private lateinit var sharedPreferences: SharedPreferences private var fontValue: Array = arrayOf("Small", "Normal", "Large", "Larger") @@ -147,12 +167,14 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { } } - private fun onDeleteNoteSnackbar(note: NoteEntity) = - bind.root.snackBar(getString(R.string.note_deleted)).also { - it.setAction(getString(R.string.undo)) { - viewModel.insertNote(note) - } - } + + + private fun onDeleteNoteSnackbar(note: NoteEntity) { + showNoteDeletedCard("Note Deleted") + // undo functionality with a delay + // Handler(Looper.getMainLooper()).postDelayed({ + // }, 3000) + } private fun updateFont() { val fontIndex = @@ -166,6 +188,192 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { } webViewFont.settings.textZoom = fontSize + + // Compute target pixel size for chapter icon relative to 16px @ 125% baseline + val scaleFactor = fontSize / 125.0 + val iconPx = 16.0 * scaleFactor + val iconPxStr = String.format("%.2f", iconPx) + // Make table icons slightly larger at Normal (125%) + val tableIconPx = 24.0 * scaleFactor + val tableIconPxStr = String.format("%.2f", tableIconPx) + + // Compute scaled metrics for the decorative line used by `.uk-paragraph` + val remBasePx = 16.0 // 1rem baseline + val ukHeightPx = 2.0 * remBasePx * scaleFactor // was 2rem + val ukWidthPx = 0.5 * remBasePx * scaleFactor // was 0.5rem + val ukTopPx = -0.25 * remBasePx * scaleFactor // was -0.25rem + val ukRadiusPx = 0.25 * remBasePx * scaleFactor // was 0.25rem + val ukHeightPxStr = String.format("%.2f", ukHeightPx) + val ukWidthPxStr = String.format("%.2f", ukWidthPx) + val ukTopPxStr = String.format("%.2f", ukTopPx) + val ukRadiusPxStr = String.format("%.2f", ukRadiusPx) + + // 1) Set CSS variable consumed by .ic_chapter_icon in style.css (which uses !important) + val setVar = """ + (function(){ + try { + var size='${iconPxStr}px'; + document.documentElement.style.setProperty('--chapter-icon-size', size); + } catch(e) {} + })(); + """.trimIndent() + + // 2) Ensure chapter icon image gets the class so the CSS rule applies, without touching other content images + val tagIcons = """ + (function(){ + try { + var nodes = document.querySelectorAll('img[src$="ic_chapter.svg"], img[src*="/ic_chapter.svg"], img[src*="ic_chapter.svg"]'); + nodes.forEach(function(n){ + if(n.classList && !n.classList.contains('ic_chapter_icon')) n.classList.add('ic_chapter_icon'); + }); + } catch(e) {} + })(); + """.trimIndent() + + // Tag table icons (ic_table.svg) similarly + val tagTableIcons = """ + (function(){ + try { + var nodes = document.querySelectorAll('img[src$="ic_chart.svg"], img[src*="/ic_chart.svg"], img[src*="ic_chart.svg"]'); + nodes.forEach(function(n){ + if(n.classList && !n.classList.contains('ic_chart_icon')) n.classList.add('ic_chart_icon'); + }); + } catch(e) {} + })(); + """.trimIndent() + + // 3) Inject an explicit override rule with !important placed after external CSS + val injectOverride = """ + (function(){ + try { + var style = document.getElementById('chapter-icon-override'); + if(!style){ + style = document.createElement('style'); + style.id = 'chapter-icon-override'; + document.head.appendChild(style); + } + var size='${iconPxStr}px'; + style.textContent = '.ic_chapter_icon{width:'+size+' !important;height:'+size+' !important;}'; + } catch(e) {} + })(); + """.trimIndent() + + // Inject explicit override for table icons after external CSS + val injectTableOverride = """ + (function(){ + try { + var style = document.getElementById('table-icon-override'); + if(!style){ + style = document.createElement('style'); + style.id = 'table-icon-override'; + document.head.appendChild(style); + } + var size='${tableIconPxStr}px'; + style.textContent = '.ic_chart_icon{width:'+size+' !important;height:'+size+' !important;display:inline-block !important;vertical-align:middle !important;object-fit:contain !important;}'; + } catch(e) {} + })(); + """.trimIndent() + + // 4) also apply inline size and attributes so pages missing style.css still resize correctly + val sizeIcons = """ + (function(){ + try { + var cssSize='${iconPxStr}px'; + var attrSize='${iconPxStr}'; + var nodes = document.querySelectorAll('img[src$=\"ic_chapter.svg\"], img[src*=\"/ic_chapter.svg\"], img[src*=\"ic_chapter.svg\"]'); + nodes.forEach(function(n){ + // Ensure the parent wrapper also reserves space for the icon + var p = n.parentElement; + if (p) { + p.style.width = cssSize; + p.style.height = cssSize; + p.style.flex = '0 0 auto'; + } + // Apply explicit sizing on the image + n.style.display = 'inline-block'; + n.style.width = cssSize; + n.style.height = cssSize; + n.style.maxWidth = cssSize; + n.style.maxHeight = cssSize; + if (n.setAttribute) { + n.setAttribute('width', attrSize); + n.setAttribute('height', attrSize); + } + }); + } catch(e) {} + })(); + """.trimIndent() + + // Apply inline size fallback for table icons (resists layout squeeze) + val sizeTableIcons = """ + (function(){ + try { + var cssSize='${tableIconPxStr}px'; + var attrSize='${tableIconPxStr}'; + var nodes = document.querySelectorAll('img[src$=\"ic_chart.svg\"], img[src*=\"/ic_chart.svg\"], img[src*=\"ic_chart.svg\"]'); + nodes.forEach(function(n){ + var p = n.parentElement; + if (p) { + p.style.width = cssSize; + p.style.height = cssSize; + } + n.style.display = 'inline-block'; + n.style.width = cssSize; + n.style.height = cssSize; + n.style.maxWidth = cssSize; + n.style.maxHeight = cssSize; + n.style.objectFit = 'contain'; + n.style.verticalAlign = 'middle'; + if (n.setAttribute) { + n.setAttribute('width', attrSize); + n.setAttribute('height', attrSize); + } + }); + } catch(e) {} + })(); + """.trimIndent() + + // 5) Scale the decorative line for paragraphs `.uk-paragraph::before` to match text zoom + val paragraphOverride = """ + (function(){ + try { + var style = document.getElementById('uk-paragraph-override'); + if(!style){ + style = document.createElement('style'); + style.id = 'uk-paragraph-override'; + document.head.appendChild(style); + } + var h='${ukHeightPxStr}px'; + var w='${ukWidthPxStr}px'; + var t='${ukTopPxStr}px'; + var r='${ukRadiusPxStr}px'; + style.textContent = ''+ + '.uk-paragraph{position: relative;}'+ + '.uk-paragraph::before{'+ + 'content:""; position:absolute; left:0; '+ + 'top:'+t+' !important; '+ + 'height:'+h+' !important; '+ + 'width:'+w+' !important; '+ + 'background-color: var(--primary-color); '+ + 'border-radius:'+r+' !important;'+ + '}'; + } catch(e) {} + })(); + """.trimIndent() + + // Execute after WebView layout pass + webViewFont.post { + webViewFont.evaluateJavascript(setVar, null) + webViewFont.evaluateJavascript(tagIcons, null) + webViewFont.evaluateJavascript(tagTableIcons, null) + webViewFont.evaluateJavascript(injectOverride, null) + webViewFont.evaluateJavascript(injectTableOverride, null) + webViewFont.evaluateJavascript(sizeIcons, null) + webViewFont.evaluateJavascript(sizeTableIcons, null) + webViewFont.evaluateJavascript(injectOverride, null) + webViewFont.evaluateJavascript(sizeIcons, null) + webViewFont.evaluateJavascript(paragraphOverride, null) + } } private fun showFontDialog() { @@ -246,10 +454,17 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { } override fun onDestroyView() { + backPressedCallback?.isEnabled = false super.onDestroyView() sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener) } + override fun onPause() { + // Ensure keyboard is dismissed when leaving this screen + hideKeyboard() + super.onPause() + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { bind = FragmentBodyBinding.bind(view) bodyUrl = bodyFragmentArgs.bodyUrl @@ -263,6 +478,9 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { domStorageEnabled = true allowFileAccess = true // 10 allowContentAccess = true + // Enable smooth scrolling for better search result navigation + setSupportZoom(true) + builtInZoomControls = false } val menuHost: MenuHost = requireActivity() @@ -275,15 +493,30 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { subChapterEntity = bodyUrl.subChapterEntity chapterEntity = bodyUrl.chapterEntity + val contentTitle = if (chartAndSubChapter != null) { + // For charts, use the chart title from the list + chartAndSubChapter!!.chartEntity.chartTitle + } else { + // For regular content, use the subchapter title + HtmlCompat.fromHtml(subChapterEntity.subChapterTitle, FROM_HTML_MODE_LEGACY).toString() + } - bind.lastUpdateTextView.text = - getString(R.string.last_updated, subChapterEntity.lastUpdated) + analyticsPageTitle = contentTitle.toShortTableTitle() + analyticsPageUrl = if (chartAndSubChapter != null) { + chartAndSubChapter!!.chartEntity.id + } else { + subChapterEntity.url + } + setActionBarTitle(analyticsPageTitle) - getActionBar(requireActivity())?.title = - HtmlCompat.fromHtml(chapterEntity.chapterTitle, FROM_HTML_MODE_LEGACY).toString() - dialog = Dialog(requireContext()).dialog() - updateFont() + // Setup search functionality only for subchapter content (not charts) + if (chartAndSubChapter == null) { + setupSearch() + } else { + // Hide search view for charts + bind.searchViewInclude.root.visibility = View.GONE + } // menuHost.addMenuProvider(object : MenuProvider { // override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { @@ -295,52 +528,46 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { // } // }, viewLifecycleOwner, Lifecycle.State.RESUMED) - faNoteColorAdapter = FANoteColorAdapter(requireContext()).also { - it.submitList(NOTE_COLOR) + // Cache subchapters for quick toolbar-title updates when navigating via in-page links + viewModel.getSubChapter.observeOnce(viewLifecycleOwner) { data -> + subChapterByUrl = data.associateBy { it.url } } - val swipeHandler = object : SwipeDecoratorCallback(requireContext()) { - override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { - val position = viewHolder.adapterPosition - val note = faNoteAdapter.currentList[position] - viewModel.deleteNote(note) - onDeleteNoteSnackbar(note) - } + faNoteColorAdapter = FANoteColorAdapter(requireContext()).also { + it.submitList(NOTE_COLOR) } - ItemTouchHelper(swipeHandler).also { - it.attachToRecyclerView(bind.recyclerviewNote) - } - - setupWebView() -//search query - if (bodyUrl.searchQuery.isNotEmpty() && !isOnlyWhitespace(bodyUrl.searchQuery)) { - bind.searchClearText.text = bodyUrl.searchQuery - bind.searchClearContainer.visibility = View.VISIBLE - bind.searchClearButton.setOnClickListener { - - bind.searchClearContainer.visibility = View.GONE - bind.bodyWebView.apply { - clearMatches()//clears the search without multiple parameters - val lp = layoutParams as ViewGroup.MarginLayoutParams - lp.bottomMargin = 0 - layoutParams = lp - //clears the search with multiple parameters - webViewClient = object : WebViewClient() {} - loadUrl(urlGlobal.toString()) + // Let the WebView consume Back presses first; if it has history goBack(), + // otherwise delegate to NavController/activity. + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + try { + Log.d(TAG, "Back pressed: bindInitialized=${::bind.isInitialized}, webViewCanGoBack=${if (::bind.isInitialized) bind.bodyWebView.canGoBack() else "N/A"}") + if (::bind.isInitialized && bind.bodyWebView.canGoBack()) { + Log.d(TAG, "Back pressed: WebView canGoBack -> goBack()") + bind.bodyWebView.goBack() + } else { + Log.d(TAG, "Back pressed: WebView cannot go back -> delegating to activity") + isEnabled = false + requireActivity().onBackPressed() + } + } catch (e: Exception) { + Log.d(TAG, "Back pressed: exception in handler, delegating to activity", e) + isEnabled = false + requireActivity().onBackPressed() + } } } - - // add bottom margin - bind.bodyWebView.apply { - val lp = layoutParams as ViewGroup.MarginLayoutParams - lp.bottomMargin = 100 + bind.searchClearContainer.height - layoutParams = lp - } + ) +//search query + if (bodyUrl.searchQuery.isNotEmpty() && !isOnlyWhitespace(bodyUrl.searchQuery)) { + // Do not display the bottom search-clear container anymore + bind.searchClearContainer.visibility = View.GONE } bind.apply { @@ -348,41 +575,22 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { bookmarkImageButton.setOnClickListener { onBookmarkListener() } if (chartAndSubChapter != null) isChartView() else { - - val originalTitle = subChapterEntity.subChapterTitle - val searchedWordToColor = bodyUrl.searchQuery - val spannableString = SpannableString(originalTitle) - val startIndex = originalTitle.indexOf(searchedWordToColor) - if (startIndex != -1) { - val endIndex = startIndex + searchedWordToColor.length - val backgroundColorSpan = BackgroundColorSpan(Color.YELLOW) - spannableString.setSpan( - backgroundColorSpan, - startIndex, - endIndex, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE - ) - val foregroundColorSpan = ForegroundColorSpan(Color.BLACK) - spannableString.setSpan( - foregroundColorSpan, - startIndex, - endIndex, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE - ) + // Regular content: position content container and load the WebView + val contentContainer = root.findViewById(R.id.content_container) + val layoutParams = contentContainer?.layoutParams as? androidx.constraintlayout.widget.ConstraintLayout.LayoutParams + layoutParams?.let { + it.topToBottom = R.id.search_view_include + it.topMargin = 0 + contentContainer.layoutParams = it } - textviewSubChapter.text = spannableString + val loadUrl = baseURL + PAGES_DIR + subChapterEntity.url + EXTENSION val fileFromDir = filesURL + subChapterEntity.url + EXTENSION - val myURL = "file://${requireContext().filesDir.absolutePath}/${subChapterEntity.url}$EXTENSION" - if(subChapterEntity.url == "15_appendix_district_tb_coordinators_(by_district)"){ - textviewSubChapter.visibility = View.GONE - lastUpdateTextView.visibility = View.GONE + if (subChapterEntity.url == "15_appendix_district_tb_coordinators_(by_district)") { bodyWebView.loadUrl(fileFromDir) - }else{ + } else { bodyWebView.loadUrl(loadUrl) } - - } @@ -400,30 +608,17 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { faNoteAdapter = FANoteAdapter().also { viewModel.getNote(id).observe(viewLifecycleOwner) { data -> it.submitList(data) - showNoteCollapseControl(data.isEmpty()) - bind.noteCountTextView.text = getString(R.string.notes_count, data.size) } it.itemClickCallback { onNoteListenerEdit(it) } } - - recyclerviewNote.apply { - addItemDecoration( - DividerItemDecoration( - requireContext(), - DividerItemDecoration.VERTICAL - ) - ) - layoutManager = GridLayoutManager(requireContext(), 1) - adapter = faNoteAdapter - } - shareButton.setOnClickListener { createDynamicLink() } homeButton.setOnClickListener { + hideKeyboard() // Dismiss keyboard before navigating to home findNavController().popBackStack(R.id.mainFragment, false) } @@ -434,58 +629,20 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { - fun expandRecyclerView(recyclerView: RecyclerView) { - recyclerView.measure( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - val targetHeight = recyclerView.measuredHeight - - recyclerView.layoutParams.height = 0 - recyclerView.visibility = View.VISIBLE - - val animator = ValueAnimator.ofInt(0, targetHeight).apply { - duration = 300 // Adjust duration as needed - addUpdateListener { animation -> - recyclerView.layoutParams.height = animation.animatedValue as Int - recyclerView.requestLayout() - } - } - animator.start() - } - - fun collapseRecyclerView(recyclerView: RecyclerView) { - val initialHeight = recyclerView.measuredHeight - - val animator = ValueAnimator.ofInt(initialHeight, 0).apply { - duration = 300 - addUpdateListener { animation -> - recyclerView.layoutParams.height = animation.animatedValue as Int - recyclerView.requestLayout() - } - doOnEnd { recyclerView.visibility = View.GONE } - } - animator.start() - } - - fun toggleRecyclerViewVisibility(recyclerView: RecyclerView, toggleButton: ImageView, isCollapsed: Boolean) { - if (isCollapsed) { - expandRecyclerView(recyclerView) - toggleButton.setImageResource(R.drawable.ic_baseline_arrow_up) - } else { - collapseRecyclerView(recyclerView) - toggleButton.setImageResource(R.drawable.ic_baseline_arrow_down) - } - } - collapseActionButton.setOnClickListener { - toggleRecyclerViewVisibility(bind.recyclerviewNote, collapseActionButton, isCollapsed) - isCollapsed = !isCollapsed - } } setupBookmark(id) + // Setup floating button + if (chartAndSubChapter == null) { + // floating button for subchapters + setupFloatingButton(false) + } else { + // Position floating button 24dp from top for charts + setupFloatingButton(true) + } + requireActivity().getBottomNavigationView()?.isChecked(R.id.mainFragment) /*Log screen name*/ @@ -524,42 +681,20 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { }) } - private fun showNoteCollapseControl(isEmpty: Boolean) { - bind.collapsableNoteRoot.visibility = - if (isEmpty) View.GONE else View.VISIBLE - } private fun isChartView() = bind.apply { - viewModel.getChapterById(chartAndSubChapter!!.subChapterEntity.chapterId) - .observeOnce(viewLifecycleOwner) { chapterEntity -> - tableName.apply { - text = chartAndSubChapter!!.subChapterEntity.subChapterTitle - setOnClickListener { - val directions = - BodyFragmentDirections.actionBodyFragmentSelf( - bodyUrl.copy( - chapterEntity = ChapterEntity(chapterTitle = chapterEntity.chapterTitle) - ), null - ) - findNavController().navigate(directions) - } - } - } - - textviewSubChapter.setCompoundDrawablesRelativeWithIntrinsicBounds( - R.drawable.ic_baseline_bar_chart, - 0, - 0, - 0 - ) - + // For chart content, position content container and load the chart URL + val contentContainer = root.findViewById(R.id.content_container) + val layoutParams = contentContainer?.layoutParams as? androidx.constraintlayout.widget.ConstraintLayout.LayoutParams + layoutParams?.let { + it.topToBottom = R.id.search_view_include + it.topMargin = 0 + contentContainer.layoutParams = it + } bookmarkType = BookmarkType.CHART - textviewSubChapter.text = chartAndSubChapter!!.chartEntity.chartTitle -// here is where the chart webview is being loaded val loadUrl = baseURL + PAGES_DIR + chartAndSubChapter!!.chartEntity.id + EXTENSION bodyWebView.loadUrl(loadUrl) - } private fun onNoteListenerEdit(note: NoteEntity) = Dialog(requireContext()).dialog().apply { @@ -569,6 +704,9 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { val noteBody = findViewById(R.id.noteBody) val noteTitle = findViewById(R.id.noteTitle) val noteColorRecyclerView = findViewById(R.id.noteRecyclerViewColor) + val editTagLabel = findViewById(R.id.editTagLabel) + val feedbackContainer = findViewById(R.id.feedback_container) + noteColorRecyclerView.apply { faNoteColorAdapter.selectedColor = note.noteColor adapter = faNoteColorAdapter @@ -578,6 +716,9 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { findViewById(R.id.closeDialog).setOnClickListener { dismiss() } noteTitle.text = getString(R.string.edit_concat, getString(R.string.note)) + editTagLabel.text = "Edit Tag" // Change from "Add tag" to "Edit tag" + feedbackContainer.visibility = View.GONE // Hide feedback container in edit mode + noteBody.apply { setText(note.noteText) setSelection(note.noteText.length) @@ -587,13 +728,15 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { deleteButton.apply { text = getString(R.string.delete) setOnClickListener { - requireContext().alertDialog( - message = getString(R.string.note_confirm_deletion) - ) { - dismiss() - viewModel.deleteNote(note) - onDeleteNoteSnackbar(note) - } + showNoteDeletionConfirmationPopup( + onEditDialogHide = { hide() }, + onEditDialogShow = { show() }, + onEditDialogDismiss = { dismiss() }, + onConfirm = { + viewModel.deleteNote(note) + onDeleteNoteSnackbar(note) + } + ) } } @@ -612,7 +755,7 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { ) ) dismiss() - requireContext().toast(getString(R.string.note_updated)) + showNoteDeletedCard("Note Updated") } } } @@ -626,8 +769,11 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { val saveButton = findViewById(R.id.noteSaveButton) val noteBody = findViewById(R.id.noteBody) val noteColorRecyclerView = findViewById(R.id.noteRecyclerViewColor) + val checkBox = findViewById(R.id.select) findViewById(R.id.closeDialog).setOnClickListener { dismiss() } noteColorRecyclerView.apply { + // Reset selection to default (first color) for new notes + faNoteColorAdapter.selectedColor = NOTE_COLOR[0].color adapter = faNoteColorAdapter layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) @@ -641,7 +787,8 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { saveButton.apply { setCompoundDrawables(null, null, null, null) setOnClickListener { - onSaveNote(noteBody.text.toString().trim()) + val isSubmitFeedback = checkBox?.isChecked ?: false + onSaveNote(noteBody.text.toString().trim(), isSubmitFeedback) dismiss() } } @@ -688,8 +835,8 @@ class BodyFragment : BaseFragment(R.layout.fragment_body) { Dialog(requireContext()).dialog().apply { setContentView(R.layout.dialog_bookmark) - val cancelButton = findViewById