ProfitSword Journals Outbound INT6001/INT6002 - Daily: SOP, Mapping, Scheduling

ProfitSword Journals Outbound INT6001/INT6002 - Daily: SOP, Mapping, Scheduling

Here is a Standard Operating Procedure (SOP) document summarizing the interaction, configuration, and execution of the INT6001 and INT6002 Accounting Journals Outbound integrations.

This document is designed for the HRIS/Financial Systems team responsible for maintaining property mappings and scheduling these integrations.


SOP: INT6001 & INT6002 Accounting Journals Outbound (ProfitSword)

1. Overview

INT6001 and INT6002 are duplicate Workday Studio integrations designed to extract General Ledger (GL) activity and ending balances for ingestion into the ProfitSword (BRAINS) system.

While the integrations share identical source code and logic, they function as two distinct "pipelines" to allow for:

  • Segmentation: Splitting the processing load between two different lists of properties (Companies).

  • Scheduling Flexibility: Delivering data for specific groups of hotels at different times of the day/month.

  • Output Separation: Producing distinct output files for each group to streamline ingestion on the ProfitSword side.

Scheduling


Integration

Period

Start Time - WD

Finish Time - WD

SFTP Sweep - ProfitSword

INT6001

Current

4:00 AM

~6:30 AM

7:10 AM

INT6002

Current

6:00 AM

~6:30 AM

7:10 AM

INT6001

Prior

9:00 AM

~11:30 AM

12:10 PM

INT6002

Prior

11:00 AM

~1:30 PM

2:40 PM

INT6001

Prior

9:00 PM

~11:30 PM

12:10 AM

INT6002

Prior

11:00 PM

~1:30 AM

2:40 AM

From SFTP Sweep to items loading in BRAINS/Profitsword is approximately 2 hours for the Profitsword ingestion job to complete the loading of each file.


Mapping

INT6001:
066 Hilton Garden Inn JFK
101 Nu Hotel
118 Hilton Garden Inn Tribeca
131 Hotel 48 Lex New York
137 Hyatt House White Plains
149 Cadillac Hotel & Beach Club
168 Hyatt Union Square
169 Homewood Suites University City
171 The Rittenhouse
172 The Boxer (Pending Term)
199 Hilton Garden Inn Midtown East 52nd Street
204 Hilton Garden Inn Central Park South (Detransition)
229 St. Gregory (Pending Term)
230 Parrot Key Hotel & Villas
233 Hilton Daytona Beach (Pending term)
235 Residence Inn Conshohocken (Detransition)
237 Sanctuary Beach Resort
239 Sheraton Miami Airport
255 The Envoy Hotel
262 The Ambrose
263 Mystic Marriott
265FB AC Hotel Pleasanton Concessions
266 Westin Philadelphia
267FB Westin Dallas Fort Worth Concessions
269 Annapolis Waterfront Hotel
270 Plaza Hotel Pioneer Park
271 AC Hotel Westport
272 Hyatt Place Sugarland
274 Hilton Garden Inn Hershey
275 Hyatt Place Georgetown
276 Homewood Suites Clearwater (Pending term)
277E The Fifth Avenue Hotel Eliminations
277FB Fifth Avenue Hotel Concessions
277 Fifth Avenue Hotel
283 Hyatt Place Washington DC/US Capitol
284 Hampton Inn & Suites Providence/Smithfield
285 Hotel Nia
286 Aliz Hotel Times Square
287 Home2 Suites Chicago River North
292 Hilton Carillon Park (Pending Term)
295 Holiday Inn Express & Suites Cambridge
296 Capitol Hill Hotel (Pending Term)
297 Hotel Landy
298 AC Hotel Miami Wynwood
299 Hampton Inn & Suites Miami Wynwood/Design District
301 Renaissance Denver Central Park Hotel
302 Holiday Inn Denver East
303 Embassy Suites Anaheim
304 Holiday Inn Anaheim
305 Embassy Suites Palm Desert
306 Hotel Dena
307 Westin Sacramento
308 Holiday Inn San Mateo
309 Holiday Inn Resort Orlando
314 Moxy NYC Downtown
316 Courtyard Harlingen
317 Courtyard Houston Westchase
318 Residence Inn Houston Westchase (Detransition)
320 Residence Inn Houston Westchase
321 Residence Inn Brownsville
323 The Morrow
328 Homewood Suites Long Beach
329 Hampton Inn Long Beach
331 Hilton Garden Inn Chicagoland Lake Forest
332 Residence Inn Chicagoland Mettawa
333 Hilton Garden Inn Chicagoland Warrenville
334 Hilton Garden Inn Chicagoland Hoffman Estates
336 Courtyard Austin North (Pending term)
337 Fairfield Inn & Suites Austin North (Pending term)
338 Hilton Garden Inn Austin North (Pending term)
339 Hampton Inn & Suites Omaha Downtown
340 Hampton Inn Herald Square
341 Hampton Inn Chelsea
342 Hampton Inn Times Square
343 Holiday Inn Express Times Square
344 Candlewood Suites Times Square
345 Holiday Inn Wall Street
346 Holiday Inn Express Wall Street
348 Homewood Suites Omaha Downtown
349 Hilton Garden Inn Omaha Downtown
351 Fairfield Inn & Suites Notre Dame South Bend
352 Residence Inn Notre Dame South Bend
353 Embassy Suites Tampa Brandon
354 Hilton Garden Inn Detroit Novi
357 SpringHill Suites Salt Lake City Airport (Pending Term)
358 Hilton Garden Inn Merillville
359 Hampton Inn & Suites Miami Doral
361FB Hilton Garden Inn Bloomington Concessions
361 Hilton Garden Inn Bloomington
367 Marriott Denver South
368 Renaissance Boulder Broomfield
369 Renaissance Fort Lauderdale West
371 Fairfield Inn & Suites Louisville Downtown
372 SpringHill Suites Louisville Downtown
373 TownePlace Suites Orlando Southwest
374 Aloft Lake Buena Vista
376 Holiday Inn Express & Suites Orlando LBV
377 Hampton Inn Boston Chelsea
378 Courtyard Brookline
379 Hampton Inn Philadelphia
381 Hampton Inn Washington DC
383 TownePlace Suites Sunnyvale
384 Hilton Garden Inn M Street
386 Courtyard Sunnyvale
387 Courtyard San Diego
388 Courtyard Washington DC Navy Yard
392 Fairfield Inn Humble (Pending term)
393FB Sea Crest Concessions
394 Residence Inn Orlando Lake Buena Vista
395 Hilton Garden Inn Austin University Capitol District
396 Aloft Orlando International Drive
397 Element Orlando International Drive
398 Hotel Madera
399 Mondrian New York Park Avenue (Pending tern)
401 Larkspur Campbell Opco
402 Larkspur Folsom Opco
403 Larkspur Milpitas Opco
404 Larkspur Pleasanton Opco
405 Larkspur Roseville Opco
406 Larkspur Sacramento Opco
407 Larkspur South San Francisco Opco
408 Larkspur Sunnyvale Opco
409 Larkspur Hillsboro Opco
411 Larkspur Bellevue Opco
412 Larkspur Renton Opco
413 SCG REIT 1 Larkspur Opco
414 Holiday Inn Express Altus Opco
415 Holiday Inn Arlington Opco
416 Comfort Inn & Suites Buda Opco
417 Hampton Inn & Suites Buda Opco
418 Hampton Inn & Suites Decatur Opco
419 Holiday Inn Express Huntsville Opco
421 Country Inn & Suites Humble Opco (Detransition)
422 Hampton Inn & Suites Longview Opco
423 Courtyard Lufkin Opco
424 Holiday Inn Express Paris Opco
425 Comfort Inn & Suites Paris Opco
426 Hampton Inn Sweetwater Opco
427 Holiday Inn Express Terrell Opco
428 Candlewood Suites Texarkana Opco (Detransition)
429 Holiday Inn Express Texarkana Opco (Detransition)
431 Holiday Inn Express Tyler Opco
432 Courtyard Tyler Opco
432FB Courtyard Tyler Concessions
433 Hampton Inn & Suites Waco South Opco
434 Fairfield Inn & Suites Weatherford Opco
435 Courtyard Wichita Falls Opco
435FB Courtyard Wichita Falls Concession
436 SCG REIT 3 Texas Opco
438 Residence Inn Dartmouth Opco (Pending term)
441 Hilton Garden Inn Glastonbury Opco
443 Residence Inn Danbury Opco
444 Residence Inn Mystic Groton Opco
445 Residence Inn Southington Opco
446 SpringHill Suites Mystic Waterford Opco

INT6002:
448 Hampton Inn Selinsgrove Opco
449 Larkspur Landing Select Carlisle Opco
451 Hampton Inn Danville Opco
453 Residence Inn Williamsburg Opco
454 SpringHill Suites Williamsburg Opco
455 Fairfield Inn Laurel Opco (Detransition)
456 Holiday Inn Norwich Opco
472 Larkspur Ann Arbor Opco
473 Larkspur South Bend Opco
474 Hampton Inn Kokomo Opco
476 Springhill Suites Chicago Naperville Opco
478 Residence Inn Salisbury Opco
479 Holiday Inn Louisville Opco (Pending Term)
480 Holiday Inn Express Fishers Opco
481 Hampton Inn Morehead Opco
482 Springhill Suites Scranton Wilkes Barre Opco
483 TownePlace Suites Scranton Wilkes Barre Opco
485 Fairfield Inn & Suites Reno Sparks Opco
486 Residence Inn Albuquerque North Opco
487 Residence Inn San Antonio North Stone Oak Opco
488 Courtyard Scranton Wilkes Barre Opco
489 Springhill Suites Elmhurst Chicago Opco
491 Springhill Suites Southwest Chicago Opco
492 Courtyard Salisbury Opco
493 Hotel Indigo Chicago Vernon Hills Opco
494 Hampton Inn Oklahoma Northwest Opco
495 Courtyard Norman Opco
497 Fairfield Inn & Suites Norman Opco
501 Larkspur Campbell Propco
502 Larkspur Folsom Propco
503 Larkspur Milpitas Propco
504 Larkspur Pleasanton Propco
505 Larkspur Roseville Propco
506 Larkspur Sacramento Propco
507 Larkspur South San Francisco Propco
508 Larkspur Sunnyvale Propco
509 Larkspur Hillsboro Propco
511 Larkspur Bellevue Propco
512 Larkspur Renton Propco
514 Holiday Inn Express Altus Propco
515 Holiday Inn Arlington Propco
516 Comfort Inn & Suites Buda Propco
517 Hampton Inn & Suites Buda Propco
518 Hampton Inn & Suites Decatur Propco
519 Holiday Inn Express Huntsville Propco
521 Country Inn & Suites Humble Propco (Detransition)
522 Hampton Inn & Suites Longview Propco
523 Courtyard Lufkin Propco
524 Holiday Inn Express Paris Propco
525 Comfort Inn & Suites Paris Propco
526 Hampton Inn Sweetwater Propco
527 Holiday Inn Express Terrell Propco
528 Candlewood Suites Texarkana Propco (Detransition)
529 Holiday Inn Express Texarkana Propco (Detransition)
531 Holiday Inn Express Tyler Propco
532 Courtyard Tyler Propco
533 Hampton Inn & Suites Waco South Propco
534 Fairfield Inn & Suites Weatherford Propco
535 Courtyard Wichita Falls Propco
538 Residence Inn Dartmouth Propco (Pending term)
541 Hilton Garden Inn Glastonbury Propco
543 Residence Inn Danbury Propco
544 Residence Inn Mystic Groton Propco
545 Residence Inn Southington Propco
546 SpringHill Suites Mystic Waterford Propco
548 Hampton Inn Selinsgrove Propco
549 Larkspur Landing Select Carlisle Propco
551 Hampton Inn Danville Propco
553 Residence Inn Williamsburg Propco
554 SpringHill Suites Williamsburg Propco
555 Fairfield Inn Laurel Propco (Detransition)
556 Holiday Inn Norwich Propco
562 Courtyard Chico Propco
563 Residence Inn Chico Propco
565 Residence Inn Kansas City Propco
566 Residence Inn Fort Smith Propco (Pending term)
567 SCG REIT 4 B Propco
568 FAIRFIELD HUMBLE PROPCO (Pending term)
569 TownePlace Suites Houston Propco (Pending term)
571 Fairfield Inn Houston Propco (Pending term)
572 Larkspur Ann Arbor Propco
573 Larkspur South Bend Propco
574 Hampton Inn Kokomo Propco
576 Springhill Suites Chicago Naperville Propco
577 REIT 2 Propco Parent Entity
578 Residence Inn Salisbury Propco
579 Holiday Inn Louisville Propco (Pending Term)
586 Residence Inn Albuquerque North Propco
587 Residence Inn San Antonio North Stone Oak Propco
588 Courtyard Scranton Wilkes Barre Propco
589 Springhill Suites Elmhurst Chicago Propco
591 Springhill Suites Southwest Chicago Propco
592 Courtyard Salisbury Propco
593 Hotel Indigo Chicago Vernon Hills Propco
594 Hampton Inn Oklahoma Northwest Propco
595 Courtyard Norman Propco
596 REIT 6 Propco Parent Entity
597 Fairfield Inn & Suites Norman Propco
604 Residence Inn Breckenridge (Pending term)
607 Marriott Palm Beach Singer Island Beach Resort & Spa
608 Moxy South Beach (Pending term)
609 Visitation Hotel Frederick
611 Hilton Garden Inn Rockville
612 Homewood Suites Rockville
614 Residence Inn Big Sky The Wilson Hotel
616 Renaissance Reno Downtown Hotel & Spa
617 Residence Inn West Orange (Detransition)
618 Whiteface Lodge Resort
619 Marriott Ithaca Downtown
620 Residence Inn West Orange
624 Courtyard New York Queens Jamaica
627 SpringHill Suites New York LaGuardia Airport
628 SpringHill Suites New York JFK Airport Jamaica
629 Fairfield Inn New York La Guardia Airport Flushing
631 Fairfield Inn & Suites NY Manhattan Downtown East
632 Fairfield Inn New York Queens Jamaica
634 Hilton Garden Inn Flushing
636 Hampton Inn Garden City Long Island
642 Hilton Garden Inn Pittsburgh University Place
643 Hotel Indigo Pittsburgh University Oakland
644 Hilton Garden Inn Washington DC Downtown
646 Holiday Inn Express Washington DC Downtown (Pending term)
648 Fairfield Inn & Suites Washington DC Downtown
649 Marriott Quebec Downtown (Pending Term)
650 Marriott Quebec Downtown
651 Humaniti Montreal
652 Renaissance Montreal
653 Hotel Rive Gauche Beloeil
656 Courtyard Montreal Airport
657 Residence Inn Montreal Airport
658 Residence Inn Mont Tremblant
659 Hampton Montreal Downtown
661 Homewood Suites Montreal Downtown
662 Hilton Garden Inn Montreal Midtown
663 Homewood Suites Montreal Midtown
664 Homewood Suites Mont Tremblant (Pending term)
667 Courtyard Laval
673 Block 3 Restaurant (Pending Term)
676 Courtyard Los Angeles Pasadena
677 Hilton Garden Inn Bethesda
678 Courtyard St John's
679 Courtyard Nassau Downtown/Junkanoo Beach
681 Hilton Brooklyn New York
682 Residence Inn Tampa Westshore/Airport
683 The Tillary Hotel
684 AC Hotel Arlington National Landing
684FB AC Hotel Arlington National Landing Concessions
688 AC Hotel Old Montreal
689 Homewood Suites Mont Tremblant
701 The Whitney
702 Embassy Suites South Jordan Salt Lake City
703 Le Meridien Tampa, The Courthouse
704 Courtyard Philadelphia Downtown
707 The Sarasota Modern (Detransition)
708 AC Hotel Washington DC Convention Center
709 Hyatt Regency Bethesda
712 Carte San Diego Downtown
712FB Carte San Diego Downtown Concessions
713 Washington Marriott Capital
714 Holiday Inn Express NYC Chelsea NoMad Area
716 Aloft Philadelphia
716FB Aloft Philadelphia Concessions
717 The Ray Hotel
718FB Towneplace Suites Bozeman Concessions
718 Towneplace Suites Bozeman
719 AC Hotel Boston Cambridge
720 Hampton Inn & Suites Annapolis
721 The Manner
722 Homewood Suites Tampa Brandon
723 Hampton Inn & Suites Yonkers
724 Hilton Garden Inn Westchester Dobbs Ferry
725 Hilton Carillon Park
726 Laurel Lake Placid
727 Capitol Hill Hotel
728 Courtyard Alexandria Old Town
729 SpringHill Suites Alexandria Old Town
730 Courtyard Omaha Downtown
735 Homewood Suites Washington DC Downtown
736 Joinery Hotel Pittsburgh
777 Boston Harbor Hotel
777HD History Boston Harbor Hotel
BS004 LR NAS Operator Limited
MCP Metlife MCP HH Hotel LB LLC
MT005 Wilson Hotel Liquor LLC (The Lobby Bar)
MT006 Shot Ski LLC
MT008 Block 3 Kitchen & Bar Liquor LLC

2. Integration Logic & Flow

Both integrations follow the exact same execution path. The only variable is the input list of companies, which is defined by an Integration Attribute.

Process Steps

  1. Launch & Parameters: The integration is launched (manually or scheduled) with a specific Fiscal Period and Time Period.

  2. Property Selection: The integration looks up the specific Integration Attribute configured for that system (INT6001 or INT6002) to determine which companies to process1111.
    +1

  3. Iterative Processing: The integration loops through every selected company one by one.


  • It retrieves Journal Lines (Activity and Ending Balance) for that specific company.

  • It retrieves Translation Codes (BRAINS codes) to map Workday "Outlet" values to ProfitSword codes.

  1. Transformation:

  • GL Balance: Aggregates totals by Ledger Account, Cost Center, and Spend Category.

  • GL Detail: extracting granular journal line details (Invoice #, Supplier, etc.).

  1. Aggregation & Output: All individual company data is combined into two final CSV files per integration run:

  • GL_Balances_YYYYMMDDHHMMSS.csv

  • GL_Detail_YYYYMMDDHHMMSS.csv

3. Configuration & Property Mapping

This is the most critical step for the team. A company must only be mapped to ONE integration at a time to avoid duplicate data in ProfitSword.

Step 1: Assigning Properties

To assign a hotel/entity to a specific integration pipeline:

  1. Search for Configure Integration Attributes in Workday.

  2. Select the specific integration system:

  • Choose INT6001 Accounting Journals Outbound for Group A (e.g., Managed Hotels).

  • Choose INT6002 Accounting Journals Outbound for Group B (e.g., Franchised/Other).

  1. Locate the attribute: "Companies / Company Hierarchies"6666.
    +1

  2. Action: Add or Remove Company Reference IDs from this list.

  • Note: Ensure the company is not listed in both integrations.

Step 2: Scheduling

Since both integrations query the exact same Journal Lines data source, they can compete for system resources if run simultaneously.

  • Recommendation: Offset the schedules by at least 30–60 minutes.

  • Example: Schedule INT6001 to run at 2:00 AM and INT6002 to run at 3:00 AM.

  • SFTP Delivery: Both integrations will deliver files to the configured SFTP server. The filenames will differ only by the timestamp and the content (based on the mapped companies).

4. Operational Differences Table

Feature

INT6001

INT6002

Primary Use Case

Group A Properties (e.g., Managed)

Group B Properties (e.g., Franchised/Other)

System Name

INT6001 Accounting Journals Outbound - Profitsword

INT6002 Accounting Journals Outbound - Profitsword

Attribute Map ID

INT6001_AttrMapSvc

INT6001_AttrMapSvc (Same ID, distinct value per system)

Output File 1

GL_Balances_[Timestamp].csv

GL_Balances_[Timestamp].csv

Output File 2

GL_Detail_[Timestamp].csv

GL_Detail_[Timestamp].csv

5. Troubleshooting & Maintenance

Common Issues

  • "Missing Data" in ProfitSword:

  • Cause: The company was created in Workday but not added to the Integration Attribute list for either INT6001 or INT6002.

  • Fix: Follow the steps in Section 3 to add the new company to the correct integration map.

  • Duplicate Data:

  • Cause: A company was added to both INT6001 and INT6002 attributes.

  • Fix: Audit both attribute lists and remove the duplicate.

  • Timeout / Performance Failures:

  • Cause: If one integration is overloaded (e.g., INT6001 has 200 companies and INT6002 has 10), INT6001 may time out.

  • Fix: Balance the load by moving some companies from the "heavy" integration to the "light" one using the Attribute settings.

6. Revision History

  • INT6002 Creation: Cloned from INT6001 to allow parallel processing of distinct property groups.

  • Codebase: Both integrations utilize the same GLBalance.xsl and GLDetail.xsl transformations. Any code changes (XSLT updates) must be applied to both integrations to maintain consistency.




Executive Summary

Purpose The INT6001 integration automates the extraction of financial data from Workday for ProfitSword, a business intelligence and data management platform used in the hospitality industry. It bridges the gap between Workday Financials and ProfitSword by delivering accurate General Ledger (GL) data in a specific format required for financial reporting and forecasting.

Key Capabilities

  • Dual-Level Reporting: It generates two distinct output files simultaneously:

    1. GL Balances: A high-level summary of ending balances and activity totals for the period.

    2. GL Details: A granular, transaction-level log of every journal entry, invoice, and payment.

  • Intelligent Mapping: The system automatically translates internal Workday "Outlet" IDs into ProfitSword "Translation Codes" using a dynamic lookup, eliminating the need for manual cross-referencing.

  • Scalable Architecture: It uses a "Split-and-Aggregate" technical design. This allows it to process multiple companies sequentially without running out of memory, while still delivering a single, unified file for the end-user.

Workflow Overview

  1. Launch: A user or schedule triggers the integration for a specific Fiscal Period (e.g., Nov 2024).

  2. Process: The system identifies all relevant companies, extracts their financial activity and balance data, and applies complex formatting rules (XSLT).

  3. Deliver: The final output is two CSV files (GL_Balances_....csv and GL_Detail_....csv) attached to the integration event record in Workday.

Business Value

  • Automation: Replaces manual report running and Excel manipulation with a single-click or scheduled process.

  • Auditability: By providing both summary and detail files from the same source snapshot, it ensures that financial reports in ProfitSword can be easily reconciled back to Workday.

  • Reliability: Technical safeguards (error handling and memory management) ensure the integration runs successfully even during high-volume period-close cycles.



SOP: INT6001 Accounting Journals Outbound - Profitsword

Document ID: SOP-INT6001-001

Integration Type: Workday Studio Custom Integration

System ID: INT6001

Version: 2024.11

1. Overview and Purpose

This integration extracts General Ledger (GL) data from Workday for consumption by the ProfitSword system. It processes financial data for specific companies and periods, aggregating the results into two distinct CSV output files:

  1. GL Balances: Summary level data including ending balances and activity amounts.

  2. GL Details: Transactional level details for the journals.

The integration runs a "Split-and-Aggregate" pattern: it splits processing by Company, fetches data via Report-as-a-Service (RaaS), transforms the data using XSLT, and aggregates the results into single batch files.


2. Launch Parameters & Inputs

When launching this integration, the following parameters are required:

Parameter Name

Description

Type

Required?

Period

The specific Fiscal Period for the extract.

Reference (WID)

Yes

Time Period

The Time Period in relation to the selected Period (e.g., YTD, Current Period).

Reference (WID)

Yes

Note: The integration also utilizes an Attribute Map named Companies / Company Hierarchies to determine which Companies to process. This is configured on the Integration System, not selected at runtime.


3. Process Logic Flow

Phase 1: Initialization & Reference Data

  1. Parameter Retrieval: The integration captures the Period and Time Period WIDs.

  2. Company Selection: It retrieves the list of companies from the Companies / Company Hierarchies attribute.

  3. Translation Codes: It calls a specific RaaS (OutletTranslationCode) to fetch mapping data that links "Outlets" to "Translation Codes." This data is cached in memory variable v.TRACodes for later use.

Phase 2: Per-Company Processing (The Splitter)

The integration iterates through every Company found in the attribute map. For each company, the following steps occur:

  1. Fetch Activity: Calls the JournalLines RaaS filtering by Amount_Type = 'ACTIVITY'.

  2. Fetch Ending Balance: Calls the JournalLines RaaS filtering by Amount_Type = 'END_BALANCE'.

  3. Data Consolidation:

    • Merges Activity Data, Ending Balance Data, and the cached Translation Codes into a single XML structure.

    • Applies XSLT GenerateActivityTotalsXML.xsl to calculate totals.

    • Snapshot: Saves an intermediate XML file WD_Data_@{Company}.xml to the event documents (useful for debugging).

  4. Transformation:

    • Balance Data: Applies GLBalance.xsl to format the data for the Balance CSV.

    • Detail Data: Applies GLDetail.xsl to format the data for the Detail CSV.

  5. Aggregation: The transformed lines are sent to two separate aggregators (DetailGLAggregator and BalanceGLAggregator) to be held until all companies are processed.

Phase 3: Finalization & Delivery

Once all companies are processed:

  1. Batch Processing: The aggregators release the combined data.

  2. Header Generation:

    • A CSV header is prepended to the Balance data.

    • A CSV header is prepended to the Detail data.

  3. File Naming: Files are named using the pattern:

    • GL_Balances_YYYYMMDDHHMMSS.csv

    • GL_Detail_YYYYMMDDHHMMSS.csv

  4. Delivery: The files are attached to the Integration Event via PutIntegrationMessage and marked as deliverable.


4. Technical Components Inventory

Reports (RaaS)

  • OutletTranslationCode: Used to map internal Outlet IDs to external Translation Codes.

  • JournalLines: The primary data source. It accepts parameters for Company, Amount Type, Period, and Time Period.

XSLT Transformations

  • GenerateActivityTotalsXML.xsl: Calculates math/totals within the XML before CSV conversion.

  • GLBalance.xsl: Transforms the XML XML data into the CSV structure for the Balances file.

  • GLDetail.xsl: Transforms the XML data into the CSV structure for the Details file.

Output File Specifications

File 1: GL Balances

Columns: Period, Company, Ledger Account, Cost Center, Spend Code, Revenue Code, Job Title, Outlet, Meal Period, Hotel Lot and Unit, Bank Account, Intercompany Affiliate, Translation Code, Ending_Balance_Amount, Activity_Amount

File 2: GL Details

Columns: Accounting_Journal_ID, Journal_Entry_Status_ID, Period, Ledger_Reference_ID, Journal_Number, Journal_Source_ID, Currency_ID, Company, Ledger Account, Revenue Code, Cost Center, Spend Code, Job Title, Outlet, Meal Period, Hotel Lot and Unit, Bank Account, Intercompany Affiliate, Translation Code, Accounting_Date, DESCRIPTION, Debit_Amount, Credit_Amount, Supplier_Invoice_ID, Invoice_Number, Document_Status_ID, Supplier_ID, Invoice_Date, Payment Number, Date Paid, Invoice WID


5. Troubleshooting & Maintenance

Issue

Potential Cause

Resolution Step

Missing Data in Output

The Companies attribute map is empty or the RaaS returns no data for the selected Period.

1. Check the Companies / Company Hierarchies attribute on the INT System.


2. Run the JournalLines report manually in Workday for that period.

Incorrect Translation Codes

The OutletTranslationCode report is outdated or missing mappings.

Run the OutletTranslationCode report in Workday to verify mappings exist for the specific Outlet.

Performance Slowness

High volume of companies or journal lines causing memory pressure.

Check the Integration Event log. If "Out of Memory" errors occur, the Splitter logic or Heap size may need adjustment.

Validation Errors

"Required Parameter" error on launch.

Ensure both "Period" and "Time Period" are selected in the launch window.

Debugging Tip

If data looks incorrect in the final CSV, look at the Integration Attachments. The integration saves a file named WD_Data_[CompanyID].xml for every company processed. Download this file to see the raw data before it was converted to CSV.


Here are the templates for the two XSLT files required by your integration (GLBalance.xsl and GLDetail.xsl).

Important Configuration Note:

Since I do not have the exact XML Schema (XSD) of your specific Workday Reports (JournalLines and OutletTranslationCode), I have used standard Workday RaaS namespaces (urn:com.workday/bsvc) and logical field names. You must replace the specific XPath field names (e.g., wd:Ledger_Account/wd:ID) with the actual field names from your specific RaaS output.

1. GLBalance.xsl

This stylesheet generates the summarized balance data. It iterates through the <ending_balance> section of your aggregated data and performs a lookup for the Translation Code.

XML


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

    xmlns:wd="urn:com.workday/bsvc"

    exclude-result-prefixes="wd">


    <xsl:output method="text" indent="no" encoding="UTF-8"/>

    <xsl:strip-space elements="*"/>


    <xsl:key name="TraCodeKey" match="TRACodes/wd:Report_Data/wd:Report_Entry" use="wd:Outlet_ID"/>


    <xsl:template match="/">

        <xsl:apply-templates select="data/ending_balance/wd:Report_Data/wd:Report_Entry"/>

    </xsl:template>


    <xsl:template match="wd:Report_Entry">

        <xsl:variable name="outletID" select="wd:Outlet/wd:ID[@wd:type='Outlet_ID']"/>

        

        <xsl:variable name="translationCode">

            <xsl:for-each select="/data">

                <xsl:value-of select="key('TraCodeKey', $outletID)/wd:Translation_Code"/>

            </xsl:for-each>

        </xsl:variable>


        <xsl:value-of select="wd:Fiscal_Period/wd:Descriptor"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Company/wd:ID[@wd:type='Company_Reference_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Ledger_Account/wd:ID[@wd:type='Ledger_Account_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Cost_Center/wd:ID[@wd:type='Cost_Center_Reference_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Spend_Category/wd:ID[@wd:type='Spend_Category_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Revenue_Category/wd:ID[@wd:type='Revenue_Category_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Job_Profile/wd:Descriptor"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="$outletID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Meal_Period"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Hotel_Lot_Unit"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Bank_Account"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Intercompany_Affiliate"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="$translationCode"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Ending_Balance_Amount"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Activity_Amount"/>

        

        <xsl:text>&#xa;</xsl:text>

    </xsl:template>


</xsl:stylesheet>


2. GLDetail.xsl

This stylesheet generates the transaction level details. It likely iterates through the <activity> section of your data (or wherever the journal lines are stored) and maps fields to the larger detail CSV specification.

XML


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

    xmlns:wd="urn:com.workday/bsvc"

    exclude-result-prefixes="wd">


    <xsl:output method="text" indent="no" encoding="UTF-8"/>

    <xsl:strip-space elements="*"/>


    <xsl:key name="TraCodeKey" match="TRACodes/wd:Report_Data/wd:Report_Entry" use="wd:Outlet_ID"/>


    <xsl:template match="/">

        <xsl:apply-templates select="data/activity/wd:Report_Data/wd:Report_Entry"/>

    </xsl:template>


    <xsl:template match="wd:Report_Entry">

        <xsl:variable name="outletID" select="wd:Outlet/wd:ID[@wd:type='Outlet_ID']"/>

        

        <xsl:variable name="translationCode">

             <xsl:for-each select="/data">

                <xsl:value-of select="key('TraCodeKey', $outletID)/wd:Translation_Code"/>

            </xsl:for-each>

        </xsl:variable>


        <xsl:value-of select="wd:Accounting_Journal_ID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Journal_Status_ID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Fiscal_Period/wd:Descriptor"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Ledger/wd:ID[@wd:type='Ledger_Reference_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Journal_Number"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Journal_Source_ID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Currency/wd:ID[@wd:type='Currency_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Company/wd:ID[@wd:type='Company_Reference_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Ledger_Account/wd:ID[@wd:type='Ledger_Account_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Revenue_Category/wd:ID[@wd:type='Revenue_Category_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Cost_Center/wd:ID[@wd:type='Cost_Center_Reference_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Spend_Category/wd:ID[@wd:type='Spend_Category_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Job_Profile/wd:Descriptor"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="$outletID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Meal_Period"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Hotel_Lot_Unit"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Bank_Account"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Intercompany_Affiliate"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="$translationCode"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Accounting_Date"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="replace(wd:Description, ',', ' ')"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Debit_Amount"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Credit_Amount"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Supplier_Invoice_ID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Invoice_Number"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Document_Status_ID"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Supplier/wd:ID[@wd:type='Supplier_ID']"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Invoice_Date"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Payment_Number"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Date_Paid"/>

        <xsl:text>,</xsl:text>


        <xsl:value-of select="wd:Invoice_WID"/>

        

        <xsl:text>&#xa;</xsl:text>

    </xsl:template>


</xsl:stylesheet>





ETL Pipeline Documentation: INT6001 Accounting Journals Outbound

Pipeline Name: Workday to ProfitSword GL Extract

Pipeline Type: Batch / Scheduled

Source System: Workday Financials (GL)

Target System: ProfitSword (via CSV file exchange)

Middleware: Workday Studio

1. High-Level Architecture

The pipeline utilizes a "Split-Extract-Aggregate" pattern. To avoid timeouts and memory issues common with large financial data sets, the integration splits the request by Company, extracts data for each company individually, and then re-aggregates the results into a single payload for delivery.


2. Phase I: Extraction (E)

2.1 Trigger & Scope

  • Trigger: Scheduled or Ad-hoc Manual Launch.

  • Scope Definition:

    • Time: Determined by Launch Parameters (Period, Time Period).

    • Entity: Determined by Integration Attribute (Companies / Company Hierarchies).

2.2 Data Sources (RaaS)

The pipeline extracts data from three distinct internal Workday Report-as-a-Service (RaaS) endpoints:

Source ID

Report Name

Purpose

Cardinality

SRC_01

OutletTranslationCode

Reference data mapping internal Workday "Outlets" to external "Translation Codes".

1 call per run (Cached).

SRC_02

JournalLines (Mode: Activity)

Fetches transactional journal lines for the period.

1 call per Company.

SRC_03

JournalLines (Mode: Balance)

Fetches ending balance summaries for the period.

1 call per Company.

2.3 Extraction Logic

  1. Reference Caching: SRC_01 is called once at the start. The output is stored in a global variable (v.TRACodes) to allow for O(1) lookup speeds during transformation, preventing repeated API calls.

  2. Company Iteration: The pipeline iterates through the list of companies provided in the Attribute Map.

  3. Dual-Pass Extraction: For each company:

    • Pass 1: Call SRC_02 (Activity).

    • Pass 2: Call SRC_03 (Balance).


3. Phase II: Transformation (T)

This pipeline performs complex transformations including data merging, arithmetic calculation, and format conversion.

3.1 Data Merging & Enrichment

Before conversion to CSV, the raw data streams are merged into a temporary XML "Super-Document" (v.AggregatedData) for the current company being processed.

  • Structure:

  • XML


<data>

   <ending_balance>... (From SRC_03) ...</ending_balance>

   <activity>... (From SRC_02) ...</activity>

   <TRACodes>... (From SRC_01) ...</TRACodes>

   <activity_totals>... (Calculated below) ...</activity_totals>

</data>



  • Lookup Logic: The XSLT uses the Outlet_ID from the Journal Lines to query the TRACodes block and inject the correct external Translation Code into the final output.

3.2 Calculated Fields (Arithmetic)

A specific XSLT (GenerateActivityTotalsXML.xsl) is applied to the merged XML to generate the <activity_totals> node.

  • Logic: Aggregates debits and credits from the transaction lines to ensure the summary file matches the detail file.

3.3 Format Conversion (XML to CSV)

Two parallel XSLT transformations occur to generate the final flat files:

Stream A: Balance File (GLBalance.xsl)

  • Input: <ending_balance> nodes.

  • Output: Comma-Separated Values.

  • Key Transformation: Denormalizes the hierarchical XML into a single flat row per ledger account/dimension combination.

Stream B: Detail File (GLDetail.xsl)

  • Input: <activity> nodes.

  • Output: Comma-Separated Values.

  • Key Transformation: Flattens complex journal headers and lines into a single row per transaction line. Handles comma escaping in the Description field.


4. Phase III: Load (L)

4.1 Aggregation Strategy

Because the data was extracted per company, it must be re-assembled.

  • Aggregator Component: DetailGLAggregator and BalanceGLAggregator.

  • Logic: The aggregators hold all transformed CSV fragments in memory.

  • Release Condition: When the Splitter signals that the last company has been processed (batch=true), the aggregator releases the combined dataset.

4.2 File Construction

Once the aggregated payload is released:

  1. Header Injection: The static CSV headers are prepended to the top of the data stream.

  2. File Naming:

    • GL_Balances_YYYYMMDDHHMMSS.csv

    • GL_Detail_YYYYMMDDHHMMSS.csv

4.3 Delivery Endpoint

  • Mechanism: PutIntegrationMessage (Workday Core Connector Standard Action).

  • Result: Files are attached to the Workday Integration Event. External retrieval is handled by a separate connector or manual download from this event.


5. Field Mapping Specification

5.1 Balance File Map (GL_Balances)

Target Field (ProfitSword)

Source Field (Workday)

Transformation / Logic

Period

Fiscal_Period

Direct Map

Company

Company_Reference_ID

Direct Map

Ledger Account

Ledger_Account_ID

Direct Map

Outlet

Outlet_ID

Direct Map

Translation Code

Derived

Lookup Outlet_ID against TRACodes cached data.

Ending_Balance_Amount

Ending_Balance_Amount

Sourced from SRC_03 (Balance RaaS).

Activity_Amount

Activity_Amount

Sourced from SRC_03 (Balance RaaS).

5.2 Detail File Map (GL_Detail)

Target Field (ProfitSword)

Source Field (Workday)

Transformation / Logic

Accounting_Journal_ID

Accounting_Journal_ID

Unique Key

Journal_Number

Journal_Number

Direct Map

Description

Description

Clean: Commas replaced with spaces to prevent CSV breakage.

Debit_Amount

Debit_Amount

Sourced from SRC_02 (Activity RaaS).

Credit_Amount

Credit_Amount

Sourced from SRC_02 (Activity RaaS).

Translation Code

Derived

Lookup Outlet_ID against TRACodes cached data.

Invoice WID

Invoice_WID

Used for drill-back URL construction if needed.


6. Error Handling & Recovery

6.1 Global Error Handler

  • Mechanism: cc:send-error hooked to global-error-handler.

  • Action: If any unhandled exception occurs (e.g., SOAP Fault, Null Pointer), the integration:

    1. Catches the error context.

    2. Sets the integration status to CRITICAL.

    3. Logs the error summary to the Integration Event.

6.2 Data Validation

  • Missing Parameters: If Period or Time Period are missing at launch, the integration fails immediately (Launch Option: required).

  • Empty Reports: If a Company returns 0 rows, the XSLT produces an empty string for that segment, ensuring the pipeline continues for other companies.


7. Performance Considerations

  • Memory Management: The "Splitter" is critical here. By processing one company at a time and converting to CSV (text) before aggregation, the memory footprint is significantly reduced compared to aggregating the full DOM (XML) of all companies at once.

  • Retention Policy: Intermediate debug files (WD_Data_*.xml) are set to expire in 30 Days (P30D) to manage storage.




    • Related Articles

    • International Travel Request

      To optimize our international travel process, we have streamlined the request procedure. Going forward, please follow these steps: In the questionnaire linked below, please provide your name, email address, and the dates you are departing and ...
    • Contact Touchstone1 (formerly Hotel Internet Services) Support

      Contact Touchstone1 (formerly Hotel Internet Services) Support Phone: 866-925-1791 ext. 0 Email: support@touchstone1.com
    • Report an email as Phishing

      If you believe you’ve received a phishing email, do not interact with it! Here's what you should do: Do NOT click any links or download attachments. Use the "Report Phishing" button in your Gmail 3 dot menu: What Happens Next? Once our security team ...
    • Zoho Desk Advanced Features

      Bulk actions There are a number of actions you can take on tickets in bulk by clicking the box to the left a ticket in any ticket view and viewing the options along the top: Merge tickets Check 2-5 ticket boxes then click Merge (You can merge up to 5 ...
    • Sign in to Zoho Desk for the first time

      About: You should have an email inviting you to Zoho Desk with subject "Invitation to join the organization!" from noreply@zohoaccounts.com Click View Invitation Click Sign in to accept Create Zoho Account Create a password for your Zoho Account. ...