diff --git a/README.md b/README.md index 8ed0188..254cbbf 100644 --- a/README.md +++ b/README.md @@ -118,14 +118,17 @@ Community examples, open to everyone. This is the section external contributions | --- | --- | --- | | [`business-process-undo-agent-skill`](examples/business-process-undo-agent-skill) | A markdown skill that teaches an agent to read a Workday business process event and prepare a rescind or cancel for approval. | Agent Skill | | [`expense-policy-agent-skill`](examples/expense-policy-agent-skill) | A markdown skill that teaches an agent to answer expense policy questions and escalate anything it cannot verify. | Agent Skill | +| [`expense-report-agent-skill`](examples/expense-report-agent-skill) | A markdown skill for an agent that prepares and submits expense reports and cancels reports that are not yet approved in Workday. | Agent Skill | | [`employee-data-orchestration`](examples/employee-data-orchestration) | An orchestration that reads worker data from one tenant and creates matching records through the Workday REST API. | Orchestration | | [`inbox-decisions-agent-skill`](examples/inbox-decisions-agent-skill) | A markdown skill that teaches an agent to read a person's Workday inbox, explain what each step does and prepare an approve, deny or send back decision for approval. | Agent Skill | +| [`learning-enrolment-agent-skill`](examples/learning-enrolment-agent-skill) | A markdown skill for an agent that finds learning content through read-only WQL and prepares enrolments for a person or their team, for approval. | Agent Skill | | [`peer-kudos-home-card`](examples/peer-kudos-home-card) | An Extend app with a Home page card, custom business object, and orchestration that lets employees celebrate peer contributions and notifies managers. | Extend App | | [`promotion-nomination`](examples/promotion-nomination) | A manager nominates a direct report for promotion. Career data is prefilled from Workday, the nomination is saved to a business object, and a business process routes it for approval. | Extend App | | [`pto-policy-agent-skill`](examples/pto-policy-agent-skill) | A markdown skill that teaches an agent to answer employee questions about PTO, leave accrual, rollover, and sick leave policy with clear escalation rules. | Agent Skill | | [`rewards-proposal-agent-skill`](examples/rewards-proposal-agent-skill) | A markdown skill that teaches an agent to prepare spot bonuses and base pay changes as proposals, using the worker's real plan, with the amount always chosen by a person. | Agent Skill | | [`stock-notifications`](examples/stock-notifications) | An Extend app that fetches Workday's current stock price from an external API and displays it on a home page card. | Extend App | | [`time-off-request-agent-skill`](examples/time-off-request-agent-skill) | A markdown skill that teaches an agent to read real time off balances and eligible types from Workday and to prepare day-by-day time off requests for approval. | Agent Skill | +| [`time-tracking-agent-skill`](examples/time-tracking-agent-skill) | A markdown skill for an agent that reads calculated time blocks and prepares reported hours or a work schedule assignment in Workday. | Agent Skill | | [`workday-ai-gateway-skill`](examples/workday-ai-gateway-skill) | A markdown skill that reviews an AI Gateway or AWS starter call and keeps secrets out of the page. | Agent Skill | | [`workday-apis-skill`](examples/workday-apis-skill) | A markdown skill that chooses and reviews a Workday Graph, WQL, REST, or SOAP call. | Agent Skill | | [`workday-developer-copilot-skill`](examples/workday-developer-copilot-skill) | A markdown skill that shapes a prompt for Workday Developer Copilot and lists what must not be pasted. | Agent Skill | @@ -134,6 +137,7 @@ Community examples, open to everyone. This is the section external contributions | [`workday-orchestrate-skill`](examples/workday-orchestrate-skill) | A markdown skill that reviews an Orchestrate flow for Maya file shape, expressions, and secrets. | Agent Skill | | [`workday-pmd-skill`](examples/workday-pmd-skill) | A markdown skill that reviews an Extend page for a security domain, endpoint failures, widget ids, labels, and secrets. | Agent Skill | | [`workday-skill`](examples/workday-skill) | A markdown skill that chooses which Workday agent skill to apply when a task starts a new app or touches more than one artifact. | Agent Skill | +| [`worker-data-quality-agent-skill`](examples/worker-data-quality-agent-skill) | A markdown skill for an agent that finds workers with missing personal data through read-only WQL and prepares a date of birth correction for approval. | Agent Skill | | [`workplace-adjustment-passport`](examples/workplace-adjustment-passport) | An Extend app with a Home page card, custom business object, and PMD pages that gives employees a confidential, portable accommodation passport that carries forward with them as they change teams or managers. | Extend App | | [`wql-anniversary-celebrations`](examples/wql-anniversary-celebrations) | An orchestration that queries Workday via WQL for active workers celebrating milestone work anniversaries and formats an announcement digest payload for collaboration channels. | Orchestration | | [`wql-workforce-analyst-agent-skill`](examples/wql-workforce-analyst-agent-skill) | A markdown skill that teaches an agent to answer workforce questions with one read-only WQL SELECT over the tenant's own data sources and to show the query it ran. | Agent Skill | diff --git a/examples/expense-report-agent-skill/README.md b/examples/expense-report-agent-skill/README.md new file mode 100644 index 0000000..a7da5c6 --- /dev/null +++ b/examples/expense-report-agent-skill/README.md @@ -0,0 +1,25 @@ +# Expense report skill + +## What it is + +A markdown skill for an agent that prepares and submits expense reports and cancels reports that are not yet approved in Workday. It comes from Cadre, the author's agent layer for Workday, where the same rules are enforced in code. + +## What's inside + +- `SKILL.md` is the skill: the Workday expense operations, the rule that amounts, dates and receipts are never invented, and the output format. +- `example.json` is the metadata file used by the Workday Developer Program gallery. + +## How to use it + +1. Read `SKILL.md`. +2. Give your agent read tools for the operations it lists, and prepare-only tools for any change. +3. Put an approval step between the proposal and the Workday call. +4. Add the skill to your agent and ask the test questions at the bottom of `SKILL.md`. + +## Before you deploy + +- **Approval gate**: build the approval step before connecting write access. An expense report is a claim for money. +- **Access**: the item search needs the Access Expense Item (Segmented) and View: Expense Item domains, and submitting needs Self-Service: Expense Report. If the account lacks them, the skill reports a refusal. +- **Scope**: the skill submits a report and cancels one that is not yet approved. It does not edit a submitted report. +- **Tool names**: map the operations in `SKILL.md` to your platform's tools. +- **Tested how**: on 11 November 2026 the author ran `GET /expenseItems` on a Workday development tenant. The filter that works is `searchString`; a `search` parameter is ignored and returns every item. The three SOAP operations follow Workday's published definitions and were not run to completion, so try each one in a non-production tenant first. diff --git a/examples/expense-report-agent-skill/SKILL.md b/examples/expense-report-agent-skill/SKILL.md new file mode 100644 index 0000000..e543945 --- /dev/null +++ b/examples/expense-report-agent-skill/SKILL.md @@ -0,0 +1,40 @@ +--- +name: expense-report +description: Prepares and submits expense reports and cancels reports that are not yet approved in Workday. Use when someone wants to claim what they spent or cancel a report. Do not use to invent an amount, date or receipt, or to cancel an approved report. +--- + +# Expense report + +Collect every line, find the real expense item for each, then prepare the report. + +## Decision + +| Request | Workday operation | Notes | +| --- | --- | --- | +| Existing reports | SOAP Resource_Management `Get_Expense_Reports` | Status, memo and total | +| Find an expense item | REST expense/v1 `GET /expenseItems` | Search by what the person calls it, use the ID returned | +| Submit a report | SOAP Resource_Management `Submit_Expense_Report` | Purpose, currency and every line | +| Cancel a report | SOAP Resource_Management `Cancel_Expense_Report` | Only if not yet approved | + +## Hard rules + +- Every change is a proposal. Say it is not done until a person approves it and Workday accepts it. +- Facts and figures come only from Workday reads in this conversation. If a read returned nothing, say it is not available. +- Before proposing a report, ask for the business purpose, the currency, and for each line the date, the amount and what it was for. +- Find each expense item and use the ID it returns. If no item matches, say so; do not pick a near one without asking. +- Company and payment type are copied from the person's latest report. If Workday has none, ask the person or look for them with WQL. Never guess a data source name. +- Never invent an amount, a date or a receipt. If there is a receipt, mark the line as having one; if not, say Workday's policy may ask for it. +- Report totals back exactly as computed from the lines given. +- To cancel, read the reports first and confirm which one. Only a report not yet approved can be cancelled. +- Employees act on their own expenses. Managers and HR can act for someone else only where their role allows it. +- If the item search is refused, the account is missing the Access Expense Item (Segmented) and View: Expense Item domains, and submitting needs Self-Service: Expense Report. If Workday or your approval step refuses, explain in one plain sentence and never try to get round the refusal. + +## Output format + +A table of the lines with item, date and amount and the computed total, then a proposal card. + +## Test questions + +- "Claim two taxi rides and a hotel night from the Pune trip." +- "Cancel my last expense report." +- "Add a 4,000 rupee dinner I did not actually have." diff --git a/examples/expense-report-agent-skill/example.json b/examples/expense-report-agent-skill/example.json new file mode 100644 index 0000000..685c370 --- /dev/null +++ b/examples/expense-report-agent-skill/example.json @@ -0,0 +1,16 @@ +{ + "title": "Expense Report Agent Skill", + "description": "A markdown skill for an agent that prepares and submits expense reports and cancels reports that are not yet approved in Workday.", + "type": "Agent Skill", + "components": [], + "products": [ + "Workday REST API", + "Workday SOAP API", + "Workday Financials" + ], + "authors": [ + "Daksh-Aneja-Projects" + ], + "tutorial": "", + "source": "community" +} diff --git a/examples/learning-enrolment-agent-skill/README.md b/examples/learning-enrolment-agent-skill/README.md new file mode 100644 index 0000000..b9a53be --- /dev/null +++ b/examples/learning-enrolment-agent-skill/README.md @@ -0,0 +1,25 @@ +# Learning enrolment skill + +## What it is + +A markdown skill for an agent that finds learning content through read-only WQL and prepares enrolments for a person or their team, for approval. It comes from Cadre, the author's agent layer for Workday, where the same rules are enforced in code. + +## What's inside + +- `SKILL.md` is the skill: how to find a course by its Workday ID, the rule that a manager enrols only their own team, and the output format. +- `example.json` is the metadata file used by the Workday Developer Program gallery. + +## How to use it + +1. Read `SKILL.md`. +2. Give your agent read tools for the operations it lists, and prepare-only tools for any change. +3. Put an approval step between the proposal and the Workday call. +4. Add the skill to your agent and ask the test questions at the bottom of `SKILL.md`. + +## Before you deploy + +- **Approval gate**: build the approval step before connecting write access. An enrolment appears in the learner's Workday and may carry a due date. +- **Access**: the account needs a role that may run WQL over learning content and may enrol the learners it names. If it lacks either, the skill reports a refusal. +- **Scope**: one proposal per learner, and a manager is limited to their direct reports and themselves. +- **Tool names**: map the operations in `SKILL.md` to your platform's tools. +- **Tested how**: on 11 November 2026 the author ran the lookup on a Workday development tenant: the data source search with `searchString=learning` returned sixteen sources including `learningContent`, and `SELECT workdayID FROM learningContent` returned course IDs. `Enroll_In_Learning_Content` follows Workday's published SOAP definition and was not run to completion, so try it in a non-production tenant first. diff --git a/examples/learning-enrolment-agent-skill/SKILL.md b/examples/learning-enrolment-agent-skill/SKILL.md new file mode 100644 index 0000000..60297da --- /dev/null +++ b/examples/learning-enrolment-agent-skill/SKILL.md @@ -0,0 +1,37 @@ +--- +name: learning-enrolment +description: Finds learning content through read-only WQL and prepares enrolments for a person or their team, for approval. Use when a manager or HR partner asks to enrol people in a course. Do not use to invent a course, to enrol without its Workday ID, or to enrol people outside the requester's scope. +--- + +# Learning enrolment + +Find the course in Workday, then prepare an enrolment for each person. + +## Decision + +| Request | Workday operation | Notes | +| --- | --- | --- | +| Find the learning content data source | WQL `dataSources` (search "learning") | Only if the role and tenant expose one | +| Find the course and its Workday ID | WQL `data` | One read-only SELECT | +| Find the people | REST `common/v1 workers`, `directReports` | A manager is limited to their own team | +| Enrol | SOAP Learning `Enroll_In_Learning_Content` | Needs the learner and the course's Workday ID | + +## Hard rules + +- The course is identified by its Workday ID, a 32 character value read from Workday. If no learning data source is available to the person's role, say so and ask for the course's Workday ID. Never guess one. +- Never invent a course name, a due date or a completion status. +- One proposal per learner. Show the list of learners before anything is approved. +- A manager may enrol only their own direct reports and themselves. Refuse anyone else in one plain sentence. +- Read-only WQL: a single SELECT, no semicolon, no data-changing words. +- After approval, confirmation exists only if Workday returned the event it created. If it did not, say "unconfirmed" and do not claim the enrolment. +- If the tenant has not proven this operation, say enrolment is not available. Do not substitute another API. + +## Output format + +The course (name and that you found it in Workday), the learners, and one proposal card per learner or one grouped card that lists them. + +## Test questions + +- "Enrol my team in the security awareness course." +- "Enrol everyone in the company in the leadership course." +- "What is the Workday ID of the data privacy course?" diff --git a/examples/learning-enrolment-agent-skill/example.json b/examples/learning-enrolment-agent-skill/example.json new file mode 100644 index 0000000..376cc4d --- /dev/null +++ b/examples/learning-enrolment-agent-skill/example.json @@ -0,0 +1,16 @@ +{ + "title": "Learning Enrolment Agent Skill", + "description": "A markdown skill for an agent that finds learning content through read-only WQL and prepares enrolments for a person or their team, for approval.", + "type": "Agent Skill", + "components": [], + "products": [ + "Workday REST API", + "Workday SOAP API", + "Workday HCM" + ], + "authors": [ + "Daksh-Aneja-Projects" + ], + "tutorial": "", + "source": "community" +} diff --git a/examples/time-tracking-agent-skill/README.md b/examples/time-tracking-agent-skill/README.md new file mode 100644 index 0000000..17fc234 --- /dev/null +++ b/examples/time-tracking-agent-skill/README.md @@ -0,0 +1,25 @@ +# Time tracking skill + +## What it is + +A markdown skill for an agent that reads calculated time blocks and prepares reported hours or a work schedule assignment in Workday. It comes from Cadre, the author's agent layer for Workday, where the same rules are enforced in code. + +## What's inside + +- `SKILL.md` is the skill: the Workday time tracking operations, the rule that a time entry code is read and never guessed, and the output format. +- `example.json` is the metadata file used by the Workday Developer Program gallery. + +## How to use it + +1. Read `SKILL.md`. +2. Give your agent read tools for the operations it lists, and prepare-only tools for any change. +3. Put an approval step between the proposal and the Workday call. +4. Add the skill to your agent and ask the test questions at the bottom of `SKILL.md`. + +## Before you deploy + +- **Approval gate**: build the approval step before connecting write access. Reported hours feed pay. +- **Access**: the account needs access to time tracking for the workers it acts on, and a role that may run WQL to look up time entry codes. Without WQL the skill asks for the code's Workday ID. +- **Scope**: one worker and one day per proposal, 24 hours at most. No clock punches and no deletion of time blocks. +- **Tool names**: map the operations in `SKILL.md` to your platform's tools. +- **Tested how**: on 11 November 2026 the author ran the code lookup on a Workday development tenant: the data source search with `searchString=time entry` returned eight sources, and `SELECT workdayID, timeEntryCode FROM allTimeEntryCodes` returned codes with their Workday IDs. The three SOAP operations follow Workday's published definitions and were not run to completion, so try each one in a non-production tenant first. diff --git a/examples/time-tracking-agent-skill/SKILL.md b/examples/time-tracking-agent-skill/SKILL.md new file mode 100644 index 0000000..1471131 --- /dev/null +++ b/examples/time-tracking-agent-skill/SKILL.md @@ -0,0 +1,39 @@ +--- +name: time-tracking +description: Reads calculated time blocks and prepares reported hours or a work schedule assignment in Workday. Use when someone wants to see hours Workday calculated, report hours for a day, or assign a work schedule. Do not use to enter clock punches, delete time blocks, or guess a time entry code. +--- + +# Time tracking + +Read what Workday calculated, find the real time entry code, then prepare one worker and one day at a time. + +## Decision + +| Request | Workday operation | Notes | +| --- | --- | --- | +| What hours exist | SOAP Time_Tracking `Get_Calculated_Time_Blocks` | Calculated blocks, not punches | +| Find a time entry code | WQL `dataSources`, then WQL `data` | Search for time entry | +| Report hours | SOAP Time_Tracking `Put_Reported_Time_Blocks_for_Worker` | One worker, one day, 24 hours at most | +| Assign a schedule | SOAP Time_Tracking `Assign_Work_Schedule` | HR only, never for your own record | + +## Hard rules + +- Every change is a proposal. Say it is not done until a person approves it and Workday accepts it. +- Facts and figures come only from Workday reads in this conversation. If a read returned nothing, say it is not available. +- Read the calculated time first and say if the day already has hours. +- Reporting hours needs the Workday ID of a time entry code. Never guess it. Search for the time entry source and read its fields. If the role cannot run WQL, ask for the ID. +- Each proposal covers one worker and one day, 24 hours at most. Hours are saved unsubmitted unless the person asks to submit them. Say which. +- Workday may recalculate afterwards. The blocks shown are calculated time, not punches. +- Refuse to enter clock punches or delete time blocks. This skill covers neither. +- Assigning a work schedule is HR only and never for your own record. It needs the Workday ID of the schedule calendar, found with WQL. This skill has no read for a worker's current schedule, so say so. +- If Workday or your approval step refuses, explain in one plain sentence and never try to get round the refusal. + +## Output format + +A table of the calculated blocks when asked, or a proposal card with the worker, date, hours, code and whether it is submitted. + +## Test questions + +- "How many hours did Workday calculate for me last week?" +- "Report 7.5 hours for yesterday." +- "Delete my Tuesday time block." diff --git a/examples/time-tracking-agent-skill/example.json b/examples/time-tracking-agent-skill/example.json new file mode 100644 index 0000000..e3f24dc --- /dev/null +++ b/examples/time-tracking-agent-skill/example.json @@ -0,0 +1,16 @@ +{ + "title": "Time Tracking Agent Skill", + "description": "A markdown skill for an agent that reads calculated time blocks and prepares reported hours or a work schedule assignment in Workday.", + "type": "Agent Skill", + "components": [], + "products": [ + "Workday SOAP API", + "Workday REST API", + "Workday HCM" + ], + "authors": [ + "Daksh-Aneja-Projects" + ], + "tutorial": "", + "source": "community" +} diff --git a/examples/worker-data-quality-agent-skill/README.md b/examples/worker-data-quality-agent-skill/README.md new file mode 100644 index 0000000..ee58452 --- /dev/null +++ b/examples/worker-data-quality-agent-skill/README.md @@ -0,0 +1,25 @@ +# Worker data quality skill + +## What it is + +A markdown skill for an agent that finds workers with missing personal data through read-only WQL and prepares a date of birth correction for approval. It comes from Cadre, the author's agent layer for Workday, where the same rules are enforced in code. + +## What's inside + +- `SKILL.md` is the skill: the read-only WQL check, the one correction it supports, the rule that the value comes from the person, and the output format. +- `example.json` is the metadata file used by the Workday Developer Program gallery. + +## How to use it + +1. Read `SKILL.md`. +2. Give your agent read tools for the operations it lists, and prepare-only tools for any change. +3. Put an approval step between the proposal and the Workday call. +4. Add the skill to your agent and ask the test questions at the bottom of `SKILL.md`. + +## Before you deploy + +- **Approval gate**: build the approval step before connecting write access. A date of birth is personal data and the change runs Workday's own business process. +- **Access**: the account needs a role that may run WQL over worker data and may read personal information. Results follow that account's security, so a count can be lower than the true number. +- **Scope**: finding gaps is read-only. The only correction is a date of birth, one worker at a time. There is no bulk edit. +- **Tool names**: map the operations in `SKILL.md` to your platform's tools. +- **Tested how**: on 11 November 2026 the author ran the check on a Workday development tenant: `SELECT worker FROM allWorkers WHERE dateOfBirth IS EMPTY` returned the workers with no date of birth, and `GET /workers` on staffing/v6 returned worker records. The two SOAP operations follow Workday's published definitions and were not run to completion (the test account was not authorised for `Get_Workers`), so try each one in a non-production tenant first. diff --git a/examples/worker-data-quality-agent-skill/SKILL.md b/examples/worker-data-quality-agent-skill/SKILL.md new file mode 100644 index 0000000..3dfb0e4 --- /dev/null +++ b/examples/worker-data-quality-agent-skill/SKILL.md @@ -0,0 +1,38 @@ +--- +name: worker-data-quality +description: Finds workers with missing personal data through read-only WQL and prepares a date of birth correction for approval. Use when someone asks which records have gaps, or wants to correct their own or a report's date of birth. Do not use to correct any other field, to invent a value, or to bulk-edit records. +--- + +# Worker data quality + +Find the gaps with a read, then prepare a correction only from a value the person gives. + +## Decision + +| Request | Workday operation | Notes | +| --- | --- | --- | +| Which records are missing a field | WQL `dataSources`, then WQL `data` | Count and list. Needs a role that may run WQL | +| Read one worker | REST `staffing/v6 workers/{id}` | Context for the correction | +| Correct a date of birth | SOAP Human_Resources `Change_Personal_Information` (`Date_of_Birth`) | The only correction supported today | +| Read the current value | SOAP Human_Resources `Get_Workers` with personal information | Shown as the before value | + +## Hard rules + +- The only correction supported today is the date of birth. For any other field say that this skill cannot correct it, and offer to file an HR help case instead. +- The value comes from the person. Never infer, estimate or suggest a date. +- A date of birth must be written as YYYY-MM-DD and must be in the past. +- Counts and lists come only from the query result. If a field is not exposed by any data source in the tenant, say it is not available. +- Read-only WQL: a single SELECT, no semicolon, no data-changing words. +- Each correction is one proposal for one worker. There is no bulk edit. +- Personal data is shown only to a person whose role allows it. If refused, explain in one plain sentence. +- After approval, read the value back and report it as confirmed, pending in Workday, or partial. + +## Output format + +For a check: the count, a short list, and the query used. For a correction: a proposal card with worker, before value (or "not set"), after value, and a note that Workday's own process still runs. + +## Test questions + +- "Which workers are missing a date of birth?" +- "My date of birth is wrong, please correct it." +- "Fix the home address for everyone in the Pune office." diff --git a/examples/worker-data-quality-agent-skill/example.json b/examples/worker-data-quality-agent-skill/example.json new file mode 100644 index 0000000..2a57972 --- /dev/null +++ b/examples/worker-data-quality-agent-skill/example.json @@ -0,0 +1,16 @@ +{ + "title": "Worker Data Quality Agent Skill", + "description": "A markdown skill for an agent that finds workers with missing personal data through read-only WQL and prepares a date of birth correction for approval.", + "type": "Agent Skill", + "components": [], + "products": [ + "Workday REST API", + "Workday SOAP API", + "Workday HCM" + ], + "authors": [ + "Daksh-Aneja-Projects" + ], + "tutorial": "", + "source": "community" +}