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.
Files changed (3) hide show
  1. package/index.d.ts +194 -0
  2. package/index.js +79 -0
  3. 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
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nazar-salary",
3
- "version": "1.7.2",
3
+ "version": "2.1.1",
4
4
  "description": "Frontend library for Nazar Salary API",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",