openapi: '3.0.3'
info:
title: Backbone API
version: '1.0.0'
description: |
Auto-generated by backbone-cli.
This API provides 11 standard CRUD endpoints for each model.
servers:
- url: /
description: Development server
tags:
- name: CompensationChanges
description: CompensationChange management endpoints
- name: PayrollEntries
description: PayrollEntry management endpoints
- name: SalarySlips
description: SalarySlip management endpoints
- name: SalarySlipLines
description: SalarySlipLine management endpoints
- name: SalaryStructures
description: SalaryStructure management endpoints
- name: SalaryComponents
description: SalaryComponent management endpoints
paths:
/api/v1/payroll/compensation_changes:
get:
tags:
- CompensationChanges
summary: List CompensationChanges
description: Get a paginated list of CompensationChanges with optional filtering and sorting
operationId: listCompensationChanges
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChangeList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- CompensationChanges
summary: Create CompensationChange
description: Create a new CompensationChange
operationId: createCompensationChange
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCompensationChangeRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/compensation_changes/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- CompensationChanges
summary: Get CompensationChange by ID
operationId: getCompensationChange
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- CompensationChanges
summary: Update CompensationChange (full)
operationId: updateCompensationChange
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCompensationChangeRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- CompensationChanges
summary: Update CompensationChange (partial)
operationId: patchCompensationChange
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchCompensationChangeRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- CompensationChanges
summary: Delete CompensationChange (soft)
operationId: deleteCompensationChange
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/compensation_changes/bulk:
post:
tags:
- CompensationChanges
summary: Bulk create CompensationChanges
operationId: bulkCreateCompensationChanges
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateCompensationChangeRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CompensationChange'
put:
tags:
- CompensationChanges
summary: Bulk update CompensationChanges (full, atomic)
operationId: bulkUpdateCompensationChanges
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateCompensationChangeRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChangeBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- CompensationChanges
summary: Bulk partial-update CompensationChanges (atomic)
operationId: bulkPatchCompensationChanges
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChangeBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/compensation_changes/upsert:
post:
tags:
- CompensationChanges
summary: Upsert CompensationChange
operationId: upsertCompensationChange
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCompensationChangeRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
/api/v1/payroll/compensation_changes/trash:
get:
tags:
- CompensationChanges
summary: List deleted CompensationChanges
operationId: listDeletedCompensationChanges
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChangeList'
/api/v1/payroll/compensation_changes/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- CompensationChanges
summary: Restore deleted CompensationChange
operationId: restoreCompensationChange
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChange'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/compensation_changes/empty:
delete:
tags:
- CompensationChanges
summary: Empty trash for CompensationChanges
operationId: emptyTrashCompensationChanges
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/compensation_changes/delete/bulk:
post:
tags:
- CompensationChanges
summary: Bulk soft-delete CompensationChanges by ids (atomic)
operationId: bulkDeleteCompensationChanges
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/compensation_changes/restore/bulk:
post:
tags:
- CompensationChanges
summary: Bulk restore CompensationChanges by ids (atomic)
operationId: bulkRestoreCompensationChanges
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/CompensationChangeBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/compensation_changes/restore/all:
post:
tags:
- CompensationChanges
summary: Restore all soft-deleted CompensationChanges
operationId: restoreAllCompensationChanges
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/compensation_changes/trash/bulk:
delete:
tags:
- CompensationChanges
summary: Bulk permanently-delete CompensationChanges from trash by ids (atomic)
operationId: bulkPermanentDeleteCompensationChanges
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/payroll_entries:
get:
tags:
- PayrollEntries
summary: List PayrollEntries
description: Get a paginated list of PayrollEntries with optional filtering and sorting
operationId: listPayrollEntries
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntryList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- PayrollEntries
summary: Create PayrollEntry
description: Create a new PayrollEntry
operationId: createPayrollEntry
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePayrollEntryRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/payroll_entries/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- PayrollEntries
summary: Get PayrollEntry by ID
operationId: getPayrollEntry
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- PayrollEntries
summary: Update PayrollEntry (full)
operationId: updatePayrollEntry
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePayrollEntryRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- PayrollEntries
summary: Update PayrollEntry (partial)
operationId: patchPayrollEntry
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchPayrollEntryRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- PayrollEntries
summary: Delete PayrollEntry (soft)
operationId: deletePayrollEntry
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/payroll_entries/bulk:
post:
tags:
- PayrollEntries
summary: Bulk create PayrollEntries
operationId: bulkCreatePayrollEntries
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreatePayrollEntryRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PayrollEntry'
put:
tags:
- PayrollEntries
summary: Bulk update PayrollEntries (full, atomic)
operationId: bulkUpdatePayrollEntries
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdatePayrollEntryRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntryBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- PayrollEntries
summary: Bulk partial-update PayrollEntries (atomic)
operationId: bulkPatchPayrollEntries
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntryBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/payroll_entries/upsert:
post:
tags:
- PayrollEntries
summary: Upsert PayrollEntry
operationId: upsertPayrollEntry
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePayrollEntryRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
/api/v1/payroll/payroll_entries/trash:
get:
tags:
- PayrollEntries
summary: List deleted PayrollEntries
operationId: listDeletedPayrollEntries
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntryList'
/api/v1/payroll/payroll_entries/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- PayrollEntries
summary: Restore deleted PayrollEntry
operationId: restorePayrollEntry
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntry'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/payroll_entries/empty:
delete:
tags:
- PayrollEntries
summary: Empty trash for PayrollEntries
operationId: emptyTrashPayrollEntries
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/payroll_entries/delete/bulk:
post:
tags:
- PayrollEntries
summary: Bulk soft-delete PayrollEntries by ids (atomic)
operationId: bulkDeletePayrollEntries
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/payroll_entries/restore/bulk:
post:
tags:
- PayrollEntries
summary: Bulk restore PayrollEntries by ids (atomic)
operationId: bulkRestorePayrollEntries
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/PayrollEntryBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/payroll_entries/restore/all:
post:
tags:
- PayrollEntries
summary: Restore all soft-deleted PayrollEntries
operationId: restoreAllPayrollEntries
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/payroll_entries/trash/bulk:
delete:
tags:
- PayrollEntries
summary: Bulk permanently-delete PayrollEntries from trash by ids (atomic)
operationId: bulkPermanentDeletePayrollEntries
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slips:
get:
tags:
- SalarySlips
summary: List SalarySlips
description: Get a paginated list of SalarySlips with optional filtering and sorting
operationId: listSalarySlips
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- SalarySlips
summary: Create SalarySlip
description: Create a new SalarySlip
operationId: createSalarySlip
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSalarySlipRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/salary_slips/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- SalarySlips
summary: Get SalarySlip by ID
operationId: getSalarySlip
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- SalarySlips
summary: Update SalarySlip (full)
operationId: updateSalarySlip
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalarySlipRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- SalarySlips
summary: Update SalarySlip (partial)
operationId: patchSalarySlip
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchSalarySlipRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- SalarySlips
summary: Delete SalarySlip (soft)
operationId: deleteSalarySlip
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_slips/bulk:
post:
tags:
- SalarySlips
summary: Bulk create SalarySlips
operationId: bulkCreateSalarySlips
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateSalarySlipRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalarySlip'
put:
tags:
- SalarySlips
summary: Bulk update SalarySlips (full, atomic)
operationId: bulkUpdateSalarySlips
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateSalarySlipRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- SalarySlips
summary: Bulk partial-update SalarySlips (atomic)
operationId: bulkPatchSalarySlips
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slips/upsert:
post:
tags:
- SalarySlips
summary: Upsert SalarySlip
operationId: upsertSalarySlip
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalarySlipRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
/api/v1/payroll/salary_slips/trash:
get:
tags:
- SalarySlips
summary: List deleted SalarySlips
operationId: listDeletedSalarySlips
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipList'
/api/v1/payroll/salary_slips/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- SalarySlips
summary: Restore deleted SalarySlip
operationId: restoreSalarySlip
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlip'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_slips/empty:
delete:
tags:
- SalarySlips
summary: Empty trash for SalarySlips
operationId: emptyTrashSalarySlips
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/salary_slips/delete/bulk:
post:
tags:
- SalarySlips
summary: Bulk soft-delete SalarySlips by ids (atomic)
operationId: bulkDeleteSalarySlips
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slips/restore/bulk:
post:
tags:
- SalarySlips
summary: Bulk restore SalarySlips by ids (atomic)
operationId: bulkRestoreSalarySlips
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slips/restore/all:
post:
tags:
- SalarySlips
summary: Restore all soft-deleted SalarySlips
operationId: restoreAllSalarySlips
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/salary_slips/trash/bulk:
delete:
tags:
- SalarySlips
summary: Bulk permanently-delete SalarySlips from trash by ids (atomic)
operationId: bulkPermanentDeleteSalarySlips
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slip_lines:
get:
tags:
- SalarySlipLines
summary: List SalarySlipLines
description: Get a paginated list of SalarySlipLines with optional filtering and sorting
operationId: listSalarySlipLines
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLineList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- SalarySlipLines
summary: Create SalarySlipLine
description: Create a new SalarySlipLine
operationId: createSalarySlipLine
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSalarySlipLineRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/salary_slip_lines/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- SalarySlipLines
summary: Get SalarySlipLine by ID
operationId: getSalarySlipLine
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- SalarySlipLines
summary: Update SalarySlipLine (full)
operationId: updateSalarySlipLine
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalarySlipLineRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- SalarySlipLines
summary: Update SalarySlipLine (partial)
operationId: patchSalarySlipLine
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchSalarySlipLineRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- SalarySlipLines
summary: Delete SalarySlipLine (soft)
operationId: deleteSalarySlipLine
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_slip_lines/bulk:
post:
tags:
- SalarySlipLines
summary: Bulk create SalarySlipLines
operationId: bulkCreateSalarySlipLines
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateSalarySlipLineRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalarySlipLine'
put:
tags:
- SalarySlipLines
summary: Bulk update SalarySlipLines (full, atomic)
operationId: bulkUpdateSalarySlipLines
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateSalarySlipLineRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLineBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- SalarySlipLines
summary: Bulk partial-update SalarySlipLines (atomic)
operationId: bulkPatchSalarySlipLines
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLineBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slip_lines/upsert:
post:
tags:
- SalarySlipLines
summary: Upsert SalarySlipLine
operationId: upsertSalarySlipLine
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalarySlipLineRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
/api/v1/payroll/salary_slip_lines/trash:
get:
tags:
- SalarySlipLines
summary: List deleted SalarySlipLines
operationId: listDeletedSalarySlipLines
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLineList'
/api/v1/payroll/salary_slip_lines/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- SalarySlipLines
summary: Restore deleted SalarySlipLine
operationId: restoreSalarySlipLine
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLine'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_slip_lines/empty:
delete:
tags:
- SalarySlipLines
summary: Empty trash for SalarySlipLines
operationId: emptyTrashSalarySlipLines
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/salary_slip_lines/delete/bulk:
post:
tags:
- SalarySlipLines
summary: Bulk soft-delete SalarySlipLines by ids (atomic)
operationId: bulkDeleteSalarySlipLines
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slip_lines/restore/bulk:
post:
tags:
- SalarySlipLines
summary: Bulk restore SalarySlipLines by ids (atomic)
operationId: bulkRestoreSalarySlipLines
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalarySlipLineBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_slip_lines/restore/all:
post:
tags:
- SalarySlipLines
summary: Restore all soft-deleted SalarySlipLines
operationId: restoreAllSalarySlipLines
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/salary_slip_lines/trash/bulk:
delete:
tags:
- SalarySlipLines
summary: Bulk permanently-delete SalarySlipLines from trash by ids (atomic)
operationId: bulkPermanentDeleteSalarySlipLines
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_structures:
get:
tags:
- SalaryStructures
summary: List SalaryStructures
description: Get a paginated list of SalaryStructures with optional filtering and sorting
operationId: listSalaryStructures
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructureList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- SalaryStructures
summary: Create SalaryStructure
description: Create a new SalaryStructure
operationId: createSalaryStructure
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSalaryStructureRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/salary_structures/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- SalaryStructures
summary: Get SalaryStructure by ID
operationId: getSalaryStructure
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- SalaryStructures
summary: Update SalaryStructure (full)
operationId: updateSalaryStructure
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalaryStructureRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- SalaryStructures
summary: Update SalaryStructure (partial)
operationId: patchSalaryStructure
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchSalaryStructureRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- SalaryStructures
summary: Delete SalaryStructure (soft)
operationId: deleteSalaryStructure
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_structures/bulk:
post:
tags:
- SalaryStructures
summary: Bulk create SalaryStructures
operationId: bulkCreateSalaryStructures
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateSalaryStructureRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalaryStructure'
put:
tags:
- SalaryStructures
summary: Bulk update SalaryStructures (full, atomic)
operationId: bulkUpdateSalaryStructures
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateSalaryStructureRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructureBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- SalaryStructures
summary: Bulk partial-update SalaryStructures (atomic)
operationId: bulkPatchSalaryStructures
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructureBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_structures/upsert:
post:
tags:
- SalaryStructures
summary: Upsert SalaryStructure
operationId: upsertSalaryStructure
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalaryStructureRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
/api/v1/payroll/salary_structures/trash:
get:
tags:
- SalaryStructures
summary: List deleted SalaryStructures
operationId: listDeletedSalaryStructures
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructureList'
/api/v1/payroll/salary_structures/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- SalaryStructures
summary: Restore deleted SalaryStructure
operationId: restoreSalaryStructure
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructure'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_structures/empty:
delete:
tags:
- SalaryStructures
summary: Empty trash for SalaryStructures
operationId: emptyTrashSalaryStructures
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/salary_structures/delete/bulk:
post:
tags:
- SalaryStructures
summary: Bulk soft-delete SalaryStructures by ids (atomic)
operationId: bulkDeleteSalaryStructures
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_structures/restore/bulk:
post:
tags:
- SalaryStructures
summary: Bulk restore SalaryStructures by ids (atomic)
operationId: bulkRestoreSalaryStructures
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryStructureBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_structures/restore/all:
post:
tags:
- SalaryStructures
summary: Restore all soft-deleted SalaryStructures
operationId: restoreAllSalaryStructures
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/salary_structures/trash/bulk:
delete:
tags:
- SalaryStructures
summary: Bulk permanently-delete SalaryStructures from trash by ids (atomic)
operationId: bulkPermanentDeleteSalaryStructures
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_components:
get:
tags:
- SalaryComponents
summary: List SalaryComponents
description: Get a paginated list of SalaryComponents with optional filtering and sorting
operationId: listSalaryComponents
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponentList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- SalaryComponents
summary: Create SalaryComponent
description: Create a new SalaryComponent
operationId: createSalaryComponent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSalaryComponentRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/payroll/salary_components/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- SalaryComponents
summary: Get SalaryComponent by ID
operationId: getSalaryComponent
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- SalaryComponents
summary: Update SalaryComponent (full)
operationId: updateSalaryComponent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalaryComponentRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- SalaryComponents
summary: Update SalaryComponent (partial)
operationId: patchSalaryComponent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchSalaryComponentRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- SalaryComponents
summary: Delete SalaryComponent (soft)
operationId: deleteSalaryComponent
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_components/bulk:
post:
tags:
- SalaryComponents
summary: Bulk create SalaryComponents
operationId: bulkCreateSalaryComponents
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateSalaryComponentRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalaryComponent'
put:
tags:
- SalaryComponents
summary: Bulk update SalaryComponents (full, atomic)
operationId: bulkUpdateSalaryComponents
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateSalaryComponentRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponentBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- SalaryComponents
summary: Bulk partial-update SalaryComponents (atomic)
operationId: bulkPatchSalaryComponents
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponentBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_components/upsert:
post:
tags:
- SalaryComponents
summary: Upsert SalaryComponent
operationId: upsertSalaryComponent
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSalaryComponentRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
/api/v1/payroll/salary_components/trash:
get:
tags:
- SalaryComponents
summary: List deleted SalaryComponents
operationId: listDeletedSalaryComponents
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponentList'
/api/v1/payroll/salary_components/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- SalaryComponents
summary: Restore deleted SalaryComponent
operationId: restoreSalaryComponent
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponent'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/payroll/salary_components/empty:
delete:
tags:
- SalaryComponents
summary: Empty trash for SalaryComponents
operationId: emptyTrashSalaryComponents
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/payroll/salary_components/delete/bulk:
post:
tags:
- SalaryComponents
summary: Bulk soft-delete SalaryComponents by ids (atomic)
operationId: bulkDeleteSalaryComponents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_components/restore/bulk:
post:
tags:
- SalaryComponents
summary: Bulk restore SalaryComponents by ids (atomic)
operationId: bulkRestoreSalaryComponents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/SalaryComponentBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/payroll/salary_components/restore/all:
post:
tags:
- SalaryComponents
summary: Restore all soft-deleted SalaryComponents
operationId: restoreAllSalaryComponents
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/payroll/salary_components/trash/bulk:
delete:
tags:
- SalaryComponents
summary: Bulk permanently-delete SalaryComponents from trash by ids (atomic)
operationId: bulkPermanentDeleteSalaryComponents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
components:
schemas:
CompensationChange:
type: object
required:
- id
- employee_id
- change_type
- metadata
properties:
id:
type: string
format: uuid
employee_id:
type: string
format: uuid
change_type:
type: string
new_amount:
nullable: true
type: string
effective_date:
nullable: true
type: string
format: date
reference_id:
nullable: true
type: string
format: uuid
note:
nullable: true
type: string
metadata:
type: object
CompensationChangeBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/CompensationChange'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateCompensationChangeRequest:
type: object
required:
- employee_id
- change_type
- metadata
properties:
employee_id:
type: string
format: uuid
change_type:
type: string
new_amount:
nullable: true
type: string
effective_date:
nullable: true
type: string
format: date
reference_id:
nullable: true
type: string
format: uuid
note:
nullable: true
type: string
metadata:
type: object
UpdateCompensationChangeRequest:
type: object
required:
- employee_id
- change_type
- metadata
properties:
employee_id:
type: string
format: uuid
change_type:
type: string
new_amount:
nullable: true
type: string
effective_date:
nullable: true
type: string
format: date
reference_id:
nullable: true
type: string
format: uuid
note:
nullable: true
type: string
metadata:
type: object
PatchCompensationChangeRequest:
type: object
properties:
employee_id:
type: string
format: uuid
change_type:
type: string
new_amount:
nullable: true
type: string
effective_date:
nullable: true
type: string
format: date
reference_id:
nullable: true
type: string
format: uuid
note:
nullable: true
type: string
metadata:
type: object
CompensationChangeList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/CompensationChange'
meta:
$ref: '#/components/schemas/PaginationMeta'
PayrollEntry:
type: object
required:
- id
- period_year
- period_month
- status
- total_gross
- total_deductions
- total_net
- metadata
properties:
id:
type: string
format: uuid
period_year:
type: integer
format: int32
period_month:
type: integer
format: int32
posting_date:
nullable: true
type: string
format: date-time
timesheet_approval_id:
nullable: true
type: string
format: uuid
period_start:
nullable: true
type: string
format: date
period_end:
nullable: true
type: string
format: date
status:
type: string
salary_expense_account_id:
nullable: true
type: string
format: uuid
salary_payable_account_id:
nullable: true
type: string
format: uuid
total_gross:
type: string
total_deductions:
type: string
total_net:
type: string
journal_id:
nullable: true
type: string
format: uuid
accounting_post_id:
nullable: true
type: string
format: uuid
metadata:
type: object
PayrollEntryBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/PayrollEntry'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreatePayrollEntryRequest:
type: object
required:
- period_year
- period_month
- status
- total_gross
- total_deductions
- total_net
- metadata
properties:
period_year:
type: integer
format: int32
period_month:
type: integer
format: int32
posting_date:
nullable: true
type: string
format: date-time
timesheet_approval_id:
nullable: true
type: string
format: uuid
period_start:
nullable: true
type: string
format: date
period_end:
nullable: true
type: string
format: date
status:
type: string
salary_expense_account_id:
nullable: true
type: string
format: uuid
salary_payable_account_id:
nullable: true
type: string
format: uuid
total_gross:
type: string
total_deductions:
type: string
total_net:
type: string
journal_id:
nullable: true
type: string
format: uuid
accounting_post_id:
nullable: true
type: string
format: uuid
metadata:
type: object
UpdatePayrollEntryRequest:
type: object
required:
- period_year
- period_month
- status
- total_gross
- total_deductions
- total_net
- metadata
properties:
period_year:
type: integer
format: int32
period_month:
type: integer
format: int32
posting_date:
nullable: true
type: string
format: date-time
timesheet_approval_id:
nullable: true
type: string
format: uuid
period_start:
nullable: true
type: string
format: date
period_end:
nullable: true
type: string
format: date
status:
type: string
salary_expense_account_id:
nullable: true
type: string
format: uuid
salary_payable_account_id:
nullable: true
type: string
format: uuid
total_gross:
type: string
total_deductions:
type: string
total_net:
type: string
journal_id:
nullable: true
type: string
format: uuid
accounting_post_id:
nullable: true
type: string
format: uuid
metadata:
type: object
PatchPayrollEntryRequest:
type: object
properties:
period_year:
type: integer
format: int32
period_month:
type: integer
format: int32
posting_date:
nullable: true
type: string
format: date-time
timesheet_approval_id:
nullable: true
type: string
format: uuid
period_start:
nullable: true
type: string
format: date
period_end:
nullable: true
type: string
format: date
status:
type: string
salary_expense_account_id:
nullable: true
type: string
format: uuid
salary_payable_account_id:
nullable: true
type: string
format: uuid
total_gross:
type: string
total_deductions:
type: string
total_net:
type: string
journal_id:
nullable: true
type: string
format: uuid
accounting_post_id:
nullable: true
type: string
format: uuid
metadata:
type: object
PayrollEntryList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/PayrollEntry'
meta:
$ref: '#/components/schemas/PaginationMeta'
SalarySlip:
type: object
required:
- id
- payroll_entry_id
- employee_id
- working_days
- unpaid_days
- gross_pay
- total_deductions
- net_pay
- metadata
properties:
id:
type: string
format: uuid
payroll_entry_id:
type: string
format: uuid
employee_id:
type: string
format: uuid
structure_id:
nullable: true
type: string
format: uuid
working_days:
type: string
unpaid_days:
type: string
gross_pay:
type: string
total_deductions:
type: string
net_pay:
type: string
overtime_hours:
nullable: true
type: string
tax_method:
nullable: true
type: string
maxLength: 20
metadata:
type: object
SalarySlipBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalarySlip'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateSalarySlipRequest:
type: object
required:
- payroll_entry_id
- employee_id
- working_days
- unpaid_days
- gross_pay
- total_deductions
- net_pay
- metadata
properties:
payroll_entry_id:
type: string
format: uuid
employee_id:
type: string
format: uuid
structure_id:
nullable: true
type: string
format: uuid
working_days:
type: string
unpaid_days:
type: string
gross_pay:
type: string
total_deductions:
type: string
net_pay:
type: string
overtime_hours:
nullable: true
type: string
tax_method:
nullable: true
type: string
maxLength: 20
metadata:
type: object
UpdateSalarySlipRequest:
type: object
required:
- payroll_entry_id
- employee_id
- working_days
- unpaid_days
- gross_pay
- total_deductions
- net_pay
- metadata
properties:
payroll_entry_id:
type: string
format: uuid
employee_id:
type: string
format: uuid
structure_id:
nullable: true
type: string
format: uuid
working_days:
type: string
unpaid_days:
type: string
gross_pay:
type: string
total_deductions:
type: string
net_pay:
type: string
overtime_hours:
nullable: true
type: string
tax_method:
nullable: true
type: string
maxLength: 20
metadata:
type: object
PatchSalarySlipRequest:
type: object
properties:
payroll_entry_id:
type: string
format: uuid
employee_id:
type: string
format: uuid
structure_id:
nullable: true
type: string
format: uuid
working_days:
type: string
unpaid_days:
type: string
gross_pay:
type: string
total_deductions:
type: string
net_pay:
type: string
overtime_hours:
nullable: true
type: string
tax_method:
nullable: true
type: string
maxLength: 20
metadata:
type: object
SalarySlipList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalarySlip'
meta:
$ref: '#/components/schemas/PaginationMeta'
SalarySlipLine:
type: object
required:
- id
- salary_slip_id
- name
- component_type
- is_statutory
- amount
- gl_account_id
- metadata
properties:
id:
type: string
format: uuid
salary_slip_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
is_statutory:
type: boolean
amount:
type: string
gl_account_id:
type: string
format: uuid
source_kind:
nullable: true
type: string
maxLength: 60
source_ref:
nullable: true
type: string
format: uuid
metadata:
type: object
SalarySlipLineBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalarySlipLine'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateSalarySlipLineRequest:
type: object
required:
- salary_slip_id
- name
- component_type
- is_statutory
- amount
- gl_account_id
- metadata
properties:
salary_slip_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
is_statutory:
type: boolean
amount:
type: string
gl_account_id:
type: string
format: uuid
source_kind:
nullable: true
type: string
maxLength: 60
source_ref:
nullable: true
type: string
format: uuid
metadata:
type: object
UpdateSalarySlipLineRequest:
type: object
required:
- salary_slip_id
- name
- component_type
- is_statutory
- amount
- gl_account_id
- metadata
properties:
salary_slip_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
is_statutory:
type: boolean
amount:
type: string
gl_account_id:
type: string
format: uuid
source_kind:
nullable: true
type: string
maxLength: 60
source_ref:
nullable: true
type: string
format: uuid
metadata:
type: object
PatchSalarySlipLineRequest:
type: object
properties:
salary_slip_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
is_statutory:
type: boolean
amount:
type: string
gl_account_id:
type: string
format: uuid
source_kind:
nullable: true
type: string
maxLength: 60
source_ref:
nullable: true
type: string
format: uuid
metadata:
type: object
SalarySlipLineList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalarySlipLine'
meta:
$ref: '#/components/schemas/PaginationMeta'
SalaryStructure:
type: object
required:
- id
- name
- status
- metadata
properties:
id:
type: string
format: uuid
name:
type: string
maxLength: 140
status:
type: string
metadata:
type: object
SalaryStructureBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalaryStructure'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateSalaryStructureRequest:
type: object
required:
- name
- status
- metadata
properties:
name:
type: string
maxLength: 140
status:
type: string
metadata:
type: object
UpdateSalaryStructureRequest:
type: object
required:
- name
- status
- metadata
properties:
name:
type: string
maxLength: 140
status:
type: string
metadata:
type: object
PatchSalaryStructureRequest:
type: object
properties:
name:
type: string
maxLength: 140
status:
type: string
metadata:
type: object
SalaryStructureList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalaryStructure'
meta:
$ref: '#/components/schemas/PaginationMeta'
SalaryComponent:
type: object
required:
- id
- structure_id
- name
- component_type
- amount
- gl_account_id
- is_statutory
- metadata
properties:
id:
type: string
format: uuid
structure_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
amount:
type: string
gl_account_id:
type: string
format: uuid
is_statutory:
type: boolean
metadata:
type: object
SalaryComponentBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalaryComponent'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateSalaryComponentRequest:
type: object
required:
- structure_id
- name
- component_type
- amount
- gl_account_id
- is_statutory
- metadata
properties:
structure_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
amount:
type: string
gl_account_id:
type: string
format: uuid
is_statutory:
type: boolean
metadata:
type: object
UpdateSalaryComponentRequest:
type: object
required:
- structure_id
- name
- component_type
- amount
- gl_account_id
- is_statutory
- metadata
properties:
structure_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
amount:
type: string
gl_account_id:
type: string
format: uuid
is_statutory:
type: boolean
metadata:
type: object
PatchSalaryComponentRequest:
type: object
properties:
structure_id:
type: string
format: uuid
name:
type: string
maxLength: 140
component_type:
type: string
amount:
type: string
gl_account_id:
type: string
format: uuid
is_statutory:
type: boolean
metadata:
type: object
SalaryComponentList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/SalaryComponent'
meta:
$ref: '#/components/schemas/PaginationMeta'
PaginationMeta:
type: object
properties:
total:
type: integer
example: 100
page:
type: integer
example: 1
per_page:
type: integer
example: 20
total_pages:
type: integer
example: 5
Error:
type: object
required:
- code
- message
properties:
code:
type: string
example: VALIDATION_ERROR
message:
type: string
example: Invalid input data
details:
type: object
additionalProperties: true
parameters:
IdParam:
name: id
in: path
required: true
schema:
type: string
format: uuid
PageParam:
name: page
in: query
schema:
type: integer
minimum: 1
default: 1
PerPageParam:
name: per_page
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 20
SortByParam:
name: sort_by
in: query
schema:
type: string
SortOrderParam:
name: sort_order
in: query
schema:
type: string
enum: [asc, desc]
default: asc
responses:
BadRequest:
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBodies:
BatchIds:
required: true
content:
application/json:
schema:
type: object
required: [ids]
properties:
ids:
type: array
items: { type: string }
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: []