CareWell clinic / billing-unsaved
billing-unsaved
Leave an invoice with an unsaved payment. Moving to another invoice fires ON-CLEAR-DETAILS: CLEAR_ALL_MASTER_DETAILS finds the changed PAYMENTS block below the master and clears it with ASK_COMMIT; Forms asks whether to save, answered No, and the next invoice's details are queried.
Three runs from a fresh database gave byte-identical diffs. Behaviour that looks odd in the migrated app but is the original's: faithful to the original and waivers. Files: scenario, golden record, target record, diff (JSON).
Scenario steps
Items are addressed by their Forms name (BLOCK.ITEM[row]), the same name in the
original and, through the mapping, in the migrated app.
| # | Step | Action | Checked on the original |
|---|---|---|---|
| 0 | Open form cw_login | ||
| 1 | Type CTL.USERNAME = ADMIN | ||
| 2 | sign in | Click CTL.SIGN_IN | |
| 3 | invoices | Click HOME.INVOICES | |
| 4 | open invoice | Click INVOICES.INVOICE_ID[1] | |
| 5 | Type PAYMENTS.AMOUNT[0] = 10 | ||
| 6 | other invoice | Click INVOICES.INVOICE_ID[2] | |
| 7 | do not save | Answer the alert No |
Screens, step by step
Left: the original Oracle Forms application, recorded on a virtual display. Right: the migrated application in headless Chromium. Screenshots are evidence only; the comparison works on the recorded values.
No step screenshots of the original were kept for this app; the comparison uses the recorded values, which are in the golden record below.
Step 0: open cw_login
Step 1: type
Step 2: sign in
Step 3: invoices
Step 4: open invoice
Step 5: type
Step 6: other invoice
Step 7: do not save
Golden record of the original
After each step: the focus, the displayed values that changed, the message line and any alert. The full record (every item of every step, windows, lists of values) is in the JSON file.
| # | Step | Action (by name) | Focus after | Displayed values that changed | Message line | Alert | Expect |
|---|---|---|---|---|---|---|---|
| 0 | Open form cw_login | CTL.USERNAME[0] | |||||
| 1 | Type CTL.USERNAME = ADMIN | CTL.USERNAME[0] | CTL.USERNAME[0] = ADMIN | ||||
| 2 | sign in | Click CTL.SIGN_IN | HOME.SCHEDULE[0] | HOME.CHECKED_IN[0] = <any>HOME.OPEN_AMOUNT[0] = 15,015HOME.OPEN_INVOICES[0] = 180HOME.TODAY_TOTAL[0] = <any>HOME.WELCOME[0] = Welcome, Clinic Administrator | |||
| 3 | invoices | Click HOME.INVOICES | INVOICES.INVOICE_ID[0] | CTL.SHOWING[0] = Invoices to be paidINVOICES.INVOICE_DATE[0] = 24-SEP-2026INVOICES.INVOICE_DATE[1] = 23-SEP-2026INVOICES.INVOICE_DATE[2] = 18-SEP-2026INVOICES.INVOICE_DATE[3] = 17-SEP-2026INVOICES.INVOICE_DATE[4] = 17-SEP-2026INVOICES.INVOICE_ID[0] = 3852INVOICES.INVOICE_ID[1] = 3850INVOICES.INVOICE_ID[2] = 3835INVOICES.INVOICE_ID[3] = 3832INVOICES.INVOICE_ID[4] = 3831INVOICES.PAID[0] = 42.50INVOICES.PAID[1] = 0.00INVOICES.PAID[2] = 40.00INVOICES.PAID[3] = 0.00INVOICES.PAID[4] = 0.00INVOICES.PATIENT_NAME[0] = Yusuf BanerjeeINVOICES.PATIENT_NAME[1] = Maya DSouzaINVOICES.PATIENT_NAME[2] = Omar PatelINVOICES.PATIENT_NAME[3] = Aisha MathewINVOICES.PATIENT_NAME[4] = Fatima VermaINVOICES.STATUS[0] = PARTIALINVOICES.STATUS[1] = OPENINVOICES.STATUS[2] = PARTIALINVOICES.STATUS[3] = OPENINVOICES.STATUS[4] = OPENINVOICES.TOTAL_AMOUNT[0] = 85.00INVOICES.TOTAL_AMOUNT[1] = 75.00INVOICES.TOTAL_AMOUNT[2] = 80.00INVOICES.TOTAL_AMOUNT[3] = 70.00INVOICES.TOTAL_AMOUNT[4] = 80.00INVOICE_LINES.DESCRIPTION[0] = Consultation - Dr. Maya WilsonINVOICE_LINES.LINE_NO[0] = 1INVOICE_LINES.QUANTITY[0] = 1INVOICE_LINES.UNIT_PRICE[0] = 85.00PAYMENTS.AMOUNT[0] = 42.50PAYMENTS.METHOD[0] = CashPAYMENTS.PAID_ON[0] = 24-SEP-2026 | |||
| 4 | open invoice | Click INVOICES.INVOICE_ID[1] | INVOICES.INVOICE_ID[1] | INVOICE_LINES.DESCRIPTION[0] = Consultation - Dr. Isha SaxenaINVOICE_LINES.DESCRIPTION[1] = Injection chargeINVOICE_LINES.LINE_NO[1] = 2INVOICE_LINES.QUANTITY[1] = 1INVOICE_LINES.UNIT_PRICE[0] = 45.00INVOICE_LINES.UNIT_PRICE[1] = 30.00PAYMENTS.PAID_ON[0] = <date> | |||
| 5 | Type PAYMENTS.AMOUNT[0] = 10 | PAYMENTS.AMOUNT[0] | PAYMENTS.AMOUNT[0] = 10 | ||||
| 6 | other invoice | Click INVOICES.INVOICE_ID[2] | FWindow/PushButton:Yes | PAYMENTS.AMOUNT[0] = 10.00 | Press Tab to move between choices, Return to select. | Do you want to save the changes you have made? | |
| 7 | do not save | Answer the alert No | INVOICES.INVOICE_ID[2] | INVOICE_LINES.DESCRIPTION[0] = Consultation - Dr. Arjun DSouzaINVOICE_LINES.UNIT_PRICE[0] = 80.00PAYMENTS.AMOUNT[0] = 40.00PAYMENTS.METHOD[0] = UPIPAYMENTS.PAID_ON[0] = 19-SEP-2026 |
Database effects
None: the scenario changes no row and draws no sequence value.
Classified diff against the migrated app
Diff: billing-unsaved counts: match 293, tolerated 92, waived 8, defect 0, unmapped 0, harness 0 generated-id pairs (source -> target): none waivers: C1 [proposed] Oracle's frame title before sign-in: applied to 2 value(s) C2 [proposed] The home page's collected-today gauge reads empty: applied to 6 value(s) C3 [proposed] Help > About names nobody: applied to 0 value(s) C4 [proposed] The home page forgets the user after File > Exit of a module: applied to 0 value(s) C5 [proposed] No item has the focus after a fetched record is refused: applied to 0 value(s) C6 [proposed] The second payment of billing-pay is lost: applied to 0 value(s) [tolerated] ui.values.HOME.CHECKED_IN rule=mask:today-counts x6 [tolerated] ui.values.HOME.OPEN_AMOUNT rule=text x6 [tolerated] ui.values.HOME.TODAY_TOTAL rule=mask:today-counts x6 [tolerated] ui.values.INVOICES.PAID rule=text x25 [tolerated] ui.values.INVOICES.TOTAL_AMOUNT rule=text x25 [tolerated] ui.values.INVOICE_LINES.UNIT_PRICE rule=text x8 [tolerated] ui.values.PAYMENTS.AMOUNT rule=text x3 [tolerated] ui.values.PAYMENTS.METHOD rule=text x10 [tolerated] ui.values.PAYMENTS.PAID_ON rule=mask:payment-date x3 [waived] ui.values.HOME.COLLECTED rule=waiver:C2 x6 step02.values.HOME.COLLECTED[0]: source '' | target '83' step03.values.HOME.COLLECTED[0]: source '' | target '83' step04.values.HOME.COLLECTED[0]: source '' | target '83' step05.values.HOME.COLLECTED[0]: source '' | target '83' step06.values.HOME.COLLECTED[0]: source '' | target '83' step07.values.HOME.COLLECTED[0]: source '' | target '83' [waived] ui.windows rule=waiver:C1 x2 step00.windows: source [["FRAME", "Oracle Fusion Middleware Forms Services"], ["MAIN_WIN",... | target [["FRAME", "CareWell Clinic"], ["MAIN_WIN", "CareWell Clinic - Sign... step01.windows: source [["FRAME", "Oracle Fusion Middleware Forms Services"], ["MAIN_WIN",... | target [["FRAME", "CareWell Clinic"], ["MAIN_WIN", "CareWell Clinic - Sign...
Waivers
| Id | Waiver | Values | Reason |
|---|---|---|---|
| C1 | Oracle's frame title before sign-in | 2 | Until CW_NAV.START_FORM sets the MDI title, the Forms frame shows the runtime's own title "Oracle Fusion Middleware Forms Services". The target's frame reads "CareWell Clinic" from the start: the web page is the clinic's application, not Oracle's runtime. From sign-in on, both show the same title. |
| C2 | The home page's collected-today gauge reads empty | 6 | HOME.COLLECTED is a display item drawn as a half gauge on the original canvas; the Forms client's component tree exposes no text for it, so the source records '' at every step. The target shows the amount REFRESH_HOME computes (the same query as the source), as a number with a bar. |







