# M5 coverage summary (generated by harness/coverage/report.py)

Exit check: **PASS**

| Module | Triggers | Program units | Covered | Unreachable | Blocked | Unclassified |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| MAIN_MENU | 7 | 0 | 7 | 0 | 0 | 0 |
| ORDERS | 14 | 3 | 17 | 0 | 0 | 0 |
| CATEGORIES_FORM | 9 | 0 | 9 | 0 | 0 | 0 |
| CUSTOMERS_FORM | 9 | 0 | 9 | 0 | 0 | 0 |
| EMPLOYEES_FORM | 9 | 0 | 9 | 0 | 0 | 0 |
| PRODUCT_FORM | 9 | 0 | 9 | 0 | 0 | 0 |
| **total** | 57 | 3 | 60 | 0 | 0 | 0 |

| Database object | Type | Blocks | Covered | Class |
| --- | --- | ---: | ---: | --- |
| TRG_CALC_ITEM_TOTAL | TRIGGER | 1 | 1 | covered |

| Item | Class | Scenarios / reason |
| --- | --- | --- |
| `MAIN_MENU/BLOCK7.PUSH_BUTTON11/WHEN-BUTTON-PRESSED` | covered | customers-browse |
| `MAIN_MENU/BLOCK7.ITEM12/WHEN-BUTTON-PRESSED` | covered | categories-browse |
| `MAIN_MENU/BLOCK7.ITEM13/WHEN-BUTTON-PRESSED` | covered | employees-browse |
| `MAIN_MENU/BLOCK7.ITEM14/WHEN-BUTTON-PRESSED` | covered | products-browse |
| `MAIN_MENU/BLOCK7.ITEM16/WHEN-BUTTON-PRESSED` | covered | main-menu-exit |
| `MAIN_MENU/BLOCK7.PUSH_BUTTON17/WHEN-BUTTON-PRESSED` | covered | main-menu-orders |
| `MAIN_MENU/WHEN-NEW-FORM-INSTANCE` | covered | categories-browse, customers-browse, employees-browse, main-menu-exit, main-menu-orders, products-browse |
| `ORDERS/ORDERS.NEXT_BTN/WHEN-BUTTON-PRESSED` | covered | orders-browse, orders-navigate-unsaved |
| `ORDERS/ORDERS.PRE_BTN/WHEN-BUTTON-PRESSED` | covered | orders-browse |
| `ORDERS/ORDERS.PUSH_BUTTON8/WHEN-BUTTON-PRESSED` | covered | orders-add-new |
| `ORDERS/ORDERS.PUSH_BUTTON9/WHEN-BUTTON-PRESSED` | covered | orders-delete-empty, orders-delete-refused |
| `ORDERS/ORDERS.PUSH_BUTTON10/WHEN-BUTTON-PRESSED` | covered | order-two-lines, orders-add-new, orders-save-fails |
| `ORDERS/ORDERS.PUSH_BUTTON14/WHEN-BUTTON-PRESSED` | covered | main-menu-orders |
| `ORDERS/ORDERS.ITEM15/WHEN-BUTTON-PRESSED` | covered | orders-browse |
| `ORDERS/ORDERS.ITEM16/WHEN-BUTTON-PRESSED` | covered | orders-browse, orders-delete-empty |
| `ORDERS/ORDERS/ON-POPULATE-DETAILS` | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/ORDERS/ON-CHECK-DELETE-MASTER` | covered | orders-delete-empty, orders-delete-refused |
| `ORDERS/ORDERS/PRE-INSERT` | covered | order-two-lines, orders-save-fails |
| `ORDERS/ORDER_ITEMS.QUANTITY/WHEN-VALIDATE-ITEM` | covered | order-two-lines, orders-navigate-unsaved, orders-save-fails |
| `ORDERS/unit:CHECK_PACKAGE_FAILURE` | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/unit:QUERY_MASTER_DETAILS` | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/ON-CLEAR-DETAILS` | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/PRE-FORM` | covered | main-menu-orders, order-two-lines, orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved, orders-save-fails |
| `CATEGORIES_FORM/CATEGORIES.NEXT_BTN/WHEN-BUTTON-PRESSED` | covered | categories-browse |
| `CATEGORIES_FORM/CATEGORIES.PRE_BTN/WHEN-BUTTON-PRESSED` | covered | categories-browse |
| `CATEGORIES_FORM/CATEGORIES.ADD_BTN/WHEN-BUTTON-PRESSED` | covered | categories-add-delete |
| `CATEGORIES_FORM/CATEGORIES.DELETE_BTN/WHEN-BUTTON-PRESSED` | covered | categories-add-delete |
| `CATEGORIES_FORM/CATEGORIES.SAVE_BTN/WHEN-BUTTON-PRESSED` | covered | categories-add-delete |
| `CATEGORIES_FORM/CATEGORIES.PUSH_BUTTON14/WHEN-BUTTON-PRESSED` | covered | categories-browse |
| `CATEGORIES_FORM/CATEGORIES.ITEM15/WHEN-BUTTON-PRESSED` | covered | categories-browse |
| `CATEGORIES_FORM/CATEGORIES.ITEM16/WHEN-BUTTON-PRESSED` | covered | categories-add-delete, categories-browse |
| `CATEGORIES_FORM/WHEN-NEW-FORM-INSTANCE` | covered | categories-add-delete, categories-browse |
| `CUSTOMERS_FORM/CUSTOMERS.NEXT_BTN/WHEN-BUTTON-PRESSED` | covered | customers-browse |
| `CUSTOMERS_FORM/CUSTOMERS.PRE_BTN/WHEN-BUTTON-PRESSED` | covered | customers-browse |
| `CUSTOMERS_FORM/CUSTOMERS.PUSH_BUTTON8/WHEN-BUTTON-PRESSED` | covered | customers-add-delete |
| `CUSTOMERS_FORM/CUSTOMERS.PUSH_BUTTON9/WHEN-BUTTON-PRESSED` | covered | customers-add-delete |
| `CUSTOMERS_FORM/CUSTOMERS.PUSH_BUTTON10/WHEN-BUTTON-PRESSED` | covered | customers-add-delete |
| `CUSTOMERS_FORM/CUSTOMERS.PUSH_BUTTON14/WHEN-BUTTON-PRESSED` | covered | customers-browse |
| `CUSTOMERS_FORM/CUSTOMERS.ITEM15/WHEN-BUTTON-PRESSED` | covered | customers-browse |
| `CUSTOMERS_FORM/CUSTOMERS.ITEM16/WHEN-BUTTON-PRESSED` | covered | customers-add-delete, customers-browse |
| `CUSTOMERS_FORM/WHEN-NEW-FORM-INSTANCE` | covered | customers-add-delete, customers-browse |
| `EMPLOYEES_FORM/EMPLOYEES.NEXT_BTN/WHEN-BUTTON-PRESSED` | covered | employees-browse |
| `EMPLOYEES_FORM/EMPLOYEES.PRE_BTN/WHEN-BUTTON-PRESSED` | covered | employees-browse |
| `EMPLOYEES_FORM/EMPLOYEES.ADD_BTN/WHEN-BUTTON-PRESSED` | covered | employees-add-delete |
| `EMPLOYEES_FORM/EMPLOYEES.DELETE_BTN/WHEN-BUTTON-PRESSED` | covered | employees-add-delete |
| `EMPLOYEES_FORM/EMPLOYEES.SAVE_BTN/WHEN-BUTTON-PRESSED` | covered | employees-add-delete |
| `EMPLOYEES_FORM/EMPLOYEES.PUSH_BUTTON6/WHEN-BUTTON-PRESSED` | covered | employees-browse |
| `EMPLOYEES_FORM/EMPLOYEES.ITEM15/WHEN-BUTTON-PRESSED` | covered | employees-browse |
| `EMPLOYEES_FORM/EMPLOYEES.ITEM16/WHEN-BUTTON-PRESSED` | covered | employees-add-delete, employees-browse |
| `EMPLOYEES_FORM/WHEN-NEW-FORM-INSTANCE` | covered | employees-add-delete, employees-browse |
| `PRODUCT_FORM/PRODUCTS.NEXT_BTN/WHEN-BUTTON-PRESSED` | covered | products-browse |
| `PRODUCT_FORM/PRODUCTS.PRE_BTN/WHEN-BUTTON-PRESSED` | covered | products-browse |
| `PRODUCT_FORM/PRODUCTS.ADD_BTN/WHEN-BUTTON-PRESSED` | covered | products-add-delete |
| `PRODUCT_FORM/PRODUCTS.DELETE_BTN/WHEN-BUTTON-PRESSED` | covered | products-add-delete |
| `PRODUCT_FORM/PRODUCTS.SAVE_BTN/WHEN-BUTTON-PRESSED` | covered | products-add-delete |
| `PRODUCT_FORM/PRODUCTS.PUSH_BUTTON11/WHEN-BUTTON-PRESSED` | covered | products-browse |
| `PRODUCT_FORM/PRODUCTS.ITEM15/WHEN-BUTTON-PRESSED` | covered | products-browse |
| `PRODUCT_FORM/PRODUCTS.ITEM16/WHEN-BUTTON-PRESSED` | covered | products-add-delete, products-browse |
| `PRODUCT_FORM/WHEN-NEW-FORM-INSTANCE` | covered | products-add-delete, products-browse |

| Trigger | Branch | Class | Scenarios / reason |
| --- | --- | --- | --- |
| `ORDERS/ORDERS.PUSH_BUTTON10/WHEN-BUTTON-PRESSED` | commit succeeded (FORM_SUCCESS TRUE) | covered | order-two-lines |
| `ORDERS/ORDERS.PUSH_BUTTON10/WHEN-BUTTON-PRESSED` | commit failed (FORM_SUCCESS FALSE) | covered | orders-add-new, orders-save-fails |
| `ORDERS/ORDERS/ON-CHECK-DELETE-MASTER` | detail rows exist, delete refused | covered | orders-delete-refused |
| `ORDERS/ORDERS/ON-CHECK-DELETE-MASTER` | no detail rows, delete goes ahead | covered | orders-delete-empty |
| `ORDERS/ORDERS/ON-POPULATE-DETAILS` | master record NEW or INSERT (or ORDER_ID null) - no detail query | covered | orders-add-new |
| `ORDERS/ORDERS/ON-POPULATE-DETAILS` | detail queried | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/ORDERS/ON-POPULATE-DETAILS` | cursor moved by the query, returned to the start item | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/ORDERS/ON-POPULATE-DETAILS` | cursor still on the start item after the query | unreachable | The relation is not deferred, so QUERY_MASTER_DETAILS always does GO_BLOCK('ORDER_ITEMS') and the cursor always leaves the master item it started on. |
| `ORDERS/unit:QUERY_MASTER_DETAILS` | relation not deferred - GO_BLOCK and EXECUTE_QUERY | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/unit:QUERY_MASTER_DETAILS` | relation deferred - SET_BLOCK_PROPERTY non-coordinated | unreachable | The only relation (ORDERS_ORDER_ITEMS) is not deferred and nothing changes that at run time. |
| `ORDERS/unit:QUERY_MASTER_DETAILS` | GO_BLOCK to the detail failed - exception handler | blocked | Needs GO_BLOCK('ORDER_ITEMS') to fail during master coordination. The block has no PRE-BLOCK, WHEN-NEW-BLOCK-INSTANCE or record-level validation that can refuse entry, and the master record was validated before coordination began; no input found that makes it fail. FRD would show it as CHECK_PACKAGE_FAILURE with FORM_SUCCESS FALSE. |
| `ORDERS/unit:CHECK_PACKAGE_FAILURE` | previous built-in succeeded | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/unit:CHECK_PACKAGE_FAILURE` | previous built-in failed - raise FORM_TRIGGER_FAILURE | blocked | Called after GO_BLOCK and GO_ITEM in the relation code. Needs one of those navigations to fail, the same condition as the QUERY_MASTER_DETAILS exception branch; no input found. |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | detail block NEW - nothing to clear | covered | orders-add-new, orders-browse, orders-delete-empty, orders-delete-refused, orders-navigate-unsaved |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | detail block queried - CLEAR_BLOCK(NO_VALIDATE), cursor returned | covered | orders-add-new, orders-browse, orders-delete-empty |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | changed block below the master found (First_Changed_Block_Below) | covered | orders-navigate-unsaved |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | changes - CLEAR_BLOCK(ASK_COMMIT), user discards or saves, detail cleared | covered | orders-navigate-unsaved |
| `ORDERS/unit:CLEAR_ALL_MASTER_DETAILS` | changes - CLEAR_BLOCK(ASK_COMMIT), user cancels, FORM_TRIGGER_FAILURE, cursor returned | covered | orders-navigate-unsaved |

| Scenario | Form | Named pass | FRD pass | 3 runs identical | 3 runs pass | Golden sha256 | Bytes | Items fired |
| --- | --- | --- | --- | --- | --- | --- | ---: | ---: |
| categories-add-delete | categories_form | True | True | True | True/True/True | `5e19749eb463e7b3` | 4532 | 5 |
| categories-browse | MAIN_MENU | True | True | True | True/True/True | `f9db749eba33f34a` | 4912 | 8 |
| customers-add-delete | customers_form | True | True | True | True/True/True | `525bc65880e99063` | 4767 | 5 |
| customers-browse | MAIN_MENU | True | True | True | True/True/True | `17b81bc092780186` | 5145 | 8 |
| employees-add-delete | employees_form | True | True | True | True/True/True | `3c482aac70cdbfa2` | 4921 | 5 |
| employees-browse | MAIN_MENU | True | True | True | True/True/True | `abca0e1f023866d5` | 5579 | 8 |
| main-menu-exit | MAIN_MENU | True | True | True | True/True/True | `4ac0c90d9c249813` | 947 | 2 |
| main-menu-orders | MAIN_MENU | True | True | True | True/True/True | `8f73f3f30a489bea` | 3318 | 4 |
| order-two-lines | ORDERS | True | True | True | True/True/True | `0e8c9fe0558c5264` | 32093 | 4 |
| orders-add-new | ORDERS | True | True | True | True/True/True | `e0c42fcedca1a2f1` | 18127 | 8 |
| orders-browse | ORDERS | True | True | True | True/True/True | `d8f2545c4d60a313` | 16078 | 10 |
| orders-delete-empty | ORDERS | True | True | True | True/True/True | `1328f625201f8ef3` | 11363 | 9 |
| orders-delete-refused | ORDERS | True | True | True | True/True/True | `287d593e426f65dd` | 11786 | 8 |
| orders-navigate-unsaved | ORDERS | True | True | True | True/True/True | `444414f782b37703` | 18969 | 8 |
| orders-save-fails | ORDERS | True | True | True | True/True/True | `7975bf88827ec50c` | 17855 | 4 |
| products-add-delete | product_form | True | True | True | True/True/True | `1b78cd10e0e1195d` | 6642 | 5 |
| products-browse | MAIN_MENU | True | True | True | True/True/True | `5af469cc51162123` | 5189 | 8 |
