Files
ctms/frontend/src/api/finance.ts
T
2025-12-17 14:07:23 +08:00

65 lines
2.1 KiB
TypeScript

import { apiGet, apiPatch, apiPost } from "./axios";
import type { AxiosResponse } from "axios";
import type { ApiListResponse } from "../types/api";
export interface FinanceItem {
id: string;
study_id: string;
site_id?: string | null;
subject_id?: string | null;
visit_id?: string | null;
category: string;
title: string;
description?: string | null;
currency: string;
amount: number | string;
occur_date: string;
status: string;
submitted_at?: string | null;
approved_at?: string | null;
rejected_at?: string | null;
paid_at?: string | null;
approver_id?: string | null;
payer_id?: string | null;
reject_reason?: string | null;
created_by: string;
created_at: string;
updated_at?: string | null;
}
export interface FinanceSummary {
total_amount: number | string;
approved_amount: number | string;
paid_amount: number | string;
submitted_amount?: number | string;
count_total: number;
count_paid: number;
}
export const fetchFinanceItems = (
studyId: string,
params?: Record<string, any>
): Promise<AxiosResponse<ApiListResponse<FinanceItem>>> =>
apiGet(`/api/v1/studies/${studyId}/finance/items/`, { params });
export const fetchFinanceItem = (studyId: string, itemId: string) =>
apiGet<FinanceItem>(`/api/v1/studies/${studyId}/finance/items/${itemId}`);
export const createFinanceItem = (studyId: string, payload: Record<string, any>) =>
apiPost<FinanceItem>(`/api/v1/studies/${studyId}/finance/items`, payload);
export const updateFinanceItem = (studyId: string, itemId: string, payload: Record<string, any>) =>
apiPatch<FinanceItem>(`/api/v1/studies/${studyId}/finance/items/${itemId}`, payload);
export const changeFinanceStatus = (
studyId: string,
itemId: string,
payload: { status: string; reject_reason?: string }
) => apiPost<FinanceItem>(`/api/v1/studies/${studyId}/finance/items/${itemId}/status`, payload);
export const fetchFinanceSummary = (studyId: string, params?: Record<string, any>) =>
apiGet<FinanceSummary | ApiListResponse<FinanceSummary>>(
`/api/v1/studies/${studyId}/finance/summary`,
{ params }
);