diff --git a/backend/src/cyclone/auth/permissions.py b/backend/src/cyclone/auth/permissions.py index 0fec752..310160a 100644 --- a/backend/src/cyclone/auth/permissions.py +++ b/backend/src/cyclone/auth/permissions.py @@ -43,6 +43,7 @@ PERMISSIONS: dict[tuple[str, str], set[Role]] = { ("GET", "/api/inbox/lanes"): ALL_ROLES, ("GET", "/api/inbox/export.csv"): ALL_ROLES, ("GET", "/api/reconcile"): ALL_ROLES, + ("GET", "/api/reconciliation"): ALL_ROLES, ("GET", "/api/audit-log"): ADMIN_ONLY, # Write endpoints (admin + user, no viewer). @@ -53,6 +54,7 @@ PERMISSIONS: dict[tuple[str, str], set[Role]] = { ("POST", "/api/inbox/rejected"): WRITE_ROLES, ("POST", "/api/inbox/payer-rejected"): WRITE_ROLES, ("POST", "/api/reconcile"): WRITE_ROLES, + ("POST", "/api/reconciliation"): WRITE_ROLES, ("POST", "/api/resubmit"): WRITE_ROLES, ("POST", "/api/acks"): WRITE_ROLES, diff --git a/backend/src/cyclone/seed_cli.py b/backend/src/cyclone/seed_cli.py index 7275a5d..99cc187 100644 --- a/backend/src/cyclone/seed_cli.py +++ b/backend/src/cyclone/seed_cli.py @@ -243,10 +243,17 @@ def _build_seed_rows( "npi": provider["npi"], "name": provider["name"], "tax_id": provider["tax_id"], - "address": provider["address"], - "city": provider["city"], - "state": provider["state"], - "zip": provider["zip"], + # 837 parser produces ``address`` as a structured dict so + # the claim-detail drawer can render line1/line2/city/state/zip. + # A flat string here crashes ``_address_to_ui`` with + # ``AttributeError: 'str' object has no attribute 'get'``. + "address": { + "line1": provider["address"], + "line2": None, + "city": provider["city"], + "state": provider["state"], + "zip": provider["zip"], + }, "phone": provider["phone"], }, "payer": {"name": payer},