@parkflow/shared-types 1.6.0 → 1.9.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 (67) hide show
  1. package/.npmrc.publish +1 -0
  2. package/dist/tsconfig.build.tsbuildinfo +1 -1
  3. package/dist/types/index.d.ts +2 -1
  4. package/dist/types/index.js +2 -1
  5. package/dist/types/index.js.map +1 -1
  6. package/dist/types/lot-health/index.d.ts +14 -0
  7. package/dist/types/lot-health/index.js +31 -0
  8. package/dist/types/lot-health/index.js.map +1 -0
  9. package/dist/types/lot-health/lot-backlog-severity.enum.d.ts +5 -0
  10. package/dist/types/lot-health/lot-backlog-severity.enum.js +10 -0
  11. package/dist/types/lot-health/lot-backlog-severity.enum.js.map +1 -0
  12. package/dist/types/lot-health/lot-backlog-status.interface.d.ts +8 -0
  13. package/dist/types/lot-health/lot-backlog-status.interface.js +3 -0
  14. package/dist/types/lot-health/lot-backlog-status.interface.js.map +1 -0
  15. package/dist/types/lot-health/lot-daily-metrics.interface.d.ts +8 -0
  16. package/dist/types/lot-health/lot-daily-metrics.interface.js +3 -0
  17. package/dist/types/lot-health/lot-daily-metrics.interface.js.map +1 -0
  18. package/dist/types/lot-health/lot-day-funnel.interface.d.ts +12 -0
  19. package/dist/types/lot-health/lot-day-funnel.interface.js +3 -0
  20. package/dist/types/lot-health/lot-day-funnel.interface.js.map +1 -0
  21. package/dist/types/lot-health/lot-enforcement-config.interface.d.ts +8 -0
  22. package/dist/types/lot-health/lot-enforcement-config.interface.js +3 -0
  23. package/dist/types/lot-health/lot-enforcement-config.interface.js.map +1 -0
  24. package/dist/types/lot-health/lot-enforcement-run-info.interface.d.ts +7 -0
  25. package/dist/types/lot-health/lot-enforcement-run-info.interface.js +3 -0
  26. package/dist/types/lot-health/lot-enforcement-run-info.interface.js.map +1 -0
  27. package/dist/types/lot-health/lot-enforcement-trigger-source.enum.d.ts +6 -0
  28. package/dist/types/lot-health/lot-enforcement-trigger-source.enum.js +11 -0
  29. package/dist/types/lot-health/lot-enforcement-trigger-source.enum.js.map +1 -0
  30. package/dist/types/lot-health/lot-health-response.interface.d.ts +20 -0
  31. package/dist/types/lot-health/lot-health-response.interface.js +3 -0
  32. package/dist/types/lot-health/lot-health-response.interface.js.map +1 -0
  33. package/dist/types/lot-health/lot-recent-validation.interface.d.ts +10 -0
  34. package/dist/types/lot-health/lot-recent-validation.interface.js +3 -0
  35. package/dist/types/lot-health/lot-recent-validation.interface.js.map +1 -0
  36. package/dist/types/lot-health/lot-validation-activity-section.interface.d.ts +6 -0
  37. package/dist/types/lot-health/lot-validation-activity-section.interface.js +3 -0
  38. package/dist/types/lot-health/lot-validation-activity-section.interface.js.map +1 -0
  39. package/dist/types/lot-health/lot-validation-provider-state.enum.d.ts +5 -0
  40. package/dist/types/lot-health/lot-validation-provider-state.enum.js +10 -0
  41. package/dist/types/lot-health/lot-validation-provider-state.enum.js.map +1 -0
  42. package/dist/types/lot-health/lot-validation-provider-status.interface.d.ts +8 -0
  43. package/dist/types/lot-health/lot-validation-provider-status.interface.js +3 -0
  44. package/dist/types/lot-health/lot-validation-provider-status.interface.js.map +1 -0
  45. package/dist/types/lot-health/lot-webhook-activity.interface.d.ts +12 -0
  46. package/dist/types/lot-health/lot-webhook-activity.interface.js +3 -0
  47. package/dist/types/lot-health/lot-webhook-activity.interface.js.map +1 -0
  48. package/dist/types/lot-health/validation-reason-bucket.interface.d.ts +4 -0
  49. package/dist/types/lot-health/validation-reason-bucket.interface.js +3 -0
  50. package/dist/types/lot-health/validation-reason-bucket.interface.js.map +1 -0
  51. package/package.json +1 -1
  52. package/src/types/index.ts +2 -1
  53. package/src/types/lot-health/index.ts +14 -0
  54. package/src/types/lot-health/lot-backlog-severity.enum.ts +5 -0
  55. package/src/types/lot-health/lot-backlog-status.interface.ts +10 -0
  56. package/src/types/lot-health/lot-daily-metrics.interface.ts +8 -0
  57. package/src/types/lot-health/lot-day-funnel.interface.ts +14 -0
  58. package/src/types/lot-health/lot-enforcement-config.interface.ts +8 -0
  59. package/src/types/lot-health/lot-enforcement-run-info.interface.ts +8 -0
  60. package/src/types/lot-health/lot-enforcement-trigger-source.enum.ts +6 -0
  61. package/src/types/lot-health/lot-health-response.interface.ts +24 -0
  62. package/src/types/lot-health/lot-recent-validation.interface.ts +14 -0
  63. package/src/types/lot-health/lot-validation-activity-section.interface.ts +9 -0
  64. package/src/types/lot-health/lot-validation-provider-state.enum.ts +8 -0
  65. package/src/types/lot-health/lot-validation-provider-status.interface.ts +9 -0
  66. package/src/types/lot-health/lot-webhook-activity.interface.ts +16 -0
  67. package/src/types/lot-health/validation-reason-bucket.interface.ts +4 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lot-backlog-severity.enum"), exports);
18
+ __exportStar(require("./lot-backlog-status.interface"), exports);
19
+ __exportStar(require("./lot-daily-metrics.interface"), exports);
20
+ __exportStar(require("./lot-day-funnel.interface"), exports);
21
+ __exportStar(require("./lot-enforcement-config.interface"), exports);
22
+ __exportStar(require("./lot-enforcement-run-info.interface"), exports);
23
+ __exportStar(require("./lot-enforcement-trigger-source.enum"), exports);
24
+ __exportStar(require("./lot-health-response.interface"), exports);
25
+ __exportStar(require("./lot-recent-validation.interface"), exports);
26
+ __exportStar(require("./lot-validation-activity-section.interface"), exports);
27
+ __exportStar(require("./lot-validation-provider-state.enum"), exports);
28
+ __exportStar(require("./lot-validation-provider-status.interface"), exports);
29
+ __exportStar(require("./lot-webhook-activity.interface"), exports);
30
+ __exportStar(require("./validation-reason-bucket.interface"), exports);
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/lot-health/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,iEAA+C;AAC/C,gEAA8C;AAC9C,6DAA2C;AAC3C,qEAAmD;AACnD,uEAAqD;AACrD,wEAAsD;AACtD,kEAAgD;AAChD,oEAAkD;AAClD,8EAA4D;AAC5D,uEAAqD;AACrD,6EAA2D;AAC3D,mEAAiD;AACjD,uEAAqD"}
@@ -0,0 +1,5 @@
1
+ export declare enum LotBacklogSeverity {
2
+ Ok = "ok",
3
+ Warn = "warn",
4
+ Alert = "alert"
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LotBacklogSeverity = void 0;
4
+ var LotBacklogSeverity;
5
+ (function (LotBacklogSeverity) {
6
+ LotBacklogSeverity["Ok"] = "ok";
7
+ LotBacklogSeverity["Warn"] = "warn";
8
+ LotBacklogSeverity["Alert"] = "alert";
9
+ })(LotBacklogSeverity || (exports.LotBacklogSeverity = LotBacklogSeverity = {}));
10
+ //# sourceMappingURL=lot-backlog-severity.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-backlog-severity.enum.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-backlog-severity.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC1B,+BAAS,CAAA;IACT,mCAAa,CAAA;IACb,qCAAe,CAAA;AACnB,CAAC,EAJW,kBAAkB,kCAAlB,kBAAkB,QAI7B"}
@@ -0,0 +1,8 @@
1
+ import { LotBacklogSeverity } from './lot-backlog-severity.enum';
2
+ export interface LotBacklogStatus {
3
+ unprocessedCount: number;
4
+ oldestUnprocessedAtUtc: string | null;
5
+ oldestUnprocessedAgeSeconds: number | null;
6
+ severity: LotBacklogSeverity;
7
+ advisory: string | null;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-backlog-status.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-backlog-status.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-backlog-status.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export interface LotDailyMetrics {
2
+ localDate: string;
3
+ totalSessions: number;
4
+ validatedCount: number;
5
+ ticketedCount: number;
6
+ unprocessedCount: number;
7
+ violationRatePct: number | null;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-daily-metrics.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-daily-metrics.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-daily-metrics.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { ValidationReasonBucket } from './validation-reason-bucket.interface';
2
+ export interface LotDayFunnel {
3
+ dayLabel: string;
4
+ rangeStartUtc: string;
5
+ rangeEndUtc: string;
6
+ totalSessions: number;
7
+ validatedCount: number;
8
+ ticketedCount: number;
9
+ unprocessedCount: number;
10
+ violationRatePct: number | null;
11
+ validationReasons: ValidationReasonBucket[];
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-day-funnel.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-day-funnel.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-day-funnel.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export interface LotEnforcementConfig {
2
+ isEnforcementActive: boolean;
3
+ liveEnforcement: boolean;
4
+ hasLiveEnforcementCheck: boolean;
5
+ gracePeriodMinutes: number;
6
+ paidGracePeriodBeforeMinutes: number;
7
+ paidGracePeriodAfterMinutes: number;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-enforcement-config.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-enforcement-config.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-enforcement-config.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { LotEnforcementTriggerSource } from './lot-enforcement-trigger-source.enum';
2
+ export interface LotEnforcementRunInfo {
3
+ lastRunAtUtc: string;
4
+ lastSuccessAtUtc: string | null;
5
+ lastTriggerSource: LotEnforcementTriggerSource;
6
+ lastError: string | null;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-enforcement-run-info.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-enforcement-run-info.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-enforcement-run-info.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare enum LotEnforcementTriggerSource {
2
+ Cron = "cron",
3
+ Manual = "manual",
4
+ CaptureEvent = "capture-event",
5
+ Unknown = "unknown"
6
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LotEnforcementTriggerSource = void 0;
4
+ var LotEnforcementTriggerSource;
5
+ (function (LotEnforcementTriggerSource) {
6
+ LotEnforcementTriggerSource["Cron"] = "cron";
7
+ LotEnforcementTriggerSource["Manual"] = "manual";
8
+ LotEnforcementTriggerSource["CaptureEvent"] = "capture-event";
9
+ LotEnforcementTriggerSource["Unknown"] = "unknown";
10
+ })(LotEnforcementTriggerSource || (exports.LotEnforcementTriggerSource = LotEnforcementTriggerSource = {}));
11
+ //# sourceMappingURL=lot-enforcement-trigger-source.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-enforcement-trigger-source.enum.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-enforcement-trigger-source.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,2BAKX;AALD,WAAY,2BAA2B;IACnC,4CAAa,CAAA;IACb,gDAAiB,CAAA;IACjB,6DAA8B,CAAA;IAC9B,kDAAmB,CAAA;AACvB,CAAC,EALW,2BAA2B,2CAA3B,2BAA2B,QAKtC"}
@@ -0,0 +1,20 @@
1
+ import { LotEnforcementConfig } from './lot-enforcement-config.interface';
2
+ import { LotBacklogStatus } from './lot-backlog-status.interface';
3
+ import { LotDayFunnel } from './lot-day-funnel.interface';
4
+ import { LotDailyMetrics } from './lot-daily-metrics.interface';
5
+ import { LotEnforcementRunInfo } from './lot-enforcement-run-info.interface';
6
+ import { LotWebhookActivity } from './lot-webhook-activity.interface';
7
+ import { LotValidationActivitySection } from './lot-validation-activity-section.interface';
8
+ export interface LotHealthResponse {
9
+ lotId: number;
10
+ lotCode: string;
11
+ timeZone: string;
12
+ generatedAtUtc: string;
13
+ config: LotEnforcementConfig;
14
+ backlog: LotBacklogStatus;
15
+ today: LotDayFunnel;
16
+ trend: LotDailyMetrics[];
17
+ lastEnforcementRun: LotEnforcementRunInfo | null;
18
+ webhooks: LotWebhookActivity[];
19
+ validations: LotValidationActivitySection;
20
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-health-response.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-health-response.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-health-response.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface LotRecentValidation {
2
+ id: string;
3
+ lpn: string;
4
+ state: string | null;
5
+ providerName: string | null;
6
+ receiptId: string | null;
7
+ startUtc: string;
8
+ endUtc: string;
9
+ receivedAtUtc: string;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-recent-validation.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-recent-validation.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-recent-validation.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { LotRecentValidation } from './lot-recent-validation.interface';
2
+ import { LotValidationProviderStatus } from './lot-validation-provider-status.interface';
3
+ export interface LotValidationActivitySection {
4
+ providers: LotValidationProviderStatus[];
5
+ recent: LotRecentValidation[];
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-validation-activity-section.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-validation-activity-section.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-validation-activity-section.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare enum LotValidationProviderState {
2
+ Active = "active",
3
+ Stale = "stale",
4
+ Silent = "silent"
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LotValidationProviderState = void 0;
4
+ var LotValidationProviderState;
5
+ (function (LotValidationProviderState) {
6
+ LotValidationProviderState["Active"] = "active";
7
+ LotValidationProviderState["Stale"] = "stale";
8
+ LotValidationProviderState["Silent"] = "silent";
9
+ })(LotValidationProviderState || (exports.LotValidationProviderState = LotValidationProviderState = {}));
10
+ //# sourceMappingURL=lot-validation-provider-state.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-validation-provider-state.enum.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-validation-provider-state.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IAElC,+CAAiB,CAAA;IAEjB,6CAAe,CAAA;IAEf,+CAAiB,CAAA;AACrB,CAAC,EAPW,0BAA0B,0CAA1B,0BAA0B,QAOrC"}
@@ -0,0 +1,8 @@
1
+ import { LotValidationProviderState } from './lot-validation-provider-state.enum';
2
+ export interface LotValidationProviderStatus {
3
+ paymentIntegrationId: number;
4
+ providerName: string;
5
+ state: LotValidationProviderState;
6
+ countLast24h: number;
7
+ lastReceivedAtUtc: string | null;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-validation-provider-status.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-validation-provider-status.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-validation-provider-status.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface LotWebhookActivity {
2
+ id: string;
3
+ eventType: string;
4
+ status: string;
5
+ statusCode: number | null;
6
+ subscriberName: string | null;
7
+ destinationUrl: string | null;
8
+ createdAtUtc: string;
9
+ retryCount: number;
10
+ errorMessage: string | null;
11
+ payload: unknown;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lot-webhook-activity.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lot-webhook-activity.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/lot-webhook-activity.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface ValidationReasonBucket {
2
+ reasonShort: string;
3
+ count: number;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=validation-reason-bucket.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-reason-bucket.interface.js","sourceRoot":"","sources":["../../../src/types/lot-health/validation-reason-bucket.interface.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parkflow/shared-types",
3
- "version": "1.6.0",
3
+ "version": "1.9.0",
4
4
  "description": "Shared type definitions for Vanguard services",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,4 +1,5 @@
1
1
  export * from './adaptive';
2
+ export * from './lot-health';
3
+ export * from './lpr';
2
4
  export * from './platesmart';
3
5
  export * from './rekor';
4
- export * from './lpr';
@@ -0,0 +1,14 @@
1
+ export * from './lot-backlog-severity.enum';
2
+ export * from './lot-backlog-status.interface';
3
+ export * from './lot-daily-metrics.interface';
4
+ export * from './lot-day-funnel.interface';
5
+ export * from './lot-enforcement-config.interface';
6
+ export * from './lot-enforcement-run-info.interface';
7
+ export * from './lot-enforcement-trigger-source.enum';
8
+ export * from './lot-health-response.interface';
9
+ export * from './lot-recent-validation.interface';
10
+ export * from './lot-validation-activity-section.interface';
11
+ export * from './lot-validation-provider-state.enum';
12
+ export * from './lot-validation-provider-status.interface';
13
+ export * from './lot-webhook-activity.interface';
14
+ export * from './validation-reason-bucket.interface';
@@ -0,0 +1,5 @@
1
+ export enum LotBacklogSeverity {
2
+ Ok = 'ok',
3
+ Warn = 'warn',
4
+ Alert = 'alert',
5
+ }
@@ -0,0 +1,10 @@
1
+ import { LotBacklogSeverity } from './lot-backlog-severity.enum';
2
+
3
+ export interface LotBacklogStatus {
4
+ unprocessedCount: number;
5
+ oldestUnprocessedAtUtc: string | null;
6
+ oldestUnprocessedAgeSeconds: number | null;
7
+ severity: LotBacklogSeverity;
8
+ /** Phrased for end-user display so the UI does not derive its own copy. */
9
+ advisory: string | null;
10
+ }
@@ -0,0 +1,8 @@
1
+ export interface LotDailyMetrics {
2
+ localDate: string;
3
+ totalSessions: number;
4
+ validatedCount: number;
5
+ ticketedCount: number;
6
+ unprocessedCount: number;
7
+ violationRatePct: number | null;
8
+ }
@@ -0,0 +1,14 @@
1
+ import { ValidationReasonBucket } from './validation-reason-bucket.interface';
2
+
3
+ export interface LotDayFunnel {
4
+ dayLabel: string;
5
+ rangeStartUtc: string;
6
+ rangeEndUtc: string;
7
+ totalSessions: number;
8
+ validatedCount: number;
9
+ ticketedCount: number;
10
+ unprocessedCount: number;
11
+ /** Null while unprocessedCount > 0 — the rate is not final until enforcement has run. */
12
+ violationRatePct: number | null;
13
+ validationReasons: ValidationReasonBucket[];
14
+ }
@@ -0,0 +1,8 @@
1
+ export interface LotEnforcementConfig {
2
+ isEnforcementActive: boolean;
3
+ liveEnforcement: boolean;
4
+ hasLiveEnforcementCheck: boolean;
5
+ gracePeriodMinutes: number;
6
+ paidGracePeriodBeforeMinutes: number;
7
+ paidGracePeriodAfterMinutes: number;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { LotEnforcementTriggerSource } from './lot-enforcement-trigger-source.enum';
2
+
3
+ export interface LotEnforcementRunInfo {
4
+ lastRunAtUtc: string;
5
+ lastSuccessAtUtc: string | null;
6
+ lastTriggerSource: LotEnforcementTriggerSource;
7
+ lastError: string | null;
8
+ }
@@ -0,0 +1,6 @@
1
+ export enum LotEnforcementTriggerSource {
2
+ Cron = 'cron',
3
+ Manual = 'manual',
4
+ CaptureEvent = 'capture-event',
5
+ Unknown = 'unknown',
6
+ }
@@ -0,0 +1,24 @@
1
+ import { LotEnforcementConfig } from './lot-enforcement-config.interface';
2
+ import { LotBacklogStatus } from './lot-backlog-status.interface';
3
+ import { LotDayFunnel } from './lot-day-funnel.interface';
4
+ import { LotDailyMetrics } from './lot-daily-metrics.interface';
5
+ import { LotEnforcementRunInfo } from './lot-enforcement-run-info.interface';
6
+ import { LotWebhookActivity } from './lot-webhook-activity.interface';
7
+ import { LotValidationActivitySection } from './lot-validation-activity-section.interface';
8
+
9
+ export interface LotHealthResponse {
10
+ lotId: number;
11
+ lotCode: string;
12
+ timeZone: string;
13
+ generatedAtUtc: string;
14
+ config: LotEnforcementConfig;
15
+ backlog: LotBacklogStatus;
16
+ today: LotDayFunnel;
17
+ /** Days with zero sessions are still returned so chart density is preserved. */
18
+ trend: LotDailyMetrics[];
19
+ lastEnforcementRun: LotEnforcementRunInfo | null;
20
+ /** Most recent outbound webhook deliveries tagged with this lot, capped to a small window. */
21
+ webhooks: LotWebhookActivity[];
22
+ /** Inbound payment validations and the configured-provider health summary for the last 24h. */
23
+ validations: LotValidationActivitySection;
24
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * One inbound parking validation as displayed in the Health tab.
3
+ * IDs are synthesised from receiptId + lpn + start so React keys are stable across polls.
4
+ */
5
+ export interface LotRecentValidation {
6
+ id: string;
7
+ lpn: string;
8
+ state: string | null;
9
+ providerName: string | null;
10
+ receiptId: string | null;
11
+ startUtc: string;
12
+ endUtc: string;
13
+ receivedAtUtc: string;
14
+ }
@@ -0,0 +1,9 @@
1
+ import { LotRecentValidation } from './lot-recent-validation.interface';
2
+ import { LotValidationProviderStatus } from './lot-validation-provider-status.interface';
3
+
4
+ export interface LotValidationActivitySection {
5
+ /** One entry per payment integration configured on the lot, ordered by provider name. */
6
+ providers: LotValidationProviderStatus[];
7
+ /** Most recent inbound validations for the lot, capped to a small window. */
8
+ recent: LotRecentValidation[];
9
+ }
@@ -0,0 +1,8 @@
1
+ export enum LotValidationProviderState {
2
+ /** Validations in the last 24h with most recent within ~2 hours. */
3
+ Active = 'active',
4
+ /** Validations exist in 24h but most recent is older than ~2 hours. */
5
+ Stale = 'stale',
6
+ /** Provider is configured on the lot but produced no validations in 24h. */
7
+ Silent = 'silent',
8
+ }
@@ -0,0 +1,9 @@
1
+ import { LotValidationProviderState } from './lot-validation-provider-state.enum';
2
+
3
+ export interface LotValidationProviderStatus {
4
+ paymentIntegrationId: number;
5
+ providerName: string;
6
+ state: LotValidationProviderState;
7
+ countLast24h: number;
8
+ lastReceivedAtUtc: string | null;
9
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * One row from the outbound webhook log for a lot — one delivery attempt to one subscriber.
3
+ * Includes the full rendered payload so the UI can show it on demand without a second round-trip.
4
+ */
5
+ export interface LotWebhookActivity {
6
+ id: string;
7
+ eventType: string;
8
+ status: string;
9
+ statusCode: number | null;
10
+ subscriberName: string | null;
11
+ destinationUrl: string | null;
12
+ createdAtUtc: string;
13
+ retryCount: number;
14
+ errorMessage: string | null;
15
+ payload: unknown;
16
+ }
@@ -0,0 +1,4 @@
1
+ export interface ValidationReasonBucket {
2
+ reasonShort: string;
3
+ count: number;
4
+ }