4438c351e2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
3.3 KiB
TypeScript
49 lines
3.3 KiB
TypeScript
export type ExpenseType = 'VendorPayment' | 'StaffReimbursement';
|
|
export type ExpenseStatus = 'Draft' | 'PendingApproval' | 'Approved' | 'Paid' | 'Rejected';
|
|
export type FunctionalClass = 'Program' | 'ManagementGeneral' | 'Fundraising';
|
|
|
|
export interface PagedResult<T> {
|
|
items: T[]; totalCount: number; page: number; pageSize: number; totalPages: number;
|
|
}
|
|
|
|
export interface MinistryDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; label?: string; }
|
|
|
|
export interface ExpenseSubCategoryDto { id: number; groupId: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; label?: string; form990LineId: number | null; form990LineCode: string | null; }
|
|
export interface ExpenseCategoryGroupDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; subCategories: ExpenseSubCategoryDto[]; label?: string; form990LineId: number | null; form990LineCode: string | null; }
|
|
export interface CreateExpenseGroupRequest { name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; }
|
|
export interface UpdateExpenseGroupRequest extends CreateExpenseGroupRequest { isActive: boolean; }
|
|
export interface CreateExpenseSubCategoryRequest { groupId: number; name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; }
|
|
export interface UpdateExpenseSubCategoryRequest extends CreateExpenseSubCategoryRequest { isActive: boolean; }
|
|
|
|
export interface ExpenseListItemDto {
|
|
id: number; type: ExpenseType; status: ExpenseStatus; amount: number; description: string;
|
|
ministryId: number; ministryName: string; categoryGroupId: number; categoryGroupName: string;
|
|
subCategoryId: number; subCategoryName: string; vendorName: string | null;
|
|
memberId: number | null; memberName: string | null; expenseDate: string; hasReceipt: boolean;
|
|
checkNumber: string | null; functionalClass: FunctionalClass | null;
|
|
}
|
|
export interface ExpenseDto extends ExpenseListItemDto {
|
|
notes: string | null; reviewNotes: string | null;
|
|
submittedBy: string | null; submittedAt: string | null; reviewedAt: string | null; paidAt: string | null;
|
|
}
|
|
export interface CreateExpenseRequest {
|
|
type: ExpenseType; ministryId: number; categoryGroupId: number; subCategoryId: number;
|
|
amount: number; description: string; vendorName: string | null; memberId: number | null;
|
|
checkNumber: string | null; expenseDate: string; notes: string | null; functionalClass: FunctionalClass | null;
|
|
}
|
|
export type UpdateExpenseRequest = CreateExpenseRequest;
|
|
export interface RejectExpenseRequest { reviewNotes: string | null; }
|
|
export interface PayExpenseRequest { checkNumber: string | null; paidAt: string | null; }
|
|
|
|
export interface MonthlyStatementDto {
|
|
id: number; year: number; month: number; openingBalance: number; totalGiving: number;
|
|
totalOtherIncome: number; totalExpenses: number; calculatedClosingBalance: number;
|
|
bankStatementBalance: number; difference: number; notes: string | null; isFinalized: boolean;
|
|
}
|
|
export interface CreateMonthlyStatementRequest {
|
|
year: number; month: number; openingBalance: number; totalOtherIncome: number; bankStatementBalance: number; notes: string | null;
|
|
}
|
|
export interface UpdateMonthlyStatementRequest {
|
|
openingBalance: number; totalOtherIncome: number; bankStatementBalance: number; notes: string | null;
|
|
}
|