---
# System prepended metadata

title: Simple Resscheduling Flow

---

# Simple Resscheduling Flow
```flow
invoke=>start: Start Reschedule
op=>operation: Can Dates Be Provided?
cond=>condition: Yes or No?
iocondition=>doRescheduleWithDate: Query Dates
doPendingReschedule=>end: Do Pending Reschedule
doRescheduleWithDate=>end: Do Reschedule with Date


invoke->op->cond
cond(yes)->doRescheduleWithDate
cond(no)->doPendingReschedule
```
The rescheduling implmentation can be simplified and limited to determining if there is a date that can be selected. If not, perform a pending reschedule. If a date can be selected then perform a reschedule for a specificly selected available date.




# Implementation of Resscheduling Flow
```flow
invoke=>start: Start Reschedule
op=>operation: Connectivity Available?
yesNo=>condition: Yes or No?
datesAvailable=>condition: Dates Available?
dateSelected=>condition: Dates Selected?
io=>doRescheduleWithDate: Query Dates
doPendingReschedule=>end: Do Pending Reschedule
doRescheduleWithDate=>operation: Do Reschedule with Date
lookupDates=>inputoutput: GET Available Dates
performDatedReschedule=>inputoutput: POST Dated Reschedule
rescheduleComplete=>end: Reschedule Complete


invoke->op->yesNo
yesNo(no)->doPendingReschedule
yesNo(yes)->doRescheduleWithDate
doRescheduleWithDate->lookupDates->datesAvailable
datesAvailable(no)->doPendingReschedule
datesAvailable(yes)->dateSelected
dateSelected(no)->doPendingReschedule
dateSelected(yes)->performDatedReschedule->rescheduleComplete
```

# Reschedule with Date *(Date Available and Selected)*
### Mobile App Process I: Consumer Selects Specific Date
```mermaid
sequenceDiagram
Consumer ->> Technician/App: I need to reschedule
Technician/App ->> Server: GET /ato/{atoReference}/reschedule/availability
activate Server
Server -->> Technician/App: Response Get Availability [date1,date2]
Note right of Server: The API<br/>queries scheduling<br/>availability.<br/>Returns array of dates
deactivate Server
Technician/App ->> Consumer: Pick select date1 or date2
activate Consumer
Consumer ->> Technician/App: I would like to pick date1 
deactivate Consumer
Technician/App ->> Server: POST /ato/reschedule/{atoReference}/{selectedDate}
activate Server
Server -->> Technician/App: Return HTTP 200 OK
Note right of Server: The API<br/>sets ATO to new<br>scheduling date.
deactivate Server
Note right of Technician/App: The app should<br/>refresh allow Tech<br/>to comment and skip <br/>that stop.
```
### ATO ERP Reschedule (Reschedule Date) Behavior
_In the case of a Rescheduling Order with a Selected Reschedule Date_
 - In ***sched*** table (original ***sched*** date record):
	- The original `sched.total_sched` record is decremented to return the available to that ***sched*** representation that the order was originally a part of
 - In ***sched*** table context for the **new** scheduling record (new ***sched*** date related record):
	- The new `sched.total_sched` record is incremented to reduce availability in the new ***sched*** representation of the new date
 - In ***orderMaster***
	- `orderMaster.dateScheduled` date is removed and converted to the newly selected schedule date
	- `orderMaster.scheduleLater` is changed from either 0/1 to 0
	- `orderMaster.status toggles` from Any to Active
	- `orderMaster.callType` toggles from any to 20 (note this does not happen in pending ops)
 - For each in ***orderDetail***:
	- `orderDetail.dateScheduled` is covered from previous date to new date
	- `orderDetail.scheduleLater` toggles from any to 0
	- `orderDetail.callType` toggles from any to 20 (note this does not happen in pending ops)
 - New record is inserted into reschedule with following values:
	- `reschedule.businessType` copied from OM
	- `reschedule.orderNumber` is copied from OM
	- `reschedule.oldDateScheduled`, previous value of `orderMaster.dateScheduled` is entered in this field
	- `reschedule.newDateScheduled` is entered as new date value
	- `reschedule.dateChanged` current date and time the reschedule was expedited by the operator
	- `reschedule.operator` the id of the ATO user making the reschedule
	- `reschedule.reason` is entered which is selected from the dropdown/select list of reschedule reasons
	- `reschedule.comments` is entered from a comment field presented to the ATO user during reschedule operation
 - Followup Server-Side Actions
	- If selected/before e-mail update occurs and the consumer elected to receive an e-mail confirmation of the change to a dated reschedule (if that checkbox is marked) ATO generates an e-mail to the consumer’s e-mail address informing them of the reschedule
 - Future implementations will also need to support SMS text message gateways SaaS services

---
# Reschedule Process Diagram: Pending Reschedule
**Business Knowledge/Definition of a Pending Reschedule**
When an order is set to a pending reschedule. The order is changed and no longer has a specific scheduled date. In this case the order is marked as pending and requiring rescheduling.

**Downstream Rescheduling Process**
 - The order is placed in to a queue for ARCA customer service department to investigate; 
 - If ARCA does not have scheduling availability ARCA Operations Dispatch will be tasked to add capacity to scheduling availability;
 - ARCA's call center/customer service then make an outbound call to the consumer to negotiate and confirm a firm scheduling date;
  -  Customer service will perform a reschedule of that order, setting it for a specific date.

### Mobile App Process II.A:  Reschedule Process Diagram: Set as Pending Reschedule
```mermaid
sequenceDiagram
Consumer ->> Technician/App: I need to reschedule
Technician/App ->> Server: GET /ato/{atoReference}/reschedule/availability
activate Server
Server -->> Technician/App: Response Get Availability [date1,date2]
Note right of Server: The API<br/>queries scheduling<br/>availability.<br/>Returns array of dates
deactivate Server
Technician/App ->> Consumer: Pick select date1 or date2
activate Consumer
Consumer ->> Technician/App: NONE OF THESE DATES ARE ACCEPTABLE 
deactivate Consumer
Technician/App ->> Server: POST /ato/reschedule/{atoReference}/
activate Server
Server -->> Technician/App: Return HTTP 200 OK
Note right of Server: The API<br/>sets ATO to a status<br>Pending Reschedule.
deactivate Server
Note right of Technician/App: The app should<br/>refresh allow Tech<br/>to comment and skip <br/>that stop.
```
In this case connectivity is available however the consumer either cannot agree to the provided dates, communication may not be available with the consumer (in the case of a consumer not home), or the consumer is not available to commit to any of the available/offered rescheduling dates.


### Mobile App Process II.B:  Reschedule Process Diagram: Set as Pending Reschedule Due to Lack of Connectivity
```mermaid
sequenceDiagram
Consumer ->> Technician/App: I need to reschedule
Technician/App ->> Server: GET /ato/{atoReference}/reschedule/availability
activate Server
Server -->> Technician/App: Connection Cannot be Established
Note right of Server: The API is<br/>unavailable to query<br/>scheduling availability.
Technician/App ->> Consumer: Connect to dispatch, customer service will call you
Technician/App ->> Server: POST /ato/reschedule/{atoReference}/
activate Server
Server -->> Technician/App: Request Tolled
Note right of Server: When connectivity<br/>with the API can<br/>be restablished<br/>the App will POST<br/>to the pending<br/>reschedule endpoint
deactivate Server
```
In this case connectivity cannot be established and the device will cache the reqeust until connection can be re-established, then the request will be sent to POST pending reschedule.

### ATO ERP Reschedule (Pending Reschedule) Behavior 
In the case of a Scheduled Order to a Pending-Reschedule 
When a reschedule date is unavailable, consumer cannot commit to a date, communication cannot be established with consumer, communications failure between mobile device and API, bad weather:
 - In ***sched*** table (or ***lowIncomeSched*** table for 500 series programs)
	 - The original sched.total_sched record is decremented to return the available to that  ***sched*** representation that the order was originally a part of 
 - In ***orderMaster*** table
	 - `orderMaster.dateScheduled` date is removed and converted to NULL
	 - `orderMaster.scheduleLater` is changed from 0 to 1 
	 - `orderMaster.status` toggles from Active to Hold 
- For each in ***orderDetail***:
	- `orderDetail.dateScheduled` is covered from a date to a null
	- `orderDetail.scheduleLater` toggles from 0 to 1 
- New record is inserted into ***reschedule*** 
	- `reschedule.businessType` copied from OM
	- `reschedule.orderNumber` is copied from OM `reschedule.oldDateScheduled`, previous value of `om.dateScheduled` is entered in this field
	- `reschedule.newDateScheduled` is entered as a NULL value
	- `reschedule.dateChanged` current date and time the reschedule was expedited by the operator 
	- `reschedule.operator` the id of the ato user making the reschedule 
	- `reschedule.reason` is entered which is selected from the dropdown/select list of reschedule reasons
	- `reschedule.comments` is entered from a comment field presented to the ATO user during reschedule operation 
- Followup Server-Side Actions
	- If selected/before e-mail update occurs and the consumer elected to receive an e-mail confirmation of the change to a pending reschedule (if that checkbox is marked) ATO generates an e-mail to the consumer’s e-mail address informing them of the reschedule 
- Future implementations will also need to support SMS text message gateways SaaS services

#### Downstream ERP Processes Affected by Reschedule (Pending Reschedule) Behavior 
 - Operations: 
	 - Dispatching
	 - Scheduling and Capacity Management
 - Executive & Client Services:
	 - Customer Complaint Reporting
	 - Customer Complaint and Issue Impact Mitigation
	 - Key Performance Indicator (KPI) Reporting
 - Institutional Utility Customer Owned Customer Service Operations
	 - ETL
	 - Web Portal
 - ARCA Las Vegas Customer Service: 
	 - CRM & Java ATO
	 - Reschedule Task Queue
	 - Telephony Integration (five9 live agent autodialer integration)
 - Autodialer Nuance Processes, Autodialer VRU Automated Rescheduling Operations and Chron/ETL

---
Edit Note Flowchart Documentation: http://flowchart.js.org/
Example Implementation: https://github.com/adrai/flowchart.js/blob/master/example/index.html

```flow
st=>start: Start|past:>http://www.google.com[blank]
e=>end: End:>http://www.google.com
op1=>operation: My Operation|past
op2=>operation: Stuff|current
sub1=>subroutine: My Subroutine|invalid
cond=>condition: Yes
or No?|approved:>http://www.google.com
c2=>condition: Good idea|rejected
io=>inputoutput: catch something...|request
para=>parallel: parallel tasks

st->op1(right)->cond
cond(yes, right)->c2
cond(no)->para
c2(true)->io->e
c2(false)->e

para(path1, bottom)->sub1(left)->op1
para(path2, right)->op2->e

st@>op1({"stroke":"Red"})@>cond({"stroke":"Red","stroke-width":6,"arrow-end":"classic-wide-long"})@>c2({"stroke":"Red"})@>op2({"stroke":"Red"})@>e({"stroke":"Red"})
```