AgentSkillsCN

Time Entries

当您需要管理ConnectWise PSA工时记录时,可使用此技能:创建、更新、搜索或管理工时追踪。本技能覆盖计费工时与非计费工时、工作类型、岗位角色、工时审批流程,以及工时表的日常操作,是MSP在ConnectWise PSA中精准追踪技术人员工时并进行计费结算的必备工具。

SKILL.md
--- frontmatter
description: >
  Use this skill when working with ConnectWise PSA time entries - creating,
  updating, searching, or managing time tracking. Covers billable vs non-billable
  time, work types, work roles, time approval, and time sheet operations.
  Essential for MSPs tracking technician time and billing in ConnectWise PSA.
triggers:
  - connectwise time entry
  - time tracking connectwise
  - log time connectwise
  - billable time
  - non-billable time
  - work type
  - work role
  - time sheet
  - time approval
  - hours logged

ConnectWise PSA Time Entry Management

Overview

Time entries in ConnectWise PSA track time spent on tickets, projects, and other activities. Accurate time tracking is essential for billing, resource management, and profitability analysis. This skill covers time entry CRUD operations, work types, work roles, billing settings, and approval workflows.

API Endpoint

code
Base: /time/entries

Time Entry Types

Time can be logged against different record types:

Charge To TypeDescription
ServiceTicketTime against service tickets
ProjectTicketTime against project tickets
ChargeCodeTime against charge codes (internal)
ActivityTime against activities

Complete Time Entry Field Reference

Core Fields

FieldTypeRequiredDescription
idintSystemAuto-generated unique identifier
companyobjectYes*{id: companyId} - Required for ChargeCode
chargeToIdintYesID of ticket/project/activity
chargeToTypestringYesServiceTicket, ProjectTicket, etc.
memberobjectYes{id: memberId} - Who logged time
timeStartdatetimeYesStart time
timeEnddatetimeYesEnd time

Alternative Time Entry

FieldTypeRequiredDescription
actualHoursdecimalAltHours worked (instead of start/end)
hoursDeductdecimalNoHours to deduct (break time)

Billing Fields

FieldTypeRequiredDescription
billableOptionstringNoBillable, DoNotBill, NoCharge, NoDefault
workTypeobjectNo{id: workTypeId}
workRoleobjectNo{id: workRoleId}
hourlyRatedecimalSystemCalculated rate
agreementobjectNo{id: agreementId}

Description Fields

FieldTypeRequiredDescription
notesstringNoTime entry notes
internalNotesstringNoInternal notes (not on invoice)
addToDetailDescriptionFlagbooleanNoAdd notes to ticket description
addToInternalAnalysisFlagbooleanNoAdd to internal analysis
addToResolutionFlagbooleanNoAdd to resolution

Status Fields

FieldTypeRequiredDescription
statusstringSystemOpen, Rejected, Approved, Billed
emailResourceFlagbooleanNoEmail resource on approval
emailContactFlagbooleanNoEmail contact
emailCcFlagbooleanNoEmail CC recipients
emailCcstringNoCC email addresses

Work Types

Work types categorize the nature of work performed.

Common Work Types

TypeDescriptionTypical Billing
RegularNormal work hoursBillable
OvertimeAfter-hours work1.5x rate
TrainingTraining timeNon-billable
TravelTravel timeVaries
RemoteRemote supportBillable
On-siteOn-site workBillable
AdministrativeAdmin tasksNon-billable

Get Work Types

http
GET /time/workTypes

Work Roles

Work roles determine billing rates based on skill level.

Common Work Roles

RoleDescriptionTypical Rate
Level 1 TechHelp desk$75-100/hr
Level 2 TechDesktop support$100-125/hr
Level 3 TechSystems admin$125-150/hr
EngineerSenior engineer$150-200/hr
ConsultantExpert consultant$200-250/hr
Project ManagerPM work$125-175/hr

Get Work Roles

http
GET /time/workRoles

Billing Options

Billable Option Values

OptionDescription
BillableTime is billable at standard rate
DoNotBillTime excluded from billing
NoChargeTime shows on invoice at $0
NoDefaultUse ticket/agreement default

How Billing is Determined

  1. Time entry billableOption (if set)
  2. Ticket billTime setting
  3. Agreement billing rules
  4. Company default

API Operations

Create Time Entry (Start/End)

http
POST /time/entries
Content-Type: application/json

{
  "chargeToId": 54321,
  "chargeToType": "ServiceTicket",
  "member": {"id": 123},
  "timeStart": "2024-02-15T09:00:00Z",
  "timeEnd": "2024-02-15T10:30:00Z",
  "workType": {"id": 1},
  "workRole": {"id": 2},
  "billableOption": "Billable",
  "notes": "Diagnosed email delivery issue. Identified blocked sender.",
  "addToDetailDescriptionFlag": true
}

Create Time Entry (Actual Hours)

http
POST /time/entries
Content-Type: application/json

{
  "chargeToId": 54321,
  "chargeToType": "ServiceTicket",
  "member": {"id": 123},
  "timeStart": "2024-02-15T09:00:00Z",
  "actualHours": 1.5,
  "workType": {"id": 1},
  "workRole": {"id": 2},
  "billableOption": "Billable",
  "notes": "Configured DNS records and tested mail flow."
}

Create Time Entry Against Charge Code

http
POST /time/entries
Content-Type: application/json

{
  "chargeToId": 10,
  "chargeToType": "ChargeCode",
  "company": {"id": 12345},
  "member": {"id": 123},
  "timeStart": "2024-02-15T08:00:00Z",
  "actualHours": 0.5,
  "workType": {"id": 3},
  "billableOption": "DoNotBill",
  "notes": "Weekly team meeting"
}

Get Time Entry

http
GET /time/entries/{id}

Update Time Entry

http
PATCH /time/entries/{id}
Content-Type: application/json

{
  "notes": "Updated notes with additional details.",
  "actualHours": 2.0
}

Delete Time Entry

http
DELETE /time/entries/{id}

Note: Cannot delete billed time entries.

Search Time Entries

http
GET /time/entries?conditions=member/id=123 and timeStart>=[2024-02-01]

Common Query Patterns

Time entries for a ticket:

code
conditions=chargeToId=54321 and chargeToType="ServiceTicket"

Time entries by member:

code
conditions=member/id=123

Time entries by date range:

code
conditions=timeStart>=[2024-02-01] and timeStart<[2024-03-01]

Unbilled time entries:

code
conditions=status="Open" and billableOption="Billable"

Time entries for company:

code
conditions=company/id=12345

Approved time waiting for billing:

code
conditions=status="Approved" and billableOption="Billable"

My time this week:

code
conditions=member/id=123 and timeStart>=[2024-02-12] and timeStart<[2024-02-19]

Time Sheet Operations

Time Sheet Endpoint

code
/time/sheets

Get Time Sheets

http
GET /time/sheets?conditions=member/id=123 and year=2024 and period=7

Time Sheet Status Values

StatusDescription
OpenTime sheet open for editing
SubmittedSubmitted for approval
ApprovedApproved by manager
RejectedReturned for correction

Submit Time Sheet

http
PATCH /time/sheets/{id}
Content-Type: application/json

{
  "status": "Submitted"
}

Approval Workflow

Approval Status Values

StatusDescription
OpenPending approval
ApprovedApproved for billing
RejectedRejected, needs correction
BilledAlready invoiced

Approve Time Entry

http
PATCH /time/entries/{id}
Content-Type: application/json

{
  "status": "Approved"
}

Reject Time Entry

http
PATCH /time/entries/{id}
Content-Type: application/json

{
  "status": "Rejected",
  "internalNotes": "Please add more detail about work performed."
}

Bulk Approval

http
POST /time/entries/bulk
Content-Type: application/json

{
  "ids": [1001, 1002, 1003],
  "operation": {
    "status": "Approved"
  }
}

Charge Codes

Charge codes are used for non-ticket time (meetings, training, etc.).

Get Charge Codes

http
GET /time/chargeCodes

Common Charge Codes

CodeDescriptionBillable
MTNGInternal meetingsNo
TRNGTrainingNo
ADMINAdministrativeNo
PTOPaid time offNo
PROJProject workYes
ONCALLOn-call timeVaries

Best Practices

  1. Log time promptly - Enter time daily, not at end of week
  2. Be specific in notes - Document what was done for invoice clarity
  3. Use correct work type - Important for accurate billing rates
  4. Set appropriate work role - Affects billing rate
  5. Mark non-billable correctly - Don't inflate billable hours
  6. Use charge codes - For internal time tracking
  7. Submit time sheets - Follow approval workflow
  8. Review before approval - Verify accuracy before submitting

Error Handling

ErrorCauseResolution
chargeToId requiredMissing ticket/project IDInclude chargeToId
member requiredMissing member referenceInclude member: {id: x}
timeStart requiredMissing start timeInclude timeStart field
Invalid work typeWork type doesn't existQuery workTypes endpoint
Cannot deleteTime already billedCannot delete billed entries
Invalid statusInvalid status valueUse Open, Approved, Rejected

Related Skills