Building sourced Excel models Scope: global method; website edition; worked case numbers are UNVERIFIED examples, not live evidence Revision SHA-256: 586d70d1f63bd1cb11ee41af67dfb37f3bd47c43e3608541c0163e4ccbffc5aa --- name: building-sourced-excel-models description: Use when building a spreadsheet model, pricing or ROI workbook, business case, or data-backed deliverable that a hostile reader will try to dismantle : a CFO, an actuary, a contracting lead. Also use when deciding whether a figure is solid enough to put in a cell, when a number cannot be reproduced, when two sources disagree, when deciding whether two numbers may be subtracted, or when laying out a model so the argument is walkable. --- # Building Sourced Excel Models ## Overview You send a workbook rather than a PDF because the reader is meant to change an assumption and watch the answer move. Everything here follows from that one decision. **A pasted value is a claim; a formula is a model.** And a figure whose cut was never written down does not reproduce, which means it is not a figure : it is a rumour with a dollar sign. `analysis.md` beside this file carries the method in depth: the worked cases, the confounds that have actually killed findings, and the reconciliation rules. Read it before pulling data. ## Coverage Intelligence website tool For public healthcare pricing, coverage evidence, source discovery or analysis inputs, use the [Coverage Intelligence website](https://coverage-intelligence-web-781472415148.us-central1.run.app/llms.txt). Open this link with your ordinary web reader or downloader. It is a website: no installation, account, connector, environment variable or special headers are required. Read **[coverage-website.md](coverage-website.md)** for the link workflow. Start a ledger, carry its `ledger` query parameter on every request, follow dataset and analysis links, and check the exact claims before putting sourced figures in cells. The website serves the same underlying coverage evidence and deterministic analysis through plain HTML pages. Its displayed vintage dates the evidence; live execution does not mean the upstream source was refreshed today. ## 1. Build for the reader you actually have **Write the sentence the reader has to accept, before touching data.** Not your claim : theirs. It fixes the evidence class and the grain, and everything downstream depends on both. | reader | will accept | will not accept | |---|---|---| | plan actuary | "reduces admissions per thousand, on our book, savings method named" | "our product is better" | | hospital CFO | "your case rate is below the market's middle for this DRG" | "you are underpaid" | | contracting lead | "this payer pays 1.17x what you file, and here are both filings" | "you have leverage" | **Find out how this reader underwrites, and make it an input.** One buyer halved every vendor ROI claim before modelling it and then wanted 3:1 on what was left : which moves break-even from 3 to 6 and is the number the model actually has to clear. Record it like any other figure, with its citation (whose deck, which meeting, what date), and let it drive the break-even cell. Where you do not know their rule, a 50% haircut is a reasonable default to plan for. Either way apply it yourself, in a visible row, rather than presenting a number straight and letting them halve it. **Pick the grain they argue at.** A payer argues at member-months and PMPM. A hospital argues at the case and the DRG. Get the grain wrong and every figure downstream is unanswerable, however well computed. ## 2. What makes a number admissible One sheet : `Inputs` : is the only place a raw figure lives. One row each: | id | label | value | unit | source | vintage | status | note | |---|---|---|---|---|---|---|---| Every other sheet references it and restates nothing. A wrong figure is then wrong in exactly one cell, and everything downstream recalculates. A row is not usable in a cell until it is `sourced`: | status | means | in the workbook | |---|---|---| | `sourced` | file at the named path **and the exact cut written down** | plain | | `provisional` | held, provenance unconfirmed | shaded | | `pending` | source located, not yet pulled | shaded, nothing references it | | `assumption` | ours : our price, our rate, our guess | shaded, named as ours | | `need` | not held, and not ours to produce | the cell stays empty and says who must answer | `unreconciled` is **not** on this ladder. It is a note on two or more rows whose gap you could not explain; each row keeps its own status. **The source column holds the cut, not the filename.** `CMS SNF PUF` is not provenance. This is: > `cms-pac-puf-snf/vintage=2024-01-01`; state=NY, SMRY_CTGRY=PROVIDER, ZIP prefix in 100-104/110-114/116; median of TOT_MDCR_PYMT_AMT / TOT_EPSD_STAY_CNT = **$29,070 over 169 facilities** Filter, column, aggregation, and the resulting n. **A figure must be used before its cut is known?** Status `provisional`, and begin the source column with `CUT NOT RECORDED`, so the hole is visible in the workbook rather than only in your memory. **Verify the dataset against a count, not the filename.** A file named for 2023 was the 2022 extract : 1,608 rows where the real one has 1,615 : and it fed the model silently for months. **Put every bucket on one vintage.** SNF on FY2024 against IRF on FY2023 makes the comparison partly calendar. Carry the prior year in the next column and let the reader flip it. **Grade the effect size, not just the dollars.** The costs in a business case are usually better sourced than the effect driving them, and that is where it will be attacked. Rank what you have: | basis | what it supports | |---|---| | RCT or meta-analysis in a comparable population | a base case | | matched cohort or difference-in-differences | a base case with the matching stated | | multi-site before-and-after with a control | a bounded case, net of regression to the mean | | single-site pre/post, no control | nothing. An `assumption` row, named as whose, that the base case does not reference | | vendor marketing figure | nothing, until re-derived from its own counts and denominators | Apply the haircut yourself as its own visible row, so the reader sees the discount rather than performing it. ## 3. What you must be told A model is gated by facts you do not have and often should not go and get. **Every `need` row names what would settle it and who holds it** : and that list, ordered by how much each answer moves the result, is a deliverable in its own right. Produce it early. It is usually worth more than the next figure you could have measured, because it is the difference between a model that is waiting on an answer and one that quietly invented it. **Name the party, because there are usually three.** The one making the claim (the vendor), the one being sold to (the reader), and the payer. Collapsing the first two is the commonest error in this list: the vendor's effect size and the hospital's margin per case are both "not ours", but they are different asks, of different people, in different conversations, and one of them you must refuse to estimate while the other you merely cannot reach. Kinds, each with a different remedy : label which: | kind | meaning | what you do | |---|---|---| | **theirs to supply** : the claiming party | the vendor's own effect size, enrolment, adherence, price | **Do not source it. Do not estimate it.** Ask, and leave the cell empty until they put their name on it | | **gated** : the buying party | exists but reaches only them: their volumes, contribution margin, contracts, portal data | name who holds it and what access would take; name what *is* public that narrows it | | **no bridge exists** | the join you need is not public and would have to be manufactured | **do not build it.** A derived, lossy table is a modelling choice, not a pull. Say what grain *is* joinable | | **partially derivable** | half is in hand, the other half named | state both halves; "research needed" is an honest value for the unknown one | | **a question for a named person** | a definitional fork only they can settle : which benchmark, which population, which contract | write the question, with the name, and do not touch the dependent cell until it is answered | **Divide the labour and say so.** *We price the event; they supply the reduction.* A vendor's own effect on the outcome is theirs to declare, with their name on it : sourcing it for them removes the one number they can be held to, and makes the case unfalsifiable rather than stronger. Same for their enrolment and adherence rates. **Order: kill-switches first, then by how much the answer moves the result.** A yes/no that deletes a line outranks a figure that doubles one, because it is cheap to ask and decides whether the rest of the list is worth asking at all. **Say what you will go and get yourself, in the same document.** The division is the point: you refuse the claiming party's own numbers, and in exchange you own everything public : fee schedules, published rates, utilisation files, the regulatory definitions. Listing both halves is what makes the refusal read as discipline rather than as work you pushed onto them. **Watch the regulatory vintage separately from the data vintage.** A code's definition, its thresholds and its eligibility rules change by rule year, and a figure sourced correctly against last year's rule is wrong this year. Record the rule version as its own field. **Separate inputs that shrink a line from inputs that zero it.** Whether a clinician is eligible to bill the code decides whether that revenue exists at all : the answer is not a percentage, it is yes or no, and if it is no the line is zero rather than smaller. Ask the kill-switch questions **before** the ones that tune a figure, and never let one sit behind an unstated assumption that it is fine. **The reader's own underwriting rule is a sourced input, not a vibe.** When you learn how they discount vendor claims : "halve it, then want 3:1" : record it as a row with its citation (the deck, the meeting, the date) and let it land in the break-even cell, so the target the model must clear is theirs and visible rather than yours and implied. **When an answer does not come, ship the bounded model, not the invented one.** A model whose headline input is empty still has a deliverable in it: break-even, the share needed, and the range between bounds : everything that does not depend on the missing number. Send that, with the empty cell and its owner visible. It makes the gap the counterparty's to close, and it is a far better meeting than a figure you supplied for them and now have to defend. **Keep the list alive.** Order by how much each answer moves the model, strike items through as they are answered rather than deleting them, and let found answers add new questions. A question that is answered and still visible is how the reader sees what the model rests on. ## 4. The judgement calls Reasoning and the cases behind each are in `analysis.md`. These are the rulings. | situation | ruling | |---|---| | a headline figure | re-derive it from its own stated inputs before pulling any data. A claimed 68% against rates that give 61% and 63% came from somewhere nobody can name | | prior figure won't reproduce | **discard it**, don't reconcile. Recompute, record the cut, note the old one as discarded | | two numbers on different bases | **re-anchor** on the basis the programme scores in; derive the translation factor on the sheet beside it. Never blank the cell : that abandons the question. Never invent the factor | | comparing two rates at all | establish the **rate basis** first : fixed fee, percent of charges, case rate, per diem; facility-only or with professional; implants in or out. Put it in the unit column. This is the commonest trap | | two sources on the same thing disagree | **identify them** : usually two named schedules. Never average, never "take the conservative one". Unidentifiable ⇒ both as named columns, gap noted `unreconciled` | | many rates across facilities | that is a distribution, not a disagreement. Don't drop the low one as an outlier, don't take an unweighted mean. Weight by the reader's own volume, or show bounds and say what volume would settle it | | a published ratio (index, O/E, excess ratio) | **a ratio is not a rate and not an opportunity.** Check it is distinguishable from 1.0 at that denominator before reading anything into it, and check what window it covers : a backward-looking measure moves years after the intervention | | a payoff with a threshold or cap | model the kink, not the slope. A penalty that stops at parity and caps at 3% means the benefit is bounded; past the threshold the saving comes from somewhere else or not at all | | a suspiciously clean ratio | divide each rate by its weight. Round bases ⇒ the constant factor is the pricing method, not a finding | | a pitch with two benefit lines | check whether they **oppose each other** before adding them. Avoided surgery is lost revenue to a fee-for-service hospital; new remote-monitoring revenue can cannibalise billable in-person visits. Two lines that net against each other must not be summed as if they stack | | a saving | name **who captures it**. Post-acute costs are the payer's dollars; a hospital captures them only under bundled, ACO, or MA risk. Classify each component hard/soft and deferred/avoided : summing a deferred cost and an avoided one counts the same dollar twice | | a before-and-after result | net out regression to the mean. Any cohort selected for being bad improves on its own; a small pre/post measures almost nothing else | | a per-provider rank or quartile | report the measure's reliability. On small denominators 30-60% of the spread is sampling error | | no split in the source | show both bounds. Never blend on an invented mix | ## 5. Lay the workbook out as the argument Sheet order is the argument's order: | sheet | job | |---|---| | Readme | what this is, what it does **not** establish, which cell to change | | Analysis | the prose case, so the workbook reads without the deck | | **Inputs** | every raw figure, once, with its cut | | Sizing | population down to the eligible count | | mechanism sheets | one per thing the reader will question : LOS, payer mix, case mix | | Exposure | the dollars, **break-even above anything assumption-driven** | | Targets | the comparison, on a named basis, with its translation factor | | Data | the derived tables, so the arithmetic above is checkable | | Sources | every cut, in full, in one place | **Lead with what needs no assumption.** Break-even = programme cost / saving per unit. Share needed = that over eligible units. Neither touches your weakest guess. They convert the argument from "is your 25% right?" : which you cannot win : into "is 24% plausible?", which the reader answers themselves. Assumption-driven net goes below, in its own labelled section. **Make the year, or any basis choice, a switch cell** the reader can flip : not a decision buried in how you built it. Carry both versions side by side. **Make the verdict a formula.** If the answer is unflattering, they should find it in your sheet rather than in their own recomputation. **Show a range wherever you lack a split**, bounded by the extremes, rather than blending. ## 6. Make it legible A workbook is a working surface, not a page. Craft shows up in a few places and nowhere else: - **Shading means status, not decoration.** One fill per status, used only there. A reader learns three colours in two seconds and then trusts them. - **One hue in steps, not a rainbow**, for any set of related slices : five payers are five parts of one book, and a rainbow says they are five unrelated things. - **Number formats carry the unit**: percentages as percentages, money with no decimals, counts with thousands separators. Leaving an expectation unrounded (117.3 discharges, not 117) says it is an expectation. - **Freeze the header, set the column widths**, wrap the long source text. A reader who has to resize columns before they can read it has already formed a view. - **Highlight the one cell they are meant to change**, distinctly from everything else. ## 7. What ships - **Recalculated.** A workbook written by a script has no cached values: formula cells are blank in mail and phone previewers, and a broken reference ships undetected. Recalculate and confirm no `#REF!` / `#VALUE!` before it leaves. Never ask the recipient to open and re-save it. - **Dated in the filename**, so a model that was emailed is identifiable by the day it was built rather than by whoever renamed it. - **Omissions written down, in the workbook.** An omission you name is a boundary. An omission the reader finds is a hole. ## Red flags : stop - You are about to subtract two numbers without naming both units - You cannot state the filter that produced a figure you are putting in a cell - A figure the model depends on exists only in your build step, not on `Inputs` - Your headline rests on an assumption you have no source for, and break-even is not shown above it - You are relying on the recipient to recalculate - You are about to drop an inconvenient low rate as an outlier - You are about to source or estimate the counterparty's own effect, enrolment, or cost base - You are about to build a crosswalk that does not exist publicly and treat it as data - A revenue line rests on an eligibility question nobody has asked - Your effect size comes from a before-and-after on a cohort picked for being bad - You are quoting a test's sensitivity where the reader needs its yield at real prevalence HTTP bindings for this session: Explicit source-reference bindings: SKILL.md: https://space.hammer.ai/skills/global/building-sourced-excel-models.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba analysis.md: https://space.hammer.ai/skills/global/analysis.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba coverage-website.md: https://space.hammer.ai/skills/global/coverage-website.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba rate_position: https://space.hammer.ai/analysis/rate_position/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba rate_comparison: https://space.hammer.ai/analysis/rate_comparison/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba stack_check: https://space.hammer.ai/analysis/stack_check/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba screening_yield: https://space.hammer.ai/analysis/screening_yield/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba deferred_versus_avoided: https://space.hammer.ai/analysis/deferred_versus_avoided/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba interpretation_requirement: https://space.hammer.ai/analysis/interpretation_requirement/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba cohort_figures: https://space.hammer.ai/analysis/cohort_figures/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba comorbidity_edges: https://space.hammer.ai/analysis/comorbidity_edges/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba fee_components: https://space.hammer.ai/analysis/fee_components/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba filed_charge: https://space.hammer.ai/analysis/filed_charge/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hypertension_evidence: https://space.hammer.ai/analysis/hypertension_evidence/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba prognostic_association: https://space.hammer.ai/analysis/prognostic_association/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba treatment_effect: https://space.hammer.ai/analysis/treatment_effect/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba regression_to_mean_expectation: https://space.hammer.ai/analysis/regression_to_mean_expectation/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba competing_event_coupling: https://space.hammer.ai/analysis/competing_event_coupling/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba withhold_earnback: https://space.hammer.ai/analysis/withhold_earnback/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba tournament_position: https://space.hammer.ai/analysis/tournament_position/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba measure_reliability: https://space.hammer.ai/analysis/measure_reliability/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba declared_inputs: https://space.hammer.ai/analysis/declared_inputs/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba cost_of_care_exposure: https://space.hammer.ai/analysis/cost_of_care_exposure/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba savings_methodology: https://space.hammer.ai/analysis/savings_methodology/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hospital_variance: https://space.hammer.ai/analysis/hospital_variance/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba filer_inventory: https://space.hammer.ai/analysis/filer_inventory/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba candidate_screen: https://space.hammer.ai/analysis/candidate_screen/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba frontier: https://space.hammer.ai/analysis/frontier/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba judgement_check: https://space.hammer.ai/analysis/judgement_check/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba claim_check: https://space.hammer.ai/analysis/claim_check/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba deliver: https://space.hammer.ai/analysis/deliver/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba session_trace: https://space.hammer.ai/analysis/session_trace/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba progress_check: https://space.hammer.ai/analysis/progress_check/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba model_advisory: https://space.hammer.ai/analysis/model_advisory/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba knowledge_navigate: https://space.hammer.ai/analysis/knowledge_navigate/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba simulate: https://space.hammer.ai/analysis/simulate/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba sensitivity: https://space.hammer.ai/analysis/sensitivity/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba interval_check: https://space.hammer.ai/analysis/interval_check/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba decision_navigate: https://space.hammer.ai/analysis/decision_navigate/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba network_infer: https://space.hammer.ai/analysis/network_infer/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hello_world: https://space.hammer.ai/analysis/hello_world/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba say_world: https://space.hammer.ai/analysis/say_world/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Read the companion references here (these replace local file references in the source guide): Build a sourced analysis: https://space.hammer.ai/analysis.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba OData exploration and analytic cuts: https://space.hammer.ai/odata.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Worked analysis reference: https://space.hammer.ai/skills/global/analysis.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Building sourced Excel models: https://space.hammer.ai/skills/global/building-sourced-excel-models.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Coverage website reference: https://space.hammer.ai/skills/global/coverage-website.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Spine cohort and post-acute analysis: https://space.hammer.ai/skills/spine-analysis.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-building-the-evidence: https://space.hammer.ai/skills/world/hammer-building-the-evidence.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-cost-of-care-case: https://space.hammer.ai/skills/world/hammer-cost-of-care-case.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-coverage-navigate: https://space.hammer.ai/skills/world/hammer-coverage-navigate.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-provider-contracting: https://space.hammer.ai/skills/world/hammer-provider-contracting.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-provider-quality: https://space.hammer.ai/skills/world/hammer-provider-quality.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-savings-classification: https://space.hammer.ai/skills/world/hammer-savings-classification.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-vendor-evidence: https://space.hammer.ai/skills/world/hammer-vendor-evidence.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba hammer-writing-the-deliverable: https://space.hammer.ai/skills/world/hammer-writing-the-deliverable.skill.txt?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Data: https://space.hammer.ai/data/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba Transcript: https://space.hammer.ai/session/?ledger=eccbd49b235df851c1880b208d9d33fb&snapshot=7a53af6a9beb58928d4a64dc92db09c9db65433f9909f1a10d16e302adaf86ba