FormsRefresh

CareWell clinic / appointments-double-booking

appointments-double-booking

Book Dr Kavya Pillai at 13:40 on 26 October 2026, when she already sees the patient from 13:30 to 14:00 (appointment 51140). WHEN-VALIDATE-RECORD runs CHECK_DOUBLE_BOOKING, which finds the overlap, shows the message and raises FORM_TRIGGER_FAILURE: nothing is saved.

0defects
838values match
28tolerated by policy
11waived
0unmapped

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.

#StepActionChecked on the original
0Open form cw_login
1Type CTL.USERNAME = ADMIN
2sign inClick CTL.SIGN_IN
3patientsClick HOME.PATIENTS
4appointmentsClick CTL.APPTS
5first rowClick APPOINTMENTS.APPT_START[0]
6new rowStep {"label": "new row", "menu": "RECORDS.INSERT"}
7departmentStep {"label": "department", "select": {"APPOINTMENTS.DEPT_ID[1]": "General Medicine"}}
8doctorList of values on APPOINTMENTS.DOCTOR_NAME[1], pick Doctor = Kavya Pillai
9Type APPOINTMENTS.APPT_START[1] = 26-OCT-2026 13:40
10saveClick Toolbar.Save

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

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 00-open
Migrated (.NET, PostgreSQL)

Step 1: type

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 01-type
Migrated (.NET, PostgreSQL)

Step 2: sign in

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 02-sign-in
Migrated (.NET, PostgreSQL)

Step 3: patients

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 03-patients
Migrated (.NET, PostgreSQL)

Step 4: appointments

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 04-appointments
Migrated (.NET, PostgreSQL)

Step 5: first row

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 05-first-row
Migrated (.NET, PostgreSQL)

Step 6: new row

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-new-row
Migrated (.NET, PostgreSQL)

Step 7: department

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-department
Migrated (.NET, PostgreSQL)

Step 8: doctor

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 08-doctor
Migrated (.NET, PostgreSQL)

Step 9: type

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 09-type
Migrated (.NET, PostgreSQL)

Step 10: save

no screenshot
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 10-save
Migrated (.NET, PostgreSQL)

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.

#StepAction (by name)Focus afterDisplayed values that changedMessage lineAlertExpect
0Open form cw_loginCTL.USERNAME[0]
1Type CTL.USERNAME = ADMINCTL.USERNAME[0]CTL.USERNAME[0] = ADMIN
2sign inClick CTL.SIGN_INHOME.SCHEDULE[0]HOME.CHECKED_IN[0] = <any>
HOME.OPEN_AMOUNT[0] = 15,015
HOME.OPEN_INVOICES[0] = 180
HOME.TODAY_TOTAL[0] = <any>
HOME.WELCOME[0] = Welcome, Clinic Administrator
3patientsClick HOME.PATIENTSPATIENTS.MRN[0]CTL.COUNTER[0] = Patient 1 of 240
PATIENTS.CITY[0] = Noida
PATIENTS.CITY[1] = Gurugram
PATIENTS.CITY[2] = Delhi
PATIENTS.CITY[3] = Bengaluru
PATIENTS.CITY[4] = Delhi
PATIENTS.CITY[5] = Pune
PATIENTS.CITY[6] = Hyderabad
PATIENTS.CITY[7] = Gurugram
PATIENTS.CITY[8] = Chennai
PATIENTS.FIRST_NAME[0] = Adam
PATIENTS.FIRST_NAME[1] = Meera
PATIENTS.FIRST_NAME[2] = Riya
PATIENTS.FIRST_NAME[3] = Samuel
PATIENTS.FIRST_NAME[4] = Sara
PATIENTS.FIRST_NAME[5] = Aisha
PATIENTS.FIRST_NAME[6] = Aisha
PATIENTS.FIRST_NAME[7] = Arjun
PATIENTS.FIRST_NAME[8] = David
PATIENTS.LAST_NAME[0] = Ali
PATIENTS.LAST_NAME[1] = Ali
PATIENTS.LAST_NAME[2] = Ali
PATIENTS.LAST_NAME[3] = Ali
PATIENTS.LAST_NAME[4] = Ali
PATIENTS.LAST_NAME[5] = Banerjee
PATIENTS.LAST_NAME[6] = Banerjee
PATIENTS.LAST_NAME[7] = Banerjee
PATIENTS.LAST_NAME[8] = Banerjee
PATIENTS.MRN[0] = CW100686
PATIENTS.MRN[1] = CW100791
PATIENTS.MRN[2] = CW100427
PATIENTS.MRN[3] = CW100014
PATIENTS.MRN[4] = CW100084
PATIENTS.MRN[5] = CW100350
PATIENTS.MRN[6] = CW100847
PATIENTS.MRN[7] = CW100966
PATIENTS.MRN[8] = CW101547
PATIENTS.PHONE[0] = +91 9714247138
PATIENTS.PHONE[1] = +91 9747265671
PATIENTS.PHONE[2] = +91 9319917758
PATIENTS.PHONE[3] = +91 9239366764
PATIENTS.PHONE[4] = +91 9231537636
PATIENTS.PHONE[5] = +91 9698396784
PATIENTS.PHONE[6] = +91 9078161038
PATIENTS.PHONE[7] = +91 9550902396
PATIENTS.PHONE[8] = +91 9732765917
PATIENTS.PLAN_ID[1] = 5
PATIENTS.PLAN_ID[3] = 6
PATIENTS.PLAN_ID[5] = 6
PATIENTS.PLAN_ID[8] = 1
4appointmentsClick CTL.APPTSAPPOINTMENTS.DEPT_ID[0]APPOINTMENTS.APPT_START[0] = 14-JAN-2026 09:30
APPOINTMENTS.APPT_START[1] = 30-JAN-2026 14:45
APPOINTMENTS.APPT_START[2] = 18-MAR-2026 09:30
APPOINTMENTS.APPT_START[3] = 24-MAR-2026 10:45
APPOINTMENTS.APPT_START[4] = 27-APR-2026 15:15
APPOINTMENTS.APPT_START[5] = 24-JUN-2026 15:15
APPOINTMENTS.DEPT_ID[0] = Cardiology
APPOINTMENTS.DEPT_ID[1] = Cardiology
APPOINTMENTS.DEPT_ID[2] = Cardiology
APPOINTMENTS.DEPT_ID[3] = Orthopedics
APPOINTMENTS.DEPT_ID[4] = Diagnostics
APPOINTMENTS.DEPT_ID[5] = General Medicine
APPOINTMENTS.DOCTOR_NAME[0] = Sophia Bose
APPOINTMENTS.DOCTOR_NAME[1] = Sara Nair
APPOINTMENTS.DOCTOR_NAME[2] = Sara Nair
APPOINTMENTS.DOCTOR_NAME[3] = Nikhil Mehta
APPOINTMENTS.DOCTOR_NAME[4] = Lina Verma
APPOINTMENTS.DOCTOR_NAME[5] = Maya Wilson
APPOINTMENTS.DURATION_MIN[0] = 30
APPOINTMENTS.DURATION_MIN[1] = 30
APPOINTMENTS.DURATION_MIN[2] = 30
APPOINTMENTS.DURATION_MIN[3] = 30
APPOINTMENTS.DURATION_MIN[4] = 30
APPOINTMENTS.DURATION_MIN[5] = 30
APPOINTMENTS.REASON[0] = Hypertension follow-up
APPOINTMENTS.REASON[1] = Chest pain
APPOINTMENTS.REASON[2] = Chest pain
APPOINTMENTS.REASON[3] = Shoulder stiffness
APPOINTMENTS.REASON[4] = Ultrasound
APPOINTMENTS.REASON[5] = Blood pressure review
APPOINTMENTS.STATUS[0] = No-show
APPOINTMENTS.STATUS[1] = Completed
APPOINTMENTS.STATUS[2] = Completed
APPOINTMENTS.STATUS[3] = Completed
APPOINTMENTS.STATUS[4] = No-show
APPOINTMENTS.STATUS[5] = Completed
CTL.PATIENT_NAME[0] = Adam Ali (CW100686)
5first rowClick APPOINTMENTS.APPT_START[0]APPOINTMENTS.APPT_START[0]
6new rowStep {"label": "new row", "menu": "RECORDS.INSERT"}APPOINTMENTS.DEPT_ID[1]APPOINTMENTS.APPT_START[2] = 30-JAN-2026 14:45
APPOINTMENTS.APPT_START[3] = 18-MAR-2026 09:30
APPOINTMENTS.APPT_START[4] = 24-MAR-2026 10:45
APPOINTMENTS.APPT_START[5] = 27-APR-2026 15:15
APPOINTMENTS.DEPT_ID[3] = Cardiology
APPOINTMENTS.DEPT_ID[4] = Orthopedics
APPOINTMENTS.DEPT_ID[5] = Diagnostics
APPOINTMENTS.DOCTOR_NAME[3] = Sara Nair
APPOINTMENTS.DOCTOR_NAME[4] = Nikhil Mehta
APPOINTMENTS.DOCTOR_NAME[5] = Lina Verma
APPOINTMENTS.DURATION_MIN[1] = 15
APPOINTMENTS.REASON[3] = Chest pain
APPOINTMENTS.REASON[4] = Shoulder stiffness
APPOINTMENTS.REASON[5] = Ultrasound
APPOINTMENTS.STATUS[1] = Booked
APPOINTMENTS.STATUS[4] = Completed
APPOINTMENTS.STATUS[5] = No-show
7departmentStep {"label": "department", "select": {"APPOINTMENTS.DEPT_ID[1]": "General Medicine"}}APPOINTMENTS.DEPT_ID[1]APPOINTMENTS.DEPT_ID[1] = General Medicine
8doctorList of values on APPOINTMENTS.DOCTOR_NAME[1], pick Doctor = Kavya PillaiAPPOINTMENTS.DOCTOR_NAME[1]APPOINTMENTS.DOCTOR_NAME[1] = Kavya Pillai
9Type APPOINTMENTS.APPT_START[1] = 26-OCT-2026 13:40APPOINTMENTS.APPT_START[1]APPOINTMENTS.APPT_START[1] = 26-OCT-2026 13:40
10saveClick Toolbar.SaveAPPOINTMENTS.DEPT_ID[1]Dr Kavya Pillai already has appointment 51140 at that time.

Database effects

None: the scenario changes no row and draws no sequence value.

Classified diff against the migrated app

Diff: appointments-double-booking
counts: match 838, tolerated 28, waived 11, 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 9 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.APPOINTMENTS.DEPT_ID  rule=text  x1
[tolerated] ui.values.HOME.CHECKED_IN  rule=mask:today-counts  x9
[tolerated] ui.values.HOME.OPEN_AMOUNT  rule=text  x9
[tolerated] ui.values.HOME.TODAY_TOTAL  rule=mask:today-counts  x9
[waived] ui.values.HOME.COLLECTED  rule=waiver:C2  x9
    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'
    step08.values.HOME.COLLECTED[0]: source '' | target '83'
    step09.values.HOME.COLLECTED[0]: source '' | target '83'
    step10.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

IdWaiverValuesReason
C1Oracle's frame title before sign-in2Until 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.
C2The home page's collected-today gauge reads empty9HOME.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.