import { hrApi } from "@/auth/http"; import type { EmployeeSalary, IncomeTaxBracket, PayrollRun, PayrollRunStatus, Payslip, SalaryComponent, SalaryStructure, StatutoryRate, } from "./types"; interface Page { 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 => { const response = await hrApi.get("/payroll/components"); return response.data; }; export const listStructures = async (): Promise => { const response = await hrApi.get("/payroll/structures"); return response.data; }; export const getStructure = async (id: string): Promise => { const response = await hrApi.get(`/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("/payroll/structures", payload); return response.data; }; export const listTaxBrackets = async (): Promise => { const response = await hrApi.get("/payroll/tax-brackets"); return response.data; }; export const listStatutoryRates = async (): Promise => { const response = await hrApi.get("/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("/payroll/salaries", payload); return response.data; }; export const getSalaryHistory = async (employeeId: string) => { const response = await hrApi.get( `/payroll/salaries/${employeeId}`, ); return response.data; }; // ── Runs ──────────────────────────────────────────────────────────────────── export const listPayrollRuns = async (params?: { status?: PayrollRunStatus; page?: number; limit?: number; }) => { const response = await hrApi.get>("/payroll-runs", { params }); return response.data; }; export const getPayrollRun = async (id: string): Promise => { const response = await hrApi.get(`/payroll-runs/${id}`); return response.data; }; export const createPayrollRun = async (payload: { periodStart: string; periodEnd: string; paymentDate?: string; note?: string; }) => { const response = await hrApi.post("/payroll-runs", payload); return response.data; }; export const calculatePayrollRun = async (id: string) => { const response = await hrApi.post(`/payroll-runs/${id}/calculate`); return response.data; }; export const approvePayrollRun = async (id: string) => { const response = await hrApi.patch(`/payroll-runs/${id}/approve`); return response.data; }; export const markPayrollPaid = async (id: string, paymentDate?: string) => { const response = await hrApi.patch(`/payroll-runs/${id}/mark-paid`, { paymentDate, }); return response.data; }; export const cancelPayrollRun = async (id: string) => { const response = await hrApi.patch(`/payroll-runs/${id}/cancel`); return response.data; }; export const listRunPayslips = async (id: string): Promise => { const response = await hrApi.get(`/payroll-runs/${id}/payslips`); return response.data; }; export const getPayslip = async (id: string): Promise => { const response = await hrApi.get(`/payroll-runs/payslips/${id}`); return response.data; }; export const getMyPayslips = async (): Promise => { const response = await hrApi.get("/payroll-runs/my-payslips"); return response.data; };