mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 09:30:59 +00:00
143 lines
4.3 KiB
TypeScript
143 lines
4.3 KiB
TypeScript
import { hrApi } from "@/auth/http";
|
|
import type {
|
|
EmployeeSalary,
|
|
IncomeTaxBracket,
|
|
PayrollRun,
|
|
PayrollRunStatus,
|
|
Payslip,
|
|
SalaryComponent,
|
|
SalaryStructure,
|
|
StatutoryRate,
|
|
} from "./types";
|
|
|
|
interface Page<T> {
|
|
items: T[];
|
|
total: number;
|
|
page: number;
|
|
pageCount: number;
|
|
}
|
|
|
|
export const seedPayrollStatutory = async () => {
|
|
const response = await hrApi.post<{
|
|
components: { created: string[]; skipped: string[] };
|
|
taxBands: string;
|
|
rates: { created: string[]; skipped: string[] };
|
|
}>("/payroll/seed-statutory");
|
|
return response.data;
|
|
};
|
|
|
|
export const listComponents = async (): Promise<SalaryComponent[]> => {
|
|
const response = await hrApi.get<SalaryComponent[]>("/payroll/components");
|
|
return response.data;
|
|
};
|
|
|
|
export const listStructures = async (): Promise<SalaryStructure[]> => {
|
|
const response = await hrApi.get<SalaryStructure[]>("/payroll/structures");
|
|
return response.data;
|
|
};
|
|
|
|
export const getStructure = async (id: string): Promise<SalaryStructure> => {
|
|
const response = await hrApi.get<SalaryStructure>(`/payroll/structures/${id}`);
|
|
return response.data;
|
|
};
|
|
|
|
export const createStructure = async (payload: {
|
|
code: string;
|
|
name: { am: string; en: string };
|
|
lines?: { salaryComponentId: string; amount?: string; rate?: string }[];
|
|
}) => {
|
|
const response = await hrApi.post<SalaryStructure>("/payroll/structures", payload);
|
|
return response.data;
|
|
};
|
|
|
|
export const listTaxBrackets = async (): Promise<IncomeTaxBracket[]> => {
|
|
const response = await hrApi.get<IncomeTaxBracket[]>("/payroll/tax-brackets");
|
|
return response.data;
|
|
};
|
|
|
|
export const listStatutoryRates = async (): Promise<StatutoryRate[]> => {
|
|
const response = await hrApi.get<StatutoryRate[]>("/payroll/statutory-rates");
|
|
return response.data;
|
|
};
|
|
|
|
export const assignSalary = async (payload: {
|
|
employeeId: string;
|
|
basicSalary: string;
|
|
salaryStructureId?: string;
|
|
effectiveFrom: string;
|
|
reason?: string;
|
|
}) => {
|
|
const response = await hrApi.post<EmployeeSalary>("/payroll/salaries", payload);
|
|
return response.data;
|
|
};
|
|
|
|
export const getSalaryHistory = async (employeeId: string) => {
|
|
const response = await hrApi.get<EmployeeSalary[]>(
|
|
`/payroll/salaries/${employeeId}`,
|
|
);
|
|
return response.data;
|
|
};
|
|
|
|
// ── Runs ────────────────────────────────────────────────────────────────────
|
|
|
|
export const listPayrollRuns = async (params?: {
|
|
status?: PayrollRunStatus;
|
|
page?: number;
|
|
limit?: number;
|
|
}) => {
|
|
const response = await hrApi.get<Page<PayrollRun>>("/payroll-runs", { params });
|
|
return response.data;
|
|
};
|
|
|
|
export const getPayrollRun = async (id: string): Promise<PayrollRun> => {
|
|
const response = await hrApi.get<PayrollRun>(`/payroll-runs/${id}`);
|
|
return response.data;
|
|
};
|
|
|
|
export const createPayrollRun = async (payload: {
|
|
periodStart: string;
|
|
periodEnd: string;
|
|
paymentDate?: string;
|
|
note?: string;
|
|
}) => {
|
|
const response = await hrApi.post<PayrollRun>("/payroll-runs", payload);
|
|
return response.data;
|
|
};
|
|
|
|
export const calculatePayrollRun = async (id: string) => {
|
|
const response = await hrApi.post<PayrollRun>(`/payroll-runs/${id}/calculate`);
|
|
return response.data;
|
|
};
|
|
|
|
export const approvePayrollRun = async (id: string) => {
|
|
const response = await hrApi.patch<PayrollRun>(`/payroll-runs/${id}/approve`);
|
|
return response.data;
|
|
};
|
|
|
|
export const markPayrollPaid = async (id: string, paymentDate?: string) => {
|
|
const response = await hrApi.patch<PayrollRun>(`/payroll-runs/${id}/mark-paid`, {
|
|
paymentDate,
|
|
});
|
|
return response.data;
|
|
};
|
|
|
|
export const cancelPayrollRun = async (id: string) => {
|
|
const response = await hrApi.patch<PayrollRun>(`/payroll-runs/${id}/cancel`);
|
|
return response.data;
|
|
};
|
|
|
|
export const listRunPayslips = async (id: string): Promise<Payslip[]> => {
|
|
const response = await hrApi.get<Payslip[]>(`/payroll-runs/${id}/payslips`);
|
|
return response.data;
|
|
};
|
|
|
|
export const getPayslip = async (id: string): Promise<Payslip> => {
|
|
const response = await hrApi.get<Payslip>(`/payroll-runs/payslips/${id}`);
|
|
return response.data;
|
|
};
|
|
|
|
export const getMyPayslips = async (): Promise<Payslip[]> => {
|
|
const response = await hrApi.get<Payslip[]>("/payroll-runs/my-payslips");
|
|
return response.data;
|
|
};
|