The skill scans a bot with subagents (never runs it) and writes HANDOVER.md, an 11-section ops guide in the operator's order: where is what, how to run, how long to wait, after the run, how to see an exception, exception list, how you will know, how to tell us, don'ts, issues seen before. Dev material (check against 12 failure classes from Tebra Auto Post, gaps with file:line, incidents) goes to HANDOVER-DEV.md. Also adds ADR-0004, glossary terms, five fixture bots and a handoff eval runner (--resume, --regrade) with results from 47 runs of the earlier 13-section version. The grader still expects that structure and must be updated before the next eval run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 KiB
ClaimDesk Poster - ops handover
Version 1.4.2 · Written 2026-10-23 · Escalation: raise a ticket in the RPA Support queue
1. What the bot does
ClaimDesk Poster posts remittance payments into the ClaimDesk desktop app, one clinic at a time. It reads the input Excel, which has three sheets: Login (ClaimDesk user name and password), Clinics (the clinics to process) and Settings (the cutoff date). For each clinic it signs in to ClaimDesk, opens the clinic, and works through every unposted remittance in the list:
- ACH payments dated on or before the cutoff are posted and saved.
- Other payment methods are skipped.
- Payments dated after the cutoff are deferred.
Every remittance gets one row on the Report screen of the ClaimDesk Poster window. The bot writes no Excel or PDF output files, so the Report screen is its only output. It drives one desktop app: ClaimDesk.
2. How it works
ClaimDesk Poster window (what you use: start a run, Report screen)
└─ starts → automation process ──drives──> ClaimDesk desktop app
│ (do not touch while it runs)
├─ writes → one row per remittance → Report screen
└─ watchdog: stops the whole run after 5 min with no payment handled
- ClaimDesk Poster window is where you start a run, see the Report screen, and check the version in the title bar.
- The automation process does the work. It has no window of its own.
- ClaimDesk is opened, signed in to, and force-closed by the bot for every clinic. Any ClaimDesk window open on this machine is closed too.
- The watchdog stops the whole run if no remittance has been handled for 5 minutes.
One run, step by step:
- The bot refuses to start if an earlier batch is still unfinished (E04).
- It reads the input Excel and creates a new batch.
- For each clinic, it does steps 4 to 8.
- Open ClaimDesk and sign in.
- Click the clinic in ClaimDesk's clinic list.
- Wait for the remittance list to load.
- For each remittance in the list, post it, skip it or defer it, and write one Report row.
- Close ClaimDesk. If anything in steps 4 to 7 failed, start the clinic again from step 4 (3 tries in total).
- After the last clinic, the batch is marked complete only if no row is red and no clinic is still unfinished.
3. Before a run
- No unfinished batch. If the last batch has any red row, or any clinic that never got rows, the next run is refused (E04). Raise a ticket first.
- The dev team has set up this machine: Python, the bot's packages, ClaimDesk installed, and the bot's settings file holding the ClaimDesk program path. If the path is missing, every clinic fails with no rows (E05).
- Login sheet: user name in A2, password in B2. Both must be filled in, or the run stops (E02).
- Clinics sheet:
- Put one clinic per row in column A, starting at row 2.
- Spell each name exactly as it appears in ClaimDesk's clinic list.
- The bot splits a cell at every comma and semicolon:
- Bad:
Example, Sample Dentalin one cell. The bot looks for "Example" and "Sample Dental" and finds neither. - Good:
Example Sample Dental. Only works if ClaimDesk spells it that way. - A clinic whose real ClaimDesk name contains a comma or semicolon cannot be run by this version. Leave it out and post it by hand.
- Bad:
- Names containing
&may be reported as "wrong clinic" (E09). Check those clinics on the Report screen after the run.
- Settings sheet: cutoff date in B1.
- The bot compares dates as text, not as real dates. On the first run after any change to the cutoff or the input file, check a few Deferred rows and a few posted rows against their check dates.
- If they look wrong, raise a ticket. Do not re-run.
- All three sheets exist and are named exactly
Login,ClinicsandSettings(E01, E03). - The ClaimDesk Poster title bar shows version 1.4.2 (see section 10).
4. During a run
- Don't use ClaimDesk on this machine. The bot force-closes every ClaimDesk window after each clinic, including yours.
- Close every other window whose title contains "ClaimDesk", for example a database tool with ClaimDesk data open, or a browser tab. The bot picks the first window with "ClaimDesk" in its title and can drive or close the wrong one (E20).
- Don't use the mouse or keyboard on this machine. The bot clicks on screen.
- To stop the bot: this version has no Stop button that we can confirm.
- Closing ClaimDesk does not stop the bot. It treats that as a failure, re-opens ClaimDesk and starts the clinic again.
- If you must stop a run, raise a ticket and the dev team will stop it.
- A run looks stuck when ClaimDesk sits on the same screen, or opens and closes again and again for the same clinic. The bot itself gives up after 5 minutes without handling a remittance. It then stops the whole run and leaves ClaimDesk open (E17). Wait that long before acting.
5. Where to look when something goes wrong
You can open the Report screen of the ClaimDesk Poster window. The bot writes no output files, so there is nothing to check in the output folder. Its logs and database are not open to ops, so some answers below need a ticket.
| Question | Where to look |
|---|---|
| Did the run finish? | Not shown on screen today. Signs: every clinic in the input has rows on the Report screen, and the next run is not refused. Otherwise raise a ticket (dev reads the run log for "RUN SUMMARY" or "WATCHDOG"). |
| Which remittances failed? | Report screen → File Status = Error (red). |
| Why did one remittance fail? | Report screen → Comments column, then match it in section 7. |
| Which remittances were NOT posted although green? | Report screen → File Status = Completed, and Comments is not "Posted successfully" (see section 6). |
| A clinic is missing from the Report screen | The clinic failed all 3 tries, or the run was stopped before reaching it. The reason is only in the run log, so raise a ticket (E05 to E11, E17). |
| Did the bot already retry? | Not shown on screen. If you saw ClaimDesk open and close several times for one clinic, it retried. Dev can confirm from "[AUTO-RERUN]" lines in the log. |
| Which version is running? | ClaimDesk Poster title bar. |
6. Statuses
What you see on the Report screen is File Status (coloured) plus Comments. Read them together: green does not always mean posted.
| Status (File Status - Comments) | Colour | Meaning | What ops does |
|---|---|---|---|
| Completed - "Posted successfully" | green | Payment posted and saved in ClaimDesk | Nothing |
| Completed - "Remittance Errors on posting" | green | NOT posted. ClaimDesk showed its Remittance Errors screen and the bot pressed Cancel. Needs follow-up. | Review this remittance in ClaimDesk by hand (E14) |
| Completed - "Payment method '' - not posted" | green | NOT posted on purpose. It is not an ACH payment. | Nothing, unless the client wants non-ACH payments posted (E12) |
| Deferred - "Check date is after the cutoff - deferred" | grey | Not posted, because the check date is after the cutoff | A later run with a later cutoff picks it up. Spot-check the dates (E13). |
| Error - "Save button not found" | red | Payment screen opened, but there was no Save button. Not saved. | E15 |
| Error - "Payment not confirmed after Save" | red | The bot pressed Save but did not see "Payment saved" within 20 s. It may have posted. | Check in ClaimDesk first (E16) |
| Pending | amber | Never written by the current version | Raise a ticket if you ever see it |
| (clinic has no rows) | - | The clinic failed all 3 tries, or the run stopped first | E05 to E11, E17 |
| (same check number twice) | - | The clinic was retried, and the retry wrote its rows again | E18 |
Hidden statuses, not shown on screen (for reference when talking to dev):
- Batch: Pending or Completed. A Pending batch blocks the next run (E04).
- Clinic: Pending or Success. A clinic left Pending keeps the batch Pending.
7. Exception catalogue
Quote the ID (E01, E02...) in your ticket.
| ID | What you see | How the bot identifies it | Where it is recorded | Type | Who acts | What to do | Escalate when |
|---|---|---|---|---|---|---|---|
| E01 | Run ends at once, no new rows. Message may read "'Login' sheet not found". | The input Excel has no sheet named Login | Only in the process's own error output, not on the Report screen | Business | Ops | Add or rename the sheet to Login, then run again |
It still fails with the sheet present. Send: time of the run, E01. |
| E02 | Run ends at once, no new rows. "UserName/Password missing in Login sheet (row 2)" | A2 or B2 of the Login sheet is empty | Process error output only | Business | Ops | Fill A2 (user name) and B2 (password), then run again | Both are filled in and it still fails. Send: time, E02. Never send the password. |
| E03 | Run ends at once, no new rows, no clear message | The Clinics or Settings sheet is missing, so the bot crashes while reading the input | Process error output only | Business | Ops | Check that Clinics and Settings exist with exactly those names, then run again |
The sheets are correct. Send: time, E03. |
| E04 | Run refused: "A Pending batch exists - finish or clear it before a new upload" | An earlier batch is still unfinished: it has a red row, a clinic with no rows, or it was stopped by the watchdog | Process error output | System | Dev | You cannot clear it yourself. Note the red rows and missing clinics of the last batch from the Report screen. | Always. Send: time, E04, and the clinics or check numbers that are red or missing. |
| E05 | No clinic got any rows. ClaimDesk opened and closed many times. | Sign-in never reached the clinic list. Most likely a wrong password, or the ClaimDesk program path missing on this machine. A wrong password is not detected directly. | Run log only. Every clinic is left unfinished. | Business / System | Ops, then Dev | Check the user name and password in the Login sheet by signing in to ClaimDesk by hand. Then raise a ticket: the batch is now blocked (E04). | Always, because the batch must be cleared. Send: time, E05, and whether a manual sign-in works. |
| E06 | One clinic has no rows. ClaimDesk opened and closed 3 times for it. | The ClaimDesk Login window did not appear within 60 s | Run log: "Login window not found"; clinic left unfinished | System | Bot, then Dev | Wait. The bot tries the clinic 3 times. | The clinic still has no rows after the run. Send: time, clinic name, E06. |
| E07 | One clinic has no rows | After sign-in, no window titled ClaimDesk was found | Run log: "ClaimDesk window not found" | System | Bot, then Dev | Wait for the 3 tries | Still no rows. Send: time, clinic name, E07. |
| E08 | One clinic has no rows | The clinic name was not in ClaimDesk's clinic list within 10 s | Run log: "Clinic '' not found in list" | Business | Ops | Compare the spelling in the Clinics sheet with ClaimDesk's list, letter for letter. Remove commas and semicolons (section 3). | The spelling is exact. Send: time, clinic name, E08. |
| E09 | One clinic has no rows | After clicking the clinic, its name is not part of ClaimDesk's window title | Run log: "Wrong clinic opened, leaving Pending: " | System | Bot, then Dev | Check the spelling as in E08. Names with & are suspected to trigger this. |
The spelling is exact. Send: time, clinic name, E09. |
| E10 | One clinic has no rows | The remittance list did not load within 60 s | Run log: "Remittance grid did not load" | System | Bot, then Dev | Wait for the 3 tries. Check that ClaimDesk opens that clinic quickly by hand. | Still no rows. Send: time, clinic name, E10. |
| E11 | A clinic has only some of its rows, or rows appear twice | Something unexpected failed part-way through a clinic. The bot starts the whole clinic again. | Run log: "[ERROR] Clinic '' : ..." and "[AUTO-RERUN]" | System | Bot, then Dev | Wait for the 3 tries. Then treat duplicate rows as in E18. | The clinic still has missing rows. Send: time, clinic name, E11. |
| E12 | Green Completed - "Payment method '' - not posted" | The payment method in ClaimDesk is not ACH | Report screen | Business | Ops | Nothing. Only ACH is posted. Post by hand if the client wants it. | Never |
| E13 | Grey Deferred - "Check date is after the cutoff - deferred" | The check date is after the cutoff in Settings B1 | Report screen | Business | Ops | It is picked up by a later run. Spot-check that the date really is after the cutoff. | A Deferred row is dated before the cutoff, or a posted row after it. Send: time, check number, E13. |
| E14 | Green Completed - "Remittance Errors on posting" | ClaimDesk showed the Remittance Errors screen within 5 s of Post Payment. The bot pressed Cancel. | Report screen | Business | Ops | It was not posted. Open the remittance in ClaimDesk, resolve the error and post by hand. | Never, unless every remittance gets this |
| E15 | Red Error - "Save button not found" | No Save button appeared within 10 s on the payment screen | Report screen; technical detail only in the hidden database | System | Ops, then Dev | Check in ClaimDesk: the payment should not be posted. Post it by hand. This red row blocks the batch (E04). | Always, to clear the batch. Send: time, clinic, check number, E15. |
| E16 | Red Error - "Payment not confirmed after Save" | The bot pressed Save but "Payment saved" did not appear within 20 s | Report screen | System | Ops, then Dev | Check in ClaimDesk first. Look the check number up in that clinic. If it is posted, do nothing more in ClaimDesk. If not, post it by hand. Do not post it twice. This red row blocks the batch (E04). | Always, to clear the batch. Send: time, clinic, check number, whether it was posted in ClaimDesk, E16. |
| E17 | The run stops part-way. ClaimDesk is left open. Later clinics have no rows. The next run is refused (E04). | The watchdog: no remittance handled for 5 minutes. This also happens when one or more clinics keep failing their retries, or when several clinics in a row have nothing to post. | Run log: "[WATCHDOG] no progress for 300s - killing run" | System | Dev | Close ClaimDesk. List which clinics have rows. | Always. Send: time it stopped, last clinic with rows, E17. |
| E18 | The same check number appears more than once for a clinic | The clinic was retried, and the retry wrote rows again for remittances that were still in ClaimDesk's unposted list (skipped, deferred, rejected, failed) | Report screen | System | Ops | Read the rows together. If any copy says "Posted successfully", it is posted. Otherwise the latest outcome applies; check in ClaimDesk if unsure. | The copies disagree and ClaimDesk does not settle it. Send: clinic, check number, E18. |
| E19 | The title bar shows an older version after an update | The launcher keeps using the old folder until it is restarted | Title bar | System | Ops | Close the ClaimDesk Poster window completely and reopen it. Check the version again. | Still old after a restart. Send: the version shown, E19. |
| E20 | The bot types or clicks in another program, or ClaimDesk closes during a run | The bot uses the first window whose title contains "ClaimDesk". That can be a database tool, a browser tab, or the ClaimDesk Poster window itself. | Run log only; the clinic usually fails and is retried | System | Ops, then Dev | Before every run, close all other windows with "ClaimDesk" in the title (section 4) | It happens with no such window open. Send: time, clinic, the windows that were open, E20. |
8. What the bot recovers by itself
| Problem | What the bot does | Limit | After the limit |
|---|---|---|---|
| Any failure while a clinic is being processed: sign-in, clinic list, remittance list, or something unexpected | Closes ClaimDesk, signs in again, starts the clinic over | 3 tries per clinic. Each try can wait up to 60 s for sign-in, 10 s for the clinic link and 60 s for the remittance list. | Clinic left unfinished, with no new rows. The batch stays unfinished and blocks the next run (E04). The bot moves to the next clinic. |
| No remittance handled for a long time | The watchdog stops the whole run | 5 minutes, checked every 10 s | The run ends at once. ClaimDesk is left open, the remaining clinics are not done, and the batch blocks the next run (E17). Failing clinics often hit this before their 3rd try ends. |
| Save not confirmed, or Save button missing | No retry. The row is marked Error and the bot moves to the next remittance. | - | Red row; ops checks in ClaimDesk (E15, E16) |
| Remittance Errors screen in ClaimDesk | Presses Cancel and moves on | Waits 5 s for the screen to appear | Green row "Remittance Errors on posting", not posted (E14) |
How long to wait: one clinic that keeps failing takes up to about 7 minutes of retries. The watchdog ends the run if 5 minutes pass without a remittance being handled. So if ClaimDesk has shown no progress for more than 5 minutes, the run has stopped.
9. Known incidents
Newest first. Dates are not recorded; versions are from the commit history.
| When / version | What ops saw | Cause | What to do now | Ops could handle? |
|---|---|---|---|---|
| Up to 1.4.2 | The title bar still showed 1.3.0 after an update | The launcher kept using the old folder until restarted | Restart the ClaimDesk Poster window after every update and check the version (E19). No code fix is in this repo. | Yes |
| Up to 1.4.2 | Red "Payment not confirmed after Save" rows that had really posted | ClaimDesk saved more slowly than the wait | Still open. The wait is 20 s, but nothing re-checks the posting afterwards. Always check in ClaimDesk first (E16). | Partly: ops can check, but needs dev to clear the batch |
| Up to 1.4.2 | A clinic was never processed. The batch stayed unfinished. | Clinic names containing commas are split into pieces that don't exist | Still open. One clinic per row does not help when the name itself contains a comma. Leave such clinics out (section 3). | Partly |
| Up to 1.4.2 | The bot drove a database tool, then closed the real ClaimDesk | That tool's window title contained "ClaimDesk" | Still open. Close all other "ClaimDesk" windows before a run (E20). | Partly |
| Older version (from an old log) | "Wrong clinic opened", then the whole run stopped by the watchdog | Clinic-name check against the window title, plus retries with no progress, which hit the 5-minute limit | Still open (E09, E17) | Partly: ops can spot it, dev clears the batch |
10. Releases and version check
- How an update arrives: through the ClaimDesk Poster launcher. The update mechanism is not in this repo; ask the dev team for the details.
- How to confirm it applied: the ClaimDesk Poster title bar shows the version. Today it is 1.4.2.
- If the version did not change: close the ClaimDesk Poster window completely, reopen it and check again. If it is still old, raise a ticket (E19).
11. Escalating to dev
Raise a ticket in the RPA Support queue. Include:
- the exception ID from section 7
- the time of the run, and the time it went wrong
- the clinic name and check number(s)
- a screenshot of the Report screen, and of ClaimDesk if relevant
- what you already checked in ClaimDesk
Never send passwords, the input Excel's Login sheet, the bot's settings file, or patient data in a ticket or chat.
12. Failure-class check
- F1 covered in section 3 (machine setup, ClaimDesk path) and E05; Fix #14.
- F2 covered in section 4 and E20; Fix #3.
- F3 covered in E06, E07, E08, E10, E15 and E16, and section 8.
- F4 covered in section 3 (commas,
&, cutoff dates), E08, E09 and E13; Fix #4, #12 and #13. - F5 covered in Fix #16: a clinic is marked done even when it had 0 remittances, with no check that the right list was shown.
- F6 covered in E16; Fix #5.
- F7 covered in section 6, E12 and E14; Fix #6.
- F8 covered in section 8 and E17; Fix #10.
- F9 covered in section 4 (no known Stop; closing ClaimDesk does not stop it); Fix #17.
- F10 covered in E04, E15, E16 and E17; Fix #9.
- F11 covered in section 5; Fix #7, #8 and #14.
- F12 covered in section 10 and E19; Fix #17.
13. Fix before handover (dev team)
| # | Gap | Why it hurts ops | Where (file:line) |
|---|---|---|---|
| 1 | .env is committed to git, including a password-fallback key. ClaimDesk passwords are also kept in plain text in the input Excel. |
Credential exposure | .env (tracked), bot.py:56, bot.py:162 |
| 2 | The committed run log contains a patient name | PHI in the repo history | logs/run_20260901_101500.log:3 |
| 3 | Window lookup takes the first window whose title contains "ClaimDesk". Commit 63f0a86 only added a comment. It can also match the launcher "ClaimDesk Poster" and the login window. | The bot drives or kills the wrong window (E20) | bot.py:66-70, bot.py:185 |
| 4 | Every Clinics cell is split on , and ;. Commit bb0f3b3 was README-only. |
Clinics with commas can never run, and they block the batch | bot.py:62 |
| 5 | Save confirmation is a 20 s wait with no re-check of the grid. Commit 4af55eb only added a comment; the value was already 20. | False Error rows, risk of double posting, blocked batch (E16) | bot.py:21, bot.py:117-118, bot.py:186 |
| 6 | "Rejected by app" and "Skipped" map to green Completed | Ops thinks not-posted items are done | bot.py:27-33 |
| 7 | tech_comments is written but not shown on the Report screen |
The technical cause is hidden from ops | report_screen.py:6, bot.py:123 |
| 8 | Clinic-level failures, retries and the watchdog kill are recorded only in the log. The Report screen has no clinic or batch view. Ops has no log access. No alerts (ALERT_SMTP unused). |
Ops sees only "clinic missing" | bot.py:144, bot.py:147, bot.py:48, report_screen.py:11-13 |
| 9 | Any Pending batch blocks every new upload, and there is no way to clear or resume it | Every red row or failed clinic needs a dev ticket before the next run (E04) | bot.py:150-154, bot.py:167-168 |
| 10 | The watchdog heartbeat is only per remittance. Sign-in, clinic open, retries and empty clinics never beat. os._exit skips cleanup and leaves ClaimDesk open. |
Healthy runs get killed; leftovers block the next run (E17) | bot.py:39-49, bot.py:137, bot.py:146 |
| 11 | A wrong password is not detected; it surfaces as "Clinic not found" on every clinic | Ops chases spelling instead of credentials (E05) | bot.py:80-83 |
| 12 | The wrong-clinic check is a substring test on the window title. It is suspected to fail on &, and "North Clinic" matches "North Clinic 2". |
False "wrong clinic" failures, or a missed real one (E09) | bot.py:91 |
| 13 | The cutoff is compared as text (grid text vs str() of the Excel cell) |
Wrong post/defer decisions (E13) | bot.py:107 |
| 14 | Input errors and a missing ClaimDesk path aren't logged or shown in the UI. A missing Clinics/Settings sheet crashes with no message. A missing CLAIMDESK_EXE is retried as a clinic failure. |
Ops gets no message (E01-E03, E05) | bot.py:55-63, bot.py:74, bot.py:169 |
| 15 | A clinic retry re-inserts report rows for items still unposted. Report rows have no timestamp. | Duplicate, ambiguous rows (E18) | bot.py:136-139, bot.py:123 |
| 16 | A clinic is marked Success with 0 items, with no positive confirmation it was on the right list. The batch can complete with nothing posted. | Silent "done" | bot.py:140, bot.py:150-154 |
| 17 | No Stop mechanism and no launcher/updater code in the repo. The 1.3.0 update fix (9945eb1) is a comment only. | Ops has no safe way to stop a run; the update fix can't be verified | report_screen.py:14 |
| 18 | The run summary has no counts; the log shows doubled "[ERROR] [ERROR]" tags | Harder for dev to triage tickets | bot.py:180, bot.py:144 |