-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.qmd
More file actions
203 lines (175 loc) · 9.24 KB
/
Copy pathindex.qmd
File metadata and controls
203 lines (175 loc) · 9.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<section class="landing-shell">
<div class="article-grid" id="article-grid">
<article class="article-card" data-search="Adjustments, Denials, and Reversals How to model and identify ADR behavior in claims data, with runnable SQL against Tuva input_layer.medical_claim for new IDs, same IDs, and hybrid patterns. Aaron Neiderhiser">
<a href="adjustments-denials-reversals.html" class="article-card-link">
<img src="img/blog/adjustments-denials-reversals.jpg" alt="Adjustments, Denials, and Reversals" />
<div class="card-body">
<h3>Adjustments, Denials, and Reversals</h3>
<p class="card-author">Aaron Neiderhiser</p>
<p class="card-date">March 12, 2026</p>
<p class="card-copy">How to model and identify ADR behavior in claims data, with runnable SQL against Tuva input_layer.medical_claim for new IDs, same IDs, and hybrid patterns.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="Measuring Same-Day Readmits How to measure same-day readmits for acute inpatient encounters in Tuva, including discharge-status patterns and same-primary-diagnosis checks. Aaron Neiderhiser Andreas Martinson">
<a href="measuring-same-day-readmits.html" class="article-card-link">
<img src="img/blog/same-day-readmits.png" alt="Measuring Same-Day Readmits" />
<div class="card-body">
<h3>Measuring Same-Day Readmits</h3>
<p class="card-author">Aaron Neiderhiser & Andreas Martinson</p>
<p class="card-date">March 4, 2026</p>
<p class="card-copy">How to measure same-day readmits for acute inpatient encounters in Tuva, including discharge-status patterns and same-primary-diagnosis checks.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="Understanding Medicare ACO Assignment In Medicare ACOs member assignment is complex -- but it doesn't have to be. Mike Krahulec">
<a href="understanding-medicare-aco-assignment.html" class="article-card-link">
<img src="img/blog/understanding-medicare-aco-assignment.jpg" alt="Understanding Medicare ACO Assignment" />
<div class="card-body">
<h3>Understanding Medicare ACO Assignment</h3>
<p class="card-author">Mike Krahulec</p>
<p class="card-date">February 19, 2026</p>
<p class="card-copy">In Medicare ACOs member assignment is complex -- but it doesn't have to be.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="Customizing the Tuva Data Model How Tuva v0.17.0 preserves custom extension columns across the core data model with a configurable prefix-based pass-through pattern. Rabee Zyoud">
<a href="customizing-the-tuva-data-model.html" class="article-card-link">
<img src="img/blog/customizing-the-tuva-data-model.png" alt="Customizing the Tuva Data Model" />
<div class="card-body">
<h3>Customizing the Tuva Data Model</h3>
<p class="card-author">Rabee Zyoud</p>
<p class="card-date">February 12, 2026</p>
<p class="card-copy">How Tuva v0.17.0 preserves custom extension columns across the core data model with a configurable prefix-based pass-through pattern.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="Building a Claims Data Platform A practical architecture guide for building claims analytics platforms, covering ingestion, normalization, data quality, adjustment handling, and analytics-ready models. It outlines implementation tradeoffs and concrete design decisions for scaling payer and value-based care use cases. Aaron Neiderhiser">
<a href="building-a-claims-data-platform.html" class="article-card-link">
<img src="img/blog/building-a-claims-data-platform.jpg" alt="Building a Claims Data Platform" />
<div class="card-body">
<h3>Building a Claims Data Platform</h3>
<p class="card-author">Aaron Neiderhiser</p>
<p class="card-date">April 17, 2024</p>
<p class="card-copy">A practical architecture guide for building claims analytics platforms, covering ingestion, normalization, data quality, adjustment handling, and analytics-ready models. It outlines implementation tradeoffs and concrete design decisions for scaling payer and value-based care use cases.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="Intro to dbt for Healthcare An implementation-oriented introduction to dbt for healthcare data teams, focused on project structure, warehouse execution, Git workflows, and built-in testing/documentation. The post explains why these software engineering patterns materially improve analytics reliability and delivery speed. Aaron Neiderhiser">
<a href="intro-dbt-for-healthcare.html" class="article-card-link">
<img src="img/blog/intro-dbt-for-healthcare.png" alt="Intro to dbt for Healthcare" />
<div class="card-body">
<h3>Intro to dbt for Healthcare</h3>
<p class="card-author">Aaron Neiderhiser</p>
<p class="card-date">January 31, 2024</p>
<p class="card-copy">An implementation-oriented introduction to dbt for healthcare data teams, focused on project structure, warehouse execution, Git workflows, and built-in testing/documentation. The post explains why these software engineering patterns materially improve analytics reliability and delivery speed.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
<article class="article-card" data-search="The Problem with Healthcare Data A technical breakdown of the three core barriers to reliable healthcare analytics: normalization, data quality, and high-level concept generation. It frames why these issues persist across claims and clinical data and why they must be addressed in the data model itself. Aaron Neiderhiser">
<a href="the-problem-with-healthcare-data.html" class="article-card-link">
<img src="img/blog/the-problem-with-healthcare-data.png" alt="The Problem with Healthcare Data" />
<div class="card-body">
<h3>The Problem with Healthcare Data</h3>
<p class="card-author">Aaron Neiderhiser</p>
<p class="card-date">January 11, 2024</p>
<p class="card-copy">A technical breakdown of the three core barriers to reliable healthcare analytics: normalization, data quality, and high-level concept generation. It frames why these issues persist across claims and clinical data and why they must be addressed in the data model itself.</p>
<span class="card-cta">Read Article</span>
</div>
</a>
</article>
</div>
<p id="no-results-message" class="no-results" hidden>
No matching articles. Try a broader keyword.
</p>
</section>
<script>
document.addEventListener("DOMContentLoaded", function () {
const input = document.getElementById("global-article-search-input");
const cards = Array.from(document.querySelectorAll(".article-card"));
const noResults = document.getElementById("no-results-message");
if (!input || cards.length === 0 || !noResults) return;
const normalizeHref = (href) => {
if (!href) return "";
const withoutHash = href.split("#")[0];
try {
return new URL(withoutHash, window.location.origin).pathname;
} catch (_) {
return withoutHash;
}
};
const normalizeArticleKey = (href) => {
if (!href) return "";
const path = normalizeHref(href)
.toLowerCase()
.replace(/\\/g, "/")
.replace(/#.*$/, "")
.replace(/\/+$/, "")
.replace(/^\/+/, "")
.replace(/^blog\//, "")
.replace(/\.html$/, "");
const lastSegment = path.split("/").filter(Boolean).pop() || "";
if (!lastSegment || lastSegment === "index") return "";
return lastSegment;
};
const cardRecords = cards.map((card) => {
const href = normalizeArticleKey(card.querySelector("a")?.getAttribute("href"));
const basic = [
card.getAttribute("data-search") || "",
card.querySelector("h3")?.textContent || "",
card.querySelector(".card-copy")?.textContent || "",
]
.join(" ")
.toLowerCase();
return { card, href, corpus: basic, basic };
});
const fullTextByPage = new Map();
const applyFilter = () => {
const query = input.value.trim().toLowerCase();
let visibleCount = 0;
const terms = query.split(/\s+/).filter(Boolean);
cardRecords.forEach((record) => {
const isMatch =
terms.length === 0 ||
terms.every((term) => {
if (term.length < 3) {
return record.corpus.includes(term);
}
return record.corpus.includes(term);
});
record.card.hidden = !isMatch;
if (isMatch) visibleCount += 1;
});
noResults.hidden = visibleCount !== 0;
};
input.addEventListener("input", applyFilter);
const searchIndexUrl = window.location.pathname.startsWith("/blog")
? "/blog/search.json"
: "./search.json";
fetch(searchIndexUrl)
.then((response) => (response.ok ? response.json() : []))
.then((entries) => {
if (!Array.isArray(entries)) return;
entries.forEach((entry) => {
const href = normalizeArticleKey(entry?.href);
if (!href) return;
const chunk = [entry?.title || "", entry?.section || "", entry?.text || ""]
.join(" ")
.toLowerCase();
fullTextByPage.set(href, `${fullTextByPage.get(href) || ""} ${chunk}`);
});
cardRecords.forEach((record) => {
const indexed = fullTextByPage.get(record.href) || "";
record.corpus = `${record.basic} ${indexed}`;
});
applyFilter();
})
.catch(() => {});
});
</script>