File size: 45,680 Bytes
a4e32a0
da415a5
 
 
 
cc6ef29
 
da415a5
 
 
 
 
 
 
 
 
 
 
 
 
 
cc6ef29
da415a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cc6ef29
da415a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cc6ef29
da415a5
cc6ef29
 
da415a5
cc6ef29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a4e32a0
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>CMS 0057 deadline — check your FHIR capability statement</title>
<meta name="description" content="This browser tool audits a FHIR CapabilityStatement against the CMS-0057-F prior authorization rule.">
<style>
:root{color-scheme:light}body{margin:0;font:15px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;background:#faf9f5;color:#1a1512}
.wrap{max-width:960px;margin:0 auto;padding:28px 18px 60px}h1{font-size:26px;margin:0 0 6px}.lede{color:#4a403a;margin:0 0 16px}
textarea{width:100%;min-height:260px;font:13px/1.45 ui-monospace,Menlo,Consolas,monospace;padding:12px;border:1px solid #d9d0c4;border-radius:8px;box-sizing:border-box}
.bar{display:flex;gap:10px;align-items:center;margin:12px 0}button{font:600 15px system-ui;padding:10px 18px;border:0;border-radius:8px;background:#1a1512;color:#fff;cursor:pointer}
input[type=date]{font:14px system-ui;padding:8px;border:1px solid #d9d0c4;border-radius:6px}
table{border-collapse:collapse;width:100%;font-size:14px;margin-top:10px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #eee;vertical-align:top}th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7a6e65}
.sev.error{color:#a8551f;font-weight:700}.sev.warn,.sev.warning{color:#96691f}.ok{color:#2a6446;font-weight:600}.sum{font-weight:600}
.note{font-size:13px;color:#7a6e65;margin-top:18px}#paid{margin-top:22px;padding:14px 16px;border:1px solid #e2d8cb;border-radius:10px;background:#fffdfa}
</style>
<script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script>
<!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/cms-0057-api-gate"></head>
<body>
<div class="wrap">
<h1>CMS 0057 deadline — check your FHIR capability statement</h1>
<p class="lede">Audit a FHIR CapabilityStatement against the CMS-0057-F prior authorization rule before the 1 January 2027 compliance date, without leaving the editor. Runs entirely in your browser — nothing is uploaded.</p>
<textarea id="src" spellcheck="false">{
  "resourceType": "CapabilityStatement",
  "id": "payer-patient-access",
  "url": "https://fhir.example-health-plan.com/metadata",
  "version": "1.0.4",
  "name": "ExamplePlanPatientAccess",
  "title": "Example Health Plan - Patient Access API (CMS-9115-F build)",
  "status": "active",
  "date": "2021-07-01",
  "publisher": "Example Health Plan, Medicare Advantage contract H1234",
  "kind": "instance",
  "implementation": {
    "description": "Patient Access and Provider Directory APIs delivered for the 2021 interoperability rule",
    "url": "https://fhir.example-health-plan.com/r4"
  },
  "fhirVersion": "4.0.1",
  "format": ["application/fhir+json"],
  "implementationGuide": [
    "http://hl7.org/fhir/us/carin-bb/ImplementationGuide/hl7.fhir.us.carin-bb"
  ],
  "rest": [
    {
      "mode": "server",
      "security": {
        "service": [
          {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/restful-security-service", "code": "SMART-on-FHIR"}]}
        ],
        "extension": [
          {
            "url": "http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris",
            "extension": [
              {"url": "authorize", "valueUri": "http://auth.example-health-plan.com/authorize"},
              {"url": "token", "valueUri": "https://auth.example-health-plan.com/token"}
            ]
          }
        ]
      },
      "resource": [
        {
          "type": "Patient",
          "supportedProfile": ["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient"],
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        },
        {
          "type": "Coverage",
          "supportedProfile": ["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Coverage"],
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        },
        {
          "type": "ExplanationOfBenefit",
          "supportedProfile": ["http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit"],
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        },
        {
          "type": "Organization",
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        },
        {
          "type": "Practitioner",
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        },
        {
          "type": "InsurancePlan",
          "interaction": [{"code": "read"}, {"code": "search-type"}]
        }
      ]
    }
  ]
}</textarea>
<div class="bar"><button id="go">Check</button><label>as of <input type="date" id="today"></label></div>
<div id="out" aria-live="polite"></div>
<div id="nextstep" style="margin:14px 0;padding:12px;border:1px solid #d9d0c4;border-radius:8px;background:#fffaf2"><a href="https://getreadystack.com/api/buy/cl/polar_cl_RqXjvqSVkQXgBWNS56pWMaOQRkjbpSGQuPGL50WDgb6" style="font-weight:600;color:#7a3b00">Export this audit as a dated Markdown + CSV gap report</a><br><small>$29 once &middot; one licence key per person or team seat &middot; A payer interoperability readiness review from an interop consultancy is commonly quoted as a five-figure engagement.</small></div>
<div id="paid"><strong>Free here:</strong> Audit any FHIR CapabilityStatement in the editor and see every CMS-0057-F gap with its citation and the days left to 1 January 2027.. <strong>In the editor:</strong> Export the same audit as a dated Markdown + CSV gap report, one row per gap with its citation, for the compliance file an auditor asks for. — that part asks for a licence key.</div>
<p class="note">Same engine as the VS Code extension, byte for byte.</p>
</div>
<script>var CMS57_RULES = [
 {
  "id": "fhir_r4",
  "sev": "error",
  "kind": "version",
  "anchor": "\"fhirVersion\"",
  "msg": "No fhirVersion is declared. The CMS-0057-F APIs must be conformant to HL7 FHIR Release 4.0.1 (R4).",
  "msg_bad": "fhirVersion is {v}. The CMS-0057-F APIs must be conformant to HL7 FHIR Release 4.0.1 (R4); an STU3 or R5 server does not satisfy the rule."
 },
 {
  "id": "us_core_profiles",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "hl7\\.org/fhir/us/core"
  ],
  "msg": "No US Core profile is referenced anywhere in the statement. The CMS-0057-F APIs must return the USCDI clinical data set through US Core R4 profiles."
 },
 {
  "id": "smart_oauth",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "SMART-on-FHIR",
   "smart-app-launch",
   "oauth-uris"
  ],
  "msg": "No SMART App Launch / OAuth 2.0 security service is declared. The Patient Access API must let a member authorise a third-party app without contacting the payer."
 },
 {
  "id": "tls_endpoints",
  "sev": "error",
  "kind": "forbid",
  "patterns": [
   "\"(address|authorize|token|manage|revoke|endpoint)\"\\s*:\\s*\"http://",
   "\"valueUri\"\\s*:\\s*\"http://"
  ],
  "msg": "A plaintext http:// endpoint is declared. Every CMS-0057-F API endpoint, including the OAuth 2.0 authorize and token URLs, must be TLS-protected."
 },
 {
  "id": "patient_access_eob",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\"type\"\\s*:\\s*\"ExplanationOfBenefit\""
  ],
  "msg": "Patient Access API: no ExplanationOfBenefit resource is declared, so adjudicated claims and encounter data cannot be returned to the member."
 },
 {
  "id": "patient_access_prior_auth",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\"type\"\\s*:\\s*\"ClaimResponse\""
  ],
  "msg": "Patient Access API: no ClaimResponse resource is declared. CMS-0057-F adds prior authorization requests and decisions (drugs excluded) to the Patient Access API from 1 January 2027."
 },
 {
  "id": "prior_auth_submit",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\\$submit",
   "\"name\"\\s*:\\s*\"submit\"",
   "OperationDefinition/Claim-submit"
  ],
  "msg": "Prior Authorization API: no Claim $submit operation is declared, so a provider cannot send a prior authorization request to this server."
 },
 {
  "id": "prior_auth_inquire",
  "sev": "warn",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\\$inquire",
   "\"name\"\\s*:\\s*\"inquire\""
  ],
  "msg": "Prior Authorization API: no $inquire operation is declared. Without it a provider cannot check the status of a pending prior authorization."
 },
 {
  "id": "dtr_questionnaire",
  "sev": "warn",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\\$questionnaire-package",
   "\"name\"\\s*:\\s*\"questionnaire-package\""
  ],
  "msg": "Documentation requirements: no $questionnaire-package operation is declared, so the payer's documentation rules are not machine-readable to the provider's EHR."
 },
 {
  "id": "provider_access_export",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\\$export",
   "\"name\"\\s*:\\s*\"export\""
  ],
  "msg": "Provider Access API: no bulk $export operation is declared. CMS-0057-F requires payers to share member data with in-network providers from 1 January 2027."
 },
 {
  "id": "payer_to_payer_match",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\\$member-match",
   "\"name\"\\s*:\\s*\"member-match\""
  ],
  "msg": "Payer-to-Payer API: no $member-match operation is declared, so a previous payer cannot identify this member and hand over their data at enrolment."
 },
 {
  "id": "server_mode",
  "sev": "error",
  "kind": "require_any",
  "anchor": "\"rest\"",
  "patterns": [
   "\"mode\"\\s*:\\s*\"server\""
  ],
  "msg": "No REST server mode is declared. A CapabilityStatement offered as evidence for a CMS-0057-F API must describe a server, not a client."
 },
 {
  "id": "statement_stale",
  "sev": "warn",
  "kind": "stale_date",
  "anchor": "\"date\"",
  "msg": "The statement is dated {d} and is {n} days old. Auditors read the date first: refresh it as the APIs are built out."
 },
 {
  "id": "deadline_clock",
  "sev": "info",
  "kind": "clock",
  "anchor": "\"resourceType\"",
  "msg": "{n} days left until the CMS-0057-F compliance date of 1 January 2027, with {e} blocking gaps still open in this statement.",
  "msg_past": "The CMS-0057-F compliance date of 1 January 2027 passed {n} days ago and {e} blocking gaps are still open in this statement."
 }
];</script>
<script>/* CMS-0057 API Gate - engine
 * Reads a FHIR CapabilityStatement (JSON text) and reports the gaps that stop it
 * from standing as evidence for the four CMS-0057-F APIs due 1 January 2027.
 * Same file runs in Node (extension) and in the browser (free web page).
 */
const RULES = (typeof module !== 'undefined') ? require('./rules.json') : window.CMS57_RULES;

const DEADLINE = '2027-01-01';
const STALE_DAYS = 365;
const DAY = 86400000;

function daysBetween(a, b) {
  return Math.round((Date.parse(b + 'T00:00:00Z') - Date.parse(a + 'T00:00:00Z')) / DAY);
}

function lineOf(lines, src) {
  if (!src) return 1;
  let re;
  try { re = new RegExp(src); } catch (e) { return 1; }
  for (let i = 0; i < lines.length; i++) if (re.test(lines[i])) return i + 1;
  return 1;
}

function fill(msg, vals) {
  return String(msg).replace(/\{(\w+)\}/g, function (m, k) {
    return Object.prototype.hasOwnProperty.call(vals, k) ? String(vals[k]) : m;
  });
}

function check(text, opts) {
  opts = opts || {};
  const today = /^\d{4}-\d{2}-\d{2}$/.test(opts.today || '') ? opts.today : '2026-09-16';
  const src = String(text == null ? '' : text);
  const lines = src.split(/\r?\n/);
  const findings = [];
  const push = function (rule, msg, line) {
    findings.push({ check: rule.id, sev: rule.sev, msg: String(msg).replace(/\b1 days\b/g, '1 day'), line: line || 1 });
  };

  RULES.forEach(function (rule) {
    if (rule.kind === 'version') {
      const m = src.match(/"fhirVersion"\s*:\s*"([^"]+)"/);
      const line = lineOf(lines, rule.anchor);
      if (!m) push(rule, rule.msg, lineOf(lines, '"resourceType"'));
      else if (!/^4\.0/.test(m[1])) push(rule, fill(rule.msg_bad, { v: m[1] }), line);
      return;
    }
    if (rule.kind === 'require_any') {
      const hit = (rule.patterns || []).some(function (p) { return new RegExp(p).test(src); });
      if (!hit) push(rule, rule.msg, lineOf(lines, rule.anchor));
      return;
    }
    if (rule.kind === 'forbid') {
      (rule.patterns || []).forEach(function (p) {
        const re = new RegExp(p);
        for (let i = 0; i < lines.length; i++) {
          if (re.test(lines[i])) { push(rule, rule.msg, i + 1); return; }
        }
      });
      return;
    }
    if (rule.kind === 'stale_date') {
      const m = src.match(/"date"\s*:\s*"(\d{4}-\d{2}-\d{2})/);
      if (!m) return;
      const age = daysBetween(m[1], today);
      if (age > STALE_DAYS) push(rule, fill(rule.msg, { d: m[1], n: age }), lineOf(lines, '"date"'));
      return;
    }
    if (rule.kind === 'clock') {
      const errs = findings.filter(function (f) { return f.sev === 'error'; }).length;
      if (!errs) return;
      const left = daysBetween(today, DEADLINE);
      const line = lineOf(lines, rule.anchor);
      if (left >= 0) push(rule, fill(rule.msg, { n: left, e: errs }), line);
      else push(rule, fill(rule.msg_past, { n: -left, e: errs }), line);
    }
  });

  return { findings: findings };
}

const API = { engine: { check: check }, RULES: RULES, RULE_COUNT: RULES.length };
if (typeof module !== 'undefined') module.exports = API;
if (typeof window !== 'undefined') window.CMS57ENGINE = API;
</script>
<script>// ⛔뼈대 — kit/scaffold.py 가 찍는다 (s143). findings [{check,sev,msg,line?}] → 글/HTML. 같은 파일이 Node 와 브라우저에서 산다.
'use strict';
function escapeHtml(s) { return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); }
function summaryLine(res) {
  const f = (res && res.findings) || []; const e = f.filter(function (x) { return String(x.sev || 'error').toLowerCase().startsWith('err'); }).length;
  return f.length ? (f.length + ' finding' + (f.length === 1 ? '' : 's') + ' (' + e + ' error' + (e === 1 ? '' : 's') + ')') : 'Clean — no findings.';
}
function toText(res, label) {
  const f = (res && res.findings) || [];
  const lines = ['== ' + (label || '') + ' — ' + summaryLine(res)];
  f.forEach(function (x) { lines.push('  ' + String(x.sev || 'error').toUpperCase().slice(0, 4) + '  ' + (x.line ? 'L' + x.line + '  ' : '') + (x.check || x.id || '') + '  ' + (x.msg || x.message || '')); });
  return lines.join('\n');
}
function toHtml(res) {
  const f = (res && res.findings) || [];
  if (!f.length) return '<p class="ok">' + escapeHtml(summaryLine(res)) + '</p>';
  const rows = f.map(function (x) { return '<tr><td class="sev ' + escapeHtml(String(x.sev || 'error')) + '">' + escapeHtml(String(x.sev || 'error')) + '</td><td>' + (x.line ? 'L' + escapeHtml(x.line) : '') + '</td><td><code>' + escapeHtml(x.check || x.id || '') + '</code></td><td>' + escapeHtml(x.msg || x.message || '') + '</td></tr>'; }).join('');
  return '<p class="sum">' + escapeHtml(summaryLine(res)) + '</p><table><thead><tr><th>Level</th><th>Line</th><th>Check</th><th>What</th></tr></thead><tbody>' + rows + '</tbody></table>';
}
var CMS57REPORT = { escapeHtml: escapeHtml, summaryLine: summaryLine, toText: toText, toHtml: toHtml };
if (typeof module !== 'undefined' && module.exports) module.exports = CMS57REPORT;
else window.CMS57REPORT = CMS57REPORT;
</script>
<script>
(function(){
  var src=document.getElementById('src'), out=document.getElementById('out'), go=document.getElementById('go'), today=document.getElementById('today');
  today.value=new Date().toISOString().slice(0,10);
  function run(){ try { var res=window.CMS57ENGINE.engine.check(src.value,{today:today.value}); out.innerHTML=window.CMS57REPORT.toHtml(res); } catch(e){ out.innerHTML='<p class="sev error">Could not run: '+String(e.message||e)+'</p>'; } }
  go.onclick=run; if (src.value.trim()) run();
})();
</script>


<section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://marketplace.visualstudio.com/items?itemName=ReadyStack.cms-0057-api-gate" rel="noopener" data-yj-install-door="mp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'cms-0057-api-gate',src:'mp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">VS Code Marketplace</a><a href="https://open-vsx.org/extension/readystack/cms-0057-api-gate" rel="noopener" data-yj-install-door="ovsx" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'cms-0057-api-gate',src:'ovsx',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Open VSX (Cursor, VSCodium)</a><a href="https://www.npmjs.com/package/@readystack/cms-0057-api-gate" rel="noopener" data-yj-install-door="npm" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'cms-0057-api-gate',src:'npm',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">npm</a><a href="https://www.npmjs.com/package/@readystack/cms-0057-api-gate" rel="noopener" data-yj-install-door="mcp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'cms-0057-api-gate',src:'mcp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">MCP server (npx)</a><a href="https://hub.docker.com/r/getreadystack/cms-0057-api-gate" rel="noopener" data-yj-install-door="docker" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'cms-0057-api-gate',src:'docker',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Docker Hub</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">ext install ReadyStack.cms-0057-api-gate
npx @readystack/cms-0057-api-gate &lt;file&gt;
npx @readystack/cms-0057-api-gate --mcp</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/cl/polar_cl_l6iN1uWt0FwWu7tBsczD0jWpP2vxFM54Wdwqb3KPi1G" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section>
<section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get the full rule table as a PDF</b><div style="opacity:.78;margin:.35rem 0 .8rem">All 14 rules CMS-0057 API Gate checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Email me the PDF</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">Sent. It arrives within the hour - check spam too.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"cms-0057-api-gate",lang:"en",source:"rule_table"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);})();</script></section>

<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$29</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">14 rules read a FHIR CapabilityStatement against CMS-0057-F. A 2021 payer statement returned 6 blocking gaps - three of the four APIs missing - and 107 days left to 1 January 2027.</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">A payer interoperability readiness review from an interop consultancy is commonly quoted as a five-figure engagement.</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_RqXjvqSVkQXgBWNS56pWMaOQRkjbpSGQuPGL50WDgb6" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section>
<!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div>


<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>

<script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>
<section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-09-16">Updated 2026-09-16</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-09-16","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku77334_result_card.jpg" alt="CMS-0057 API Gate" loading="lazy" style="max-width:100%;border-radius:6px"></p>
<p>A Medicare Advantage payer&#x27;s FHIR CapabilityStatement - the file the CMS Interoperability and Prior Authorization rule (CMS-0057-F) is read against - returned 6 blocking gaps and 107 days left when checked on 16 September 2026. The file was valid, and had been since 2021, which is the problem.</p>
<h3>The four APIs, and the date</h3>
<p>CMS-0057-F applies to Medicare Advantage organizations, state Medicaid and CHIP programs, and QHP issuers on the federal exchanges. By 1 January 2027 they must run four HL7 FHIR R4 APIs:</p>
<ul><li>Patient Access API, expanded to include prior authorization requests and decisions, drugs excluded</li><li>Provider Access API, sharing member data with in-network providers</li><li>Payer-to-Payer API, handing a member&#x27;s history to their new plan</li><li>Prior Authorization API, answering with an approval, a denial with a specific reason, or a request for more detail</li></ul>
<p>From 1 January 2026 the same rule requires prior authorization decisions within 72 hours for expedited requests and 7 calendar days for standard ones.</p>
<p>The CapabilityStatement your server publishes at /metadata is the machine-readable claim that those four APIs exist.</p>
<h3>What a 2021 statement looks like now</h3>
<p>The shape most payer servers are still in, built for the 2021 rule (CMS-9115-F) and never revisited:</p>
<pre><code>{&quot;resourceType&quot;:&quot;CapabilityStatement&quot;,&quot;date&quot;:&quot;2021-07-01&quot;,&quot;fhirVersion&quot;:&quot;4.0.1&quot;,
 &quot;rest&quot;:[{&quot;mode&quot;:&quot;server&quot;,&quot;resource&quot;:[
   {&quot;type&quot;:&quot;Patient&quot;},{&quot;type&quot;:&quot;Coverage&quot;},{&quot;type&quot;:&quot;ExplanationOfBenefit&quot;}]}]}</code></pre>
<p>Run the 14 rules over it: 10 findings, 6 of them blocking:</p>
<pre><code>ERROR  us_core_profiles          No US Core profile is referenced anywhere
ERROR  tls_endpoints             A plaintext http:// endpoint is declared
ERROR  patient_access_prior_auth No ClaimResponse resource is declared
ERROR  prior_auth_submit         No Claim $submit operation is declared
ERROR  provider_access_export    No bulk $export operation is declared
ERROR  payer_to_payer_match      No $member-match operation is declared
INFO   deadline_clock            107 days left until 1 January 2027</code></pre>
<p>Three of the four required APIs have no surface in this file, and the fourth cannot show a member their prior authorizations.</p>
<h3>Why the validator said yes</h3>
<p>A generic FHIR validator calls that file valid, and it is right to: a validator reads the FHIR R4 schema, not the Federal Register. Schema-valid is the normal state of a payer server missing Claim $submit, Group $export and $member-match: nothing in the schema knows what 1 January 2027 is.</p>
<h3>The 14 rules</h3>
<p>fhirVersion 4.0.1. US Core R4 profiles. SMART App Launch and OAuth 2.0 security. TLS-only endpoints. ExplanationOfBenefit and ClaimResponse inside Patient Access. Claim $submit and $inquire. $questionnaire-package. Group $export for Provider Access. $member-match for Payer-to-Payer. A statement date that is not stale - the sample one is 1903 days old. And a clock that stays quiet until a blocking gap is open.</p>
<p>Change the date and the answer changes. The same file on 15 January 2027 reports the compliance date passed 14 days ago; a statement halfway through the work reports 2 blocking gaps on 31 December 2026, with 1 day left.</p>
<h3>Where it runs</h3>
<p>The same engine runs as a VS Code extension over any CapabilityStatement in your workspace, and as one page in the browser. Every check is free and needs no key - all 14 rules, every finding, every file. The full version exports the audit as a dated Markdown and CSV gap report for the compliance file.</p>
<p>A payer interoperability readiness review is commonly quoted as a five-figure engagement. This clears the mechanical gaps first.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku77334_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku77334_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does CMS-0057 API Gate actually do?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It reads a FHIR CapabilityStatement as you edit it and reports, line by line, which of the four CMS-0057-F APIs it cannot yet stand as evidence for: Patient Access, Provider Access, Payer-to-Payer and Prior Authorization. 14 rules run, and a clock shows the days left to 1 January 2027.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is it for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Health IT engineers at Medicare Advantage organizations, state Medicaid and CHIP programs, and QHP issuers on the federal exchanges, plus the FHIR vendors building those servers. If your team owns the /metadata endpoint that CMS-0057-F will be judged on, this is your file.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why is a free FHIR validator not enough?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A generic FHIR validator calls this file valid, because it checks the statement against the FHIR R4 schema, not against a federal rule. Schema-valid is the normal state of a payer server that is still missing Claim $submit, Group $export and $member-match. The rule, not the schema, is what CMS reads.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what costs money?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Every check is free and needs no licence key: all 14 rules, every finding, every file, no limit. The paid tier changes who holds the result, not how much you can see. $29 once exports the same audit as a dated Markdown and CSV gap report with one row per gap and its CMS-0057-F citation.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What would this cost otherwise?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A payer interoperability readiness review from an interop consultancy is commonly quoted as a five-figure engagement. This extension does not replace that review; it removes the mechanical gaps before you pay for one, so the consultant reads the hard questions instead of your missing operations.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask ChatGPT or another AI chat?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. FHIR API Gate - CMS-0057 prior authorization (Da Vinci) checks the file you open against 14 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does CMS-0057 API Gate actually do?", "acceptedAnswer": {"@type": "Answer", "text": "It reads a FHIR CapabilityStatement as you edit it and reports, line by line, which of the four CMS-0057-F APIs it cannot yet stand as evidence for: Patient Access, Provider Access, Payer-to-Payer and Prior Authorization. 14 rules run, and a clock shows the days left to 1 January 2027."}}, {"@type": "Question", "name": "Who is it for?", "acceptedAnswer": {"@type": "Answer", "text": "Health IT engineers at Medicare Advantage organizations, state Medicaid and CHIP programs, and QHP issuers on the federal exchanges, plus the FHIR vendors building those servers. If your team owns the /metadata endpoint that CMS-0057-F will be judged on, this is your file."}}, {"@type": "Question", "name": "Why is a free FHIR validator not enough?", "acceptedAnswer": {"@type": "Answer", "text": "A generic FHIR validator calls this file valid, because it checks the statement against the FHIR R4 schema, not against a federal rule. Schema-valid is the normal state of a payer server that is still missing Claim $submit, Group $export and $member-match. The rule, not the schema, is what CMS reads."}}, {"@type": "Question", "name": "What is free and what costs money?", "acceptedAnswer": {"@type": "Answer", "text": "Every check is free and needs no licence key: all 14 rules, every finding, every file, no limit. The paid tier changes who holds the result, not how much you can see. $29 once exports the same audit as a dated Markdown and CSV gap report with one row per gap and its CMS-0057-F citation."}}, {"@type": "Question", "name": "What would this cost otherwise?", "acceptedAnswer": {"@type": "Answer", "text": "A payer interoperability readiness review from an interop consultancy is commonly quoted as a five-figure engagement. This extension does not replace that review; it removes the mechanical gaps before you pay for one, so the consultant reads the hard questions instead of your missing operations."}}, {"@type": "Question", "name": "Why not just ask ChatGPT or another AI chat?", "acceptedAnswer": {"@type": "Answer", "text": "A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. FHIR API Gate - CMS-0057 prior authorization (Da Vinci) checks the file you open against 14 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:77334,slug:"cms-0057-api-gate",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/angular-removed-api-lint"><span class="yj-rel-t">Angular Removed-API Lint</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/firestore-rules-guard"><span class="yj-rel-t">Firestore Rules Guard</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/dotnet-eol-support-gate"><span class="yj-rel-t">.NET EOL &amp; CRA Support Window Gate</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/robots-txt-ai-crawler-audit"><span class="yj-rel-t">AI Crawler Rules - robots.txt Audit for AI Search</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/accessibility-statement-lint"><span class="yj-rel-t">Accessibility Statement Lint (EU model)</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/age-gate-lint"><span class="yj-rel-t">Age Gate Lint — UK Online Safety Act</span><span class="yj-rel-p">$29</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section></body>
</html>