Gokaizen Suite AI actions v0.0.8 · 40 actions

Time and attendance

Timesheets, the time clock, and what has not been encoded yet.

timesheetreads only

Read a timesheet

One person's timesheet days over a date range: status, hours per project or cost center, overtime claimed, remarks, and whether the day is draft, submitted, approved or locked for payroll. Leave employeePublicId out for the signed-in person's own.

InputTypeMeaning
employeePublicIdstringoptional
fromstringrequired
tostringrequired

Someone asks: “Show me Juan's timesheet for the first cutoff of October.”

Input

{
  "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
  "from": "2026-10-01",
  "to": "2026-10-15"
}

What comes back

Dela Cruz, Juan (EMP-001), 2026-10-01 to 2026-10-15: 3 days, 24.00h
2026-10-13 · Present · Acme Steel - Bridge retrofit 8.00h · approved
2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+2.00 OT) · submitted · from the time clock
2026-10-15 · Present · Administration 8.00h · yard day · draft

Structured content

Show the structured answer
{
  "employee": {
    "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
    "name": "Dela Cruz, Juan",
    "employeeNumber": "EMP-001"
  },
  "days": [
    {
      "publicId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
      "date": "2026-10-14",
      "dayStatus": "present",
      "dayStatusLabel": "Present",
      "status": "submitted",
      "source": "punches",
      "totalHours": "8.00",
      "totalOvertimeHours": "2.00",
      "remarks": null,
      "allocations": [
        {
          "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
          "costCenterPublicId": null,
          "label": "Acme Steel - Bridge retrofit",
          "hours": "8.00",
          "overtimeHours": "2.00"
        }
      ]
    }
  ]
}

plan_time_entriesreads only

Plan time entries

Step one of logging time for people. Resolves every employee, date and project or cost center, says which days already exist and would be replaced, and returns a planId. Show the plan to the person; call commit_time_entries with the planId only after they agree. One entry is one line of a day; several entries on the same employee and date become one day with several lines. A day that already exists is replaced whole by the lines given here.

InputTypeMeaning
entriesarray of objectrequired
entries[].employeePublicIdstringrequired
entries[].datestringrequired
entries[].projectPublicIdstringoptional
entries[].costCenterPublicIdstringoptional
entries[].hoursnumberoptional, default 0Decimal hours, e.g. 7.5
entries[].overtimeHoursnumberoptional, default 0Claimed overtime. Approval is a separate request.
entries[].statuspresent | absent | rest_day | holiday | on_leave | suspendedoptional, default "present"
entries[].remarksstringoptional

Someone asks: “Log 8 hours on the bridge for Juan and Maria yesterday, Juan did 1 hour overtime.”

Input

{
  "entries": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "date": "2026-10-14",
      "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "hours": 8,
      "overtimeHours": 1
    },
    {
      "employeePublicId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
      "date": "2026-10-14",
      "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
      "hours": 8
    }
  ]
}

What comes back

Plan kQ3x9Lm2pA: 2 days for 2 people, 1 replacing a day already encoded.
Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h
Show this to the person. If they agree, call commit_time_entries with planId "kQ3x9Lm2pA".

Structured content

Show the structured answer
{
  "planId": "kQ3x9Lm2pA",
  "days": [
    "Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there",
    "Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h"
  ],
  "replacing": 1
}

commit_time_entrieschanges data

Commit time entries

Step two: writes the days exactly as plan_time_entries showed them. Takes the planId from that plan. A plan can be committed once and expires after fifteen minutes.

InputTypeMeaning
planIdstringrequired

Someone asks: “Yes, go ahead.”

Input

{
  "planId": "kQ3x9Lm2pA"
}

What comes back

2 days saved.
saved · Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
saved · Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h

Structured content

Show the structured answer
{
  "saved": 2,
  "refused": []
}

attendancereads only

Attendance

Who worked which day over a range, with hours, overtime claimed and approved, the day's status and any leave on it. Narrow by people, project or cost center. Totals come back with the rows.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdsarray of stringoptional
projectPublicIdstringoptional
costCenterPublicIdstringoptional
limitintegeroptional, default 20How many rows to show, at most 50; the totals cover everything matched.

Someone asks: “Who worked on the bridge last week?”

Input

{
  "from": "2026-10-06",
  "to": "2026-10-10",
  "projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
  "limit": 3
}

What comes back

Attendance 2026-10-06 to 2026-10-10: 3 days.
2026-10-06 · Dela Cruz, Juan (EMP-001) · Present · 8.00h · ALPHA
2026-10-07 · Dela Cruz, Juan (EMP-001) · Present · 8.00h (+2.00 OT, 2.00 approved) · ALPHA
2026-10-07 · Santos, Maria (EMP-007) · Present · 4.00h · ALPHA · on leave: Vacation leave

Structured content

Show the structured answer
{
  "rows": [
    {
      "recordDate": "2026-10-06",
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "employeeName": "Dela Cruz, Juan",
      "employeeNumber": "EMP-001",
      "dayStatusLabel": "Present",
      "totalHours": "8.00",
      "overtimeHours": "0.00",
      "approvedOvertimeHours": "0.00",
      "targetsLabel": "ALPHA"
    }
  ],
  "summary": {
    "days": 3,
    "people": 1,
    "totalHours": "24.00",
    "overtimeHours": "2.00",
    "approvedOvertimeHours": "2.00"
  },
  "totalRows": 3
}

unfiled_overtimereads only

Overtime claimed but not filed

Overtime hours sitting on timesheets with no overtime request covering them, so nobody has approved them and payroll will not pay them. One row per person, day and job.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdstringoptional

Someone asks: “Is there overtime nobody has filed a request for?”

Input

{
  "from": "2026-10-01",
  "to": "2026-10-15"
}

What comes back

1 row of overtime with no request:
2026-10-14 · Dela Cruz, Juan (EMP-001) · Acme Steel - Bridge retrofit · claimed 2.00h, filed 0.00h, unfiled 2.00h

Structured content

Show the structured answer
{
  "rows": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "employeeName": "Dela Cruz, Juan",
      "employeeNumber": "EMP-001",
      "recordDate": "2026-10-14",
      "targetLabel": "Acme Steel - Bridge retrofit",
      "claimedHours": "2.00",
      "requestedHours": "0.00",
      "unfiledHours": "2.00",
      "isLocked": false
    }
  ]
}

timesheet_gapsreads only

Timesheet completeness

How much of a pay period is encoded: who has days missing, so the period can be closed. Name the period, or any date inside it.

InputTypeMeaning
payPeriodPublicIdsarray of stringrequired
asOfstringoptionalJudge completeness up to this date rather than the period's end.

Someone asks: “Is the current cutoff fully encoded?”

Input

{
  "payPeriodPublicIds": [
    "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c"
  ]
}

What comes back

2026-10-01 → 2026-10-15 (Semi-monthly) · encoded up to 2026-10-13 · 198 person(s) on the roster

Structured content

Show the structured answer
{
  "periods": [
    {
      "payPeriodPublicId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
      "scheduleName": "Semi-monthly",
      "startDate": "2026-10-01",
      "endDate": "2026-10-15",
      "throughDate": "2026-10-13",
      "hasStarted": true,
      "people": 198
    }
  ]
}

clock_daysreads only

Time clock days

Days built from people's own clock-in and clock-out punches: first in, last out, hours worked and on break, whether the day is still open, how it was verified, and whether a timekeeper has approved it. `flaggedOnly` narrows to days the suite has flagged for review.

InputTypeMeaning
fromstringrequired
tostringrequired
employeePublicIdstringoptional
statuspending | approved | rejectedoptional
flaggedOnlybooleanoptional, default false
limitintegeroptional, default 30

Someone asks: “Show me the clock days waiting for approval.”

Input

{
  "from": "2026-10-13",
  "to": "2026-10-15",
  "status": "pending"
}

What comes back

1 of 1 clock day:
2026-10-14 · Dela Cruz, Juan (EMP-001) · 07:58 to 17:04 · worked 8.10h, break 1.00h · pending · passkey, selfie

Structured content

Show the structured answer
{
  "days": [
    {
      "employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
      "employeeName": "Dela Cruz, Juan",
      "recordDate": "2026-10-14",
      "firstIn": "07:58",
      "lastOut": "17:04",
      "workedHours": 8.1,
      "breakHours": 1,
      "approval": {
        "status": "pending"
      },
      "verifications": [
        "passkey",
        "selfie"
      ],
      "flags": []
    }
  ],
  "total": 1
}

my_clockreads only

My clock

Whether the signed-in person may clock in or out right now, which it would be, and the company's current time and date. Clocking itself is done in the app, which can read the device's location.

Takes no input.

Someone asks: “Can I clock out yet?”

Input

{}

What comes back

2026-10-15 17:12 (Asia/Manila).
You may clock: the next punch would be out.
Clocking in or out is done in the suite itself, which checks where you are.

Structured content

Show the structured answer
{
  "clock": {
    "canClock": true,
    "unavailableReason": null,
    "today": "2026-10-15",
    "localTime": "17:12",
    "timeZone": "Asia/Manila",
    "nextKind": "out",
    "anyLocation": false
  }
}

Gokaizen Suite · v0.0.8 · this reference lists what the server can do and holds no company data. Questions: internal@gokaizen.ai