nazar-salary 1.7.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +194 -0
- package/index.js +79 -0
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -57,6 +57,194 @@ declare module 'nazar-salary' {
|
|
|
57
57
|
new_password?: string;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
export interface BankReceiptUploadResponse {
|
|
61
|
+
status: 'processing';
|
|
62
|
+
log_id: number;
|
|
63
|
+
message: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface BankReceiptStatusResponse {
|
|
67
|
+
status: 'processing' | 'completed' | 'failed';
|
|
68
|
+
log_id: number;
|
|
69
|
+
file_name: string;
|
|
70
|
+
uploaded_by: string;
|
|
71
|
+
uploaded_at: number;
|
|
72
|
+
completed_at?: number;
|
|
73
|
+
summary?: BankReceiptSummary;
|
|
74
|
+
details?: {
|
|
75
|
+
verified_students: VerifiedStudent[];
|
|
76
|
+
discrepancies: PaymentDiscrepancy[];
|
|
77
|
+
orphan_payments: OrphanPayment[];
|
|
78
|
+
};
|
|
79
|
+
error_message?: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface BankReceiptListItem {
|
|
83
|
+
log_id: number;
|
|
84
|
+
file_name: string;
|
|
85
|
+
status: 'processing' | 'completed' | 'failed';
|
|
86
|
+
uploaded_by: string;
|
|
87
|
+
uploaded_at: number;
|
|
88
|
+
completed_at?: number;
|
|
89
|
+
summary?: {
|
|
90
|
+
total_transactions: number;
|
|
91
|
+
verified: number;
|
|
92
|
+
discrepancies: number;
|
|
93
|
+
orphan_payments: number;
|
|
94
|
+
};
|
|
95
|
+
error_message?: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface BankReceiptsListParams {
|
|
99
|
+
page?: number;
|
|
100
|
+
limit?: number;
|
|
101
|
+
status?: 'processing' | 'completed' | 'failed';
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface BankReceiptsListResponse {
|
|
105
|
+
receipts: BankReceiptListItem[];
|
|
106
|
+
pagination: Pagination;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface BankReceiptSummary {
|
|
110
|
+
total_transactions: number;
|
|
111
|
+
processed_transactions: number;
|
|
112
|
+
verified_count: number;
|
|
113
|
+
discrepancies_count: number;
|
|
114
|
+
orphan_payments_count: number;
|
|
115
|
+
skipped_count: number;
|
|
116
|
+
skipped_non_purchase: number;
|
|
117
|
+
skipped_amount_too_low: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface VerifiedStudent {
|
|
121
|
+
student_purchase_id: number;
|
|
122
|
+
student_id: number;
|
|
123
|
+
student_name: string;
|
|
124
|
+
manager_name: string;
|
|
125
|
+
amount: number;
|
|
126
|
+
commission: number;
|
|
127
|
+
net_amount: number;
|
|
128
|
+
manager_commission: number;
|
|
129
|
+
payment_method: string;
|
|
130
|
+
transaction_date: string;
|
|
131
|
+
operation_number: string;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface PaymentDiscrepancy {
|
|
135
|
+
student_purchase_id: number;
|
|
136
|
+
student_id: number;
|
|
137
|
+
student_name: string;
|
|
138
|
+
manager_name: string;
|
|
139
|
+
system_amount: number;
|
|
140
|
+
bank_amount: number;
|
|
141
|
+
discrepancy: number;
|
|
142
|
+
operation_number: string;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface OrphanPayment {
|
|
146
|
+
store_address: string;
|
|
147
|
+
operation_date: string;
|
|
148
|
+
operation_time: string;
|
|
149
|
+
amount: number;
|
|
150
|
+
commission: number;
|
|
151
|
+
payment_method: string;
|
|
152
|
+
operation_number: string;
|
|
153
|
+
purchase_details: string;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export interface BankReceiptResponse {
|
|
157
|
+
summary: BankReceiptSummary;
|
|
158
|
+
verified_students: VerifiedStudent[];
|
|
159
|
+
discrepancies: PaymentDiscrepancy[];
|
|
160
|
+
orphan_payments: OrphanPayment[];
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export interface UploadBankReceiptOptions {
|
|
164
|
+
period_from?: string;
|
|
165
|
+
period_to?: string;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export interface ManualPaymentData {
|
|
169
|
+
operation_number: string;
|
|
170
|
+
bank_id: string;
|
|
171
|
+
payment_method: string;
|
|
172
|
+
amount: number;
|
|
173
|
+
transaction_date?: string;
|
|
174
|
+
transaction_time?: string;
|
|
175
|
+
comment?: string;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export interface ManualPaymentStudent {
|
|
179
|
+
id: number;
|
|
180
|
+
first_name: string;
|
|
181
|
+
last_name: string;
|
|
182
|
+
phone?: string;
|
|
183
|
+
manager_name?: string;
|
|
184
|
+
purchase_amount?: number;
|
|
185
|
+
is_verified: boolean;
|
|
186
|
+
verified_at?: string;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export interface ManualPaymentDetails {
|
|
190
|
+
operation_number: string;
|
|
191
|
+
amount: number;
|
|
192
|
+
bank_commission?: number;
|
|
193
|
+
net_amount?: number;
|
|
194
|
+
manager_commission?: number;
|
|
195
|
+
discrepancy_amount?: number;
|
|
196
|
+
payment_method?: string;
|
|
197
|
+
manual_verification?: boolean;
|
|
198
|
+
verified_by?: number;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface ManualPaymentResponse {
|
|
202
|
+
status: 'success' | 'error';
|
|
203
|
+
result: 'verified' | 'discrepancy' | 'orphan';
|
|
204
|
+
message: string;
|
|
205
|
+
student?: ManualPaymentStudent;
|
|
206
|
+
payment: ManualPaymentDetails;
|
|
207
|
+
code?: string;
|
|
208
|
+
details?: any;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export interface OrphanPaymentItem {
|
|
212
|
+
id: number;
|
|
213
|
+
operation_number: string;
|
|
214
|
+
amount: number;
|
|
215
|
+
bank_name: string;
|
|
216
|
+
payment_method: string;
|
|
217
|
+
commission_rate: number;
|
|
218
|
+
bank_commission: number;
|
|
219
|
+
net_amount: number;
|
|
220
|
+
transaction_date?: string;
|
|
221
|
+
transaction_time?: string;
|
|
222
|
+
comment?: string;
|
|
223
|
+
created_by: string;
|
|
224
|
+
created_at: string;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export interface OrphanPaymentsResponse {
|
|
228
|
+
orphan_payments: OrphanPaymentItem[];
|
|
229
|
+
pagination: Pagination;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface PaymentMethod {
|
|
233
|
+
payment_method_id: string;
|
|
234
|
+
payment_method_name: string;
|
|
235
|
+
commission_rate: number;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export interface BankConfig {
|
|
239
|
+
bank_id: string;
|
|
240
|
+
bank_name: string;
|
|
241
|
+
payment_methods: PaymentMethod[];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface BanksConfigResponse {
|
|
245
|
+
banks: BankConfig[];
|
|
246
|
+
}
|
|
247
|
+
|
|
60
248
|
export interface UpdateUserData {
|
|
61
249
|
first_name?: string;
|
|
62
250
|
last_name?: string;
|
|
@@ -515,6 +703,12 @@ declare module 'nazar-salary' {
|
|
|
515
703
|
getManagers(): Promise<ManagersResponse>;
|
|
516
704
|
updateManager(managerId: number, data: UpdateManagerData): Promise<UpdateManagerResponse>;
|
|
517
705
|
deleteManager(managerId: number): Promise<void>;
|
|
706
|
+
uploadKaspiReceipt(file: File | Buffer, options?: UploadBankReceiptOptions): Promise<BankReceiptUploadResponse>;
|
|
707
|
+
getReceiptsList(params?: BankReceiptsListParams): Promise<BankReceiptsListResponse>;
|
|
708
|
+
getReceiptStatus(logId: number): Promise<BankReceiptStatusResponse>;
|
|
709
|
+
addManualPayment(data: ManualPaymentData): Promise<ManualPaymentResponse>;
|
|
710
|
+
getOrphanPayments(params?: { page?: number; limit?: number }): Promise<OrphanPaymentsResponse>;
|
|
711
|
+
getBanksConfig(): Promise<BanksConfigResponse>;
|
|
518
712
|
|
|
519
713
|
// Teacher endpoints
|
|
520
714
|
getTeacherLanguages(): Promise<TeacherLanguagesResponse>;
|
package/index.js
CHANGED
|
@@ -177,6 +177,85 @@ class SalaryAPI {
|
|
|
177
177
|
return await this.client.delete(`/api/v1/admin/manager/${managerId}`);
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Upload bank receipt Excel file for verification (Admin only)
|
|
182
|
+
* Supports Kaspi only
|
|
183
|
+
* Processing happens asynchronously, use getReceiptStatus to check progress
|
|
184
|
+
* @param {File|Buffer} file - Excel file (.xlsx) with bank statement
|
|
185
|
+
* @param {object} [options] - Upload options
|
|
186
|
+
* @param {string} [options.period_from] - Period start date (YYYY-MM-DD)
|
|
187
|
+
* @param {string} [options.period_to] - Period end date (YYYY-MM-DD)
|
|
188
|
+
* @returns {Promise<{status: string, log_id: number, message: string}>}
|
|
189
|
+
*/
|
|
190
|
+
async uploadKaspiReceipt(file, options = {}) {
|
|
191
|
+
const formData = new FormData();
|
|
192
|
+
formData.append('file', file);
|
|
193
|
+
if (options.period_from) formData.append('period_from', options.period_from);
|
|
194
|
+
if (options.period_to) formData.append('period_to', options.period_to);
|
|
195
|
+
|
|
196
|
+
return await this.client.post("/api/v1/admin/receipts/upload", formData, {
|
|
197
|
+
headers: {
|
|
198
|
+
'Content-Type': 'multipart/form-data',
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Get list of all receipt uploads (Admin only)
|
|
205
|
+
* @param {object} [params] - Query parameters
|
|
206
|
+
* @param {number} [params.page=1] - Page number
|
|
207
|
+
* @param {number} [params.limit=20] - Items per page
|
|
208
|
+
* @param {string} [params.status] - Filter by status (processing, completed, failed)
|
|
209
|
+
* @returns {Promise<{receipts: array, pagination: object}>}
|
|
210
|
+
*/
|
|
211
|
+
async getReceiptsList(params = {}) {
|
|
212
|
+
return await this.client.get("/api/v1/admin/receipts/", { params });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Get bank receipt processing status (Admin only)
|
|
217
|
+
* @param {number} logId - Receipt log ID from uploadKaspiReceipt
|
|
218
|
+
* @returns {Promise<{status: string, log_id: number, file_name: string, summary?: object, details?: object, error_message?: string}>}
|
|
219
|
+
*/
|
|
220
|
+
async getReceiptStatus(logId) {
|
|
221
|
+
return await this.client.get(`/api/v1/admin/receipts/logs/${logId}`);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Manually add payment from non-Kaspi banks (Admin only)
|
|
226
|
+
* @param {object} data - Payment data
|
|
227
|
+
* @param {string} data.operation_number - 11-digit operation number
|
|
228
|
+
* @param {string} data.bank_id - Bank ID (halyk, forte, jusan, freedom, centercredit)
|
|
229
|
+
* @param {string} data.payment_method - Payment method ID
|
|
230
|
+
* @param {number} data.amount - Payment amount (2000-10000000 KZT)
|
|
231
|
+
* @param {string} [data.transaction_date] - Transaction date
|
|
232
|
+
* @param {string} [data.transaction_time] - Transaction time
|
|
233
|
+
* @param {string} [data.comment] - Comment (max 500 chars)
|
|
234
|
+
* @returns {Promise<{status: string, result: string, message: string, student?: object, payment: object}>}
|
|
235
|
+
*/
|
|
236
|
+
async addManualPayment(data) {
|
|
237
|
+
return await this.client.post("/api/v1/admin/receipts/manual-add", data);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Get list of orphan (unused) payments (Admin only)
|
|
242
|
+
* @param {object} [params] - Query parameters
|
|
243
|
+
* @param {number} [params.page=1] - Page number
|
|
244
|
+
* @param {number} [params.limit=30] - Items per page
|
|
245
|
+
* @returns {Promise<{orphan_payments: array, pagination: object}>}
|
|
246
|
+
*/
|
|
247
|
+
async getOrphanPayments(params = {}) {
|
|
248
|
+
return await this.client.get("/api/v1/admin/receipts/orphan", { params });
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Get available banks and payment methods configuration (Admin only)
|
|
253
|
+
* @returns {Promise<{banks: array}>}
|
|
254
|
+
*/
|
|
255
|
+
async getBanksConfig() {
|
|
256
|
+
return await this.client.get("/api/v1/admin/receipts/banks");
|
|
257
|
+
}
|
|
258
|
+
|
|
180
259
|
// ===== TEACHER ENDPOINTS =====
|
|
181
260
|
|
|
182
261
|
/**
|