This website requires JavaScript.
9e595503b7
docs(spec): SP24 — align docs and decisions with the auth work in main
Tyler
2026-06-23 14:27:56 -06:00
1148a03a43
docs(architecture): add top-level technical design doc
Tyler
2026-06-23 11:50:12 -06:00
cad104a38c
docs(requirements): add top-level requirements + DoD
Tyler
2026-06-23 11:02:03 -06:00
0c81968d0c
fix(permissions+seed): add /api/reconciliation routes and shape billing_provider.address as dict
Nora
2026-06-22 17:54:39 -06:00
add6e982a4
Populate receivedAmount from matched Remittance.total_paid
Nora
2026-06-22 17:46:47 -06:00
414d2eb722
Add cyclone seed CLI subcommand for dev DB population
Nora
2026-06-22 17:30:39 -06:00
7e4bb4d2c8
Wire Dashboard to live API hooks
Nora
2026-06-22 17:20:48 -06:00
fb913f0617
fix(ui): Dashboard greeting uses live operator; api.isConfigured proxies through
Nora
2026-06-22 17:05:27 -06:00
39ae988101
fix(auth): bootstrap init_db on fresh DB; permissions matrix for inbox endpoints
Nora
2026-06-22 17:00:30 -06:00
e2d4a595a4
fix(api): use request.app.state in inbox endpoints; preserve dict HTTPException detail
Nora
2026-06-22 16:55:55 -06:00
81bcb1c1ef
fix(db): renumber auth migrations to come after SP14/12-backups
Nora
2026-06-22 16:06:54 -06:00
8fc3d9adda
test(auth): add test_existing_endpoints_require_auth + per-test AUTH_DISABLED flips
Nora
2026-06-22 15:59:08 -06:00
35e0f5a422
feat(auth): disable write affordances for viewer role
Nora
2026-06-22 15:54:38 -06:00
a25504bd3a
fix(auth): ungate auth_router so login is public
Nora
2026-06-22 15:41:52 -06:00
70280f70bb
feat(auth): gate existing endpoints with matrix_gate (router-level + per-endpoint)
Nora
2026-06-22 15:40:00 -06:00
a933672411
docs: auth section + env vars
Nora
2026-06-22 15:22:07 -06:00
ca40fd72c3
feat(docker): CYCLONE_ADMIN_* env vars for backend
Nora
2026-06-22 15:21:55 -06:00
4402a993d1
feat(auth): sidebar shows current user + logout button
Nora
2026-06-22 15:17:35 -06:00
cb87456575
feat(auth): wire AuthProvider + RequireAuth into app shell
Nora
2026-06-22 15:16:52 -06:00
3d0c7766f0
feat(auth): RequireAuth route guard
Nora
2026-06-22 15:12:43 -06:00
e76b514872
feat(auth): /login page
Nora
2026-06-22 15:12:31 -06:00
5bb9588f09
feat(auth): RoleGate component
Nora
2026-06-22 15:12:05 -06:00
d895854dcc
feat(auth): AuthProvider context + useAuth hook
Nora
2026-06-22 15:11:02 -06:00
55a298f05f
feat(auth): fetch wrapper with 401 redirect + authApi
Nora
2026-06-22 15:09:49 -06:00
0aea0f64ac
feat(types): add User type
Nora
2026-06-22 15:09:10 -06:00
6c80bf0512
feat(auth): CLI users subcommand
Nora
2026-06-22 15:01:35 -06:00
9c57b493a7
feat(audit): record user_id on log events
Nora
2026-06-22 14:58:01 -06:00
609499543e
test(auth): login rate limit
Nora
2026-06-22 14:53:16 -06:00
768f7c6247
feat(auth): bootstrap first admin from env vars
Nora
2026-06-22 14:52:51 -06:00
86b635104c
feat(auth): get_current_user + login/logout/me + admin user management
Nora
2026-06-22 14:36:57 -06:00
e158871a9a
feat(auth): sessions module + permissions matrix + rate limiter
Nora
2026-06-22 14:33:20 -06:00
1ca50e2bc0
test(auth): tighten duplicate-username test + add update_password test
Nora
2026-06-22 14:24:55 -06:00
74d7056284
feat(auth): users module with bcrypt hashing + CRUD
Nora
2026-06-22 14:19:29 -06:00
0ba91040f1
feat(migration): 0010 users + sessions, 0011 audit_log.user_id
Nora
2026-06-22 14:14:47 -06:00
dc83d7bef2
feat(db): add User and Session models
Nora
2026-06-22 14:13:30 -06:00
9d4798a124
feat(deps): add passlib[bcrypt] for password hashing
Nora
2026-06-22 14:12:14 -06:00
d552d3d3ec
docs(plan): auth implementation plan — 29 tasks, ~40 files
Nora
2026-06-22 14:05:39 -06:00
42a826cb73
docs(spec): auth (admin/user/viewer) design — sessions, RBAC, login flow
Nora
2026-06-22 13:57:10 -06:00
05b43078b9
chore(deps): consolidate dev deps into [project.optional-dependencies] dev
Tyler
2026-06-22 11:44:39 -06:00
7c1be58860
chore(deps): add cryptography dep, pytest-randomly dev dep
Tyler
2026-06-22 11:43:32 -06:00
9bca4b608a
feat(release): v0.2.0 — batch 837 export, ClaimCard, theme tokens
v0.2.0
Tyler
2026-06-22 11:01:58 -06:00
35298907bc
docs(spec): add Ubuntu Docker deployment design
cyclone
2026-06-22 10:43:26 -06:00
22720168c4
test(claims): wrap page in DrillStackProvider, switch to DrillDrawerHeader testids
sp21-complete
Tyler
2026-06-21 18:08:43 -06:00
1c0d855b8e
refactor(claim-drawer): mount on shared DrillDrawerHeader shell
Tyler
2026-06-21 18:01:07 -06:00
8db5db7610
feat(claim-drawer): validation rule opens peek with rule catalog
Tyler
2026-06-21 17:58:36 -06:00
786ead8c94
feat(claim-drawer): payer name opens PeekModal on top of drawer
Tyler
2026-06-21 17:53:43 -06:00
6c773c1159
feat(upload): streamed claim cards offer drill to persisted entity
Tyler
2026-06-21 17:48:41 -06:00
5c7e9b6168
feat(batch-diff): claim ids drillable to /claims?claim=ID
Tyler
2026-06-21 17:43:52 -06:00
ac87ed4908
feat(reconciliation): card body drillable, select button split
Tyler
2026-06-21 17:41:58 -06:00
4a8ce1a524
feat(inbox): rejected + payer_rejected + done_today rows drillable
Tyler
2026-06-21 17:32:09 -06:00
5053a1ea8e
feat(acks): row click opens AckDrawer
Tyler
2026-06-21 17:28:22 -06:00
33fa899217
feat(drill): AckDrawer with header + segment status list
Tyler
2026-06-21 17:26:03 -06:00
6fdbceefc2
feat(drill): useAckDrawerUrlState — ?ack= URL sync
Tyler
2026-06-21 17:24:23 -06:00
7290cac643
plan+spec: add migration 0014 to relax PKs; renumber plan Task 1.3 -> 1.4
Tyler
2026-06-21 18:09:06 -06:00
5e8c7b11ea
plan: parse-decide workflow implementation for 837/835 upload dedup
Tyler
2026-06-21 17:53:21 -06:00
9c0cec8f0c
spec: parse-then-decide workflow for 837/835 upload dedup
Tyler
2026-06-21 17:47:03 -06:00
9a313d2c1b
feat(activity): remit_received events drill to RemitDrawer
sp21-phase4
Tyler
2026-06-21 17:16:33 -06:00
2eb61f16ff
feat(reconciliation): candidate rows drill to RemitDrawer or ClaimDrawer
Tyler
2026-06-21 17:15:09 -06:00
12c2913ba1
feat(batchdiff): remit rows drill to RemitDrawer
Tyler
2026-06-21 17:07:38 -06:00
54440da2cd
feat(inbox): candidates + unmatched rows drill to RemitDrawer or ClaimDrawer
Tyler
2026-06-21 17:05:11 -06:00
7427838292
feat(remits): row click opens RemitDrawer (replaces inline CAS expand)
Tyler
2026-06-21 17:03:04 -06:00
b606e8c9a2
plan: drop claims UNIQUE + 409 UX implementation plan
Tyler
2026-06-21 17:02:10 -06:00
ac709c07c3
spec: self-review fixes (explicit claim_id arg, defer_foreign_keys)
Tyler
2026-06-21 16:58:50 -06:00
08e83da91d
feat(drill): ProviderDrawer — Claims + Activity tabs from extended /providers/{npi}
Tyler
2026-06-21 16:54:50 -06:00
3f672d5db3
spec: drop claims UNIQUE constraint + 409 UX
sp21-phase3
Tyler
2026-06-21 16:54:07 -06:00
65d98cf674
feat(dashboard): Recent activity events route to entity by kind
sp21-phase2
Tyler
2026-06-21 16:27:56 -06:00
d15c04d983
feat(claims): provider cell drillable to /providers?provider=NPI
Tyler
2026-06-21 15:21:46 -06:00
980627b675
feat(providers): directory cards drillable — opens ProviderDrawer
Tyler
2026-06-21 15:09:31 -06:00
1db6b8841c
fix(drill): ProviderDrawer quality pass — error branching, demo fallback, flex layout
Tyler
2026-06-21 14:57:59 -06:00
0678e25de7
feat(drill): ProviderDrawer with Overview tab + DrillDrawerHeader shell
Tyler
2026-06-21 14:40:08 -06:00
5b3b8619e6
feat(drill): useProviderDrawerUrlState — provider drawer URL state (mirrors remit hook)
Tyler
2026-06-21 14:32:22 -06:00
b6607b2009
feat(api): harden CORS and surface 500/409 errors with proper CORS headers
Tyler
2026-06-21 16:29:59 -06:00
c0b7924aad
docs(sp22): drop speculative uv.lock note from deviations
Tyler
2026-06-21 16:28:24 -06:00
ebd2834cc4
docs(sp22): backfill plan with 10 as-built deviations
Tyler
2026-06-21 16:28:07 -06:00
888c99d848
docs: cross-link to cyclone-pipeline sibling project
Tyler
2026-06-21 16:12:10 -06:00
388ea6e49b
Refine Batch Diff page with hybrid dark/paper treatment
Cyclone UI
2026-06-21 14:37:36 -06:00
736bf4d333
Refine Batches page with hybrid dark/paper treatment
Cyclone UI
2026-06-21 14:34:26 -06:00
7db5e448cd
feat(dashboard): Recent denials row drillable to /claims?claim=ID
sp21-phase1
Tyler
2026-06-21 14:19:39 -06:00
5d6b5894f3
feat(dashboard): Top providers row drillable to /providers?provider=NPI
Tyler
2026-06-21 14:06:29 -06:00
88da3a6246
feat(dashboard): KPI tiles drillable — navigate to /claims with filter
Tyler
2026-06-21 13:20:16 -06:00
50dc0b2fb3
feat(drill): PayerPeekContent + usePayerSummary + api.getPayerSummary
Tyler
2026-06-21 13:05:38 -06:00
e6ae364dad
feat(api): extend /api/config/providers/{npi} with recent_claims + recent_activity
Tyler
2026-06-21 12:46:42 -06:00
50a454db59
feat(api): GET /api/payers/{payer_id}/summary with 60s cache + pubsub invalidation
Tyler
2026-06-21 12:23:19 -06:00
9129543f5d
feat(drill): hover affordance CSS + App wrapped in DrillStackProvider
Tyler
2026-06-21 11:57:45 -06:00
fb7a5c6d2e
feat(drill): PeekModal — centered Radix Dialog with eyebrow + title
Tyler
2026-06-21 11:52:39 -06:00
7dd6a5d025
feat(drill): DrillableCell — hover-reveal button wrapper
Tyler
2026-06-21 11:47:05 -06:00
be93dbff72
feat(drill): DrillStackProvider — zustand-backed peek stack with 2-level cap
Tyler
2026-06-21 11:38:02 -06:00
feb15bf48d
Refine Acks page with hybrid dark/paper treatment
Cyclone UI
2026-06-21 14:27:16 -06:00
ff0985d244
Refine Inbox with editorial hero and paper-toned queue ledger
Tyler
2026-06-21 14:15:25 -06:00
94990932f9
Refine Reconciliation page with hybrid dark/paper treatment
Tyler
2026-06-21 14:05:05 -06:00
9133baa070
plan(SP22): Task 7 — replace assert with RuntimeError in list_*_acks methods
Tyler
2026-06-21 13:56:14 -06:00
d0a18bd796
Refine Upload page with hybrid dark/paper treatment
Tyler
2026-06-21 13:55:22 -06:00
646d00adde
plan(SP22): Task 6 — apply Task 4/5 fixes (4xx terminal, RuntimeError, retry logging) preemptively
Tyler
2026-06-21 13:51:42 -06:00
f6f821e082
plan(SP22): Task 5 — add test_parse_837_does_not_retry_on_5xx to spec (locks in dedup-safety contract)
Tyler
2026-06-21 13:50:51 -06:00
3e00fb3f63
plan(SP22): Task 5 — apply Task 4 fixes (4xx terminal, RuntimeError) to list_claims and parse_837
Tyler
2026-06-21 13:43:37 -06:00
2faf7bfd48
plan(SP22): Task 4 — distinguish 4xx (terminal) from 5xx (retry) + drop dead BACKOFF_S[2]
Tyler
2026-06-21 13:43:01 -06:00
73be586110
plan(SP22): Task 4 review fix — client() fixture must enter async context
Tyler
2026-06-21 13:37:55 -06:00
d7f37f845a
plan(SP22): Task 3 — add add_logger_name to shared_processors so JSON includes the logger name (matches docstring contract)
Tyler
2026-06-21 13:31:49 -06:00
df10b55a34
plan(SP22): Task 3 review fix — get_logger returns BoundLoggerLazyProxy, not BoundLogger
Tyler
2026-06-21 13:26:59 -06:00
6300280142
plan(SP22): Task 1 review fixes — conftest fixture bug + Python 3.13 note
Tyler
2026-06-21 13:13:01 -06:00