Technical Analysis Report
Functional Overview
Form DEMO001 is the central operations screen for FastRoute Transport Ltd, a regional freight and passenger transport company. It gives dispatch supervisors a unified interface to manage the full trip lifecycle — from initial booking and driver/vehicle assignment through to invoice generation and payment collection.
The form is structured around a selected client (block B0) and operates across three main tabs: Dispatch (live trip creation), Fleet (vehicle and driver availability), and Billing (invoices and outstanding balances).
- Client & debt summary (B0): Loads client record from
TRN_CLIENTS. Displays outstanding balance viaTRN_BILLING_PKG.GET_OUTSTANDING, credit limit and contract tier. - Active trip monitor (DISPATCH_MONITOR): Read-only view of
TRN_ACTIVE_TRIPS_VWshowing all in-progress trips with driver, vehicle, route and estimated arrival. - Trip creation (B_DISPATCH): Creates new trips against
TRN_TRIPS. Validates driver licence viaTRN_DRIVER_PKG.CHK_LICENCE_VALID, vehicle availability viaTRN_FLEET_PKG.IS_VEHICLE_AVAILABLE, and auto-populates estimated distance and time fromTRN_ROUTE_PKG. - Fleet management (B_FLEET / B_DRIVERS): Displays vehicles from
TRN_VEHICLESand drivers fromTRN_DRIVERS. Highlights vehicles due for maintenance based on km threshold. - Invoice & billing (B_INVOICES): Lists invoices from
TRN_INVOICESper client. Fare is calculated byTRN_BILLING_PKG.CALC_TRIP_FAREand discount applied based on contract tier. - Route catalogue (B_ROUTES): Reference lookup from
TRN_ROUTES. Used byTRN_ROUTE_PKG.SUGGEST_ROUTEto auto-fill origin/destination pairs. - Tariff lookup:
TRN_TARIFFS_VWprovides per-km base rates, minimum charges and night surcharges by vehicle type and time band. - Client notification: Booking confirmations and delay alerts sent via
TRN_NOTIFY_PKGafter trip creation or status change. - Manual payment entry: When an outstanding payment amount requires collection, the form calls
DEMO002via CALL_FORM for cash/card transaction capture.
TRN_DISPATCH_PKG, TRN_BILLING_PKG, TRN_FLEET_PKG, TRN_DRIVER_PKG, TRN_ROUTE_PKG). The form is a pure UI layer with no direct DML — all writes pass through package procedures. Platform services (session sync, audit, screen guard) are handled by shared infrastructure packages.
Data Structure Analysis
2.1 Block Classification
| Block | Type | Source | Records | Purpose |
|---|---|---|---|---|
| B0 | Control | — | 1 | Client selector, session parameters, tab navigation buttons. |
| B_CLIENTS | DB · RO | TRN_CLIENTS | 1 | Selected client details and real-time debt summary. |
| DISPATCH_MONITOR | DB · RO | TRN_ACTIVE_TRIPS_VW | 10 | Live in-progress trip dashboard. Read-only. |
| B_DISPATCH | Control | — | 1 | New trip creation dialog: driver, vehicle, route, timing. |
| B_TRIPS | DB · R/W | TRN_TRIPS | 8 | Trip history for client. Close trip, view details. |
| B_DRIVERS | DB · RO | TRN_DRIVERS | 12 | Available driver list with licence and status info. |
| B_FLEET | DB · RO | TRN_VEHICLES | 12 | Active vehicle list, maintenance due indicator. |
| B_ROUTES | DB · RO | TRN_ROUTES | 15 | Route catalogue with distance and duration estimates. |
| B_INVOICES | DB · R/W | TRN_INVOICES | 10 | Client invoice list with payment status. Mark paid. |
| B_SUMMARY | Control | — | 1 | Session totals: trips today, revenue, outstanding. |
| B_NOTIF | Control | — | 1 | Notification dialog for delay/cancellation alerts. |
| KOT_OP | Control | TEMPLATE_OLB | 1 | System header: username, environment, system name. |
2.2 Key Reconstructed SQL
Block B_TRIPS reads directly from the base table with an inline function call for the status description:
SELECT TRIP_ID, CLIENT_ID, DRIVER_ID, VEHICLE_ID, ROUTE_SEQ, DEPART_TIME, ARRIVAL_TIME, TRN_DISPATCH_PKG.GET_TRIP_STATUS(TRIP_ID) STATUS_DESC, START_KM, END_KM, (END_KM - START_KM) DISTANCE, NOTES FROM TRN_TRIPS WHERE CLIENT_ID = :B0.CLIENT_ID ORDER BY DEPART_TIME DESC
Block DISPATCH_MONITOR queries the enriched view joining trips, drivers and vehicles:
SELECT TRIP_ID, DRIVER_FULL_NAME, PLATE_NO, VEHICLE_TYPE, ORIGIN_CODE, DEST_CODE, DEPART_TIME, EST_ARRIVAL, STATUS_DESC, EST_KM FROM TRN_ACTIVE_TRIPS_VW WHERE STATUS_CODE = 'IN_PROGRESS' ORDER BY DEPART_TIME
Block B_CLIENTS embeds a billing function call inline in SELECT:
SELECT CLIENT_ID, COMPANY_NAME, CONTACT_NAME, PHONE, CONTRACT_TIER, CREDIT_LIMIT, TRN_BILLING_PKG.GET_OUTSTANDING(CLIENT_ID) TOTAL_DEBT FROM TRN_CLIENTS ORDER BY COMPANY_NAME
Business Logic Analysis
3.1 Key Form Procedures
| Procedure | Business Role |
|---|---|
| CREATE_TRIP_PROC | Validates driver availability and licence, checks vehicle availability window, auto-fills route distance and ETA, creates the TRN_TRIPS record via TRN_DISPATCH_PKG.ASSIGN_DRIVER, then triggers confirmation via TRN_NOTIFY_PKG.SEND_TRIP_CONFIRM. |
| CLOSE_TRIP_PROC | Records end KM, calculates distance, calls TRN_DISPATCH_PKG.CLOSE_TRIP which sets status to CLOSED and triggers TRN_BILLING_PKG.CREATE_INVOICE for fare calculation and invoice generation. |
| CALC_FARE_PROC | Calls TRN_BILLING_PKG.CALC_TRIP_FARE with trip ID and tariff, applies contract-tier discount via APPLY_DISCOUNT, updates invoice NET_AMOUNT. |
| ASSIGN_DRIVER_PROC | Validates driver licence covers vehicle type, checks weekly hours compliance, confirms no overlapping active trips via TRN_DRIVER_PKG.CHK_DRIVER_AVAILABLE. |
| SCHEDULE_MAINT_PROC | Reads current km from TRN_VEHICLES, compares against last maintenance threshold, calls TRN_FLEET_PKG.SCHEDULE_MAINTENANCE if overdue. |
| DO_MANUAL_PAYMENT | Checks outstanding client balance; if positive, calls DEMO002 via CALL_FORM for payment capture. Updates TRN_INVOICES.STATUS_PAY on return. |
3.2 Trip Lifecycle
External Dependencies
4.1 PL/SQL Packages
| Package | Type | Key Calls | Role |
|---|---|---|---|
| TRN_DISPATCH_PKG | PACKAGE | CREATE_TRIP, GET_TRIP_STATUS, ASSIGN_DRIVER, CLOSE_TRIP, CHK_DRIVER_AVAILABLE | Core dispatch business logic: trip creation, driver assignment, route validation… |
| TRN_BILLING_PKG | PACKAGE | CALC_TRIP_FARE, CREATE_INVOICE, APPLY_DISCOUNT, GET_OUTSTANDING | Invoice generation, tariff calculation, payment collection and reconciliation ag… |
| TRN_FLEET_PKG | PACKAGE | IS_VEHICLE_AVAILABLE, SCHEDULE_MAINTENANCE, GET_FUEL_CONSUMPTION | Vehicle fleet management: availability checks, maintenance scheduling, fuel cons… |
| TRN_DRIVER_PKG | PACKAGE | GET_DRIVER_STATUS, CHK_LICENCE_VALID, CALC_HOURS_THIS_WEEK, RECORD_INCIDENT | Driver profile management: licence validation, working hours compliance, perform… |
| TRN_ROUTE_PKG | PACKAGE | GET_ROUTE_DISTANCE, GET_ESTIMATED_TIME, SUGGEST_ROUTE | Route planning and distance calculation. Integrates with external mapping servic… |
| TRN_NOTIFY_PKG | PACKAGE | SEND_TRIP_CONFIRM, SEND_DELAY_ALERT | Customer and driver notification engine: SMS alerts, email confirmations, delay … |
| PKG_FORM | PACKAGE | GET_SYNC, SET_CURSOR_SHARING_FORCE | Platform package: multi-form synchronisation and session-level cursor sharing.… |
| SCREEN_GUARD_PKG | PACKAGE | CHECK_SCREEN_ACTIVE | Screen availability guard: blocks form access during maintenance windows without… |
4.2 Tables, Views & Synonyms
| Object | Type | Points To | Description |
|---|---|---|---|
| TRN_TRIPS | TABLE | — | Master trip table. Each row is one dispatched trip with driver, vehicle, route, … |
| TRN_DRIVERS | TABLE | — | Driver master data: personal details, licence category, hire date, status and pe… |
| TRN_VEHICLES | TABLE | — | Vehicle fleet registry: plate, type, capacity, current km, last maintenance date… |
| TRN_CLIENTS | TABLE | — | Client company registry: contact details, contract tier, credit limit and outsta… |
| TRN_INVOICES | TABLE | — | Invoice records: one per trip, with calculated fare, discount applied, tax and p… |
| TRN_ROUTES | TABLE | — | Predefined route catalogue: origin, destination, waypoints, distance, typical du… |
| TRN_ACTIVE_TRIPS_VW | VIEW | TRN_ACTIVE_TRIPS_VW | Enriched view joining TRN_TRIPS with driver and vehicle details. Shows only in-p… |
| TRN_TARIFFS_VW | VIEW | TRN_TARIFFS_VW | Tariff lookup view: base rate per km, minimum charge, surcharges by vehicle type… |
| SYSDICT_CODES | SYNONYM | SYSDICT_CODES | Universal system dictionary table (keyed by CODE_TABLE). Used for status codes, … |
| SYSDICT_PROGRAMS | SYNONYM | SYSDICT_PROGRAMS | Form/program registry. Queried in BUILD_WINDOW_TITLE to retrieve the form displa… |
Summary
| Aspect | Assessment |
|---|---|
| Architecture | Clean package-per-domain separation: Dispatch, Billing, Fleet, Driver, Route each in their own package. Form is a pure UI layer — no direct DML. |
| Integration Points | External notification service (TRN_NOTIFY_PKG), sub-form DEMO002 for payment capture, system dictionary SYSDICT_CODES for all code lookups. |
| DML Surface | B_TRIPS (Update via package), B_INVOICES (Update payment status). All inserts go through package procedures. |
| Platform Services | PKG_FORM for multi-form sync, SCREEN_GUARD_PKG for maintenance lockout, WRITE_AUDIT_ENTRY for session compliance logging. |
| Extensibility | Route and tariff catalogues (TRN_ROUTES, TRN_TARIFFS_VW) are data-driven — new routes and pricing rules require no code changes. |
Raw Dependency Contexts
20 demo objects — code contexts with syntax highlighting. Object references highlighted in amber. In real reports, every context is extracted directly from your Oracle Forms source.
rec_trip trn_trips%ROWTYPE; v_status VARCHAR2(10) := TRN_DISPATCH_PKG.GET_TRIP_STATUS(:B_DISPATCH.TRIP_ID); BEGIN TRN_DISPATCH_PKG.ASSIGN_DRIVER( IN_DRIVER_ID => :B_DISPATCH.DRIVER_ID, IN_TRIP_ID => :B_DISPATCH.TRIP_ID, OUT_TAKIN => v_takin);
IF TRN_DISPATCH_PKG.CHK_DRIVER_AVAILABLE(:B0.DRIVER_ID) = 'N' THEN message_al('Driver is not available for this time slot'); RAISE FORM_TRIGGER_FAILURE; END IF;
TRN_DISPATCH_PKG.CLOSE_TRIP( IN_TRIP_ID => :B_TRIPS.TRIP_ID, IN_END_KM => :B_TRIPS.END_KM, OUT_DISTANCE => v_km_total);
v_fare := TRN_BILLING_PKG.CALC_TRIP_FARE( IN_TRIP_ID => :B_TRIPS.TRIP_ID, IN_TARIFF_SEQ => :B_TRIPS.TARIFF_SEQ); v_discount := TRN_BILLING_PKG.APPLY_DISCOUNT( IN_CLIENT_ID => :B0.CLIENT_ID, IN_AMOUNT => v_fare);
:B_CLIENTS.TOTAL_DEBT := TRN_BILLING_PKG.GET_OUTSTANDING( IN_CLIENT_ID => :B_CLIENTS.CLIENT_ID);
IF TRN_FLEET_PKG.IS_VEHICLE_AVAILABLE( IN_VEHICLE_ID => :B_DISPATCH.VEHICLE_ID, IN_FROM_DATE => :B_DISPATCH.DEPART_TIME, IN_TO_DATE => :B_DISPATCH.EST_RETURN) = 'N' THEN message_al('Vehicle already booked for this period'); RAISE FORM_TRIGGER_FAILURE; END IF;
IF TRN_DRIVER_PKG.CHK_LICENCE_VALID( IN_DRIVER_ID => :B_DISPATCH.DRIVER_ID, IN_VEHICLE_TYPE => :B_DISPATCH.VEHICLE_TYPE) = 'N' THEN message_al('Driver licence does not cover this vehicle type'); RAISE FORM_TRIGGER_FAILURE; END IF; v_hours := TRN_DRIVER_PKG.CALC_HOURS_THIS_WEEK(:B_DISPATCH.DRIVER_ID); IF v_hours > 40 THEN message_al('Driver exceeds weekly hours limit'); END IF;
:B_DISPATCH.EST_KM := TRN_ROUTE_PKG.GET_ROUTE_DISTANCE( IN_FROM_LOC => :B_DISPATCH.ORIGIN_CODE, IN_TO_LOC => :B_DISPATCH.DEST_CODE); :B_DISPATCH.EST_MINS := TRN_ROUTE_PKG.GET_ESTIMATED_TIME( IN_ROUTE_SEQ => :B_DISPATCH.ROUTE_SEQ, IN_DEPART_DT => :B_DISPATCH.DEPART_TIME);
TRN_NOTIFY_PKG.SEND_TRIP_CONFIRM( IN_TRIP_ID => v_new_trip_id, IN_CLIENT_ID => :B0.CLIENT_ID);
PKG_FORM.SET_CURSOR_SHARING_FORCE; IF PKG_FORM.GET_SYNC = 'Y' THEN REFRESH_FORM; END IF;
IF SCREEN_GUARD_PKG.CHECK_SCREEN_ACTIVE(:SYSTEM.CURRENT_FORM) = 'N' THEN message_al('System is under maintenance. Please try again later.'); RAISE FORM_TRIGGER_FAILURE; END IF;
SELECT TRIP_ID, CLIENT_ID, DRIVER_ID, VEHICLE_ID, ROUTE_SEQ, DEPART_TIME, ARRIVAL_TIME, STATUS_CODE, START_KM, END_KM, (END_KM - START_KM) DISTANCE, TRN_DISPATCH_PKG.GET_TRIP_STATUS(TRIP_ID) STATUS_DESC, NOTES FROM TRN_TRIPS ORDER BY DEPART_TIME DESC
rec_trip TRN_TRIPS%ROWTYPE; SELECT * INTO rec_trip FROM TRN_TRIPS WHERE TRIP_ID = :B_TRIPS.TRIP_ID; rec_trip.STATUS_CODE := 'CLOSED'; rec_trip.ARRIVAL_TIME := SYSDATE; rec_trip.END_KM := :B_TRIPS.END_KM; TRN_DISPATCH_PKG.CLOSE_TRIP(rec_trip, v_ok);
SELECT DRIVER_ID, FULL_NAME, LICENCE_NO, LICENCE_CATEGORY, LICENCE_EXPIRY, STATUS_CODE, HIRE_DATE, PERF_SCORE FROM TRN_DRIVERS WHERE STATUS_CODE != 'TERMINATED' ORDER BY FULL_NAME
v_lic_cat TRN_DRIVERS.LICENCE_CATEGORY%TYPE; SELECT LICENCE_CATEGORY INTO v_lic_cat FROM TRN_DRIVERS WHERE DRIVER_ID = :B_DISPATCH.DRIVER_ID;
SELECT VEHICLE_ID, PLATE_NO, VEHICLE_TYPE, CAPACITY_KG, CURRENT_KM, LAST_MAINT_DATE, FUEL_TYPE, STATUS_CODE FROM TRN_VEHICLES WHERE STATUS_CODE = 'ACTIVE' ORDER BY PLATE_NO
v_km TRN_VEHICLES.CURRENT_KM%TYPE; SELECT CURRENT_KM INTO v_km FROM TRN_VEHICLES WHERE VEHICLE_ID = :B_FLEET.VEHICLE_ID; IF v_km - v_last_maint_km > 10000 THEN TRN_FLEET_PKG.SCHEDULE_MAINTENANCE(:B_FLEET.VEHICLE_ID); END IF;
SELECT CLIENT_ID, COMPANY_NAME, CONTACT_NAME, PHONE, CONTRACT_TIER, CREDIT_LIMIT, TRN_BILLING_PKG.GET_OUTSTANDING(CLIENT_ID) TOTAL_DEBT FROM TRN_CLIENTS ORDER BY COMPANY_NAME
SELECT INV_SEQ, TRIP_ID, CLIENT_ID, INV_DATE, GROSS_AMOUNT, DISCOUNT_AMOUNT, TAX_AMOUNT, NET_AMOUNT, STATUS_PAY, DUE_DATE FROM TRN_INVOICES WHERE CLIENT_ID = :B0.CLIENT_ID ORDER BY INV_DATE DESC
rec_inv TRN_INVOICES%ROWTYPE;
rec_inv.TRIP_ID := :B_TRIPS.TRIP_ID;
rec_inv.GROSS_AMOUNT := v_fare;
rec_inv.DISCOUNT_AMOUNT:= v_discount;
TRN_BILLING_PKG.CREATE_INVOICE(rec_inv, v_ok);SELECT ROUTE_SEQ, ROUTE_CODE, ORIGIN_CODE, DEST_CODE, DISTANCE_KM, AVG_DURATION_MIN, TARIFF_SEQ, ACTIVE_IND FROM TRN_ROUTES WHERE ACTIVE_IND = 'Y' ORDER BY ROUTE_CODE
v_route TRN_ROUTES.ROUTE_SEQ%TYPE;
v_route := TRN_ROUTE_PKG.SUGGEST_ROUTE(
IN_ORIGIN => :B_DISPATCH.ORIGIN_CODE,
IN_DEST => :B_DISPATCH.DEST_CODE);
:B_DISPATCH.ROUTE_SEQ := v_route;SELECT TRIP_ID, DRIVER_FULL_NAME, PLATE_NO, VEHICLE_TYPE, ORIGIN_CODE, DEST_CODE, DEPART_TIME, EST_ARRIVAL, STATUS_DESC, EST_KM FROM TRN_ACTIVE_TRIPS_VW WHERE STATUS_CODE = 'IN_PROGRESS' ORDER BY DEPART_TIME
SELECT BASE_RATE_PER_KM, MIN_CHARGE, NIGHT_SURCHARGE INTO v_rate, v_min, v_night FROM TRN_TARIFFS_VW WHERE TARIFF_SEQ = :B_DISPATCH.TARIFF_SEQ AND VEHICLE_TYPE = :B_DISPATCH.VEHICLE_TYPE AND SYSDATE BETWEEN VALID_FROM AND NVL(VALID_TO, SYSDATE);
SELECT CODE, DESCRIPTION FROM SYSDICT_CODES WHERE CODE_TABLE = 'TRIP_STATUS' ORDER BY SORT_ORDER
SELECT CODE, DESCRIPTION, SADE_3 LICENCE_REQUIRED FROM SYSDICT_CODES WHERE CODE_TABLE = 'VEHICLE_TYPE' ORDER BY CODE
MSG_P SYSDICT_CODES.DESCRIPTION%TYPE; CODE_P SYSDICT_CODES.CODE%TYPE; SELECT DESCRIPTION INTO MSG_P FROM SYSDICT_CODES WHERE CODE_TABLE = 'ERROR_CODES' AND CODE = IN_CODE;
SELECT NVL(PROGRAM_TITLE, 'Screen') INTO v_title FROM SYSDICT_PROGRAMS WHERE PROGRAM_CODE = :SYSTEM.CURRENT_FORM;
WRITE_AUDIT_ENTRY( IN_USER => USER, IN_VMS_USER => :KOT_OP.VMS_USERNAME_OP, IN_FORM => :SYSTEM.CURRENT_FORM, IN_ACTION => 'OPEN');
IF v_outstanding_amount > 0 THEN CALL_FORM('DEMO002'); END IF;