jpdcl 1.0.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.
Files changed (103) hide show
  1. package/.env.example +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +219 -0
  4. package/dist/catalog.d.ts +141 -0
  5. package/dist/catalog.js +261 -0
  6. package/dist/catalog.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +395 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +6 -0
  11. package/dist/config.js +13 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/credentials.d.ts +13 -0
  14. package/dist/credentials.js +100 -0
  15. package/dist/credentials.js.map +1 -0
  16. package/dist/crypto.d.ts +3 -0
  17. package/dist/crypto.js +21 -0
  18. package/dist/crypto.js.map +1 -0
  19. package/dist/dates.d.ts +5 -0
  20. package/dist/dates.js +20 -0
  21. package/dist/dates.js.map +1 -0
  22. package/dist/errors.d.ts +11 -0
  23. package/dist/errors.js +23 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/http-handler.d.ts +1 -0
  26. package/dist/http-handler.js +46 -0
  27. package/dist/http-handler.js.map +1 -0
  28. package/dist/http.d.ts +9 -0
  29. package/dist/http.js +43 -0
  30. package/dist/http.js.map +1 -0
  31. package/dist/index.d.ts +13 -0
  32. package/dist/index.js +14 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/launcher.d.ts +2 -0
  35. package/dist/launcher.js +11 -0
  36. package/dist/launcher.js.map +1 -0
  37. package/dist/ledger-client.d.ts +112 -0
  38. package/dist/ledger-client.js +221 -0
  39. package/dist/ledger-client.js.map +1 -0
  40. package/dist/main-client.d.ts +25 -0
  41. package/dist/main-client.js +221 -0
  42. package/dist/main-client.js.map +1 -0
  43. package/dist/mcp-stdio.d.ts +2 -0
  44. package/dist/mcp-stdio.js +6 -0
  45. package/dist/mcp-stdio.js.map +1 -0
  46. package/dist/mcp.d.ts +8 -0
  47. package/dist/mcp.js +517 -0
  48. package/dist/mcp.js.map +1 -0
  49. package/dist/runtime.d.ts +27 -0
  50. package/dist/runtime.js +316 -0
  51. package/dist/runtime.js.map +1 -0
  52. package/dist/server.d.ts +4 -0
  53. package/dist/server.js +221 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/session.d.ts +4 -0
  56. package/dist/session.js +30 -0
  57. package/dist/session.js.map +1 -0
  58. package/dist/smart-client.d.ts +50 -0
  59. package/dist/smart-client.js +238 -0
  60. package/dist/smart-client.js.map +1 -0
  61. package/dist/tariff.d.ts +121 -0
  62. package/dist/tariff.js +124 -0
  63. package/dist/tariff.js.map +1 -0
  64. package/dist/types.d.ts +51 -0
  65. package/dist/types.js +2 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/worker.d.ts +5 -0
  68. package/dist/worker.js +3 -0
  69. package/dist/worker.js.map +1 -0
  70. package/openapi.yaml +284 -0
  71. package/package.json +89 -0
  72. package/scripts/audit-http.ts +36 -0
  73. package/scripts/audit-launcher.mjs +28 -0
  74. package/scripts/audit-ledger-portal.ts +23 -0
  75. package/scripts/audit-mcp.mjs +140 -0
  76. package/scripts/audit-smart-portal.mjs +63 -0
  77. package/scripts/build.mjs +19 -0
  78. package/scripts/publish-smithery.mjs +47 -0
  79. package/src/catalog.ts +291 -0
  80. package/src/cli.ts +397 -0
  81. package/src/config.ts +15 -0
  82. package/src/credentials.ts +114 -0
  83. package/src/crypto.ts +21 -0
  84. package/src/dates.ts +19 -0
  85. package/src/errors.ts +26 -0
  86. package/src/http-handler.ts +48 -0
  87. package/src/http.ts +49 -0
  88. package/src/index.ts +13 -0
  89. package/src/launcher.ts +9 -0
  90. package/src/ledger-client.ts +258 -0
  91. package/src/main-client.ts +230 -0
  92. package/src/mcp-stdio.ts +6 -0
  93. package/src/mcp.ts +546 -0
  94. package/src/runtime.ts +329 -0
  95. package/src/server.ts +218 -0
  96. package/src/session.ts +29 -0
  97. package/src/smart-client.ts +249 -0
  98. package/src/tariff.ts +148 -0
  99. package/src/toolkit.test.ts +136 -0
  100. package/src/types.ts +51 -0
  101. package/src/worker.ts +3 -0
  102. package/tsconfig.build.json +11 -0
  103. package/tsconfig.json +16 -0
@@ -0,0 +1,50 @@
1
+ import { type EndpointName } from "./catalog.js";
2
+ import type { PortalResponse, RequestOptions } from "./types.js";
3
+ export interface SmartTokenClaims {
4
+ sub?: string;
5
+ exp?: number;
6
+ tenantId?: string;
7
+ currentAccountTenantId?: string;
8
+ currentAccountKno?: string;
9
+ currentAccountMeterNo?: string;
10
+ currentAccountIsMeterPrepaid?: boolean | string;
11
+ currentAccountMeteringMode?: string;
12
+ currentAccountName?: string;
13
+ userAccounts?: string | unknown[];
14
+ [key: string]: unknown;
15
+ }
16
+ export declare class SmartMeterClient {
17
+ private token?;
18
+ readonly baseUrl: string;
19
+ private readonly allowMutations;
20
+ readonly tenantId?: string | undefined;
21
+ private readonly adminToken;
22
+ readonly claims: SmartTokenClaims;
23
+ constructor(token?: string | undefined, baseUrl?: string, allowMutations?: boolean, tenantId?: string | undefined, adminToken?: string | undefined);
24
+ get bearerToken(): string | undefined;
25
+ get accountId(): string | undefined;
26
+ get meterNumber(): string | undefined;
27
+ get effectiveTenantId(): string | undefined;
28
+ get expiresAt(): string | undefined;
29
+ sessionInfo(): Record<string, unknown>;
30
+ request<T = unknown>(name: EndpointName | string, options?: RequestOptions): Promise<PortalResponse<T>>;
31
+ connections(): Promise<PortalResponse>;
32
+ dashboard(accountId?: string | undefined, options?: {
33
+ includeDerived?: boolean;
34
+ }): Promise<PortalResponse>;
35
+ consumption(accountId?: string | undefined, type?: string, value?: number): Promise<PortalResponse>;
36
+ intervalConsumption(accountId: string | undefined, from: string, to: string, sortOrder?: string): Promise<PortalResponse>;
37
+ report(reportType: SmartReportType, accountId?: string | undefined, options?: SmartReportOptions): Promise<PortalResponse>;
38
+ }
39
+ export type SmartReportType = "PowerOnOff" | "DayWiseTOD" | "MonthlyTOD" | "PeakSlotConsumption" | "PeakSlotConsumptionMonthly" | "ConsumerVoltageDataProfile" | "SanctionLoadVSMaxDemand";
40
+ export interface SmartReportOptions {
41
+ from?: string;
42
+ to?: string;
43
+ start?: number;
44
+ end?: number;
45
+ filter?: string;
46
+ format?: "xlsx" | "pdf";
47
+ }
48
+ export declare function encodeReportFilter(from: string, to: string, start?: number, end?: number): string;
49
+ export declare function smartApiUrlFromAppUrl(appUrl?: string): string;
50
+ export declare function decodeJwt(token: string): SmartTokenClaims;
@@ -0,0 +1,238 @@
1
+ import { endpointCatalog, isEndpointName } from "./catalog.js";
2
+ import { SMART_API_URL, mutationsEnabled } from "./config.js";
3
+ import { assertDateRange } from "./dates.js";
4
+ import { AuthenticationError, JpdclError, MutationDisabledError } from "./errors.js";
5
+ import { buildUrl } from "./http.js";
6
+ export class SmartMeterClient {
7
+ token;
8
+ baseUrl;
9
+ allowMutations;
10
+ tenantId;
11
+ adminToken;
12
+ claims;
13
+ constructor(token, baseUrl = SMART_API_URL, allowMutations = mutationsEnabled(), tenantId, adminToken = process.env.JPDCL_SMART_ADMIN_TOKEN) {
14
+ this.token = token;
15
+ this.baseUrl = baseUrl;
16
+ this.allowMutations = allowMutations;
17
+ this.tenantId = tenantId;
18
+ this.adminToken = adminToken;
19
+ this.claims = token ? decodeJwt(token) : {};
20
+ }
21
+ get bearerToken() { return this.token; }
22
+ get accountId() { return stringClaim(this.claims.currentAccountKno); }
23
+ get meterNumber() { return stringClaim(this.claims.currentAccountMeterNo); }
24
+ get effectiveTenantId() {
25
+ return this.tenantId ?? stringClaim(this.claims.currentAccountTenantId) ?? stringClaim(this.claims.tenantId);
26
+ }
27
+ get expiresAt() {
28
+ return typeof this.claims.exp === "number" ? new Date(this.claims.exp * 1000).toISOString() : undefined;
29
+ }
30
+ sessionInfo() {
31
+ return {
32
+ authenticated: Boolean(this.token),
33
+ expiresAt: this.expiresAt,
34
+ accountId: this.accountId,
35
+ meterNumber: this.meterNumber,
36
+ tenantId: this.effectiveTenantId,
37
+ userId: stringClaim(this.claims.sub),
38
+ isPrepaid: booleanClaim(this.claims.currentAccountIsMeterPrepaid),
39
+ meteringMode: stringClaim(this.claims.currentAccountMeteringMode),
40
+ accounts: parseAccounts(this.claims.userAccounts),
41
+ };
42
+ }
43
+ async request(name, options = {}) {
44
+ if (!isEndpointName(name))
45
+ throw new JpdclError(`Unknown endpoint: ${name}`, 400);
46
+ const endpoint = endpointCatalog[name];
47
+ if (endpoint.portal !== "smart")
48
+ throw new JpdclError(`${name} belongs to the main JPDCL portal`, 400);
49
+ if (endpoint.mutation && !this.allowMutations)
50
+ throw new MutationDisabledError();
51
+ if (endpoint.auth === "smart-bearer" && !this.token)
52
+ throw new AuthenticationError("A smart-meter bearer token is required");
53
+ if (endpoint.auth === "smart-admin" && !this.adminToken)
54
+ throw new AuthenticationError("JPDCL_SMART_ADMIN_TOKEN is required for this administrative endpoint");
55
+ const url = buildUrl(this.baseUrl, endpoint.path, options.params);
56
+ const headers = { Accept: endpoint.binary ? "*/*" : "application/json", ...options.headers };
57
+ if (endpoint.auth === "smart-bearer" && this.token)
58
+ headers.Authorization = `Bearer ${this.token}`;
59
+ if (endpoint.auth === "smart-bearer" && this.effectiveTenantId)
60
+ headers.TenantId = this.effectiveTenantId;
61
+ if (endpoint.auth === "smart-admin" && this.adminToken)
62
+ headers.Authorization = `Bearer ${this.adminToken}`;
63
+ let body;
64
+ if (options.body !== undefined && endpoint.method !== "GET" && endpoint.method !== "DELETE") {
65
+ headers["Content-Type"] = "application/json";
66
+ body = JSON.stringify(options.body);
67
+ }
68
+ const response = await fetch(url, { method: endpoint.method, headers, body });
69
+ const contentType = response.headers.get("content-type") ?? "";
70
+ if (endpoint.binary || !contentType.toLowerCase().includes("json")) {
71
+ const bytes = Buffer.from(await response.arrayBuffer());
72
+ if (!response.ok)
73
+ throw new JpdclError(`Smart-meter portal returned HTTP ${response.status}`, response.status, bytes.toString("utf8"));
74
+ return { status: true, data: { base64: bytes.toString("base64"), contentType } };
75
+ }
76
+ const raw = (await response.json());
77
+ if (!response.ok || raw.success === false) {
78
+ throw new JpdclError(errorMessage(raw) ?? `Smart-meter portal returned HTTP ${response.status}`, response.status || 502, raw);
79
+ }
80
+ return normalizeEnvelope(raw);
81
+ }
82
+ async connections() {
83
+ const accounts = parseAccounts(this.claims.userAccounts);
84
+ const current = this.sessionInfo();
85
+ return { status: true, data: accounts.length ? accounts : [current] };
86
+ }
87
+ async dashboard(accountId = this.accountId, options = {}) {
88
+ if (!accountId)
89
+ throw new JpdclError("Smart-meter account ID is required", 400);
90
+ const meterNumber = this.meterNumber;
91
+ if (!meterNumber)
92
+ throw new JpdclError("Smart-meter number is required", 400);
93
+ const calls = {
94
+ usage: this.request("smart_today_monthly", { params: { meterNumber } }),
95
+ currentMonth: this.request("smart_current_month", { params: { accountId } }),
96
+ meterReadings: this.request("smart_meter_reading", { params: { meterNumber } }),
97
+ reading: this.request("smart_current_meter_reading", { params: { accountId } }),
98
+ lastBill: this.request("smart_postpaid_last_bill", { params: { accountId } }),
99
+ billHistory: this.request("smart_postpaid_bill_history", { params: { accountId } }),
100
+ paymentHistory: this.request("smart_postpaid_payment_history", { params: { accountId } }),
101
+ meterDetails: this.request("smart_meter_details", { params: { meterNumber } }),
102
+ preferences: this.request("smart_preferences", { params: { isPrepaid: booleanClaim(this.claims.currentAccountIsMeterPrepaid) ?? false } }),
103
+ alerts: this.request("smart_my_alerts", { params: { accountId, meterNumber } }),
104
+ onDemandRequests: this.request("smart_on_demand_logs", { params: { meterNumber } }),
105
+ };
106
+ const userId = stringClaim(this.claims.sub);
107
+ if (userId) {
108
+ calls.notifications = this.request("smart_notifications", { params: { userId } }).catch(() => ({ status: true, data: [] }));
109
+ calls.unreadNotifications = this.request("smart_notification_unread_count", { params: { userId } }).catch(() => ({ status: true, data: { unreadCount: 0 } }));
110
+ }
111
+ if (booleanClaim(this.claims.currentAccountIsMeterPrepaid)) {
112
+ delete calls.lastBill;
113
+ delete calls.billHistory;
114
+ delete calls.paymentHistory;
115
+ calls.prepaidBalance = this.request("smart_prepaid_balance", { params: { meterNumber } });
116
+ calls.rechargeBalance = this.request("smart_prepaid_recharge_balance", { params: { accountId } });
117
+ calls.rechargeHistory = this.request("smart_prepaid_recharge_history", { params: { meterNumber } });
118
+ calls.billHistory = this.request("smart_prepaid_bill_history", { params: { meterNumber } });
119
+ }
120
+ if (options.includeDerived) {
121
+ calls.derivedInsights = this.request("smart_insights", { params: { accountId } });
122
+ calls.derivedForecastToday = this.request("smart_forecast_today", { params: { meterNumber } });
123
+ calls.derivedForecastWeekly = this.request("smart_forecast_weekly", { params: { meterNumber } });
124
+ calls.derivedForecastMonthly = this.request("smart_forecast_monthly", { params: { meterNumber } });
125
+ }
126
+ const entries = await Promise.all(Object.entries(calls).map(async ([key, promise]) => {
127
+ try {
128
+ return [key, (await promise).data];
129
+ }
130
+ catch (error) {
131
+ return [key, { unavailable: true, message: error instanceof Error ? error.message : String(error) }];
132
+ }
133
+ }));
134
+ return {
135
+ status: true,
136
+ data: {
137
+ _meta: options.includeDerived
138
+ ? { dataPolicy: "observed-plus-derived", warning: "derivedInsights and derivedForecast* are predictions/advice, not meter evidence" }
139
+ : { dataPolicy: "observed-only", derivedAndAdvisoryExcluded: true },
140
+ session: this.sessionInfo(),
141
+ ...Object.fromEntries(entries),
142
+ },
143
+ };
144
+ }
145
+ consumption(accountId = this.accountId, type = "monthly", value = 12) {
146
+ if (!accountId)
147
+ throw new JpdclError("Smart-meter account ID is required", 400);
148
+ if (!this.meterNumber)
149
+ throw new JpdclError("Smart-meter number is required", 400);
150
+ return this.request("smart_consumption_comparison", { params: { meterNumber: this.meterNumber, type, value } });
151
+ }
152
+ intervalConsumption(accountId, from, to, sortOrder = "date") {
153
+ if (!(accountId ?? this.accountId))
154
+ throw new JpdclError("Smart-meter account ID is required", 400);
155
+ if (!this.meterNumber)
156
+ throw new JpdclError("Smart-meter number is required", 400);
157
+ assertDateRange(from, to, { requireBoth: true });
158
+ return this.request("smart_consumption_30min", { params: { meterNumber: this.meterNumber, fromDate: from, toDate: to, sortOrder } });
159
+ }
160
+ report(reportType, accountId = this.accountId, options = {}) {
161
+ if (!accountId)
162
+ throw new JpdclError("Smart-meter account ID is required", 400);
163
+ if (!this.meterNumber)
164
+ throw new JpdclError("Smart-meter number is required", 400);
165
+ assertDateRange(options.from, options.to, { pairedWhenPresent: true });
166
+ const filter = options.filter ?? (options.from && options.to
167
+ ? encodeReportFilter(options.from, options.to, options.start ?? 1, options.end ?? defaultReportEnd(reportType))
168
+ : undefined);
169
+ return this.request("smart_report", { params: { meterNumber: this.meterNumber, reportType, filter, format: options.format } });
170
+ }
171
+ }
172
+ export function encodeReportFilter(from, to, start = 1, end = 100) {
173
+ return Buffer.from(JSON.stringify({
174
+ start,
175
+ end,
176
+ filters: { createdDateFrom: from, createdDateTo: to },
177
+ }), "utf8").toString("base64");
178
+ }
179
+ export function smartApiUrlFromAppUrl(appUrl) {
180
+ if (!appUrl)
181
+ return SMART_API_URL;
182
+ return new URL("/api", appUrl).toString().replace(/\/$/, "");
183
+ }
184
+ export function decodeJwt(token) {
185
+ try {
186
+ const payload = token.split(".")[1];
187
+ if (!payload)
188
+ throw new Error("JWT payload is missing");
189
+ return JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
190
+ }
191
+ catch (error) {
192
+ throw new AuthenticationError("Invalid smart-meter SSO token", error);
193
+ }
194
+ }
195
+ function normalizeEnvelope(raw) {
196
+ if (Object.prototype.hasOwnProperty.call(raw, "success")) {
197
+ return { status: raw.success, message: raw.message, data: raw.data, correlationId: raw.correlationId };
198
+ }
199
+ return raw;
200
+ }
201
+ function errorMessage(value) {
202
+ const error = value.error;
203
+ if (typeof error === "string")
204
+ return error;
205
+ if (error && typeof error === "object") {
206
+ const record = error;
207
+ return stringClaim(record.message) ?? stringClaim(record.title);
208
+ }
209
+ return stringClaim(value.message);
210
+ }
211
+ function stringClaim(value) {
212
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
213
+ }
214
+ function booleanClaim(value) {
215
+ if (typeof value === "boolean")
216
+ return value;
217
+ if (typeof value === "string" && ["true", "false"].includes(value.toLowerCase()))
218
+ return value.toLowerCase() === "true";
219
+ return undefined;
220
+ }
221
+ function parseAccounts(value) {
222
+ if (Array.isArray(value))
223
+ return value;
224
+ if (typeof value === "string") {
225
+ try {
226
+ const parsed = JSON.parse(value);
227
+ return Array.isArray(parsed) ? parsed : [];
228
+ }
229
+ catch {
230
+ return [];
231
+ }
232
+ }
233
+ return [];
234
+ }
235
+ function defaultReportEnd(reportType) {
236
+ return reportType === "ConsumerVoltageDataProfile" ? 100 : reportType === "SanctionLoadVSMaxDemand" ? 12 : 10;
237
+ }
238
+ //# sourceMappingURL=smart-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-client.js","sourceRoot":"","sources":["../src/smart-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ export declare const JPDCL_TARIFF_ORDER_2025_26: {
2
+ readonly id: "JPDCL-JERC-FY2025-26-SUBSIDIZED";
3
+ readonly title: "JPDCL & KPDCL ARR and Tariff for FY 2025-26 - Subsidized Tariff";
4
+ readonly fiscalYear: "2025-26";
5
+ readonly sourceUrl: "https://jpdcl.jk.gov.in/downloads/tariff/JPDCL_Tariff_Order_2025_26.pdf";
6
+ readonly domesticSchedule: {
7
+ readonly pdfPages: readonly [159, 160];
8
+ readonly printedPages: readonly [139, 140];
9
+ readonly energySlabs: readonly [{
10
+ readonly upToKwh: 200;
11
+ readonly ratePerKwh: 2.3;
12
+ }, {
13
+ readonly upToKwh: 400;
14
+ readonly ratePerKwh: 4;
15
+ }, {
16
+ readonly upToKwh: null;
17
+ readonly ratePerKwh: 4.35;
18
+ }];
19
+ readonly fixedChargePerKwMonth: 8;
20
+ readonly loadRoundingKw: 0.5;
21
+ };
22
+ readonly generalTerms: {
23
+ readonly pdfPages: readonly [176, 177, 178, 179, 180];
24
+ readonly printedPages: readonly [156, 157, 158, 159, 160];
25
+ readonly prepaidEnergyRebatePercent: 2;
26
+ readonly latePaymentPercentPerMonth: 1.5;
27
+ readonly solarWaterHeaterRebatePerMonth: 150;
28
+ };
29
+ };
30
+ export interface DomesticTariffInput {
31
+ unitsKwh: number;
32
+ sanctionedLoadKw: number;
33
+ prepaid?: boolean;
34
+ solarWaterHeaterEligible?: boolean;
35
+ electricityDutyAmount?: number;
36
+ otherChargesAmount?: number;
37
+ unpaidPrincipalAmount?: number;
38
+ lateMonths?: number;
39
+ }
40
+ export interface TariffSlabCharge {
41
+ fromKwh: number;
42
+ toKwh: number | null;
43
+ unitsKwh: number;
44
+ ratePerKwh: number;
45
+ amount: number;
46
+ }
47
+ export declare function calculateDomesticMeteredCharges(input: DomesticTariffInput): {
48
+ _meta: {
49
+ dataClass: string;
50
+ purpose: string;
51
+ tariffOrderId: "JPDCL-JERC-FY2025-26-SUBSIDIZED";
52
+ formulaVersion: string;
53
+ };
54
+ input: {
55
+ measuredUnitsKwh: number;
56
+ billedUnitsKwh: number;
57
+ sanctionedLoadKw: number;
58
+ billedLoadKw: number;
59
+ prepaid: boolean;
60
+ solarWaterHeaterEligible: boolean;
61
+ };
62
+ rates: {
63
+ energySlabs: readonly [{
64
+ readonly upToKwh: 200;
65
+ readonly ratePerKwh: 2.3;
66
+ }, {
67
+ readonly upToKwh: 400;
68
+ readonly ratePerKwh: 4;
69
+ }, {
70
+ readonly upToKwh: null;
71
+ readonly ratePerKwh: 4.35;
72
+ }];
73
+ fixedChargePerKwMonth: 8;
74
+ prepaidEnergyRebatePercent: 2;
75
+ latePaymentPercentPerMonth: 1.5;
76
+ solarWaterHeaterRebatePerMonth: 150;
77
+ };
78
+ slabCharges: TariffSlabCharge[];
79
+ charges: {
80
+ energyCharge: number;
81
+ fixedCharge: number;
82
+ prepaidRebate: number;
83
+ solarWaterHeaterRebate: number;
84
+ tariffSubtotal: number;
85
+ electricityDuty: number;
86
+ otherCharges: number;
87
+ latePaymentSurcharge: number;
88
+ totalEstimate: number;
89
+ currency: string;
90
+ };
91
+ exclusions: string[];
92
+ source: {
93
+ readonly id: "JPDCL-JERC-FY2025-26-SUBSIDIZED";
94
+ readonly title: "JPDCL & KPDCL ARR and Tariff for FY 2025-26 - Subsidized Tariff";
95
+ readonly fiscalYear: "2025-26";
96
+ readonly sourceUrl: "https://jpdcl.jk.gov.in/downloads/tariff/JPDCL_Tariff_Order_2025_26.pdf";
97
+ readonly domesticSchedule: {
98
+ readonly pdfPages: readonly [159, 160];
99
+ readonly printedPages: readonly [139, 140];
100
+ readonly energySlabs: readonly [{
101
+ readonly upToKwh: 200;
102
+ readonly ratePerKwh: 2.3;
103
+ }, {
104
+ readonly upToKwh: 400;
105
+ readonly ratePerKwh: 4;
106
+ }, {
107
+ readonly upToKwh: null;
108
+ readonly ratePerKwh: 4.35;
109
+ }];
110
+ readonly fixedChargePerKwMonth: 8;
111
+ readonly loadRoundingKw: 0.5;
112
+ };
113
+ readonly generalTerms: {
114
+ readonly pdfPages: readonly [176, 177, 178, 179, 180];
115
+ readonly printedPages: readonly [156, 157, 158, 159, 160];
116
+ readonly prepaidEnergyRebatePercent: 2;
117
+ readonly latePaymentPercentPerMonth: 1.5;
118
+ readonly solarWaterHeaterRebatePerMonth: 150;
119
+ };
120
+ };
121
+ };
package/dist/tariff.js ADDED
@@ -0,0 +1,124 @@
1
+ export const JPDCL_TARIFF_ORDER_2025_26 = {
2
+ id: "JPDCL-JERC-FY2025-26-SUBSIDIZED",
3
+ title: "JPDCL & KPDCL ARR and Tariff for FY 2025-26 - Subsidized Tariff",
4
+ fiscalYear: "2025-26",
5
+ sourceUrl: "https://jpdcl.jk.gov.in/downloads/tariff/JPDCL_Tariff_Order_2025_26.pdf",
6
+ domesticSchedule: {
7
+ pdfPages: [159, 160],
8
+ printedPages: [139, 140],
9
+ energySlabs: [
10
+ { upToKwh: 200, ratePerKwh: 2.30 },
11
+ { upToKwh: 400, ratePerKwh: 4.00 },
12
+ { upToKwh: null, ratePerKwh: 4.35 },
13
+ ],
14
+ fixedChargePerKwMonth: 8.00,
15
+ loadRoundingKw: 0.5,
16
+ },
17
+ generalTerms: {
18
+ pdfPages: [176, 177, 178, 179, 180],
19
+ printedPages: [156, 157, 158, 159, 160],
20
+ prepaidEnergyRebatePercent: 2,
21
+ latePaymentPercentPerMonth: 1.5,
22
+ solarWaterHeaterRebatePerMonth: 150,
23
+ },
24
+ };
25
+ export function calculateDomesticMeteredCharges(input) {
26
+ requireNonNegative("unitsKwh", input.unitsKwh);
27
+ requireNonNegative("sanctionedLoadKw", input.sanctionedLoadKw);
28
+ const billedUnitsKwh = Math.round(input.unitsKwh);
29
+ const billedLoadKw = Math.ceil(input.sanctionedLoadKw / 0.5) * 0.5;
30
+ const slabCharges = calculateSlabs(billedUnitsKwh);
31
+ const energyCharge = roundMoney(slabCharges.reduce((sum, slab) => sum + slab.amount, 0));
32
+ const fixedCharge = roundMoney(billedLoadKw * JPDCL_TARIFF_ORDER_2025_26.domesticSchedule.fixedChargePerKwMonth);
33
+ const prepaidRebate = input.prepaid
34
+ ? roundMoney(energyCharge * JPDCL_TARIFF_ORDER_2025_26.generalTerms.prepaidEnergyRebatePercent / 100)
35
+ : 0;
36
+ const solarWaterHeaterRebate = input.solarWaterHeaterEligible
37
+ ? JPDCL_TARIFF_ORDER_2025_26.generalTerms.solarWaterHeaterRebatePerMonth
38
+ : 0;
39
+ const electricityDuty = optionalMoney("electricityDutyAmount", input.electricityDutyAmount);
40
+ const otherCharges = optionalMoney("otherChargesAmount", input.otherChargesAmount);
41
+ const lateMonths = input.lateMonths ?? 0;
42
+ requireNonNegative("lateMonths", lateMonths);
43
+ const unpaidPrincipal = optionalMoney("unpaidPrincipalAmount", input.unpaidPrincipalAmount);
44
+ const latePaymentSurcharge = roundMoney(unpaidPrincipal * lateMonths * JPDCL_TARIFF_ORDER_2025_26.generalTerms.latePaymentPercentPerMonth / 100);
45
+ const tariffSubtotal = roundMoney(Math.max(0, energyCharge + fixedCharge - prepaidRebate - solarWaterHeaterRebate));
46
+ const totalEstimate = roundMoney(tariffSubtotal + electricityDuty + otherCharges + latePaymentSurcharge);
47
+ return {
48
+ _meta: {
49
+ dataClass: "deterministic-calculation",
50
+ purpose: "estimate-not-utility-bill",
51
+ tariffOrderId: JPDCL_TARIFF_ORDER_2025_26.id,
52
+ formulaVersion: "1.0",
53
+ },
54
+ input: {
55
+ measuredUnitsKwh: input.unitsKwh,
56
+ billedUnitsKwh,
57
+ sanctionedLoadKw: input.sanctionedLoadKw,
58
+ billedLoadKw,
59
+ prepaid: Boolean(input.prepaid),
60
+ solarWaterHeaterEligible: Boolean(input.solarWaterHeaterEligible),
61
+ },
62
+ rates: {
63
+ energySlabs: JPDCL_TARIFF_ORDER_2025_26.domesticSchedule.energySlabs,
64
+ fixedChargePerKwMonth: JPDCL_TARIFF_ORDER_2025_26.domesticSchedule.fixedChargePerKwMonth,
65
+ prepaidEnergyRebatePercent: JPDCL_TARIFF_ORDER_2025_26.generalTerms.prepaidEnergyRebatePercent,
66
+ latePaymentPercentPerMonth: JPDCL_TARIFF_ORDER_2025_26.generalTerms.latePaymentPercentPerMonth,
67
+ solarWaterHeaterRebatePerMonth: JPDCL_TARIFF_ORDER_2025_26.generalTerms.solarWaterHeaterRebatePerMonth,
68
+ },
69
+ slabCharges,
70
+ charges: {
71
+ energyCharge,
72
+ fixedCharge,
73
+ prepaidRebate: -prepaidRebate,
74
+ solarWaterHeaterRebate: -solarWaterHeaterRebate,
75
+ tariffSubtotal,
76
+ electricityDuty,
77
+ otherCharges,
78
+ latePaymentSurcharge,
79
+ totalEstimate,
80
+ currency: "INR",
81
+ },
82
+ exclusions: [
83
+ "arrears and bill adjustments unless supplied as otherChargesAmount",
84
+ "electricity duty or government levy unless supplied as electricityDutyAmount",
85
+ "FPPCA or later tariff revision not present in the cited order",
86
+ "excess-demand charges unless assessed by JPDCL",
87
+ "meter defects, penalties, and utility-specific rounding or adjustments",
88
+ ],
89
+ source: JPDCL_TARIFF_ORDER_2025_26,
90
+ };
91
+ }
92
+ function calculateSlabs(unitsKwh) {
93
+ const definitions = [
94
+ { fromKwh: 1, toKwh: 200, width: 200, ratePerKwh: 2.30 },
95
+ { fromKwh: 201, toKwh: 400, width: 200, ratePerKwh: 4.00 },
96
+ { fromKwh: 401, toKwh: null, width: Number.POSITIVE_INFINITY, ratePerKwh: 4.35 },
97
+ ];
98
+ let remaining = unitsKwh;
99
+ return definitions.map((definition) => {
100
+ const slabUnits = Math.max(0, Math.min(remaining, definition.width));
101
+ remaining -= slabUnits;
102
+ return {
103
+ fromKwh: definition.fromKwh,
104
+ toKwh: definition.toKwh,
105
+ unitsKwh: slabUnits,
106
+ ratePerKwh: definition.ratePerKwh,
107
+ amount: roundMoney(slabUnits * definition.ratePerKwh),
108
+ };
109
+ }).filter((slab) => slab.unitsKwh > 0);
110
+ }
111
+ function optionalMoney(name, value) {
112
+ if (value === undefined)
113
+ return 0;
114
+ requireNonNegative(name, value);
115
+ return roundMoney(value);
116
+ }
117
+ function requireNonNegative(name, value) {
118
+ if (!Number.isFinite(value) || value < 0)
119
+ throw new TypeError(`${name} must be a non-negative finite number`);
120
+ }
121
+ function roundMoney(value) {
122
+ return Math.round((value + Number.EPSILON) * 100) / 100;
123
+ }
124
+ //# sourceMappingURL=tariff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tariff.js","sourceRoot":"","sources":["../src/tariff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ export type JsonObject = {
6
+ [key: string]: JsonValue;
7
+ };
8
+ export interface PortalResponse<T = unknown> {
9
+ status?: boolean | number | string;
10
+ message?: string;
11
+ data?: T;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface MainSession {
15
+ version: 1;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ cookies: string;
19
+ loginId?: string;
20
+ primaryAccountId?: string;
21
+ consumerCode?: string;
22
+ user?: Record<string, unknown>;
23
+ smart?: {
24
+ token: string;
25
+ baseUrl: string;
26
+ appUrl?: string;
27
+ tenantId?: string;
28
+ accountId?: string;
29
+ meterNumber?: string;
30
+ userId?: string;
31
+ expiresAt?: string;
32
+ };
33
+ }
34
+ export interface EndpointDefinition {
35
+ portal: "main" | "smart" | "ledger";
36
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
37
+ path: string;
38
+ encrypted?: boolean;
39
+ auth: "public" | "public-basic" | "main-session" | "smart-bearer" | "smart-admin" | "external-basic";
40
+ mutation?: boolean;
41
+ binary?: boolean;
42
+ dataClass?: "observed" | "derived" | "advisory" | "configuration" | "transactional";
43
+ description: string;
44
+ parameters?: string[];
45
+ bodyExample?: Record<string, unknown>;
46
+ }
47
+ export interface RequestOptions {
48
+ params?: Record<string, string | number | boolean | null | undefined>;
49
+ body?: unknown;
50
+ headers?: Record<string, string>;
51
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { handleMcpRequest } from "./http-handler.js";
2
+ declare const _default: {
3
+ fetch: typeof handleMcpRequest;
4
+ };
5
+ export default _default;
package/dist/worker.js ADDED
@@ -0,0 +1,3 @@
1
+ import { handleMcpRequest } from "./http-handler.js";
2
+ export default { fetch: handleMcpRequest };
3
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC"}