@aibrains/shared-types 0.9.2 → 0.10.0
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/finance/common.d.ts +41 -0
- package/dist/schemas/finance/common.d.ts.map +1 -0
- package/dist/schemas/finance/common.js +105 -0
- package/dist/schemas/finance/common.js.map +1 -0
- package/dist/schemas/finance/fee-structure.schema.d.ts +163 -0
- package/dist/schemas/finance/fee-structure.schema.d.ts.map +1 -0
- package/dist/schemas/finance/fee-structure.schema.js +78 -0
- package/dist/schemas/finance/fee-structure.schema.js.map +1 -0
- package/dist/schemas/finance/index.d.ts +12 -0
- package/dist/schemas/finance/index.d.ts.map +1 -0
- package/dist/schemas/finance/index.js +28 -0
- package/dist/schemas/finance/index.js.map +1 -0
- package/dist/schemas/finance/invoice.schema.d.ts +301 -0
- package/dist/schemas/finance/invoice.schema.d.ts.map +1 -0
- package/dist/schemas/finance/invoice.schema.js +107 -0
- package/dist/schemas/finance/invoice.schema.js.map +1 -0
- package/dist/schemas/finance/payment-gateway.schema.d.ts +84 -0
- package/dist/schemas/finance/payment-gateway.schema.d.ts.map +1 -0
- package/dist/schemas/finance/payment-gateway.schema.js +41 -0
- package/dist/schemas/finance/payment-gateway.schema.js.map +1 -0
- package/dist/schemas/finance/payment.schema.d.ts +794 -0
- package/dist/schemas/finance/payment.schema.d.ts.map +1 -0
- package/dist/schemas/finance/payment.schema.js +170 -0
- package/dist/schemas/finance/payment.schema.js.map +1 -0
- package/dist/schemas/finance/student-account.schema.d.ts +89 -0
- package/dist/schemas/finance/student-account.schema.d.ts.map +1 -0
- package/dist/schemas/finance/student-account.schema.js +50 -0
- package/dist/schemas/finance/student-account.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/utils/currency.d.ts +23 -0
- package/dist/utils/currency.d.ts.map +1 -0
- package/dist/utils/currency.js +45 -0
- package/dist/utils/currency.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/finance/payment.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Payment & Receipt Schemas
|
|
4
|
+
*
|
|
5
|
+
* Gateway-agnostic payment types supporting eSewa, Khalti, and manual methods.
|
|
6
|
+
* The frontend NEVER handles gateway credentials — all secrets stay server-side.
|
|
7
|
+
*
|
|
8
|
+
* Payment lifecycle: pending → processing → completed | failed | cancelled → refunded
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.currencyFormatOptionsSchema = exports.paymentFilterSchema = exports.receiptSchema = exports.receiptLineItemSchema = exports.createRefundSchema = exports.voidPaymentSchema = exports.verifyPaymentResponseSchema = exports.recordManualPaymentSchema = exports.initiatePaymentResponseSchema = exports.initiatePaymentSchema = exports.paymentResponseSchema = exports.refundResponseSchema = void 0;
|
|
12
|
+
const zod_1 = require("zod");
|
|
13
|
+
const common_1 = require("./common");
|
|
14
|
+
const common_2 = require("../common");
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// REFUND
|
|
17
|
+
// ============================================================================
|
|
18
|
+
exports.refundResponseSchema = zod_1.z.object({
|
|
19
|
+
id: common_2.uuidSchema,
|
|
20
|
+
paymentId: common_2.uuidSchema,
|
|
21
|
+
amount: zod_1.z.number().positive(),
|
|
22
|
+
reason: zod_1.z.string(),
|
|
23
|
+
gatewayRefundId: zod_1.z.string().optional(),
|
|
24
|
+
status: zod_1.z.enum(['pending', 'completed', 'failed']),
|
|
25
|
+
refundedAt: zod_1.z.string().nullable(),
|
|
26
|
+
createdAt: zod_1.z.string(),
|
|
27
|
+
});
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// PAYMENT RESPONSE
|
|
30
|
+
// ============================================================================
|
|
31
|
+
exports.paymentResponseSchema = zod_1.z.object({
|
|
32
|
+
id: common_2.uuidSchema,
|
|
33
|
+
invoiceId: common_2.uuidSchema,
|
|
34
|
+
studentAccountId: common_2.uuidSchema,
|
|
35
|
+
schoolId: common_2.uuidSchema,
|
|
36
|
+
amount: zod_1.z.number().positive(),
|
|
37
|
+
currency: common_1.currencyEnum,
|
|
38
|
+
gateway: common_1.paymentGatewayEnum,
|
|
39
|
+
gatewayTransactionId: zod_1.z.string().optional(),
|
|
40
|
+
gatewaySessionId: zod_1.z.string().optional(),
|
|
41
|
+
status: common_1.paymentStatusEnum,
|
|
42
|
+
paidAt: zod_1.z.string().nullable(),
|
|
43
|
+
paidBy: zod_1.z.string().nullable(),
|
|
44
|
+
receiptNumber: zod_1.z.string().nullable(),
|
|
45
|
+
metadata: zod_1.z.record(zod_1.z.unknown()).default({}),
|
|
46
|
+
refunds: zod_1.z.array(exports.refundResponseSchema).default([]),
|
|
47
|
+
createdAt: zod_1.z.string(),
|
|
48
|
+
updatedAt: zod_1.z.string(),
|
|
49
|
+
});
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// INITIATE PAYMENT (gateway redirect flow)
|
|
52
|
+
// ============================================================================
|
|
53
|
+
/** Frontend sends this to initiate a gateway payment */
|
|
54
|
+
exports.initiatePaymentSchema = zod_1.z.object({
|
|
55
|
+
invoiceId: common_2.uuidSchema,
|
|
56
|
+
gateway: common_1.paymentGatewayEnum,
|
|
57
|
+
amount: zod_1.z.number().positive(),
|
|
58
|
+
currency: common_1.currencyEnum.default('NPR'),
|
|
59
|
+
returnUrl: zod_1.z.string().url(),
|
|
60
|
+
cancelUrl: zod_1.z.string().url(),
|
|
61
|
+
});
|
|
62
|
+
/** Backend responds with redirect URL to gateway payment page */
|
|
63
|
+
exports.initiatePaymentResponseSchema = zod_1.z.object({
|
|
64
|
+
paymentSessionId: zod_1.z.string(),
|
|
65
|
+
redirectUrl: zod_1.z.string(),
|
|
66
|
+
expiresAt: zod_1.z.string(),
|
|
67
|
+
/** For form_post gateways (eSewa), the form fields to auto-submit */
|
|
68
|
+
formData: zod_1.z.record(zod_1.z.string()).optional(),
|
|
69
|
+
/** 'redirect' for simple URL redirect, 'form_post' for hidden form auto-submit */
|
|
70
|
+
method: zod_1.z.enum(['redirect', 'form_post']).default('redirect'),
|
|
71
|
+
});
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// RECORD MANUAL PAYMENT (cash, bank_transfer, cheque)
|
|
74
|
+
// ============================================================================
|
|
75
|
+
exports.recordManualPaymentSchema = zod_1.z.object({
|
|
76
|
+
invoiceId: common_2.uuidSchema,
|
|
77
|
+
gateway: zod_1.z.enum(['cash', 'bank_transfer', 'cheque']),
|
|
78
|
+
amount: zod_1.z.number().positive(),
|
|
79
|
+
currency: common_1.currencyEnum.default('NPR'),
|
|
80
|
+
referenceNumber: zod_1.z.string().max(100).optional(),
|
|
81
|
+
notes: zod_1.z.string().max(500).optional(),
|
|
82
|
+
paidDate: zod_1.z.string().optional(),
|
|
83
|
+
idempotencyKey: zod_1.z.string().uuid().optional(),
|
|
84
|
+
});
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// VERIFY PAYMENT (gateway callback)
|
|
87
|
+
// ============================================================================
|
|
88
|
+
exports.verifyPaymentResponseSchema = zod_1.z.object({
|
|
89
|
+
payment: exports.paymentResponseSchema,
|
|
90
|
+
invoice: zod_1.z.object({
|
|
91
|
+
id: common_2.uuidSchema,
|
|
92
|
+
invoiceNumber: zod_1.z.string(),
|
|
93
|
+
status: zod_1.z.string(),
|
|
94
|
+
amountDue: zod_1.z.number(),
|
|
95
|
+
grandTotal: zod_1.z.number(),
|
|
96
|
+
}),
|
|
97
|
+
receipt: zod_1.z.lazy(() => exports.receiptSchema).nullable(),
|
|
98
|
+
status: zod_1.z.enum(['completed', 'failed', 'cancelled']),
|
|
99
|
+
});
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// VOID PAYMENT
|
|
102
|
+
// ============================================================================
|
|
103
|
+
exports.voidPaymentSchema = zod_1.z.object({
|
|
104
|
+
reason: zod_1.z.string().min(1).max(500),
|
|
105
|
+
});
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// REFUND REQUEST
|
|
108
|
+
// ============================================================================
|
|
109
|
+
exports.createRefundSchema = zod_1.z.object({
|
|
110
|
+
amount: zod_1.z.number().positive(),
|
|
111
|
+
reason: zod_1.z.string().min(1).max(500),
|
|
112
|
+
});
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// RECEIPT
|
|
115
|
+
// ============================================================================
|
|
116
|
+
exports.receiptLineItemSchema = zod_1.z.object({
|
|
117
|
+
description: zod_1.z.string(),
|
|
118
|
+
amount: zod_1.z.number(),
|
|
119
|
+
taxAmount: zod_1.z.number(),
|
|
120
|
+
total: zod_1.z.number(),
|
|
121
|
+
});
|
|
122
|
+
exports.receiptSchema = zod_1.z.object({
|
|
123
|
+
receiptNumber: zod_1.z.string(),
|
|
124
|
+
paymentId: common_2.uuidSchema,
|
|
125
|
+
invoiceNumber: zod_1.z.string(),
|
|
126
|
+
transactionId: zod_1.z.string(),
|
|
127
|
+
studentName: zod_1.z.string(),
|
|
128
|
+
studentId: common_2.uuidSchema,
|
|
129
|
+
schoolName: zod_1.z.string(),
|
|
130
|
+
schoolAddress: zod_1.z.string().optional(),
|
|
131
|
+
schoolPhone: zod_1.z.string().optional(),
|
|
132
|
+
paidDate: zod_1.z.string(),
|
|
133
|
+
amount: zod_1.z.number(),
|
|
134
|
+
currency: common_1.currencyEnum,
|
|
135
|
+
gateway: common_1.paymentGatewayEnum,
|
|
136
|
+
gatewayDisplayName: zod_1.z.string(),
|
|
137
|
+
lineItems: zod_1.z.array(exports.receiptLineItemSchema),
|
|
138
|
+
subtotal: zod_1.z.number(),
|
|
139
|
+
taxTotal: zod_1.z.number(),
|
|
140
|
+
discountTotal: zod_1.z.number(),
|
|
141
|
+
grandTotal: zod_1.z.number(),
|
|
142
|
+
taxBreakdown: zod_1.z.object({
|
|
143
|
+
panNumber: zod_1.z.string().optional(),
|
|
144
|
+
vatNumber: zod_1.z.string().optional(),
|
|
145
|
+
taxableAmount: zod_1.z.number(),
|
|
146
|
+
taxAmount: zod_1.z.number(),
|
|
147
|
+
}),
|
|
148
|
+
paidBy: zod_1.z.string(),
|
|
149
|
+
notes: zod_1.z.string().optional(),
|
|
150
|
+
});
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// PAYMENT FILTER
|
|
153
|
+
// ============================================================================
|
|
154
|
+
exports.paymentFilterSchema = zod_1.z.object({
|
|
155
|
+
status: zod_1.z.union([common_1.paymentStatusEnum, zod_1.z.array(common_1.paymentStatusEnum)]).optional(),
|
|
156
|
+
gateway: common_1.paymentGatewayEnum.optional(),
|
|
157
|
+
invoiceId: common_2.uuidSchema.optional(),
|
|
158
|
+
studentId: common_2.uuidSchema.optional(),
|
|
159
|
+
dateFrom: zod_1.z.string().optional(),
|
|
160
|
+
dateTo: zod_1.z.string().optional(),
|
|
161
|
+
});
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// CURRENCY FORMATTING
|
|
164
|
+
// ============================================================================
|
|
165
|
+
exports.currencyFormatOptionsSchema = zod_1.z.object({
|
|
166
|
+
locale: zod_1.z.enum(['en', 'ne']).default('en'),
|
|
167
|
+
showSymbol: zod_1.z.boolean().default(true),
|
|
168
|
+
decimals: zod_1.z.number().int().min(0).max(4).default(2),
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=payment.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.schema.js","sourceRoot":"","sources":["../../../src/schemas/finance/payment.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Student Account & Ledger Schemas
|
|
3
|
+
*
|
|
4
|
+
* Tracks a student's financial ledger within a school.
|
|
5
|
+
* One account per student per school.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const billingAccountResponseSchema: z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
studentId: z.ZodString;
|
|
11
|
+
schoolId: z.ZodString;
|
|
12
|
+
studentName: z.ZodString;
|
|
13
|
+
balance: z.ZodNumber;
|
|
14
|
+
totalPaid: z.ZodNumber;
|
|
15
|
+
lastPaymentDate: z.ZodNullable<z.ZodString>;
|
|
16
|
+
createdAt: z.ZodString;
|
|
17
|
+
updatedAt: z.ZodString;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
schoolId: string;
|
|
22
|
+
studentId: string;
|
|
23
|
+
id: string;
|
|
24
|
+
studentName: string;
|
|
25
|
+
balance: number;
|
|
26
|
+
totalPaid: number;
|
|
27
|
+
lastPaymentDate: string | null;
|
|
28
|
+
}, {
|
|
29
|
+
createdAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
schoolId: string;
|
|
32
|
+
studentId: string;
|
|
33
|
+
id: string;
|
|
34
|
+
studentName: string;
|
|
35
|
+
balance: number;
|
|
36
|
+
totalPaid: number;
|
|
37
|
+
lastPaymentDate: string | null;
|
|
38
|
+
}>;
|
|
39
|
+
export type BillingAccount = z.infer<typeof billingAccountResponseSchema>;
|
|
40
|
+
export declare const studentAccountFilterSchema: z.ZodObject<{
|
|
41
|
+
studentId: z.ZodOptional<z.ZodString>;
|
|
42
|
+
hasOutstandingBalance: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
searchTerm: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
studentId?: string | undefined;
|
|
46
|
+
searchTerm?: string | undefined;
|
|
47
|
+
hasOutstandingBalance?: boolean | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
studentId?: string | undefined;
|
|
50
|
+
searchTerm?: string | undefined;
|
|
51
|
+
hasOutstandingBalance?: boolean | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export type StudentAccountFilterDto = z.infer<typeof studentAccountFilterSchema>;
|
|
54
|
+
export declare const studentLedgerEntrySchema: z.ZodObject<{
|
|
55
|
+
id: z.ZodString;
|
|
56
|
+
studentAccountId: z.ZodString;
|
|
57
|
+
entryType: z.ZodEnum<["invoice", "payment", "refund", "adjustment", "write_off"]>;
|
|
58
|
+
referenceId: z.ZodString;
|
|
59
|
+
description: z.ZodString;
|
|
60
|
+
debit: z.ZodNumber;
|
|
61
|
+
credit: z.ZodNumber;
|
|
62
|
+
balance: z.ZodNumber;
|
|
63
|
+
date: z.ZodString;
|
|
64
|
+
createdAt: z.ZodString;
|
|
65
|
+
}, "strip", z.ZodTypeAny, {
|
|
66
|
+
createdAt: string;
|
|
67
|
+
date: string;
|
|
68
|
+
description: string;
|
|
69
|
+
id: string;
|
|
70
|
+
studentAccountId: string;
|
|
71
|
+
balance: number;
|
|
72
|
+
entryType: "invoice" | "payment" | "refund" | "adjustment" | "write_off";
|
|
73
|
+
referenceId: string;
|
|
74
|
+
debit: number;
|
|
75
|
+
credit: number;
|
|
76
|
+
}, {
|
|
77
|
+
createdAt: string;
|
|
78
|
+
date: string;
|
|
79
|
+
description: string;
|
|
80
|
+
id: string;
|
|
81
|
+
studentAccountId: string;
|
|
82
|
+
balance: number;
|
|
83
|
+
entryType: "invoice" | "payment" | "refund" | "adjustment" | "write_off";
|
|
84
|
+
referenceId: string;
|
|
85
|
+
debit: number;
|
|
86
|
+
credit: number;
|
|
87
|
+
}>;
|
|
88
|
+
export type StudentLedgerEntry = z.infer<typeof studentLedgerEntrySchema>;
|
|
89
|
+
//# sourceMappingURL=student-account.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"student-account.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/finance/student-account.schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUvC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAM1E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAIrC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAMjF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Student Account & Ledger Schemas
|
|
4
|
+
*
|
|
5
|
+
* Tracks a student's financial ledger within a school.
|
|
6
|
+
* One account per student per school.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.studentLedgerEntrySchema = exports.studentAccountFilterSchema = exports.billingAccountResponseSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const common_1 = require("./common");
|
|
12
|
+
const common_2 = require("../common");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// STUDENT ACCOUNT RESPONSE
|
|
15
|
+
// ============================================================================
|
|
16
|
+
exports.billingAccountResponseSchema = zod_1.z.object({
|
|
17
|
+
id: common_2.uuidSchema,
|
|
18
|
+
studentId: common_2.uuidSchema,
|
|
19
|
+
schoolId: common_2.uuidSchema,
|
|
20
|
+
studentName: zod_1.z.string(),
|
|
21
|
+
balance: zod_1.z.number(),
|
|
22
|
+
totalPaid: zod_1.z.number(),
|
|
23
|
+
lastPaymentDate: zod_1.z.string().nullable(),
|
|
24
|
+
createdAt: zod_1.z.string(),
|
|
25
|
+
updatedAt: zod_1.z.string(),
|
|
26
|
+
});
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// STUDENT ACCOUNT FILTER
|
|
29
|
+
// ============================================================================
|
|
30
|
+
exports.studentAccountFilterSchema = zod_1.z.object({
|
|
31
|
+
studentId: common_2.uuidSchema.optional(),
|
|
32
|
+
hasOutstandingBalance: zod_1.z.coerce.boolean().optional(),
|
|
33
|
+
searchTerm: zod_1.z.string().max(100).optional(),
|
|
34
|
+
});
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// LEDGER ENTRY
|
|
37
|
+
// ============================================================================
|
|
38
|
+
exports.studentLedgerEntrySchema = zod_1.z.object({
|
|
39
|
+
id: common_2.uuidSchema,
|
|
40
|
+
studentAccountId: common_2.uuidSchema,
|
|
41
|
+
entryType: common_1.ledgerEntryTypeEnum,
|
|
42
|
+
referenceId: zod_1.z.string(),
|
|
43
|
+
description: zod_1.z.string(),
|
|
44
|
+
debit: zod_1.z.number().min(0),
|
|
45
|
+
credit: zod_1.z.number().min(0),
|
|
46
|
+
balance: zod_1.z.number(),
|
|
47
|
+
date: zod_1.z.string(),
|
|
48
|
+
createdAt: zod_1.z.string(),
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=student-account.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"student-account.schema.js","sourceRoot":"","sources":["../../../src/schemas/finance/student-account.schema.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6BAAwB;AACxB,qCAA+C;AAC/C,sCAAuC;AAEvC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAElE,QAAA,4BAA4B,GAAG,OAAC,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,mBAAU;IACd,SAAS,EAAE,mBAAU;IACrB,QAAQ,EAAE,mBAAU;IACpB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAIH,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAElE,QAAA,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,mBAAU,CAAC,QAAQ,EAAE;IAChC,qBAAqB,EAAE,OAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAIH,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAElE,QAAA,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,EAAE,EAAE,mBAAU;IACd,gBAAgB,EAAE,mBAAU;IAC5B,SAAS,EAAE,4BAAmB;IAC9B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -23,4 +23,5 @@ __exportStar(require("./common"), exports);
|
|
|
23
23
|
__exportStar(require("./identity"), exports);
|
|
24
24
|
__exportStar(require("./academics"), exports);
|
|
25
25
|
__exportStar(require("./enrollment"), exports);
|
|
26
|
+
__exportStar(require("./finance"), exports);
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAC5B,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAC5B,+CAA6B;AAC7B,4CAA0B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Currency Formatting Utilities
|
|
3
|
+
*
|
|
4
|
+
* NPR formatting with Nepal-style lakh/crore grouping.
|
|
5
|
+
* Pure utility functions — NOT in schema files.
|
|
6
|
+
*/
|
|
7
|
+
interface CurrencyFormatOpts {
|
|
8
|
+
locale?: 'en' | 'ne';
|
|
9
|
+
showSymbol?: boolean;
|
|
10
|
+
decimals?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Format an amount as NPR currency string.
|
|
14
|
+
* Uses Nepal's number formatting (commas at lakh/crore positions).
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* formatNPR(12500) → "NPR 12,500.00"
|
|
18
|
+
* formatNPR(12500, { locale: 'ne', showSymbol: true }) → "रू १२,५००.००"
|
|
19
|
+
* formatNPR(150000) → "NPR 1,50,000.00" (lakh grouping)
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatNPR(amount: number, options?: CurrencyFormatOpts): string;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=currency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency.d.ts","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CA8BR"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Currency Formatting Utilities
|
|
4
|
+
*
|
|
5
|
+
* NPR formatting with Nepal-style lakh/crore grouping.
|
|
6
|
+
* Pure utility functions — NOT in schema files.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.formatNPR = formatNPR;
|
|
10
|
+
/**
|
|
11
|
+
* Format an amount as NPR currency string.
|
|
12
|
+
* Uses Nepal's number formatting (commas at lakh/crore positions).
|
|
13
|
+
*
|
|
14
|
+
* Examples:
|
|
15
|
+
* formatNPR(12500) → "NPR 12,500.00"
|
|
16
|
+
* formatNPR(12500, { locale: 'ne', showSymbol: true }) → "रू १२,५००.००"
|
|
17
|
+
* formatNPR(150000) → "NPR 1,50,000.00" (lakh grouping)
|
|
18
|
+
*/
|
|
19
|
+
function formatNPR(amount, options = {}) {
|
|
20
|
+
const { locale = 'en', showSymbol = true, decimals = 2 } = options;
|
|
21
|
+
// Format with Nepal-style grouping (##,##,###.##)
|
|
22
|
+
const fixed = Math.abs(amount).toFixed(decimals);
|
|
23
|
+
const [intPart, decPart] = fixed.split('.');
|
|
24
|
+
// Apply lakh/crore grouping: last 3 digits, then groups of 2
|
|
25
|
+
let grouped;
|
|
26
|
+
if (intPart.length <= 3) {
|
|
27
|
+
grouped = intPart;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const last3 = intPart.slice(-3);
|
|
31
|
+
const rest = intPart.slice(0, -3);
|
|
32
|
+
const pairs = rest.replace(/\B(?=(\d{2})+(?!\d))/g, ',');
|
|
33
|
+
grouped = `${pairs},${last3}`;
|
|
34
|
+
}
|
|
35
|
+
// Convert digits to Devanagari for Nepali locale
|
|
36
|
+
let formatted = decPart ? `${grouped}.${decPart}` : grouped;
|
|
37
|
+
if (locale === 'ne') {
|
|
38
|
+
formatted = formatted.replace(/[0-9]/g, (d) => String.fromCharCode(0x0966 + Number(d)));
|
|
39
|
+
}
|
|
40
|
+
if (amount < 0)
|
|
41
|
+
formatted = `-${formatted}`;
|
|
42
|
+
const symbol = locale === 'ne' ? 'रू' : 'NPR';
|
|
43
|
+
return showSymbol ? `${symbol} ${formatted}` : formatted;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=currency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currency.js","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiBH,8BAiCC;AA1CD;;;;;;;;GAQG;AACH,SAAgB,SAAS,CACvB,MAAc,EACd,UAA8B,EAAE;IAEhC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAEnE,kDAAkD;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,6DAA6D;IAC7D,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,iDAAiD;IACjD,IAAI,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAAG,CAAC;QAAE,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED