fix(cli): stack pfs elements --family is repeatable (refs #684)

Claude-Session: https://claude.ai/code/session_01Aum3pEMAM3yQVdFSdVe6Gc
This commit is contained in:
kert
2026-09-09 13:17:59 -04:00
parent 5eef63e7b6
commit e4fc8b453a
2 changed files with 45 additions and 9 deletions

View File

@@ -76,16 +76,19 @@ def _run_elements(
typer.echo(f"{c}: {len(x.rows)} elements, {len(x.reviews)} for review") typer.echo(f"{c}: {len(x.rows)} elements, {len(x.reviews)} for review")
def _codes_for(con: Any, codes: list[str], family: str, all_payable: bool) -> list[str]: def _codes_for(
con: Any, codes: list[str], families: list[str], all_payable: bool
) -> list[str]:
out: list[str] = [c.upper() for c in codes] out: list[str] = [c.upper() for c in codes]
if family: if families:
refresh_from(con) refresh_from(con)
fam = FAMILIES.get(family.upper()) for family in families:
if fam is None: fam = FAMILIES.get(family.upper())
raise typer.BadParameter( if fam is None:
f"unknown family {family!r}; known: {', '.join(FAMILIES)}" raise typer.BadParameter(
) f"unknown family {family!r}; known: {', '.join(FAMILIES)}"
out.extend(fam.codes) )
out.extend(fam.codes)
if all_payable: if all_payable:
rows = con.execute( rows = con.execute(
"SELECT DISTINCT hcpcs FROM pfs.rvu WHERE status_code IN ('A','R','T') " "SELECT DISTINCT hcpcs FROM pfs.rvu WHERE status_code IN ('A','R','T') "
@@ -100,7 +103,9 @@ def _codes_for(con: Any, codes: list[str], family: str, all_payable: bool) -> li
@app.command() @app.command()
def elements( def elements(
code: list[str] = typer.Option([], "--code", help="HCPCS/CPT code (repeatable)."), code: list[str] = typer.Option([], "--code", help="HCPCS/CPT code (repeatable)."),
family: str = typer.Option("", help="Expand a registered family (CCM, APCM, …)."), family: list[str] = typer.Option(
[], "--family", help="Expand a registered family (CCM, APCM, …); repeatable."
),
all_payable: bool = typer.Option( all_payable: bool = typer.Option(
False, "--all-payable", help="Every A/R/T code in the newest RVU year." False, "--all-payable", help="Every A/R/T code in the newest RVU year."
), ),

View File

@@ -157,6 +157,37 @@ class TestElements:
) )
assert res.exit_code == 0 and seen == ["99490"] assert res.exit_code == 0 and seen == ["99490"]
def test_repeated_family_option_expands_every_family(self, con, monkeypatch):
# #684 regression: --family used to be a single str, so a second
# --family silently discarded the first. It must now be repeatable
# and expand every family named.
seen = []
monkeypatch.setattr(
pfs_cli,
"extract_code",
lambda s, c, code, *, classify=None: (
seen.append(code) or Extraction(code, (), ())
),
)
res = runner.invoke(
app,
[
"pfs",
"elements",
"--family",
"CCM",
"--family",
"APCM",
"--no-llm",
"--dry-run",
],
)
assert res.exit_code == 0, res.output
from pfs.families import HAND_FAMILIES
expected = set(HAND_FAMILIES["CCM"].codes) | set(HAND_FAMILIES["APCM"].codes)
assert set(seen) == expected
class TestLineage: class TestLineage:
def test_prints_and_writes(self, con, monkeypatch): def test_prints_and_writes(self, con, monkeypatch):