CMS Marketplace module changelog
Jump to a version or snapshot
- 0.4.1
- 0.4
- 0.3.7.14
- 0.3.7.12
- 0.3.7.10
- 0.3.7.9
- 0.3.7.8
- 0.3.7.7
- 0.3.7.6
- 0.3.7.5
- 0.3.7.4
- 0.3.7.3
- 0.3.7.2
- 0.3.7.1
- 0.3.7
- 0.3.6
- 0.3.5.1
- 0.3.5
- 0.3.4.2
- 0.3.4.1
- 0.3.4
- 0.3.3.1
- 0.3.3
- 0.3.2.1
- 0.3.2
- 0.3.1.5
- 0.3.1.4
- 0.3.1.3
- 0.3.1.2
- 0.3.1.1
- 0.3.1
- 0.3
- 0.2.1.2
- 0.2.1.1
- 0.2.1
- 0.2
- 0.1.23
- 0.1.22
- 0.1.21
- 0.1.20
- 0.1.19
- 0.1.18
- 0.1.16
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1
Reconstructed history of cms_marketplace, covering 0.1 through 0.4.1, using all 58 available source snapshots (57 backups and the active module) and their in-module release notes. There are 59 version entries: 58 preserved versions plus the note-only 0.3.6. Newest versions appear first.
The active module is modules/cms_marketplace.py modules/cms_marketplace.py, as selected by modules.json modules.json. The 0.1 backup is the earliest preserved baseline. This history expands the short in-module changelog to include every available patch.
How to read this history
- Snapshot evidence: each preserved version links to its exact source and the preceding available snapshot. Changes are reconstructed by reading all snapshots and comparing successive declared versions. There are no duplicate declared versions in this set. Backup filenames contain a newline before
.py; evidence links encode it as%0A. - Author notes: original notes help explain intent, but first implementation dates follow the source. Coinsurance support first appears in 0.1.11 and display properties in 0.1.14, although later notes label them 0.1.12 and 0.1.15. Several features summarized under 0.4 are already implemented in 0.3.7 patches.
- Gaps: 0.3.6 has a release note but no preserved source. No source or release note was found for 0.1.17, 0.3.7.11, or 0.3.7.13; those missing numbers are not invented as releases. No pre-0.1 implementation is available.
- Approximate dates: preserved versions use the source file's last-modified timestamp, converted to UTC. These are snapshot-based estimates, not confirmed release dates; a timestamp may reflect a later save, copy, or backup. The note-only 0.3.6 date is inferred from the surrounding snapshots. Version order determines presentation even where timestamps coincide.
- Scope: API additions, behavior changes, fixes, reversions, documentation-only patches, and import-time update/dependency changes are included. Historical source was not imported or executed. Cost estimates, subsidy tables, and intended fixes are described as source behavior, without asserting historical calculations were correct or validating them against external policy.
Compatibility changes to notice
- From 0.1.14, the internal cost helpers return
(cost, display)tuples instead of numbers. - 0.3 separates individual and family deductible/out-of-pocket data; the spending estimator still uses individual values.
DEFAULT_YEARadvances in November/December from 0.3.1, and unspecifiedhas_mecis omitted from request payloads from 0.3.3.1.- 0.3.7 adds the
aiosqliteObjdependency, optional SQLite plan caching, and date-string/integer-age person inputs; the integer paths retain limitations described below. - 0.3.7.1 makes searches reusable and awaitable. 0.3.7.2 removes the temporary API-backed
get_plan_id_by_namehelper and adds a year argument to ID lookup. - 0.4 introduces
get_plan_from_textwith inconsistent preserved return types; 0.4.1 changes cache-name uniqueness and cost-sharing classification.
Releases
0.4.1
Approximate date: 2026-05-13 (snapshot timestamp, UTC).
- Changed import-time self-updating to
pmblue_update.self_update(primary_mod=True)and commented out the unusedrequests.getimport. - Added a missing-
API_KEYerror before poverty-guideline retrieval. - Kept the plan-ID index unique but made the plan-name index nonunique, allowing different cached plans to share a name.
- Revised
CostSharing.is_coinsuranceandis_copayto inspect actual amounts/rates and exclude"Not Applicable"/"Not Covered"displays; addedis_valid. - Added
get_relevant_cost_sharingwith first-tier then second-tier in-network selection. It is defined onCostSharingwhile iteratingself.cost_sharings, an attribute initialized onBenefit, so the preserved code does not establish a working selector on ordinaryCostSharinginstances.
Evidence: Snapshot 0.4.1 modules/cms_marketplace.py; compared with 0.4 backups/cms_marketplace_0.4\n.py.
0.4
Approximate date: 2026-05-13 (snapshot timestamp, UTC).
- Added
get_plan_from_text(text, fuzzy=True, year=None), routing 14-character input to ID lookup and other text to cached name matching. In this snapshot the ID branch returns an unawaited coroutine and the name branch returns a cached plan ID, so the helper does not consistently return aPlanmodel. - Made the cache's plan-ID and plan-name indexes unique, disabled the initialization-time deletion query, and corrected write throttling to compare elapsed time with one tenth of
UPDATE_EVERY. - Marked a newly seen plan's timestamp before awaiting database access, and removed a redundant pagination bounds check while retaining
IndexErrorhandling. - Author notes group
PlanCache, search-result caching,Benefit, andCostSharingunder this release, but their implementations already appear in 0.3.7, 0.3.7.4, and 0.3.7.2 respectively. - Added an otherwise unused eager
requests.getimport, creating an import dependency removed in 0.4.1.
Evidence: Snapshot 0.4 backups/cms_marketplace_0.4\n.py; compared with 0.3.7.14 backups/cms_marketplace_0.3.7.14\n.py.
0.3.7.14
Approximate date: 2026-04-06 (snapshot timestamp, UTC).
- Converted an out-of-range paginated result access into
StopAsyncIteration, avoiding anIndexErrorwhen no further plan is available. - Compared with 0.3.7.12; no 0.3.7.13 snapshot or release note was found.
Evidence: Snapshot 0.3.7.14 backups/cms_marketplace_0.3.7.14\n.py; compared with 0.3.7.12 backups/cms_marketplace_0.3.7.12\n.py.
0.3.7.12
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Deferred cache compression-availability checks and refresh-interval normalization until the database is first initialized, allowing settings to be changed after module import.
- Added
Plan.stateand a source comment recording the author's preference for compression level 6; no compression benchmark was rerun. - Compared with 0.3.7.10; no 0.3.7.11 snapshot or release note was found.
Evidence: Snapshot 0.3.7.12 backups/cms_marketplace_0.3.7.12\n.py; compared with 0.3.7.10 backups/cms_marketplace_0.3.7.10\n.py.
0.3.7.10
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Reversed the cache-read age comparison so known entries older than
UPDATE_EVERYare rejected, instead of rejecting recent entries. - Changed write throttling toward a fraction-of-refresh-interval check, but the expression divides the saved timestamp before subtracting it. Parentheses are corrected in 0.4.
Evidence: Snapshot 0.3.7.10 backups/cms_marketplace_0.3.7.10\n.py; compared with 0.3.7.9 backups/cms_marketplace_0.3.7.9\n.py.
0.3.7.9
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Restored construction without a default table argument and moved
await db.set_table("plans")to the end of cache initialization, after reading existing cache metadata.
Evidence: Snapshot 0.3.7.9 backups/cms_marketplace_0.3.7.9\n.py; compared with 0.3.7.8 backups/cms_marketplace_0.3.7.8\n.py.
0.3.7.8
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Added an explicit database commit after cache inserts and updates.
Evidence: Snapshot 0.3.7.8 backups/cms_marketplace_0.3.7.8\n.py; compared with 0.3.7.7 backups/cms_marketplace_0.3.7.7\n.py.
0.3.7.7
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Corrected cache selection to call
db.select({"plan_id": plan_id})using the database's default table, removing the extra positional table name.
Evidence: Snapshot 0.3.7.7 backups/cms_marketplace_0.3.7.7\n.py; compared with 0.3.7.6 backups/cms_marketplace_0.3.7.6\n.py.
0.3.7.6
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Passed the cache's default
planstable toaiosqliteObj.Databaseconstruction instead of setting it immediately after initialization. - Replaced keyword
wherearguments with positional filter dictionaries in cache selection/update calls; the selection call receives another correction in 0.3.7.7.
Evidence: Snapshot 0.3.7.6 backups/cms_marketplace_0.3.7.6\n.py; compared with 0.3.7.5 backups/cms_marketplace_0.3.7.5\n.py.
0.3.7.5
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Removed the
unique=1argument from the cache table'splan_idcolumn declaration. Explicit unique indexing is introduced in 0.4.
Evidence: Snapshot 0.3.7.5 backups/cms_marketplace_0.3.7.5\n.py; compared with 0.3.7.4 backups/cms_marketplace_0.3.7.4\n.py.
0.3.7.4
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Connected search-result iteration to
PlanCache.add_plan_to_cache, caching initially loaded plans as they are yielded and newly fetched plans as pages arrive when caching is enabled.
Evidence: Snapshot 0.3.7.4 backups/cms_marketplace_0.3.7.4\n.py; compared with 0.3.7.3 backups/cms_marketplace_0.3.7.3\n.py.
0.3.7.3
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Fixed
get_plan_by_idto construct the model from the API's nestedresult["plan"]object. - Added
get_plan_from_idas an alias ofget_plan_by_id.
Evidence: Snapshot 0.3.7.3 backups/cms_marketplace_0.3.7.3\n.py; compared with 0.3.7.2 backups/cms_marketplace_0.3.7.2\n.py.
0.3.7.2
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Added optional
yeartoget_plan_by_id, defaulting toDEFAULT_YEARand sending it in the API query. - Removed the module-level
get_plan_id_by_nameAPI search helper;PlanCache.get_plan_id_from_nameremains available. - Added parsed
Plan.benefits,Benefit, andCostSharingmodels, including coverage/limit fields, network tier, copay/coinsurance details, CSR, and benefit-before-deductible flags. Later author notes group these additions under 0.4.
Evidence: Snapshot 0.3.7.2 backups/cms_marketplace_0.3.7.2\n.py; compared with 0.3.7.1 backups/cms_marketplace_0.3.7.1\n.py.
0.3.7.1
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Cached the response on each
PlanSearchRequest, so repeatedsearch()calls reuse it. Added request awaiting and direct asynchronous iteration. - Added
len(response)for the reported total andawait responsefor collecting all plans into a list. - The newly added first-use request iterator awaits the synchronous
response.__aiter__()method; this records the API addition without claiming that path is free of runtime errors.
Evidence: Snapshot 0.3.7.1 backups/cms_marketplace_0.3.7.1\n.py; compared with 0.3.7 backups/cms_marketplace_0.3.7\n.py.
0.3.7
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Expanded
Person.date_of_birthinput handling to date/datetime objects, three string date formats, and integer ages; request serialization emits eitherdoborage. The attempted birth-year conversion is overwritten by the original integer, andPerson.agestill assumes a date object, so this does not establish full support for every integer path. - First preserved
PlanCache: disabled by default, backed byaiosqliteObj, storing plan IDs/names, timestamps, and zlib/LZMA-compressed JSON, with ID/name lookup, optional fuzzy matching, and configurable refresh intervals. Added dependency maintenance/import foraiosqliteObj. - Added
get_plan_by_idand the temporary API-backedget_plan_id_by_namehelper. The latter is removed in 0.3.7.2. - First source evidence for
PlanCache.compress_jsonanddecompress_json, attributed to 0.3.6 by the notes. The cache's initial freshness check rejects recent entries rather than stale ones; 0.3.7.10 reverses that comparison. - Increased
GENERIC_DRUGS_BASEfrom 15 to 25.
Evidence: Snapshot 0.3.7 backups/cms_marketplace_0.3.7\n.py; compared with 0.3.5.1 backups/cms_marketplace_0.3.5.1\n.py.
0.3.6
Approximate date: 2026-04-03 (inferred from the 0.3.5.1 and 0.3.7 snapshot timestamps).
- Author notes only: added
compress_jsonanddecompress_jsonfor compact JSON storage in preparation for plan caching. No matching snapshot exists; the first available implementation places these methods onPlanCachein 0.3.7.
Evidence: In-module release notes modules/cms_marketplace.py; no matching snapshot.
0.3.5.1
Approximate date: 2026-04-03 (snapshot timestamp, UTC).
- Replaced the APTC percentage brackets: the first bracket now starts at a zero FPL ratio with a fixed 2.10% contribution, and later brackets use revised values up to 9.96%.
- Removed the interpolation helper's
floatparameter annotation. The calculation remains based on its embedded table rather than a year-specific table lookup.
Evidence: Snapshot 0.3.5.1 backups/cms_marketplace_0.3.5.1\n.py; compared with 0.3.5 backups/cms_marketplace_0.3.5\n.py.
0.3.5
Approximate date: 2026-02-20 (snapshot timestamp, UTC).
- Added
APPLICABLE_PERCENTAGE_BRACKETS, linear interpolation, and asynchronouscalculate_aptc, combining an SLCSP premium, poverty-guideline lookup, and household income into annual/monthly subsidy figures and calculation details. - The implementation uses the hard-coded table labeled
Pre-ARPA stylein the source and returns zero when the ratio falls outside its brackets. These are historical implementation details, not confirmation of subsidy eligibility or legal accuracy.
Evidence: Snapshot 0.3.5 backups/cms_marketplace_0.3.5\n.py; compared with 0.3.4.2 backups/cms_marketplace_0.3.4.2\n.py.
0.3.4.2
Approximate date: 2026-02-20 (snapshot timestamp, UTC).
- Corrected
get_slcspto post to/households/slcspinstead of/plans/search.
Evidence: Snapshot 0.3.4.2 backups/cms_marketplace_0.3.4.2\n.py; compared with 0.3.4.1 backups/cms_marketplace_0.3.4.1\n.py.
0.3.4.1
Approximate date: 2026-02-20 (snapshot timestamp, UTC).
- Added
market="Individual"to the SLCSP request payload and aPlanSearchRequest.get_slcspconvenience method that reuses the request's place, household, and year.
Evidence: Snapshot 0.3.4.1 backups/cms_marketplace_0.3.4.1\n.py; compared with 0.3.4 backups/cms_marketplace_0.3.4\n.py.
0.3.4
Approximate date: 2026-02-20 (snapshot timestamp, UTC).
- Added
get_slcsp(place, household, year)for the author's intended second-lowest-cost silver-plan lookup. This first implementation posts to/plans/search; the endpoint is corrected in 0.3.4.2.
Evidence: Snapshot 0.3.4 backups/cms_marketplace_0.3.4\n.py; compared with 0.3.3.1 backups/cms_marketplace_0.3.3.1\n.py.
0.3.3.1
Approximate date: 2026-02-20 (snapshot timestamp, UTC).
- Changed the default
has_mectoNoneand omitted the field from request dictionaries when unspecified, while retaining explicit true/false values.
Evidence: Snapshot 0.3.3.1 backups/cms_marketplace_0.3.3.1\n.py; compared with 0.3.3 backups/cms_marketplace_0.3.3\n.py.
0.3.3
Approximate date: 2026-02-19 (snapshot timestamp, UTC).
- Added configurable
has_mec=FalsetoPersonand the household person-creation helper, replacing the previously hard-coded false value in serialized requests. - Fixed
Household.create_and_add_personto pass the suppliedrelationshiptoPerson.
Evidence: Snapshot 0.3.3 backups/cms_marketplace_0.3.3\n.py; compared with 0.3.2.1 backups/cms_marketplace_0.3.2.1\n.py.
0.3.2.1
Approximate date: 2026-02-19 (snapshot timestamp, UTC).
- Added a
relationshipargument toHousehold.create_and_add_person, but this snapshot passesrelationship=NonetoPersoninstead of forwarding the supplied value; 0.3.3 corrects the forwarding.
Evidence: Snapshot 0.3.2.1 backups/cms_marketplace_0.3.2.1\n.py; compared with 0.3.2 backups/cms_marketplace_0.3.2\n.py.
0.3.2
Approximate date: 2026-02-19 (snapshot timestamp, UTC).
- Added optional
Person.relationshipand serialized it when supplied. Household.add_personnow assigns"Self"to the first person and"Spouse"to the second person in a married-couple household when no relationship was set.
Evidence: Snapshot 0.3.2 backups/cms_marketplace_0.3.2\n.py; compared with 0.3.1.5 backups/cms_marketplace_0.3.1.5\n.py.
0.3.1.5
Approximate date: 2026-02-19 (snapshot timestamp, UTC).
- Wrapped poverty-guideline API responses in
PovertyGuidelinesinstead of returning a raw dictionary, enabling the model's household-size calculations and item access.
Evidence: Snapshot 0.3.1.5 backups/cms_marketplace_0.3.1.5\n.py; compared with 0.3.1.4 backups/cms_marketplace_0.3.1.4\n.py.
0.3.1.4
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Allowed the dynamically created poverty-guideline fetcher to accept positional arguments (
*args) supplied by the cached class-property machinery.
Evidence: Snapshot 0.3.1.4 backups/cms_marketplace_0.3.1.4\n.py; compared with 0.3.1.3 backups/cms_marketplace_0.3.1.3\n.py.
0.3.1.3
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Version declaration only; no other source change found relative to 0.3.1.2.
Evidence: Snapshot 0.3.1.3 backups/cms_marketplace_0.3.1.3\n.py; compared with 0.3.1.2 backups/cms_marketplace_0.3.1.2\n.py.
0.3.1.2
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Removed the unused
selfparameter fromPovertyGuidelines.calculate_guideline_for_year, matching its class-level calling convention.
Evidence: Snapshot 0.3.1.2 backups/cms_marketplace_0.3.1.2\n.py; compared with 0.3.1.1 backups/cms_marketplace_0.3.1.1\n.py.
0.3.1.1
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Replaced
Household.__sizeof__with__len__, solen(household)returns the number of people.
Evidence: Snapshot 0.3.1.1 backups/cms_marketplace_0.3.1.1\n.py; compared with 0.3.1 backups/cms_marketplace_0.3.1\n.py.
0.3.1
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Added
PovertyGuidelines, household-size calculations, item access, and cached annual API lookups from 2016 throughDEFAULT_YEAR, using the Florida poverty-guidelines endpoint. Follow-up patches correct the helper signature and returned model. - Advanced
DEFAULT_YEARto the next calendar year when the module is loaded in November or December, reflecting the author's open-enrollment intent. - Added household member counting under
__sizeof__; the next patch changes this to__len__.
Evidence: Snapshot 0.3.1 backups/cms_marketplace_0.3.1\n.py; compared with 0.3 backups/cms_marketplace_0.3\n.py.
0.3
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Added
family_deductibles,family_max_out_of_pocket, andhas_family_deductibletoPlan. - Filtered individual deductibles and out-of-pocket amounts to exclude family entries, and selected family entries for the new properties.
spending_estimatestill uses the individual properties.
Evidence: Snapshot 0.3 backups/cms_marketplace_0.3\n.py; compared with 0.2.1.2 backups/cms_marketplace_0.2.1.2\n.py.
0.2.1.2
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Added a comment explaining that
Personrepresents household members seeking coverage. No implementation change beyond the version declaration.
Evidence: Snapshot 0.2.1.2 backups/cms_marketplace_0.2.1.2\n.py; compared with 0.2.1.1 backups/cms_marketplace_0.2.1.1\n.py.
0.2.1.1
Approximate date: 2026-02-16 (snapshot timestamp, UTC).
- Added a source comment linking to the CMS Marketplace API documentation. No implementation change beyond the version declaration.
Evidence: Snapshot 0.2.1.1 backups/cms_marketplace_0.2.1.1\n.py; compared with 0.2.1 backups/cms_marketplace_0.2.1\n.py.
0.2.1
Approximate date: 2026-02-12 (snapshot timestamp, UTC).
- Added county-name lookup by FIPS through the CMS dataset or county API, plus
Place.retrieve_county_namedispatch. HUD-only name lookup raisesNotImplementedError; combined mode uses the API for this lookup. - Changed the fallback primary-care, specialist, and emergency-room costs to 110, 180, and 1500; the generic-drug base remains 15.
Evidence: Snapshot 0.2.1 backups/cms_marketplace_0.2.1\n.py; compared with 0.2 backups/cms_marketplace_0.2\n.py.
0.2
Approximate date: 2025-11-23 (snapshot timestamp, UTC).
- Reworked
Plan.spending_estimateto charge per-use base costs until a combined or separate deductible is reached, then use the selected copay/coinsurance costs; retained the out-of-pocket cap. This replaces the initial unconditional addition of the full deductible. - Exposed the fallback amounts as
PRIMARY_BASE,SPECIALIST_BASE,GENERIC_DRUGS_BASE, andEMERGENCY_ROOM_BASE(120, 200, 15, and 2400 in this snapshot). - The historical separate-deductible branch uses
check in (0, 1, 2)when updating medical spending, even though generic drugs are index 2 and emergency visits index 3. The source change is documented without claiming the estimator was fully correct.
Evidence: Snapshot 0.2 backups/cms_marketplace_0.2\n.py; compared with 0.1.23 backups/cms_marketplace_0.1.23\n.py.
0.1.23
Approximate date: 2025-11-13 (snapshot timestamp, UTC).
- Added
emergency_room_visitstoPlan.spending_estimateand an_emergency_visit_costhelper for emergency-room benefits, including copay/coinsurance selection and a fallback base cost of 2400.
Evidence: Snapshot 0.1.23 backups/cms_marketplace_0.1.23\n.py; compared with 0.1.22 backups/cms_marketplace_0.1.22\n.py.
0.1.22
Approximate date: 2025-11-13 (snapshot timestamp, UTC).
- Added
PlanSearchResponse.loaded_all, initially false and set true when the pagination offset reaches the reported total after a fetched page.
Evidence: Snapshot 0.1.22 backups/cms_marketplace_0.1.22\n.py; compared with 0.1.21 backups/cms_marketplace_0.1.21\n.py.
0.1.21
Approximate date: 2025-11-12 (snapshot timestamp, UTC).
- Stopped unconditionally replacing the chosen display string merely because a row has no applicable coinsurance.
- In generic-drug cost selection, stopped scanning when a
"Not Applicable"display follows an already-selected nonempty display.
Evidence: Snapshot 0.1.21 backups/cms_marketplace_0.1.21\n.py; compared with 0.1.20 backups/cms_marketplace_0.1.20\n.py.
0.1.20
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Removed the skip for rows with nonapplicable coinsurance, restoring their display-string and copay processing.
Evidence: Snapshot 0.1.20 backups/cms_marketplace_0.1.20\n.py; compared with 0.1.19 backups/cms_marketplace_0.1.19\n.py.
0.1.19
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Removed the early
breakstatements from the three cost/display scans, restoring traversal of later cost-sharing rows. The skip for nonapplicable coinsurance remains.
Evidence: Snapshot 0.1.19 backups/cms_marketplace_0.1.19\n.py; compared with 0.1.18 backups/cms_marketplace_0.1.18\n.py.
0.1.18
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Changed cost/display scans to stop at the first selected coinsurance, copay, or no-charge row, and to skip rows whose coinsurance is not applicable. That skip also bypasses copay processing on those rows.
- Compared with 0.1.16: no 0.1.17 snapshot or release note was found, so these changes cannot be divided between the missing number and 0.1.18.
Evidence: Snapshot 0.1.18 backups/cms_marketplace_0.1.18\n.py; compared with 0.1.16 backups/cms_marketplace_0.1.16\n.py.
0.1.16
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Preserved display strings when coinsurance is not applicable and explicitly recognized
"No Charge"descriptions in the primary-care, specialist, and generic-drug helpers.
Evidence: Snapshot 0.1.16 backups/cms_marketplace_0.1.16\n.py; compared with 0.1.15 backups/cms_marketplace_0.1.15\n.py.
0.1.15
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Excluded
"Out-of-Network"cost-sharing rows from the three cost/display helper calculations. - Changed the display-properties release-note label from 0.1.14 to 0.1.15; those properties already exist in the preceding snapshot.
Evidence: Snapshot 0.1.15 backups/cms_marketplace_0.1.15\n.py; compared with 0.1.14 backups/cms_marketplace_0.1.14\n.py.
0.1.14
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added
primary_display,specialist_display, andgeneric_drugs_displayfor benefit cost descriptions. The internal cost helpers now return(cost, display)tuples, andspending_estimatereads the cost element. - First preserved implementation of these display properties; its original note says 0.1.14, while later notes assign them to 0.1.15.
Evidence: Snapshot 0.1.14 backups/cms_marketplace_0.1.14\n.py; compared with 0.1.13 backups/cms_marketplace_0.1.13\n.py.
0.1.13
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Reset
PlanSearchResponse._idxto-1in__aiter__, allowing a new asynchronous iteration to begin at the first loaded plan.
Evidence: Snapshot 0.1.13 backups/cms_marketplace_0.1.13\n.py; compared with 0.1.12 backups/cms_marketplace_0.1.12\n.py.
0.1.12
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Read coinsurance rates as scalar values instead of indexing
[0], defaulting a missing rate to zero and missing options to"Not Applicable". - Revised the in-module coinsurance release-note label from 0.1.11 to 0.1.12; the initial implementation is already present in 0.1.11.
Evidence: Snapshot 0.1.12 backups/cms_marketplace_0.1.12\n.py; compared with 0.1.11 backups/cms_marketplace_0.1.11\n.py.
0.1.11
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added
_primary_cost,_specialist_cost, and_generic_cost, incorporating coinsurance and fallback base costs intospending_estimateinstead of using copays alone. - First preserved coinsurance implementation. Its own notes label it 0.1.11; subsequent notes relabel the feature as 0.1.12. The initial code treats
coinsurance_rateas an indexable value, corrected next.
Evidence: Snapshot 0.1.11 backups/cms_marketplace_0.1.11\n.py; compared with 0.1.10 backups/cms_marketplace_0.1.10\n.py.
0.1.10
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Removed debug printing from county-name retrieval and search-response construction.
Evidence: Snapshot 0.1.10 backups/cms_marketplace_0.1.10\n.py; compared with 0.1.9 backups/cms_marketplace_0.1.9\n.py.
0.1.9
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added
Plan.individual_max_out_of_pocketand the firstspending_estimate(primary_visits, specialist_visits, generic_drugs)implementation. - The initial estimate adds deductibles and visit/prescription copays, then caps the total at the available out-of-pocket maximum. This records the historical estimate algorithm, not a validated cost prediction.
Evidence: Snapshot 0.1.9 backups/cms_marketplace_0.1.9\n.py; compared with 0.1.8 backups/cms_marketplace_0.1.8\n.py.
0.1.8
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added cached
Plan.generic_drugs_copay, selecting the highest reported copay for the generic-drug benefit.
Evidence: Snapshot 0.1.8 backups/cms_marketplace_0.1.8\n.py; compared with 0.1.7 backups/cms_marketplace_0.1.7\n.py.
0.1.7
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added
Plan.has_individual_deductible, testing whether any combined, medical, or drug deductible is nonzero and non-None.
Evidence: Snapshot 0.1.7 backups/cms_marketplace_0.1.7\n.py; compared with 0.1.6 backups/cms_marketplace_0.1.6\n.py.
0.1.6
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Fixed combined-dataset county-name lookup to use the current HUD FIPS code, and checked ZIP membership in the combined dataset instead of the outer cache dictionary.
- Saved a retrieved county name onto
Placewhen its existing name is missing; this initially prints a diagnostic message. - Added
Plan.benefits_url, cached primary-care and specialist copay properties, andindividual_deductibles, returning a combined/medical/drug tuple.
Evidence: Snapshot 0.1.6 backups/cms_marketplace_0.1.6\n.py; compared with 0.1.5 backups/cms_marketplace_0.1.5\n.py.
0.1.5
Approximate date: 2025-11-11 (snapshot timestamp, UTC).
- Added synchronous iteration over already-loaded
PlanSearchResponse.data; asynchronous iteration continues to fetch additional pages.
Evidence: Snapshot 0.1.5 backups/cms_marketplace_0.1.5\n.py; compared with 0.1.4 backups/cms_marketplace_0.1.4\n.py.
0.1.4
Approximate date: 2025-11-10 (snapshot timestamp, UTC).
- Added optional
sortandcsr_overridearguments toPlanSearchRequestand included supplied values in request payloads. - Made search-result
totaldefault to the number of loaded plans when the API omits it.
Evidence: Snapshot 0.1.4 backups/cms_marketplace_0.1.4\n.py; compared with 0.1.3 backups/cms_marketplace_0.1.3\n.py.
0.1.3
Approximate date: 2025-11-10 (snapshot timestamp, UTC).
- Fixed
Household.dictincome conversion to readself.income, removing the undefined-local reference introduced in 0.1.2.
Evidence: Snapshot 0.1.3 backups/cms_marketplace_0.1.3\n.py; compared with 0.1.2 backups/cms_marketplace_0.1.2\n.py.
0.1.2
Approximate date: 2025-11-10 (snapshot timestamp, UTC).
- Added conversion of comma-separated numeric income strings into integers in
Householdconstruction and serialization. The serialization branch initially references an undefined localincome; 0.1.3 corrects it. - Converted HUD ZIP values to strings when building the combined county dataset.
Evidence: Snapshot 0.1.2 backups/cms_marketplace_0.1.2\n.py; compared with 0.1.1 backups/cms_marketplace_0.1.1\n.py.
0.1.1
Approximate date: 2025-11-10 (snapshot timestamp, UTC).
- Added an invalid-setting
ValueErrorat the end of combined-dataset county lookup. - Removed the explicit
adv_info=Trueargument from import-time self-updating.
Evidence: Snapshot 0.1.1 backups/cms_marketplace_0.1.1\n.py; compared with 0.1 backups/cms_marketplace_0.1\n.py.
0.1
Approximate date: 2025-11-10 (snapshot timestamp, UTC).
- Earliest preserved source and the author's initial beta release; no older CMS Marketplace snapshot is available.
- Added
PersonandHouseholdrequest models,get_household_eligibility, issuer filters,PlanSearchRequest, a paginated asynchronousPlanSearchResponse, and basicPlan/Issuermodels. - Added ZIP-to-county lookup using HUD data, CMS datasets, the CMS API, or a combined dataset, with selectable behavior for multiple matches.
Place.full_dictfills in state and county FIPS for requests. - Introduced the module-level
API_KEYand a current-calendar-yearDEFAULT_YEAR. Importing the module runs dependency maintenance fortoolboxand callspmblue_update.self_update(primary_mod=False, adv_info=True); search-response construction initially prints the response data.
Evidence: Snapshot 0.1 backups/cms_marketplace_0.1\n.py; earliest available baseline.