Sign-in page redesign and Portal roles Super Admin / Admin / Viewer
Sign-in: brand panel, show / hide password, Caps Lock warning, moving background, tab icon. Roles: Super Admin manages Admins and Viewers, Admin manages Viewers only (and can Start / Stop, see Sign-ins), Viewer sees claims and Runs only. create_tables.sql moves an old table. 71 test files, 1220 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
120fd6808a
commit
ce9bdbd974
11 files changed
+408
-99
No files matched your search
+47
-10
@@ -87,6 +87,13 @@ before any login; **17:07 — the box came up, OK, login in 279 s (box wait
|
||||
included), 2FA mail in 42 s, Chrome showed only eCW tabs**, claims running.
|
||||
A full test suite ran beside the 16:27 and 17:07 runs without touching
|
||||
them (the tests' Chrome uses a free port, never 9222).
|
||||
**2026-10-26 17:40 terminal run:** Chrome open box → OK, login 97 s (2FA
|
||||
mail 42 s), **50/50 read, 38 Pass / 12 Fail / 0 Review, no bot error**,
|
||||
~27 min. Against the 23/10 17:07 run, 49 claims gave the same comment;
|
||||
the one change is eCW data, not code: a patient's sliding fee was renewed
|
||||
(new period from 10/23/2026), so a claim with an earlier DOS is now Fail
|
||||
"Sliding fee NOT STARTED" (§6 Waiting 6). The #25 and Portal changes
|
||||
of 23–26/10 changed no other result.
|
||||
|
||||
**Runs page (2026-10-22, Stage 1 of EEWA-31..33, `751a177`):**
|
||||
http://127.0.0.1:8000/runs (header link "Runs"). Every Run writes
|
||||
@@ -113,10 +120,16 @@ and not SQL: `docs/adr/0001-run-events-in-files.md`. Spec:
|
||||
page and `/api` needs a Sign-in. Setup, once: run `tools\sql\create_tables.sql`
|
||||
in SSMS (adds `CV_PortalUser`, `CV_PortalSignIn` and, for Stage 3,
|
||||
`CV_ChargeSummary.started_by`), then
|
||||
`python tools\add_portal_user.py` for the first Admin (password typed hidden),
|
||||
then restart `run_web.bat`. Roles: **Admin** (Users page: add / role / reset
|
||||
/ disable — never delete; Sign-ins page), **Operator** (Start / Stop),
|
||||
**Viewer** (see only). Passwords PBKDF2-SHA256 (600k, own salt), 10+
|
||||
`python tools\add_portal_user.py` for the first Super Admin (password typed
|
||||
hidden), then restart `run_web.bat`. Roles since `f99dc17` (2026-10-27,
|
||||
operator: "super admin means me"): **Super Admin** (everything; Users page
|
||||
adds / changes Admins and Viewers — never deletes; nobody changes a Super
|
||||
Admin from the Portal, only the PC tool makes one), **Admin** (everything:
|
||||
Start / Stop, Sign-ins page; adds / changes Viewers only), **Viewer**
|
||||
(Dashboard, Claim status, Runs; changes nothing, no Users or Sign-ins).
|
||||
Operator is gone (folded into Admin). The live table was moved 2026-10-27
|
||||
by the operator in SSMS (the bot's SQL login cannot ALTER the table): the
|
||||
one user is Super Admin; the CHECK allows only the three roles. Passwords PBKDF2-SHA256 (600k, own salt), 10+
|
||||
characters; a user an Admin adds or resets must choose their own at the
|
||||
next Sign-in. 5 wrong passwords = locked 15 minutes; 30 minutes idle =
|
||||
signed out; sessions live in the server's memory (a restart signs everyone
|
||||
@@ -147,7 +160,7 @@ table needs an update — run create_tables.sql". The Excel Charge Summary is
|
||||
unchanged. Tests: `test_run_alerts.py`.
|
||||
|
||||
**From the page (2026-10-14):** `.\run_web.bat` → http://127.0.0.1:8000
|
||||
(the Dashboard) → **Start run** (Admin / Operator, since 2026-10-22). The page starts `python run.py` itself, always **VERIFY**
|
||||
(the Dashboard) → **Start run** (Super Admin / Admin; Admin / Operator 2026-10-22 to 10-27). The page starts `python run.py` itself, always **VERIFY**
|
||||
(`SAVE_CORRECTIONS=0` forced), information boxes go to the log
|
||||
(`QUIET_BOXES=1`); CAPTCHA / 2FA boxes still come up on the PC. The card
|
||||
shows phase, progress, Pass/Fail/Review and a live log; **Stop** kills the
|
||||
@@ -173,9 +186,8 @@ Get-ChildItem tests\test_*.py | ForEach-Object { "$($_.Name): $((python $_.FullN
|
||||
this machine, with ODBC Driver 18 for SQL Server.
|
||||
- Tests run offline against fake HTML pages in `tests/fixtures/` and fake DB
|
||||
connections; they never touch eCW or SQL Server (`test_cdp_browser.py`
|
||||
starts a local Chromium on a debug port). As of 2026-10-26: 71 test
|
||||
files, **1215 tests** (full run 2026-10-23: 1211/1211; the 4 new Portal
|
||||
tests and every Portal test file passed 2026-10-26) (earlier flaky, each
|
||||
starts a local Chromium on a debug port). As of 2026-10-27: 71 test
|
||||
files, **1220 tests** (full run 2026-10-27: 1220/1220) (earlier flaky, each
|
||||
failed once and passed on rerun: test_verify_no_live_writes,
|
||||
depression_dx_pointer, progress_note_wait — watch them) (about 5 minutes for all of them).
|
||||
|
||||
@@ -444,6 +456,14 @@ browser holds in the background must not stay faded), and off under
|
||||
Checked in the Browser pane against a made-up-data preview (port 8765,
|
||||
a scratchpad script; no SQL, no real users), desktop and phone width.
|
||||
The running Portal shows it after `run_web.bat` is restarted.
|
||||
**Sign-in page since `61338b4` (2026-10-26, operator):** a card on a
|
||||
slow navy-to-blue moving gradient — navy brand panel ("Charge
|
||||
Validation" and three feature titles only, no description lines;
|
||||
floating circles, pulsing CV mark) and the form (icon fields, Show /
|
||||
Hide password, Caps Lock warning, idle / lockout rules read from
|
||||
`web/users.py`). Every page has an inline SVG tab icon (no
|
||||
`/favicon.ico` 404). Motion off under `prefers-reduced-motion`. Live on
|
||||
the Portal (restarted 2026-10-26, [portal] terminal tab).
|
||||
- Server `MECARE331\MECARE331`, database `Charge_Validation`, table
|
||||
`dbo.CV_ChargeSummary` (every table of this project starts with **`CV_`**,
|
||||
operator 2026-10-12): the format's 24 columns + `run_at`, `run_mode`
|
||||
@@ -568,6 +588,7 @@ The running Portal shows it after `run_web.bat` is restarted.
|
||||
3. Dental HIGH RISK / sliding EXPIRED rows say "Corrections pending (not saved)" although nothing was corrected. Needs the operator's wording (e.g. "Submit via DentaQuest portal").
|
||||
4. Demo `.env`: which sheet `TEST_CLAIM_IDS_FILE` points at (now the Dental sheet), and a shorter `MSGBOX_TIMEOUT_SECONDS`?
|
||||
5. #25 mental health: G0469 or G0470 (new / established) — the client's ruling (EEWA-37). Until then Review.
|
||||
6. Sliding fee renewed: a claim whose DOS falls in the patient's **previous** sliding fee period, checked after a renewal — Pass on the old period, or Fail "NOT STARTED" against the current one (as built)? Seen 2026-10-26. Billing team / client to rule.
|
||||
|
||||
---
|
||||
|
||||
@@ -602,7 +623,9 @@ The running Portal shows it after `run_web.bat` is restarted.
|
||||
|
||||
History: `git log --oneline`.
|
||||
|
||||
Last code commits: `a436489` (2026-10-26, Portal look: aligned header /
|
||||
Last code commits: `f99dc17` (2026-10-27, Portal roles Super Admin /
|
||||
Admin / Viewer — §2), `61338b4` (2026-10-26, Sign-in page redesign + tab
|
||||
icon — §5), `a436489` (2026-10-26, Portal look: aligned header /
|
||||
footer, 7-day chart, today's reasons, pass rate — §5), `2d4d4fc`
|
||||
(2026-10-23, tracked files de-identified — §7), `8fea168` (2026-10-23, "Chrome open" box before the
|
||||
login and the empty first tab closed, in a Chrome the run opened — §2),
|
||||
@@ -703,7 +726,7 @@ Status lives in Jira; the open work is in §6 and §10.
|
||||
| EEWA-30 | medicaid_pregnancy_th (#23: TH modifier on a pregnancy visit on Medicaid) | To Do |
|
||||
| EEWA-29 | medicare_wellness_history (#27/#28/#29: G0402 / G0438 / G0439 billed too often → Review) | To Do |
|
||||
| EEWA-31 | run_events + Runs page (Stage 1) | Done (closed 2026-10-26; built `751a177`, seen on every live run since 2026-10-22) |
|
||||
| EEWA-32 | portal sign-in (Stage 2: Portal Users, Roles, Started By / Stopped By); blocked by EEWA-31 | In Progress (built 2026-10-22, `c230a8e`; live Sign-in and a Portal Start with Started By 2026-10-22; Viewer not yet tried) |
|
||||
| EEWA-32 | portal sign-in (Stage 2: Portal Users, Roles, Started By / Stopped By); blocked by EEWA-31 | In Progress (built 2026-10-22, `c230a8e`; live Sign-in and a Portal Start with Started By 2026-10-22; roles Super Admin / Admin / Viewer `f99dc17` 2026-10-27; Viewer not yet tried) |
|
||||
| EEWA-33 | portal run alerts (Stage 3: Run Error banner, `started_by` column); blocked by EEWA-32 | Done (closed 2026-10-26; built `ecbbf3a`; banner seen after the 19:42 run, `started_by` on the Portal runs' rows) |
|
||||
| EEWA-34 | medicare_pps_code (#25) — spec | To Do (parent of the work below) |
|
||||
| EEWA-35 | #25 PPS Code check — Review when missing | In Progress (built 2026-10-23, `ac25f83`; not run live) |
|
||||
@@ -724,6 +747,20 @@ test claim ids — new posts must not (§7).
|
||||
|
||||
## 10. Open items
|
||||
|
||||
- **Stability (review of 25 runs, 20–26/10, 2026-10-26).** After the eCW
|
||||
login the run is steady: the last five full runs read 50/50 with no
|
||||
bot error and the same results run to run. The weak part is getting
|
||||
in: about half the runs never passed the login — "No second factor
|
||||
prompted / Login not confirmed" (four on 20/10, not since), a late
|
||||
2FA mail (372 s once, one 9-minute timeout), the 19:42 restriction
|
||||
(fixed by the proxy check), guard waits, and stops by hand. Two runs
|
||||
stopped at "Opening landing page" (Chrome takes ~2 min there); the
|
||||
watchdog came after them and has not fired live yet. Suggested, not
|
||||
ticketed: a landing-page timeout with one retry, a 2FA retry, a week of
|
||||
daily runs to measure login times on the Runs page.
|
||||
- **Gitea:** one overall snapshot update at the end of a day, when the
|
||||
operator asks (from the clone `D:\ecw-charge-validation`; operator
|
||||
pushes; 2026-10-26: `ba15a57` → `120fd68`).
|
||||
- **Portal for the client — Gitea + Dokploy (asked 2026-10-23, not
|
||||
started).** Gitea `giteanew.ecareindia.com` (10.200.0.15, internal; its
|
||||
HTTPS certificate is not in Git Bash's curl bundle) and Dokploy
|
||||
|
||||
Reference in new issue
Block a user