pdpcompare 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pdpcompare-1.0.0/.dockerignore +12 -0
- pdpcompare-1.0.0/.gitignore +7 -0
- pdpcompare-1.0.0/.playwright-mcp/console-2026-07-02T20-38-26-719Z.log +15 -0
- pdpcompare-1.0.0/.playwright-mcp/console-2026-07-02T20-38-43-253Z.log +11 -0
- pdpcompare-1.0.0/.playwright-mcp/page-2026-07-02T20-38-28-162Z.yml +4 -0
- pdpcompare-1.0.0/.playwright-mcp/page-2026-07-02T20-38-43-314Z.yml +48 -0
- pdpcompare-1.0.0/.python-version +1 -0
- pdpcompare-1.0.0/Dockerfile +10 -0
- pdpcompare-1.0.0/PKG-INFO +11 -0
- pdpcompare-1.0.0/context/Ben Bulgrien and Chris Johnson.vtt +1550 -0
- pdpcompare-1.0.0/context/PDP Examples.xlsx +0 -0
- pdpcompare-1.0.0/context/golden-set-validation-report.md +103 -0
- pdpcompare-1.0.0/context/golden_results.json +6166 -0
- pdpcompare-1.0.0/context/golden_results_posthardening.json +6166 -0
- pdpcompare-1.0.0/context/run_golden.py +72 -0
- pdpcompare-1.0.0/docker-compose.example.yml +21 -0
- pdpcompare-1.0.0/docs/desk-deployment.md +66 -0
- pdpcompare-1.0.0/docs/release.md +31 -0
- pdpcompare-1.0.0/docs/server-ops.md +151 -0
- pdpcompare-1.0.0/docs/superpowers/plans/2026-07-02-pdp-comparison-engine.md +2428 -0
- pdpcompare-1.0.0/docs/superpowers/plans/2026-07-06-pdp-remote-data-api.md +2604 -0
- pdpcompare-1.0.0/docs/superpowers/plans/2026-07-07-accuracy-hardening.md +1550 -0
- pdpcompare-1.0.0/docs/superpowers/plans/2026-07-14-cowork-deployment.md +1737 -0
- pdpcompare-1.0.0/docs/superpowers/specs/2026-07-02-kfg-pdp-comparison-design.md +159 -0
- pdpcompare-1.0.0/docs/superpowers/specs/2026-07-06-pdp-remote-data-api-design.md +243 -0
- pdpcompare-1.0.0/docs/superpowers/specs/2026-07-07-accuracy-hardening-design.md +140 -0
- pdpcompare-1.0.0/docs/superpowers/specs/2026-07-14-cowork-deployment-design.md +207 -0
- pdpcompare-1.0.0/pdpcompare/__init__.py +0 -0
- pdpcompare-1.0.0/pdpcompare/bundle.py +136 -0
- pdpcompare-1.0.0/pdpcompare/cli.py +273 -0
- pdpcompare-1.0.0/pdpcompare/clientstore.py +47 -0
- pdpcompare-1.0.0/pdpcompare/config.py +46 -0
- pdpcompare-1.0.0/pdpcompare/costsim.py +55 -0
- pdpcompare-1.0.0/pdpcompare/db.py +9 -0
- pdpcompare-1.0.0/pdpcompare/deskupdate.py +149 -0
- pdpcompare-1.0.0/pdpcompare/doctor.py +142 -0
- pdpcompare-1.0.0/pdpcompare/engine.py +263 -0
- pdpcompare-1.0.0/pdpcompare/ingest/__init__.py +0 -0
- pdpcompare-1.0.0/pdpcompare/ingest/catalog.py +68 -0
- pdpcompare-1.0.0/pdpcompare/ingest/geo_loader.py +36 -0
- pdpcompare-1.0.0/pdpcompare/ingest/header_specs.json +51 -0
- pdpcompare-1.0.0/pdpcompare/ingest/landscape_loader.py +53 -0
- pdpcompare-1.0.0/pdpcompare/ingest/spuf_loader.py +322 -0
- pdpcompare-1.0.0/pdpcompare/inputs.py +73 -0
- pdpcompare-1.0.0/pdpcompare/models.py +89 -0
- pdpcompare-1.0.0/pdpcompare/outputs/__init__.py +0 -0
- pdpcompare-1.0.0/pdpcompare/outputs/letter.py +53 -0
- pdpcompare-1.0.0/pdpcompare/outputs/worksheet.py +62 -0
- pdpcompare-1.0.0/pdpcompare/plandata.py +210 -0
- pdpcompare-1.0.0/pdpcompare/recommend.py +75 -0
- pdpcompare-1.0.0/pdpcompare/rxnorm.py +175 -0
- pdpcompare-1.0.0/pdpcompare/server/__init__.py +0 -0
- pdpcompare-1.0.0/pdpcompare/server/__main__.py +25 -0
- pdpcompare-1.0.0/pdpcompare/server/alerts.py +107 -0
- pdpcompare-1.0.0/pdpcompare/server/app.py +100 -0
- pdpcompare-1.0.0/pdpcompare/server/bundle_builder.py +99 -0
- pdpcompare-1.0.0/pdpcompare/server/config.py +61 -0
- pdpcompare-1.0.0/pdpcompare/server/state.py +53 -0
- pdpcompare-1.0.0/pdpcompare/server/updater.py +140 -0
- pdpcompare-1.0.0/pdpcompare/skilldoc/INSTRUCTIONS.md +224 -0
- pdpcompare-1.0.0/pdpcompare/skilldoc/__init__.py +1 -0
- pdpcompare-1.0.0/pdpcompare/sources.py +319 -0
- pdpcompare-1.0.0/pdpcompare/updater.py +110 -0
- pdpcompare-1.0.0/pyproject.toml +42 -0
- pdpcompare-1.0.0/scripts/validate_golden.py +106 -0
- pdpcompare-1.0.0/skills/pdp-compare/SKILL.md +35 -0
- pdpcompare-1.0.0/tests/__init__.py +0 -0
- pdpcompare-1.0.0/tests/conftest.py +16 -0
- pdpcompare-1.0.0/tests/fixtures/geonames_US.txt +2 -0
- pdpcompare-1.0.0/tests/fixtures/landscape.csv +4 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/basic drugs formulary 20260101.txt +6 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/beneficiary cost 20260101.txt +4 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/geographic locator 20260101.txt +2 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/insulin beneficiary cost 20260101.txt +5 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/pharmacy networks file 20260101 part 1.txt +3 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/pharmacy networks file 20260101 part 2.txt +2 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/plan information 20260101.txt +6 -0
- pdpcompare-1.0.0/tests/fixtures/spuf/pricing 20260101.txt +6 -0
- pdpcompare-1.0.0/tests/golden/README.md +24 -0
- pdpcompare-1.0.0/tests/golden/clients/.gitkeep +0 -0
- pdpcompare-1.0.0/tests/golden/expected/.gitkeep +0 -0
- pdpcompare-1.0.0/tests/server/__init__.py +0 -0
- pdpcompare-1.0.0/tests/server/conftest.py +29 -0
- pdpcompare-1.0.0/tests/server/test_alerts.py +85 -0
- pdpcompare-1.0.0/tests/server/test_app.py +61 -0
- pdpcompare-1.0.0/tests/server/test_bundle_builder.py +73 -0
- pdpcompare-1.0.0/tests/server/test_cli_remote.py +85 -0
- pdpcompare-1.0.0/tests/server/test_config.py +45 -0
- pdpcompare-1.0.0/tests/server/test_equivalence.py +117 -0
- pdpcompare-1.0.0/tests/server/test_state.py +39 -0
- pdpcompare-1.0.0/tests/server/test_update_loop.py +84 -0
- pdpcompare-1.0.0/tests/server/test_updater.py +185 -0
- pdpcompare-1.0.0/tests/test_bundle.py +82 -0
- pdpcompare-1.0.0/tests/test_catalog.py +63 -0
- pdpcompare-1.0.0/tests/test_cli.py +167 -0
- pdpcompare-1.0.0/tests/test_clientstore.py +28 -0
- pdpcompare-1.0.0/tests/test_config.py +28 -0
- pdpcompare-1.0.0/tests/test_costsim.py +95 -0
- pdpcompare-1.0.0/tests/test_deskupdate.py +212 -0
- pdpcompare-1.0.0/tests/test_doctor.py +119 -0
- pdpcompare-1.0.0/tests/test_engine.py +355 -0
- pdpcompare-1.0.0/tests/test_geo_loader.py +32 -0
- pdpcompare-1.0.0/tests/test_header_remap.py +130 -0
- pdpcompare-1.0.0/tests/test_inputs.py +87 -0
- pdpcompare-1.0.0/tests/test_landscape_loader.py +73 -0
- pdpcompare-1.0.0/tests/test_models.py +31 -0
- pdpcompare-1.0.0/tests/test_outputs.py +167 -0
- pdpcompare-1.0.0/tests/test_plandata.py +162 -0
- pdpcompare-1.0.0/tests/test_recommend.py +99 -0
- pdpcompare-1.0.0/tests/test_rxnorm.py +162 -0
- pdpcompare-1.0.0/tests/test_skilldoc.py +23 -0
- pdpcompare-1.0.0/tests/test_sources_local.py +36 -0
- pdpcompare-1.0.0/tests/test_sources_remote.py +169 -0
- pdpcompare-1.0.0/tests/test_spuf_loader.py +232 -0
- pdpcompare-1.0.0/tests/test_updater_shared.py +51 -0
- pdpcompare-1.0.0/tests/test_validate_golden.py +109 -0
- pdpcompare-1.0.0/uv.lock +543 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[ 1772ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/ldflags:0
|
|
2
|
+
[ 1774ms] [WARNING] [LaunchDarkly] The waitForInitialization function was called without a timeout specified. In a future version a default timeout will be applied. @ https://www.medicare.gov/plan-compare/static/index-miVAZ7oL.js:123
|
|
3
|
+
[ 2134ms] [INFO] [LaunchDarkly] LaunchDarkly client initialized @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
4
|
+
[ 2134ms] [INFO] [LaunchDarkly] Opening stream connection to https://clientstream.launchdarkly.us/eval/61f1a2d2e1e771227c7da4eb/eyJraW5kIjoidXNlciIsImtleSI6ImZiMDgyOWYwLTc2NTUtMTFmMS05MzY3LTdkMWU2NGI0MzkyZSIsImFub255bW91cyI6ZmFsc2UsImJyb3dzZXJXaWR0aCI6MTI4MCwiYnJvd3NlckhlaWdodCI6NzIwfQ @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
5
|
+
[ 2251ms] [INFO] [LaunchDarkly] Closing stream connection @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
6
|
+
[ 2251ms] [INFO] [LaunchDarkly] Opening stream connection to https://clientstream.launchdarkly.us/eval/61f1a2d2e1e771227c7da4eb/eyJraW5kIjoidXNlciIsImtleSI6ImZiN2QzMmUwLTc2NTUtMTFmMS05MzY3LTdkMWU2NGI0MzkyZSIsImFub255bW91cyI6ZmFsc2UsImJyb3dzZXJXaWR0aCI6MTI4MCwiYnJvd3NlckhlaWdodCI6NzIwfQ @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
7
|
+
[ 2269ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
8
|
+
[ 2398ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://www.medicare.gov/api/sls/session/info:0
|
|
9
|
+
[ 2670ms] [INFO] [LaunchDarkly] LaunchDarkly client initialized @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
10
|
+
[ 2690ms] [LOG] GenesysProvider mounted @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
11
|
+
[ 2690ms] [LOG] Initializing Genesys @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
12
|
+
[ 2690ms] [LOG] regular init genesys @ https://www.medicare.gov/plan-compare/static/session-key-taCgAESE.js:1
|
|
13
|
+
[ 3503ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
14
|
+
[ 5576ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
15
|
+
[ 9629ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[ 271ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/geography/fips?fips=29021:0
|
|
2
|
+
[ 273ms] apiResponseParseError: Unhandled Promise Rejection:
|
|
3
|
+
at vh (https://www.medicare.gov/plan-compare/static/index-miVAZ7oL.js:122:107507)
|
|
4
|
+
at async ea (https://www.medicare.gov/plan-compare/static/index-miVAZ7oL.js:122:108080)
|
|
5
|
+
at async Eh (https://www.medicare.gov/plan-compare/static/index-miVAZ7oL.js:122:109120)
|
|
6
|
+
[ 724ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/plans/search?plan_type=PLAN_TYPE_MA&plan_type=PLAN_TYPE_MAPD&page=0&year=2026&fips=29021&sort_order=MONTHLY_PREMIUM&zip=64506:0
|
|
7
|
+
[ 749ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
8
|
+
[ 749ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/plans/search?plan_type=PLAN_TYPE_PDP&page=0&year=2026&fips=29021&sort_order=ANNUAL_TOTAL&snp_type=SNP_TYPE_NOT_SNP&zip=64506:0
|
|
9
|
+
[ 1934ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
10
|
+
[ 4104ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
11
|
+
[ 8218ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.medicare.gov/api/v1/data/plan-compare/status:0
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
- generic [active] [ref=e1]:
|
|
2
|
+
- link "Skip to content" [ref=e2] [cursor=pointer]:
|
|
3
|
+
- /url: "#mct-app-main"
|
|
4
|
+
- status [ref=e3]: Explore your Medicare coverage options
|
|
5
|
+
- generic [ref=e4]:
|
|
6
|
+
- banner "medicare header" [ref=e7]:
|
|
7
|
+
- region "Official government website" [ref=e8]:
|
|
8
|
+
- generic [ref=e11]:
|
|
9
|
+
- img "U.S. flag" [ref=e13]
|
|
10
|
+
- paragraph [ref=e15]: An official website of the United States government
|
|
11
|
+
- button "Here's how you know" [ref=e16] [cursor=pointer]
|
|
12
|
+
- link "Cambiar a español" [ref=e18] [cursor=pointer]:
|
|
13
|
+
- /url: https://www.medicare.gov/plan-compare/#/search-results?plan_type=PLAN_TYPE_PDP&fips=29021&zip=64506&year=2026&lang=es
|
|
14
|
+
- generic [ref=e19]:
|
|
15
|
+
- link "Medicare.gov" [ref=e20] [cursor=pointer]:
|
|
16
|
+
- /url: https://www.medicare.gov
|
|
17
|
+
- img "Medicare.gov" [ref=e21]
|
|
18
|
+
- generic [ref=e22]:
|
|
19
|
+
- navigation "Mobile Menu"
|
|
20
|
+
- navigation "Main" [ref=e23]:
|
|
21
|
+
- menu [ref=e24]:
|
|
22
|
+
- menuitem "Basics" [ref=e25]:
|
|
23
|
+
- button "Basics" [ref=e27] [cursor=pointer]:
|
|
24
|
+
- generic [ref=e29]: Basics
|
|
25
|
+
- img [ref=e30]
|
|
26
|
+
- menuitem "Health & Drug Plans" [ref=e33]:
|
|
27
|
+
- button "Health & Drug Plans" [ref=e35] [cursor=pointer]:
|
|
28
|
+
- generic [ref=e37]: Health & Drug Plans
|
|
29
|
+
- img [ref=e38]
|
|
30
|
+
- menuitem "Providers & Services" [ref=e41]:
|
|
31
|
+
- button "Providers & Services" [ref=e43] [cursor=pointer]:
|
|
32
|
+
- generic [ref=e45]: Providers & Services
|
|
33
|
+
- img [ref=e46]
|
|
34
|
+
- navigation "Personal" [ref=e49]:
|
|
35
|
+
- menu [ref=e50]:
|
|
36
|
+
- menuitem "Chat" [ref=e51]:
|
|
37
|
+
- button "Chat" [ref=e53] [cursor=pointer]:
|
|
38
|
+
- generic [ref=e57]: Chat
|
|
39
|
+
- menuitem "Log in" [ref=e58]:
|
|
40
|
+
- link "Log in" [ref=e59] [cursor=pointer]:
|
|
41
|
+
- /url: https://www.medicare.gov/sso/authorize?client_id=mct&redirect_uri=https%3A%2F%2Fwww.medicare.gov%2Fplan-compare%2Fsls-callback&lang=en-us&relay=eyJsYW5nIjoiZW4ifQ%3D%3D
|
|
42
|
+
- generic [ref=e63]: Log in
|
|
43
|
+
- heading "Loading" [level=1] [ref=e157]
|
|
44
|
+
- generic:
|
|
45
|
+
- iframe
|
|
46
|
+
- iframe
|
|
47
|
+
- button "Feedback" [ref=e154] [cursor=pointer]:
|
|
48
|
+
- img "Feedback" [ref=e155]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pdpcompare
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Medicare Part D plan comparison engine — ranks PDPs by total annual cost for a client's drug list and pharmacy
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: duckdb>=1.5.4
|
|
7
|
+
Requires-Dist: httpx[socks]>=0.28.1
|
|
8
|
+
Requires-Dist: openpyxl>=3.1.5
|
|
9
|
+
Provides-Extra: server
|
|
10
|
+
Requires-Dist: fastapi>=0.115; extra == 'server'
|
|
11
|
+
Requires-Dist: uvicorn>=0.32; extra == 'server'
|