Website Enhancements
- Parts Prediction Triage Integration Enhancement
Improvements to the Parts Prediction workflow and triage integration. - Asynchronous Invoice Notification Processing
Enhanced invoice notification processing to improve system responsiveness and reliability. - Save & Add New Job Button Position Updated
Improved the placement of the Save & Add New Job button for a smoother job creation experience. - Customer Page Search – First Loading Enhancement
Improved the initial loading experience when searching from the Customer page. - Send Invoice – Attach Content Enhancement
Enhanced the Send Invoice workflow with improvements to attached content. - Service and Item Description – Expand/Collapse Enhancement
Added an easier way to expand and collapse Service and Item descriptions for improved readability. - All Estimates – Open Estimate in New Tab
Estimates can now be opened in a new browser tab, making it easier to review multiple estimates without losing your place. - Show in Schedule – Job Visibility Enhancement
Improved the Show in Schedule functionality for better job visibility and scheduling workflows. - Core Charge and Core Part Management
Added enhancements for managing core charges and core parts. - Purchase Order From POS
Added functionality supporting Purchase Order creation from POS. - Automated Messages Removed From Inbox
Automated system messages are now excluded from the Inbox, helping keep customer communications cleaner and easier to manage. - Marcone SSB for Purchase Orders
Added support for Marcone SSB within the Purchase Order workflow.
Integration Enhancements
- Quo Integration – Integrated Text Messaging Enhancement
Enhanced integrated text messaging functionality with Quo. - Warranty Flag Added to LG Dispatch Ticket Details
LG dispatch tickets now include a warranty flag for improved visibility. - AHS DispatchMe Mapping
Enhanced mapping support for AHS DispatchMe integrations. - Comprehensive Data Mapping & Integration Specification
Improved data mapping and integration specifications to support more reliable integration workflows. - Duplicate Customer Handling for Auto-Accept Dispatch Jobs
Improved duplicate customer handling when dispatch jobs are automatically accepted.
Mobile App Enhancements
- Mobile App Role Switching Enhancement
Improved role switching within the ServiceWorks mobile app. - Explanation of Service (EOS) Added to Route Page Notes
Added Explanation of Service (EOS) information within the Route page Notes section for easier technician access. - Return Purchase Order Option in the Mobile App
Added the ability to work with Return POs directly from the mobile app. - Enhanced Parts Pick List Scan Pop-Up
Improved the Parts Pick List scanning pop-up for a smoother mobile parts workflow. - Core Part Creation and Distributor Return
Added mobile functionality supporting core part creation and distributor returns.
Website Enhancements
- Parts Prediction Triage Integration Enhancement
‘Most Used Parts’ changed to ‘Parts Triage’
The functionality of Most Used Parts has been enhanced to provide direct access to Parts Prediction Triage in Service Panda.
- Most Used Parts button label has been changed to Parts Triage.
- Clicking Parts Triage will begin the analysing process. Once analysis is done the button will change to “View Triage” and when clicked opens the Parts Prediction Triage page in Service Panda in a new browser tab.
- The Parts Prediction Triage page displays suggested parts along with their corresponding prediction percentages.


- Asynchronous Invoice Notification Processing
A new Asynchronous Invoice Notification Process has been introduced to improve the reliability and performance of invoice notifications. Invoice notifications are now queued and processed asynchronously, allowing invoice generation to continue without being blocked by notification processing.
- Asynchronous Notification Processing: Eligible invoice notifications are queued and processed in the background without impacting invoice generation.
- Notification Queue Management: Notification statuses such as Pending, Sent, and Failed are tracked and stored correctly for monitoring and processing.
- Consistent Processing: The same notification mechanism is used when sending invoices from the Job page, Invoice page, and All Jobs page.
- Multiple Notifications: Multiple invoice notifications can be queued and processed successfully without blocking other invoice operations.
- Template Validation: Only active notification templates are used. If a required template is inactive, an appropriate validation message is displayed.
- Notification Type Control: Notifications are sent only for the enabled notification types—Email, SMS, or Robocall—configured in the Job Type template. Disabled notification types are not processed or retried.
- Email Body Handling: If the custom email body is blank, the system uses the Invoice Template body. When a custom email body is provided, it takes precedence.



- Blank Template Validation: Notifications are not sent when the applicable template body is blank. The system logs the reason for the skipped notification.
- Invoice Content and Attachments: Relevant invoice information, including content, attached documents, and forms, is included correctly with the notification.
- Failure Handling: Failed notifications are logged independently so that a failure does not affect the processing of other notifications.
- SMTP Error Handling: Incorrect SMTP credentials generate the appropriate error log, and failed email notifications are not automatically retried by the process.
- Job-Level Email Logging: Both successfully sent and failed email notifications are logged on the corresponding Job for better visibility and tracking.

- Duplicate Prevention: Only unsent notifications are processed. Successfully sent notifications are marked accordingly to prevent duplicate notifications.
- 24-Hour Notification Logic: The notification process respects the 24-hour notification status window and prevents expired notifications from being processed again.


- Save & Add New Job Button Position changed
The Save & Add New Job button has been repositioned within the Create New Job interface to improve its placement, alignment, and accessibility while maintaining the existing job creation workflow.
- The Save & Add New Job button is now displayed in its new position with proper alignment and no UI issues. Both Save Job and Save & Add New Job buttons remain fully functional after the position change.
- The Save & Add New Job button is accessible and clickable across different screen resolutions and browser zoom levels.
- The existing Create New Job workflow remains unaffected by the UI enhancement.

- Customers Page Search-First Loading Enhancement
The Customers page has been enhanced to improve initial page-load performance and provide a more controlled search experience. Customer records are no longer loaded automatically when the page is opened. Users can retrieve customer records by performing a search.

- Empty Initial Grid: The customer grid remains empty when the Customers page is opened for the first time.
- Search to Load Records: Customer records are loaded when the user clicks Search, even without entering specific search criteria.
- Search Criteria: Users can enter valid search criteria and click Search to retrieve the corresponding customer records.
- Customer Summary Counts: Customer summary counts, including All Customers, Converted/Qualified, and Open, are displayed correctly on the initial page load even when the customer grid is empty.
- Clear Search: Clicking Clear removes all applied search criteria and returns the customer grid to its default empty state.
- Refresh Behavior: Refreshing the Customers page does not automatically load customer records. Records remain hidden until a search is performed.
- Grid Functionality: Existing sorting, pagination, export, and bulk actions continue to function correctly when customer records are displayed.
- Send Invoice – Attach Contents Enhancement
The Send Invoice functionality has been enhanced with a new Select Content File pop-up, providing users with an improved way to view and select attachments before sending invoice emails.
- Attachment Thumbnails: The Select Content File pop-up now displays thumbnails correctly for supported file types.
- Accessible from Multiple Pages: Clicking Send Invoice Email from the All Jobs page, Edit Job page, or Invoice page opens the new Select Content File pop-up.
- Multiple Attachments: Users can select multiple contents to include with the invoice email and a scrollbar is displayed when multiple attachments are available, allowing users to easily view and select available content.

- Selection Persistence: Previously selected contents remain automatically selected when the Select Content File pop-up is reopened.
- Successful Email Delivery: Invoice emails are sent successfully after attachments are selected from the new pop-up.

- Existing Functionality: The existing invoice email functionality continues to work as expected.
- Service and Item Description – Expand/Collapse Enhancement
The Service Description and Item Description fields on the New Job and Edit Job pages have been enhanced with an automatic expand/collapse behavior, making it easier for users to view and edit longer descriptions.
- Automatic Expansion: Clicking inside the Service Description or Item Description field automatically expands the field for easier editing.
- Cursor Placement: When the field expands, the cursor is automatically positioned at the end of the existing text, allowing users to continue editing immediately.

- Improved Content Visibility: The expanded field displays the complete description clearly without unnecessary blank space or layout issues.

- Automatic Collapse: The field returns to its normal size when the user clicks outside the field.
- Data Persistence: Updated Service Description and Item Description values are saved successfully and displayed correctly when the job is reopened.
- Content Flexibility: The expand/collapse behavior works correctly for empty, short, long, and multi-line descriptions.
- All Estimations – Open Estimate in New Tab Enhancement
The All Estimations page has been enhanced to allow users to open estimates in a separate browser tab without interrupting their current search or navigation context.
- Open Estimate in New Tab: Clicking an estimate opens the selected estimate in a new browser tab.
- Three-Dot Menu: Selecting Details from the three-dot menu also opens the selected estimate in a new browser tab.
- All Estimations Page Preserved: The original All Estimations tab remains unchanged after opening an estimate.
- Accurate Estimate Details: The new tab displays the correct details for the selected estimate.
- Search Criteria Retained: Any search criteria applied on the All Estimations page remain intact after opening an estimate.
- Multiple Estimates: Users can open multiple estimates in separate browser tabs for convenient comparison and review.
- Show in Schedule – Job Visibility Enhancement
The Show in Schedule functionality has been enhanced to provide consistent control over job visibility across the Schedule Board, Route Sheet, and Mobile App. The enhancement also introduces automatic checkbox handling when jobs transition to Scheduled status.

- Default Setting: The Show in Schedule checkbox is enabled by default for existing jobs, newly created jobs, and jobs received from dispatch sources.
- Schedule Board Visibility: Jobs with the checkbox enabled and an eligible status are displayed on the Schedule Board. Jobs with the checkbox disabled remain hidden.
- Status-Based Visibility: Jobs in Ready to be Reschedule or On Hold status do not appear on the Schedule Board, regardless of the checkbox state.
- Bucket Functionality: Existing Schedule Board bucket functionality remains unchanged and continues to work independently of the checkbox.
- PO Item Receipt: When a required PO item is received and a job returns to Scheduled status:
- Jobs with the checkbox enabled remain enabled and appear on the Schedule Board.
- Jobs with the checkbox disabled are automatically enabled and displayed on the Schedule Board.
- Rescheduling: When a Ready to be Reschedule job is dragged or processed using Save and Assign, it moves to Scheduled and becomes visible on the Schedule Board. If the checkbox was disabled, it is automatically enabled.
- On Hold Jobs: When an On Hold job is dragged or processed using Save and Assign, it moves to Scheduled without creating a new trip. If the checkbox is disabled, it is automatically enabled and the job appears on the Schedule Board.
- Scheduled Status: When a job with Show in Schedule unchecked is changed to Scheduled, the checkbox is automatically enabled and the job becomes visible on the Schedule Board.
- Website Visibility: Jobs with the checkbox disabled are excluded from the Route Sheet and all applicable Schedule Board views.
- Mobile App Visibility: Jobs with the checkbox disabled are excluded from the Mobile App Job Listing and Mobile App Route Sheet.
- Dashboard Count: The Mobile App Dashboard job count now accurately matches the jobs displayed on the Job Listing page and excludes jobs with Show in Schedule disabled.
- Core Charge and Core Part Management
The Purchase Order and Job workflows have been enhanced to provide comprehensive support for core-charge items, including core part creation, pricing, tracking, return processing, and synchronization between Purchase Orders and Jobs.
Core-charge parts can now be properly managed throughout the complete lifecycle, from adding a part with a core charge to returning the core part to the distributor.
The Core Parts feature automatically manages core-returnable parts by linking a parent inventory item with its associated Core Part.
The enhancement includes the following capabilities:
- An inventory item can be marked Has Core and have a defined Core Cost.
- If Has Core is enabled, the system automatically creates/adds the associated Core Part.
- The parent item is added first, and the Core Part is added as the second line item.
- Core Parts are system-generated and cannot be manually created from the Job page.

- Marcone: Automatically provides Core information through its response/Get Status.

When Marcone returns Core information, the system:
- Updates the parent inventory item.
- Sets Has Core to True.
- Updates Core Cost.
- Creates the Core Part if necessary.
- Automatically includes the Core Part in future jobs.
- Other Integrated Distributors: Core information is not automatically updated; existing Core configuration is retained.
- Non-Integrated Distributors: Users must manually specify Has Core and Core Cost for new items.
Purchase Orders

- A parent item marked Has Core automatically includes its Core Part in the PO.
- Parent and Core Part share the same PO Number.
- For non-Marcone distributors, existing Core information is not automatically changed based on the distributor response.
Core Part Return
When a Core Part is returned:
- Mark the Core Part as Return to Vendor.
- Create a Return PO.
- Submit the Return PO.
- System validates the Core Part.
- A vendor credit equal to the Core Cost is generated upon successful processing.
- PO From POS
In ServiceWorks Purchase Orders (POs) can now be created and managed from the Customer Order (POS). The Purchase Orders can be created for in stock or out-of-stock items, either as one quantity or multiple, from the POS itself, using the Edit mode. Only those items and quantities that have been chosen by the user are included in the Purchase Orders.
Another benefit of this enhancement is the increased efficiency in inventory and items tracking in the POS and PO process. Once a PO is created, all the tracking IDs or serial numbers get released and the inventory is made available for use. After the completion or partial receipt of the PO, the POS gets synchronized and the received items are made available in the inventory with correct tracking IDs and serial numbers.
Other enhancements made are the proper recording of POS Returns, Void transactions, Serial Number Changes/Exchanges, Item Disposition, PO Assignment and Release, and Allocation. The PO Order Number is also appropriately attached to the POS and Job once there is a Delivery Ticket.
The Item History & Tracking Log gives a complete overview of the history of the item with respect to its allocation, PO creation, receipt, return, void transaction, and inventory transactions. This makes for an improved accuracy in tracking the inventory quantities at various stages of the item’s cycle.
Example
Suppose you create a POS for a serialized item and create a regular Purchase Order (PO). After receiving the PO, open the POS in Edit mode and click Assign PO.

In PO Details popup window select the Distributor and the required Purchase Order, then click Save.

The PO is tagged to the POS, and a Tracking ID is generated as shown below.


Go to the Item section to view the Tracking ID allocated to the POS associated with the Delivery Ticket. Because the Tracking ID is linked to both the POS and the Delivery Ticket, both the Job Number and POS Number are displayed against the Tracking ID.

The same Tracking ID and Serial Number are also displayed on the Job page also.


Creating another PO from POS page
To create another PO from the POS, click Create PO (Beta). Create and submit the new Purchase Order. After the PO is submitted, a PO Invoice is generated. When the new PO is received, it is automatically tagged to the POS, and the previously assigned PO is released.

The Tracking ID and Serial Number associated with the previous PO will also be released.

After the new PO is received, the previously allocated Serial Number is released back to inventory, and a new Serial Number and Tracking ID are allocated as shown below.

Reassigning the Previous PO
If you want to assign the previous PO again, first click Release PO to release the currently assigned PO.

Then click Assign PO, select the appropriate Distributor and Purchase Order, and click Save.


Exchanging a Serial Number
If you exchange the allocated Serial Number with another Serial Number, the new Serial Number is associated with the PO that is assigned to the POS at that time. The PO association is updated automatically based on the current assignment.
Example
Select Serial option from 3 dot menu in the POS page.

Select Exchange from Action drop down and select the serial number to which you want to exchange and save.

Now as the PO gets changed, the serial number also gets changed.

The New PO gets attached with the serial numbers also.

- Remove automated messages from inbox
The message icon count has been updated to display the cumulative count of unread messages. Previously, clicking the message icon reset the universal count to zero, even when unread messages were still available. With this update, the universal count now reflects the total number of unread messages across the inbox, providing a more accurate view of pending messages.

- Marcone SSB For Purchase Order
SB (Self-Service Branch) is a specific warehouse/location option provided by Marcone for eligible customers. Instead of shipping a PO to a regular Marcone location, the order is placed against the customer’s designated SSB warehouse.
How it is used for a Purchase Order
In ServiceWorks, when creating a PO for Marcone:
- Select Marcone as the distributor.
- Select SSB (Self-Service Branch) as the ordering option.
- Enter the customer’s SSB Warehouse ID/Number. This number is specific to the customer’s Marcone account.
- Continue with the normal PO process, including selecting the required products and quantities.
- ServiceWorks uses the configured warehouse ID to identify the correct SSB location when placing the order with Marcone.
Example: If a customer’s SSB warehouse ID is 201, that ID is configured for the customer’s Marcone account. When a PO is created for that customer, the order is directed to SSB warehouse 201 rather than a standard Marcone location.
Important setup requirement
The customer must provide the SSB Warehouse ID along with their Marcone account credentials during setup. If the warehouse ID is unknown, it can potentially be identified from the Marcone ordering page by selecting the SSB location and inspecting the page element that contains the warehouse ID.

In short: Marcone SSB allows a customer to place a Purchase Order through ServiceWorks and have it associated with their specific Marcone Self-Service Branch/warehouse.
- There is a specific permission for Marcone SSB, similar to the existing permissions for Sandberg and Reliable.
- An administrator needs to enable this permission for the appropriate user or role.
- The permission is managed from the Company Settings → Permissions page.
- Once the permission is enabled, the user can access and use the Marcone SSB option when creating a Purchase Order.
Bottom of Form
Enhancements done in the Integration Part
- Quo Integration – Integrated Text Messaging Enhancement
A new Quo integration has been introduced to provide integrated text messaging capabilities within the application. Users can now view incoming and outgoing text messages through a dedicated Integrated Text tab and access message details directly from the interface.

- Quo Integration: Quo is now available in the Integrations app list.
- Integrated Text Tab: A new Integrated Text tab is available under Switch for viewing integrated text messages.

- Message Grid: The Integrated Text grid includes the following columns:
- Date & Time
- From
- To
- Source
- Direction
- Message
- Send Text Link: User can send direct text message by clicking the Airplane icon and writing text message in the modal popup.

- Date Range Filtering: Messages are filtered correctly based on the selected date range.
- Incoming and Outgoing Messages: The grid displays both incoming and outgoing text messages.
- Existing Customer Messages: When an existing customer sends a message, the customer’s name is displayed in the Integrated Text grid, and the message is also available in the Message Inbox.
- Non-Existing Customer Messages: When a message is received from a non-existing customer, the sender’s phone number is displayed in the Integrated Text grid, and the message is not added to the Message Inbox.
- Long Message Handling: Long messages are truncated with an ellipsis (…) in the grid. Clicking the message opens a pop-up displaying the complete text.

- Image Preview: Clicking an image in the Message section enlarges the image for easier viewing.

- Warranty flag added in LG Dispatch Ticket Detail

Warranty flag for LG tickets is now available.
Warranty Flags and their Descriptions:

- AHS DispatchMe Mapping
The AHS DispatchMe Mapping enhancement improves how job, warranty, product, and billing information is mapped from AHS into ServiceWorks.
The Problem Description in the DispatchMe Ticket is coming in the Job Description part in the Job in ServiceWorks.


When the Warranty Status is Active, the is Job Type mapped as OEM Warranty in ServiceWorks.


The warranty coverage details are added to the Job Notes.

Unit links and knowledge base all are mapped as clickable links.

Labour Expiration date, and warranty dates mapped to the corresponding ServiceWorks fields.


Part Billing and Labor Billing information is mapped.

The integration also maps Brand, Product Type as Product Details, Model number,


- Comprehensive Data Mapping & Integration Specification
Table of Contents
A. Executive Summary
B. Provider Inbound Mappings to Common Model
1. NewLeaf Models Mapping
2. ORHP Models Mapping
C. Target Mapping: Common Model to PostNewJobData
D. System Defaults & Generated Metadata
1. Execution Metadata & Timestamps
2. Populated Child Collections
E. Unmapped Property Audit
1. Unmapped Source Properties
2. Unassigned Target Collections (PostNewJobData)
- Executive Summary
This document outlines the complete data lineage for service job ingestion. The system ingests payload structures from multiple dispatch providers (NewLeaf, ORHP, DispatchMe), normalizes them into a unified intermediate structure (CommonJobInputModel), and finally maps them to the system target entity (PostNewJobData).
- Provider Inbound Mappings to Common Model
1. NewLeaf Models Mapping
(Applies to NewLeafServiceOrderModel and NewLeafServiceModel)
Mapped Fields
| Source Property (NewLeaf) | Intermediate Target (CommonJobInputModel) | Mapping Rule / Notes |
| CompanyId | CompanyId | Direct assignment. |
| AssociationId | AssociationId | Direct assignment. |
| ServiceOrderNumber | DispatchNumber | Primary order reference number. |
| Contract | ServiceContractNumber | Service contract identifier. |
| DealerGroupName | Dealer | Retailer/Dealer group name. |
| CustomerFirstName | FirstName | Customer first name. |
| CustomerLastName | LastName | Customer last name. |
| PrimaryPhone | ContactPhone | Primary contact number. |
| CustomerEmail | ContactEmail | Customer email. |
| AddressLine1 | Address | Street address. |
| City | City | City name. |
| State | State | State code. |
| ZipCode | Zip | Zip / Postal code. |
| Manufacturer | Brand | Appliance manufacturer. |
| ModelNumber | ModelNumber | Appliance model number. |
| ProductSerialNumber | SerialNumber | Appliance serial number. |
| ProductPurchaseDate | DateOfPurchase | Fallback to DateTime.UtcNow if empty/null. |
| MfwExpirationDate | WarrantyExpirationDate | Expiration date timestamp. |
| MfwCoverage | IsWarranty | Evaluated: true if equals “yes” / “YES”. |
| UnderMFGLimitedCoverage | IsOemWarranty | Evaluated: true if IsWarranty is true AND value equals “yes” / “YES”. |
| FailureDescription | IssueDescription | Summary of issue/failure. |
| CoverageDescription, Status, Category | CoverageDetailsNotes, WarrantyCoveragePlan | Formatted string (API Method). |
| CoverageDescription, PolicySKU | CoverageDetailsNotes, WarrantyCoveragePlan | Formatted string (UI Method). |
| Hardcoded Value | ProviderType | Set to “NewLeaf”. |
| Hardcoded Value | ProductFamily | Set to “Appliance”. |
- ORHP Models Mapping
(Applies to ORHPEmailModel and ORHPEmailDataModel)
Mapped Fields
| Source Property (ORHP) | Intermediate Target (CommonJobInputModel) | Mapping Rule / Notes |
| CompanyId | CompanyId | Direct assignment. |
| AssociationId | AssociationId | Direct assignment. |
| WorkOrderNumber | DispatchNumber | Work order reference. |
| FirstName / CallerName | FirstName | Prefers FirstName, falls back to CallerName. |
| LastName | LastName | Customer last name. |
| Phone | ContactPhone | Contact phone number. |
| AddressLine1 | Address | Street address. |
| City | City | City. |
| State | State | State. |
| ZipCode | Zip | Zip code. |
| Brand | Brand | Product brand. |
| ProductType | ProductType | Specific product type. |
| ModelNumber | ModelNumber | Model number. |
| SerialNumber | SerialNumber | Serial number. |
| TradeCallFee | PartsBilling | Financial trade fee amount. |
| PreferredDate | PreferredDate | Requested date. |
| PreferredTime | PreferredTime | Requested time. |
| CoverageStatus | ServiceContractNumber | Primary coverage status. |
| EffectiveDate | IsWarranty | Evaluated: true if EffectiveDate + 1 year > Today. |
| IssueDescription / Symptoms / Issue | IssueDescription | Evaluates IssueDescription -> Symptoms -> Issue. |
| PlanVersion, CoverageStatus, Options | CoverageDetailsNotes | Formatted string (API Method). |
| CoverageStatus, AuthorizationLimit | CoverageDetailsNotes | Formatted string (UI Method). |
| Hardcoded Value | ProviderType | Set to “ORHP”. |
| Hardcoded Value | ProductFamily | Set to “Appliance”. |
| Hardcoded Value | IsOemWarranty | Set to false. |
- American Home Shield DispatchMe Models Mapping
(Applies to DispatchMeModel and DispatchMeEmailDataModel)
Mapped Fields
| Source Property (DispatchMe) | Intermediate Target (CommonJobInputModel) | Mapping Rule / Notes |
| CompanyId | CompanyId | Direct assignment. |
| AssociationId | AssociationId | Direct assignment. |
| Company / Source | ProviderType | Derived from Company -> Source -> “DispatchMe”. |
| TicketNumber | DispatchNumber | Falls back to JSON Job.DispatchConfirmationNumber. |
| FirstName / CustomerName | FirstName | Prefers FirstName, falls back to CustomerName. |
| LastName | LastName | Customer last name. |
| Phone | ContactPhone | Primary phone. |
| ContactEmail | Customer email. | |
| AddressLine1 | Address | Street address. |
| City | City | City. |
| State | State | State. |
| ZipCode | Zip | Zip code. |
| Brand | Brand | Brand name. |
| ModelNumber / ModelName | ModelNumber | Evaluates ModelNumber -> ModelName -> JSON Product.ModelNumber. |
| SerialNumber | SerialNumber | Falls back to JSON Product.SerialNumber. |
| ProductType | ProductType | Product category details. |
| ProblemDescription / ProblemFullText | IssueDescription | Prefers ProblemDescription, falls back to ProblemFullText. |
| UnitHistory | UnitHistoryUrl | External link string. |
| KnowledgeBase | KnowledgeBaseUrl | External link string. |
| Date | PreferredDate | Preferred calendar date. |
| WarrantyStatus | IsWarranty | true if active or if JSON Product.MfgWarranty == “Yes”. |
| WarrantyStatus | IsOemWarranty | true if active or if JSON Product.MfgWarranty == “Yes”. |
| PartsWarranty / ServiceWarranty | IsPartsWarrantyOnly | true if PartsWarranty is active AND ServiceWarranty is not active. |
| PartsWarranty / ServiceWarranty | PartsBillingDate, LaborBillingDate | Parsed as dates; falls back to JSON Contract.ExpirationDate. |
| ObjectAsJson | Dynamic Fields | Extracted keys: Job.VendorId, Contract.CoveragePlanName, Coverage.AdditionalProvisions, Payment.Total, Payment.Paid, Contract.ContractId, Links.AuthorizationLink. |
C. Target Mapping: Common Model to PostNewJobData
This table outlines how the unified CommonJobInputModel maps to the final destination entity (PostNewJobData).
| Target Property (PostNewJobData) | Source Property / Expression | Business Logic / Rules |
| DispatchNumber | input.DispatchNumber | Primary dispatch identifier. |
| serviceBenchId | input.DispatchNumber | Secondary service bench identifier duplicate. |
| IssueDescription | input.IssueDescription | Cleaned short description of problem. |
| Note | Composite Function | Formatted string containing CoverageDetailsNotes, UnitHistoryUrl, and KnowledgeBaseUrl. |
| ServiceContractNumber | input.ServiceContractNumber | Contract or warranty reference. |
| CompanyName | input.CompanyName | Defaults to string.Empty for third-party providers. |
| ThirdPartyApiType | input.ProviderType | Defaults to “DispatchMe” if unassigned. |
| CompanyId | input.CompanyId | Tenant ID. |
| AssociationId | input.AssociationId | Association ID. |
| FirstName | input.FirstName | Customer first name. |
| LastName | input.LastName | Customer last name. |
| ContactPhone | input.ContactPhone | Primary contact number. |
| ContactEmail | input.ContactEmail | Primary email address. |
| Address | input.Address | Street location address. |
| Zip | input.Zip | Zip code. |
| customerAddressCity | input.City | Customer city. |
| customerAddressState | input.State | Customer state. |
| Brandname | input.Brand | Primary brand string. |
| Brand | input.Brand | Secondary brand string. |
| ModelNumber | input.ModelNumber | Model number. |
| SerialNumber | input.SerialNumber | Serial number. |
| Dealer | input.Dealer | Dealer or retail origin. |
| ProductFamily | input.ProductFamily | Defaults to “Appliance”. |
| ProductDetails | input.ProductType | Detailed product categorization. |
| serviceBenchApplianceName | input.ProductType | Appliance category for ServiceBench integration. |
| IsWarranty | input.IsWarranty | System warranty status flag. |
| JobTypeId | Expression | Assigned 1 if input.IsOemWarranty == true, otherwise 0. |
| DateOfPurchase | input.DateOfPurchase | Date of purchase timestamp. |
| AuthorizationNumber | input.AuthorizationNumber | Pre-approval authorization reference. |
| PartsBilling | input.PartsBilling | Financial amount allocated for parts. |
| LaborBilling | input.LaborBilling | Set to null if IsPartsWarrantyOnly == true, otherwise maps labor amount. |
| SelectedCalendarDate | input.PreferredDate | Preferred appointment calendar date. |
| SelectedTime | input.PreferredTime | Preferred appointment time slot. |
| SourceOfCallId | Lookup Function | Resolved dynamically via _IMD.GetCallSource(input.CompanyId) using input.ProviderType. |
D. System Defaults & Generated Metadata
These fields are programmatically created inside the binding method during mapping and do not originate directly from provider payloads:
- Execution Metadata & Timestamps
- DateOfCallReceived: DateTime.UtcNow
- SelectedDateOfCallReceived: DateTime.UtcNow.ToString(“yyyy-MM-dd”)
- SelectedDateOfCallReceivedHour: DateTime.UtcNow.Hour
- SelectedDateOfCallReceivedMinute: DateTime.UtcNow.Minute
- CallReceivedDate: DateTime.UtcNow.ToString(“yyyy-MM-dd”)
- CallReceivedTime: DateTime.UtcNow.ToString(“HH:mm”)
- LocalDateTime: DateTime.UtcNow.ToString(“yyyy-MM-dd HH:mm:ss”)
- ScheduleDate: DateTime.UtcNow
- CallStatusId: 0
- TypeOfCallId: 0
- Duration: 0
- IsPublic: false
- optOutOptimization: false
- IsSoonerService: false
- Populated Child Collections
- lstNotes (GetNotes):
- notes: Contains combined job notes formatted string.
- createUserName: “System Binder”
- timeStamp: DateTime.UtcNow formatted as “yyyy-MM-dd HH:mm:ss”
- SecBrandApplianceDetailList (SecBrandApplDtls):
- Populated conditionally when IsWarranty is true and valid model/serial/dispatch numbers exist.
- Maps: ModelNumber, SerialNumber, IsWarranty, AuthorizationNumber, DispatchNumber, Group, WarrantyEnddate, LaborExpirationDate, AssociationId, IsActive = true.
- ListAddressBookTicket (AddressBookTicketAll):
- Maps: FirstName, LastName, Email, Address, PrimaryPhone, ZipCode, IsParent = “Y”, CountryCode = “US”, IsActive = true.
E. Unmapped Property Audit
The following model properties exist within the inbound DTOs or destination entities but are not mapped within this specific binder pipeline:
- Unmapped Source Properties
- NewLeaf Models: UniqueID, ModelSerialNumber, CreatedBy, StartedOn, LastPrintedTimestamp, ServicerNumber, ServicerName, ServicerPhoneNumber, ServicerFax, ServicerEmail, DealerName, DealerCode, DealerGroupNumber, IsSelfServicing, SellingRetailer, BuyingGroup, CallerType, DispatchMethod, PhoneTypeCode1, SecondaryPhone, PhoneTypeCode2, AddressLine2, Country, ContractsId, ProductNo, ContractUniqueId, Model, SubcategoryCode, Subcategory, CategoryCode, TierCode, Tier, InstallDate, ProductPurchasePrice, ProductRetailAmount, PartsTermMonths, LaborTermMonths, MajorComponentTermMonths, OtherTermMonths, ServiceLocation, IsFulfilled, IsDeleted, IsNew, SaleDate, DeductibleCollectedBy, Condition, CoverageType, CoverageSegment, CoverageMethod, CoverageTermMonths, CoverageStartDate, CoverageEndDate, IsCovered, FailureLossDate, ReportedDate, FunctionalityStatus, FailureType, MFGCoverageChecked, CODPayor, ProductDetailsCorrect, LeakCausingDamage, ShippingParts, PartsETA, EmailsReferenced, NewLeafTicketStatus, EmailInterceptionDetailsId.
- ORHP Models: Subject, From, To, CC, Date, ServiceCallDateTime, CompanyName, ServicerAddressLine1, ServicerCity, ServicerState, ServicerZipCode, CustomerName, AddressLine2, PhoneType, Relation, Style, ErrorCode, ORHPEmailDataStatus.
- DispatchMe Models: Subject, From, To, JobType, Priority, FullWarranty, ForwardedBy, DispatchMeStatus, EmailInterceptionDetailsId, JobStatus.
- Unassigned Target Collections (PostNewJobData)
- lstParts: Initialized as empty List<GetParts>().
- lstAttach: Initialized as empty List<NsaAttachments>().
- lstComm: Initialized as empty List<GetCommunication>().
- Duplicate Customer Handling for Auto-Accept Dispatch Jobs
Improved customer matching for auto-accepted dispatch jobs received from ServiceBench, ServicePower, NSA, LG and FAHW. ServiceWorks now performs customer searches in the following order to identify an existing customer before creating a new record:
- Name + Phone + Email + Address
- Name + Phone + Email
- Phone + Email
- Phone only
Phone numbers and email addresses are also searched within the Address field to improve customer matching. This enhancement helps ServiceWorks identify existing customers more accurately and prevents unnecessary duplicate customer records when auto-accepting dispatch jobs from the supported integrations.
Enhancements done in the Mobile App
- Mobile App Role Switching Enhancement
The mobile application has been enhanced to provide the same role-switching functionality available in the web application.
Users can now easily switch between available roles directly from their profile in the mobile app. By tapping the logged-in user’s name or profile, users can access the role dropdown and select Switch to Admin or Switch to Billing.
The selected role is applied successfully, allowing users to access the mobile application based on the permissions and functionality associated with that role.

- Added Explanation of Service (EOS) in Route page Note section
The Mobile App has been enhanced to introduce Explanation of Service (EOS) along with Customer Note, Job Note, and Trip Note, providing technicians with quick access to the most recent service explanation recorded for a job.
A new EOS option is now available in the dropdown list within the Mobile App. When the user selects EOS, the application displays the last Explanation of Service added by the most recent technician.
The previous EOS is also displayed directly on the Job page, along with the other job notes, making it easier for users to review important service information without navigating away from the job.

- Return PO option in Mobile App
A new Return PO option has been added to the Mobile App under Inventory Management, allowing users to return items from a Purchase Order (PO) to the distributor from whom the items were originally received.

Users can now initiate a PO return directly from the Mobile App. Within PO Return, users can use the filter to select the distributor to whom the items need to be returned.
When processing the return, the Disposition must be selected as “Return to Vendor”. This ensures that the selected PO items are correctly identified as items being returned to the respective distributor. The tracking ID is also there, by clicking it is showing Tracking Details of the Item as shown below.

If you want to return any item, select the item and tap the ‘Return’ button. It will successfully return the part to the vendor.

- Enhanced Parts Pick List Scan Pop-Up
The Parts Pick List barcode scanning pop-up has been enhanced to display additional item and transfer information.
When a user scans an Item # barcode on the Parts Pick List, the pop-up now provides more detailed information about the scanned item and the transfer destination.

The pop-up displays:
Item # – Identifies the scanned part.
Transfer Location – Displays the location where the item is being transferred.
This enhancement provides users with greater visibility and confirmation of the item and destination before proceeding with the transfer.
- Core Part Creation and Distributor Return
The Parts module has been enhanced to support the identification and return of core parts associated with distributor items.
When adding a part for a distributor, users can now designate the part as having a core by selecting the “Has Core” checkbox in the Quantity & Pricing section and entering the applicable amount in the “Core Cost” field.

Once the part is saved, two part records are created on the Part Detail page:
- The original part record.
- A corresponding core part with the “EXCR” suffix with Core Cost.
The EXCR part represents the core associated with the original part and should be returned to the distributor after the applicable service or replacement process.


