@tantainnovative/ndpr-toolkit 5.3.0 → 5.5.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/CHANGELOG.md +14 -0
- package/README.md +51 -7
- package/bin/ndpr.mjs +141 -0
- package/dist/breach.d.mts +9 -0
- package/dist/breach.d.ts +9 -0
- package/dist/breach.js +1 -1
- package/dist/breach.mjs +1 -1
- package/dist/chunk-5ZMYNOMR.mjs +2 -0
- package/dist/chunk-JXK5RUR3.mjs +2 -0
- package/dist/chunk-LHQG25Y2.js +2 -0
- package/dist/chunk-OW4GO3JF.js +1 -0
- package/dist/chunk-Q5KB2DN3.mjs +1 -0
- package/dist/chunk-SZXHNJGG.mjs +1 -0
- package/dist/chunk-WJSUVPYX.mjs +1 -0
- package/dist/chunk-WKY26JLT.js +1 -0
- package/dist/chunk-XCKX2WKD.js +2 -0
- package/dist/chunk-Y346CURW.js +1 -0
- package/dist/core.d.mts +76 -0
- package/dist/core.d.ts +76 -0
- package/dist/core.js +1 -1
- package/dist/core.mjs +1 -1
- package/dist/headless.js +1 -1
- package/dist/headless.mjs +1 -1
- package/dist/hooks.js +1 -1
- package/dist/hooks.mjs +1 -1
- package/dist/index.d.mts +85 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/presets.d.mts +2 -0
- package/dist/presets.d.ts +2 -0
- package/dist/presets.js +1 -1
- package/dist/presets.mjs +1 -1
- package/dist/server.d.mts +320 -0
- package/dist/server.d.ts +320 -0
- package/dist/server.js +1 -1
- package/dist/server.mjs +1 -1
- package/package.json +5 -1
- package/dist/chunk-6MO3GS3B.js +0 -2
- package/dist/chunk-GYLUTVKB.js +0 -1
- package/dist/chunk-KOHFQIV4.mjs +0 -1
- package/dist/chunk-NKFTLFPD.mjs +0 -1
- package/dist/chunk-OXFULQTE.js +0 -1
- package/dist/chunk-WLZTATLL.mjs +0 -2
package/dist/server.d.ts
CHANGED
|
@@ -198,6 +198,12 @@ export declare const arabicLocale: Required<{
|
|
|
198
198
|
*/
|
|
199
199
|
export declare function assemblePolicy(context: TemplateContext): PolicySection[];
|
|
200
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Assess a breach report against the NDPA S. 40 / GAID 2025 Article 33
|
|
203
|
+
* notification requirements.
|
|
204
|
+
*/
|
|
205
|
+
export declare function assessBreachNotification(report: BreachReport, options?: BreachNotificationOptions): BreachNotificationAssessment;
|
|
206
|
+
|
|
201
207
|
/**
|
|
202
208
|
* Analyzes all processing activities and returns compliance gaps including
|
|
203
209
|
* missing DPO approval, overdue reviews, undocumented justifications,
|
|
@@ -229,6 +235,15 @@ export declare function assessDPIARisk(dpiaResult: DPIAResult): {
|
|
|
229
235
|
*/
|
|
230
236
|
export declare function assessTransferRisk(transfer: CrossBorderTransfer): TransferRiskResult;
|
|
231
237
|
|
|
238
|
+
export declare interface AuditCheck {
|
|
239
|
+
id: string;
|
|
240
|
+
label: string;
|
|
241
|
+
status: AuditCheckStatus;
|
|
242
|
+
detail: string;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export declare type AuditCheckStatus = 'pass' | 'warn' | 'fail';
|
|
246
|
+
|
|
232
247
|
/**
|
|
233
248
|
* Breach notification types aligned with NDPA 2023 Section 40
|
|
234
249
|
* Data controllers must notify the NDPC within 72 hours of becoming aware of a breach
|
|
@@ -248,6 +263,93 @@ export declare interface BreachCategory {
|
|
|
248
263
|
defaultSeverity: 'low' | 'medium' | 'high' | 'critical';
|
|
249
264
|
}
|
|
250
265
|
|
|
266
|
+
export declare interface BreachNotificationAssessment {
|
|
267
|
+
/** Whether all applicable mandated content items are satisfied. */
|
|
268
|
+
complete: boolean;
|
|
269
|
+
/** Completeness of applicable content items, 0–100. */
|
|
270
|
+
completeness: number;
|
|
271
|
+
/** GAID 2025 Article 33(5) / NDPA S. 40(2) content of the notification to the Commission. */
|
|
272
|
+
notificationToCommission: BreachNotificationItem[];
|
|
273
|
+
/** NDPA S. 40(3) communication to data subjects — populated only when high-risk. */
|
|
274
|
+
dataSubjectCommunication: BreachNotificationItem[];
|
|
275
|
+
/** Whether a data-subject communication is owed (high risk). */
|
|
276
|
+
dataSubjectCommunicationRequired: boolean;
|
|
277
|
+
timing: BreachNotificationTiming;
|
|
278
|
+
/** Labels of unsatisfied applicable items. */
|
|
279
|
+
missing: string[];
|
|
280
|
+
/** Actionable next steps, including timing warnings. */
|
|
281
|
+
recommendations: string[];
|
|
282
|
+
asOf: number;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
declare interface BreachNotificationItem {
|
|
286
|
+
/** Stable identifier for the requirement. */
|
|
287
|
+
id: string;
|
|
288
|
+
/** Human-readable requirement. */
|
|
289
|
+
label: string;
|
|
290
|
+
/** Authoritative citation, e.g. `GAID 2025 Art. 33(5)(a)`. */
|
|
291
|
+
section: string;
|
|
292
|
+
/** Whether the report satisfies it. */
|
|
293
|
+
satisfied: boolean;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Personal-data-breach notification completeness checker for NDPA 2023
|
|
298
|
+
* Section 40, as detailed by NDPC General Application and Implementation
|
|
299
|
+
* Directive (GAID) 2025 Article 33.
|
|
300
|
+
*
|
|
301
|
+
* Section 40(2) requires a data controller to notify the Commission within 72
|
|
302
|
+
* hours of becoming aware of a breach likely to result in a risk to data
|
|
303
|
+
* subjects' rights and freedoms. GAID 2025 Article 33(5)(a)–(h) enumerates the
|
|
304
|
+
* content that a notification to the Commission "shall include". Where the
|
|
305
|
+
* breach is likely to result in a *high* risk, Section 40(3) additionally
|
|
306
|
+
* requires the controller to communicate the breach to affected data subjects
|
|
307
|
+
* in plain and clear language.
|
|
308
|
+
*
|
|
309
|
+
* This assesses a `BreachReport` against those requirements: which mandated
|
|
310
|
+
* content items are present, whether the 72-hour window is met, and whether a
|
|
311
|
+
* data-subject communication is owed. It is a documentation-completeness aid,
|
|
312
|
+
* not legal advice — verify against current NDPC guidance.
|
|
313
|
+
*
|
|
314
|
+
* @see NDPA 2023 Section 40 (Personal data breaches)
|
|
315
|
+
* @see NDPC GAID 2025 Article 33 (Data Breach Notification)
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
export declare interface BreachNotificationOptions {
|
|
319
|
+
/** Risk assessment for the breach; drives whether data-subject communication is required. */
|
|
320
|
+
assessment?: RiskAssessment;
|
|
321
|
+
/** The regulatory notification actually sent, if any — used to judge timeliness. */
|
|
322
|
+
notification?: RegulatoryNotification;
|
|
323
|
+
/** Reference "now" in epoch ms. Defaults to `Date.now()`. */
|
|
324
|
+
asOf?: number;
|
|
325
|
+
/** Notification window in hours. Defaults to 72 (NDPA S. 40(2)). */
|
|
326
|
+
deadlineHours?: number;
|
|
327
|
+
/**
|
|
328
|
+
* Explicit high-risk flag (NDPA S. 40(3)). When omitted, derived from
|
|
329
|
+
* `assessment.highRisksToRightsAndFreedoms`.
|
|
330
|
+
*/
|
|
331
|
+
highRisk?: boolean;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
declare interface BreachNotificationTiming {
|
|
335
|
+
/** `discoveredAt` + the notification window. */
|
|
336
|
+
deadline: number;
|
|
337
|
+
/** Whole hours between discovery and `asOf`. */
|
|
338
|
+
hoursSinceDiscovery: number;
|
|
339
|
+
/** Whether a regulatory notification has been recorded. */
|
|
340
|
+
notified: boolean;
|
|
341
|
+
/** When the regulatory notification was sent, if any. */
|
|
342
|
+
notifiedAt?: number;
|
|
343
|
+
/** Whether the notification (or, if none, `asOf`) falls within the deadline. */
|
|
344
|
+
withinDeadline: boolean;
|
|
345
|
+
/** Whole hours from `asOf` to the deadline (negative once past). */
|
|
346
|
+
hoursRemaining: number;
|
|
347
|
+
/** Whether the deadline has been missed. */
|
|
348
|
+
overdue: boolean;
|
|
349
|
+
/** Late filings must state the reasons for the delay (NDPA S. 40(2)). */
|
|
350
|
+
requiresDelayJustification: boolean;
|
|
351
|
+
}
|
|
352
|
+
|
|
251
353
|
/**
|
|
252
354
|
* Represents a data breach report
|
|
253
355
|
*/
|
|
@@ -350,6 +452,74 @@ export declare function calculateBreachSeverity(report: BreachReport, assessment
|
|
|
350
452
|
justification: string;
|
|
351
453
|
};
|
|
352
454
|
|
|
455
|
+
/**
|
|
456
|
+
* Compliance Audit Returns (CAR) scheduling under the NDPC General Application
|
|
457
|
+
* and Implementation Directive (GAID) 2025.
|
|
458
|
+
*
|
|
459
|
+
* A Data Controller/Processor of Major Importance (DCPMI) must conduct an
|
|
460
|
+
* initial compliance audit within 15 months of commencing data processing, and
|
|
461
|
+
* thereafter file a Compliance Audit Return with the NDPC annually (default
|
|
462
|
+
* deadline 31 March, filed through the NDPC Information Management Portal/NIMP).
|
|
463
|
+
*
|
|
464
|
+
* This computes the schedule (initial-audit due date, the next annual filing
|
|
465
|
+
* deadline relative to a reference date) and a light status. NDPC deadlines
|
|
466
|
+
* shift (the 2026 filing was extended to 30 May), so the annual deadline is
|
|
467
|
+
* configurable and per-year overrides are supported. The audit *content* itself
|
|
468
|
+
* is the organisation's compliance posture — pair this with `getComplianceScore`.
|
|
469
|
+
*
|
|
470
|
+
* @see NDPC General Application and Implementation Directive (GAID) 2025
|
|
471
|
+
*/
|
|
472
|
+
|
|
473
|
+
export declare interface CARInput {
|
|
474
|
+
/** ISO date (YYYY-MM-DD) the organisation commenced data processing. */
|
|
475
|
+
commencementDate: string;
|
|
476
|
+
/** Reference date to evaluate against (YYYY-MM-DD). Defaults to today. */
|
|
477
|
+
asOf?: string;
|
|
478
|
+
/** DCPMI tier; CAR applies to DCPMIs only. Omit to assume applicable. */
|
|
479
|
+
tier?: DCPMITier;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
export declare interface CAROptions {
|
|
483
|
+
/** Default annual filing deadline (month is 1-12). Defaults to 31 March. */
|
|
484
|
+
annualDeadline?: {
|
|
485
|
+
month: number;
|
|
486
|
+
day: number;
|
|
487
|
+
};
|
|
488
|
+
/** Per-year overrides for the annual deadline, e.g. `{ 2026: '2026-05-30' }`. */
|
|
489
|
+
deadlineOverrides?: Record<number, string>;
|
|
490
|
+
/** Months after commencement the initial audit is due. Defaults to 15. */
|
|
491
|
+
initialAuditWithinMonths?: number;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Classify an organisation's DCPMI status, registration tier, annual fee, and
|
|
496
|
+
* Compliance Audit Returns obligations under NDPC GAID 2025.
|
|
497
|
+
*/
|
|
498
|
+
export declare function classifyDCPMI(input: DCPMIInput, options?: DCPMIClassificationOptions): DCPMIClassification;
|
|
499
|
+
|
|
500
|
+
export declare interface ComplianceAuditReturn {
|
|
501
|
+
/** Whether CAR applies (false for non-DCPMI organisations). */
|
|
502
|
+
applicable: boolean;
|
|
503
|
+
schedule: {
|
|
504
|
+
commencementDate: string;
|
|
505
|
+
initialAuditWithinMonths: number;
|
|
506
|
+
/** Commencement date + the initial-audit window. */
|
|
507
|
+
initialAuditDueDate: string;
|
|
508
|
+
/** The next annual filing deadline on or after `asOf`. */
|
|
509
|
+
nextFilingDeadline: string;
|
|
510
|
+
/** The year the next filing deadline falls in. */
|
|
511
|
+
filingYear: number;
|
|
512
|
+
};
|
|
513
|
+
status: {
|
|
514
|
+
/** Whether the initial-audit obligation has arisen (asOf ≥ due date). */
|
|
515
|
+
initialAuditDue: boolean;
|
|
516
|
+
/** Whole days from `asOf` to the next filing deadline. */
|
|
517
|
+
daysUntilNextDeadline: number;
|
|
518
|
+
};
|
|
519
|
+
notes: string[];
|
|
520
|
+
asOf: string;
|
|
521
|
+
}
|
|
522
|
+
|
|
353
523
|
/** A single gap found during NDPA compliance evaluation. */
|
|
354
524
|
export declare interface ComplianceGap {
|
|
355
525
|
/** Machine-readable requirement identifier. */
|
|
@@ -771,6 +941,84 @@ export declare interface DataCategory {
|
|
|
771
941
|
selected: boolean;
|
|
772
942
|
}
|
|
773
943
|
|
|
944
|
+
export declare interface DCPMIClassification {
|
|
945
|
+
/** Registration tier (or `'none'` when not a DCPMI). */
|
|
946
|
+
tier: DCPMITier;
|
|
947
|
+
/** Whether the organisation is a Data Controller/Processor of Major Importance. */
|
|
948
|
+
isDCPMI: boolean;
|
|
949
|
+
/** Annual registration fee in Nigerian Naira (0 when not a volume-tiered DCPMI). */
|
|
950
|
+
annualFeeNGN: number;
|
|
951
|
+
registration: {
|
|
952
|
+
/** Whether NDPC registration is required. */
|
|
953
|
+
required: boolean;
|
|
954
|
+
/** OHL renews registration annually; UHL/EHL register once and file CAR annually. */
|
|
955
|
+
renewsAnnually: boolean;
|
|
956
|
+
};
|
|
957
|
+
compliance: {
|
|
958
|
+
/** Whether the organisation must file annual Compliance Audit Returns (CAR). */
|
|
959
|
+
auditReturnsAnnual: boolean;
|
|
960
|
+
/** Initial compliance audit is due within this many months of commencing processing. */
|
|
961
|
+
initialAuditWithinMonths: number;
|
|
962
|
+
};
|
|
963
|
+
/** Human-readable caveats and next steps. */
|
|
964
|
+
notes: string[];
|
|
965
|
+
/** The count actually used for classification, after defensive normalisation. */
|
|
966
|
+
dataSubjectsConsidered: number;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
export declare interface DCPMIClassificationOptions {
|
|
970
|
+
thresholds?: Partial<DCPMIThresholds>;
|
|
971
|
+
fees?: Partial<DCPMIFees>;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
declare interface DCPMIFees {
|
|
975
|
+
UHL: number;
|
|
976
|
+
EHL: number;
|
|
977
|
+
OHL: number;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
export declare interface DCPMIInput {
|
|
981
|
+
/** Distinct data subjects whose data was processed in the relevant six-month window. */
|
|
982
|
+
dataSubjectsInSixMonths?: number;
|
|
983
|
+
/** True if the Commission has separately designated/listed the organisation as a DCPMI. */
|
|
984
|
+
isDesignated?: boolean;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
declare interface DCPMIThresholds {
|
|
988
|
+
/** Lower bound (inclusive) for OHL. */
|
|
989
|
+
ohl: number;
|
|
990
|
+
/** Lower bound (inclusive) for EHL. */
|
|
991
|
+
ehl: number;
|
|
992
|
+
/** A count strictly greater than this is UHL. */
|
|
993
|
+
uhl: number;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
/**
|
|
997
|
+
* Data Controller/Processor of Major Importance (DCPMI) classification under the
|
|
998
|
+
* NDPC General Application and Implementation Directive (GAID) 2025.
|
|
999
|
+
*
|
|
1000
|
+
* Volume-based tiers — data subjects processed within a six-month window:
|
|
1001
|
+
* - UHL (Ultra High Level): more than 5,000 → ₦250,000 / year
|
|
1002
|
+
* - EHL (Extra High Level): 1,000 – 5,000 → ₦100,000 / year
|
|
1003
|
+
* - OHL (Ordinary High Level): 200 – 999 → ₦10,000 / year
|
|
1004
|
+
* - below 200: not a DCPMI by volume
|
|
1005
|
+
*
|
|
1006
|
+
* Boundaries: the 1,000 mark resolves to EHL (so OHL is 200–999); UHL is
|
|
1007
|
+
* strictly greater than 5,000 (so 5,000 itself is EHL). The NDPC has revised
|
|
1008
|
+
* classification metrics before and shifts filing deadlines, so thresholds and
|
|
1009
|
+
* fees are configurable — treat the defaults as the September 2025 GAID
|
|
1010
|
+
* baseline, not a constant.
|
|
1011
|
+
*
|
|
1012
|
+
* `isDesignated` marks an organisation the Commission has otherwise listed as a
|
|
1013
|
+
* DCPMI; it is then a DCPMI regardless of volume. Below the volume tiers such an
|
|
1014
|
+
* organisation is reported as `'listed'` with the fee left at 0 and a note to
|
|
1015
|
+
* confirm the applicable tier/fee with the NDPC.
|
|
1016
|
+
*
|
|
1017
|
+
* @see NDPC General Application and Implementation Directive (GAID) 2025
|
|
1018
|
+
* @see NDPC Guidance Notice on the Registration of Data Controllers and Processors of Major Importance
|
|
1019
|
+
*/
|
|
1020
|
+
export declare type DCPMITier = 'UHL' | 'EHL' | 'OHL' | 'listed' | 'none';
|
|
1021
|
+
|
|
774
1022
|
/**
|
|
775
1023
|
* Comprehensive set of 16 data categories spanning identity, financial,
|
|
776
1024
|
* behavioral, sensitive, and children groups. Used to populate the wizard
|
|
@@ -1194,6 +1442,11 @@ export declare function exportROPAToCSV(ropa: RecordOfProcessingActivities): str
|
|
|
1194
1442
|
*/
|
|
1195
1443
|
export declare function findUnfilledTokens(rendered: string): string[];
|
|
1196
1444
|
|
|
1445
|
+
export declare interface FormatAuditReportOptions {
|
|
1446
|
+
/** Wrap status symbols in ANSI colour codes. Default false. */
|
|
1447
|
+
color?: boolean;
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1197
1450
|
/**
|
|
1198
1451
|
* Format a DSR request for display or submission. Returns the formatted
|
|
1199
1452
|
* payload plus a typed `errors` array of `{ field, code, message }` for any
|
|
@@ -1219,10 +1472,20 @@ export declare interface FormatDSRRequestStructuredResult {
|
|
|
1219
1472
|
data?: DSRRequest;
|
|
1220
1473
|
}
|
|
1221
1474
|
|
|
1475
|
+
/**
|
|
1476
|
+
* Render an `NdprAuditResult` as a plain-text report.
|
|
1477
|
+
*/
|
|
1478
|
+
export declare function formatNdprAuditReport(result: NdprAuditResult, options?: FormatAuditReportOptions): string;
|
|
1479
|
+
|
|
1222
1480
|
export declare const frenchLocale: Required<{
|
|
1223
1481
|
[K in keyof NDPRLocale]: Required<NonNullable<NDPRLocale[K]>>;
|
|
1224
1482
|
}>;
|
|
1225
1483
|
|
|
1484
|
+
/**
|
|
1485
|
+
* Derive the CAR schedule and status for a DCPMI under NDPC GAID 2025.
|
|
1486
|
+
*/
|
|
1487
|
+
export declare function generateComplianceAuditReturn(input: CARInput, options?: CAROptions): ComplianceAuditReturn;
|
|
1488
|
+
|
|
1226
1489
|
/**
|
|
1227
1490
|
* Generates a summary of all lawful basis documentation across processing activities.
|
|
1228
1491
|
*
|
|
@@ -1506,6 +1769,58 @@ export declare interface ModuleScore {
|
|
|
1506
1769
|
gaps: string[];
|
|
1507
1770
|
}
|
|
1508
1771
|
|
|
1772
|
+
/**
|
|
1773
|
+
* Aggregate NDPA 2023 compliance audit — combines the compliance-score engine
|
|
1774
|
+
* with the GAID 2025 DCPMI classifier, Compliance Audit Returns scheduler, and
|
|
1775
|
+
* breach-notification checker into a single pass/fail result suitable for CI.
|
|
1776
|
+
*
|
|
1777
|
+
* Pure and React-free: drive it from a config file via the `ndpr audit` CLI, a
|
|
1778
|
+
* CI job, or a server route. Not legal advice — verify against current NDPC
|
|
1779
|
+
* guidance.
|
|
1780
|
+
*/
|
|
1781
|
+
|
|
1782
|
+
export declare interface NdprAuditInput {
|
|
1783
|
+
/** Compliance posture across the 8 NDPA modules. */
|
|
1784
|
+
compliance: ComplianceInput;
|
|
1785
|
+
/** Optional DCPMI classification input (GAID 2025 registration). */
|
|
1786
|
+
dcpmi?: DCPMIInput;
|
|
1787
|
+
/** Optional Compliance Audit Returns scheduling input. */
|
|
1788
|
+
car?: CARInput;
|
|
1789
|
+
/** Optional breach reports to check against the S. 40 / Article 33 duty. */
|
|
1790
|
+
breaches?: BreachReport[];
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
export declare interface NdprAuditOptions {
|
|
1794
|
+
/** Minimum overall compliance score required to pass. Default 70. */
|
|
1795
|
+
minScore?: number;
|
|
1796
|
+
dcpmiOptions?: DCPMIClassificationOptions;
|
|
1797
|
+
carOptions?: CAROptions;
|
|
1798
|
+
breachOptions?: BreachNotificationOptions;
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
export declare interface NdprAuditResult {
|
|
1802
|
+
/** True when the score meets `minScore` and no check is a hard failure. */
|
|
1803
|
+
passed: boolean;
|
|
1804
|
+
score: number;
|
|
1805
|
+
rating: ComplianceRating;
|
|
1806
|
+
minScore: number;
|
|
1807
|
+
checks: AuditCheck[];
|
|
1808
|
+
compliance: ComplianceReport;
|
|
1809
|
+
dcpmi?: DCPMIClassification;
|
|
1810
|
+
car?: ComplianceAuditReturn;
|
|
1811
|
+
breaches: Array<{
|
|
1812
|
+
id: string;
|
|
1813
|
+
title: string;
|
|
1814
|
+
assessment: BreachNotificationAssessment;
|
|
1815
|
+
}>;
|
|
1816
|
+
summary: {
|
|
1817
|
+
pass: number;
|
|
1818
|
+
warn: number;
|
|
1819
|
+
fail: number;
|
|
1820
|
+
};
|
|
1821
|
+
generatedAt: string;
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1509
1824
|
/**
|
|
1510
1825
|
* Locale strings for all toolkit components.
|
|
1511
1826
|
* Pass partial overrides — missing keys fall back to English defaults.
|
|
@@ -2281,6 +2596,11 @@ export declare interface ROPAValidationResult {
|
|
|
2281
2596
|
errors: string[];
|
|
2282
2597
|
}
|
|
2283
2598
|
|
|
2599
|
+
/**
|
|
2600
|
+
* Run the aggregate NDPA compliance audit.
|
|
2601
|
+
*/
|
|
2602
|
+
export declare function runNdprAudit(input: NdprAuditInput, options?: NdprAuditOptions): NdprAuditResult;
|
|
2603
|
+
|
|
2284
2604
|
/**
|
|
2285
2605
|
* Sanitizes user input to prevent XSS attacks.
|
|
2286
2606
|
* Escapes HTML special characters so that data rendered in dashboards
|
package/dist/server.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var chunkR3CU7DTT_js=require('./chunk-R3CU7DTT.js'),chunkLP5KXMBY_js=require('./chunk-LP5KXMBY.js'),chunkNUOHT3LO_js=require('./chunk-NUOHT3LO.js'),chunkJS7SYL5P_js=require('./chunk-JS7SYL5P.js'),chunk7TTXS7JX_js=require('./chunk-7TTXS7JX.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkD2ZKDQVL_js=require('./chunk-D2ZKDQVL.js'),chunk6LJHLE6G_js=require('./chunk-6LJHLE6G.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunkC2KEXHRX_js=require('./chunk-C2KEXHRX.js'),chunkDKLJ5DYN_js=require('./chunk-DKLJ5DYN.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkR2ZZMATR_js=require('./chunk-R2ZZMATR.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunk7563FVMY_js=require('./chunk-7563FVMY.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunkR3CU7DTT_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunkR3CU7DTT_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunkR3CU7DTT_js.b}});Object.defineProperty(exports,"arabicLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.e}});Object.defineProperty(exports,"frenchLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.f}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.a}});Object.defineProperty(exports,"ORG_POLICY_TEMPLATE_REGISTRY",{enumerable:true,get:function(){return chunkNUOHT3LO_js.a}});Object.defineProperty(exports,"createOrgTemplate",{enumerable:true,get:function(){return chunkNUOHT3LO_js.b}});Object.defineProperty(exports,"templateContextFor",{enumerable:true,get:function(){return chunkNUOHT3LO_js.b}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkJS7SYL5P_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkJS7SYL5P_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkJS7SYL5P_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkJS7SYL5P_js.c}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunk7TTXS7JX_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunk3YTAOT5O_js.a}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.e}});Object.defineProperty(exports,"findUnfilledTokens",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.a}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.b}});Object.defineProperty(exports,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunk6LJHLE6G_js.d}});Object.defineProperty(exports,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunk6LJHLE6G_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunk6LJHLE6G_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunk6LJHLE6G_js.c}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunk6LJHLE6G_js.e}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunk6LJHLE6G_js.f}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkWZYCBW2R_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkWZYCBW2R_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkWZYCBW2R_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkWZYCBW2R_js.a}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunk4CVBQC66_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunk4CVBQC66_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunk3IA3KDII_js.b}});Object.defineProperty(exports,"cookieAdapter",{enumerable:true,get:function(){return chunkC2KEXHRX_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunkC2KEXHRX_js.a}});Object.defineProperty(exports,"validateConsentOptionsStructured",{enumerable:true,get:function(){return chunkDKLJ5DYN_js.b}});Object.defineProperty(exports,"validateConsentStructured",{enumerable:true,get:function(){return chunkDKLJ5DYN_js.a}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkUXUMYP4L_js.a}});Object.defineProperty(exports,"formatDSRRequestStructured",{enumerable:true,get:function(){return chunkR2ZZMATR_js.b}});Object.defineProperty(exports,"validateDsrSubmissionStructured",{enumerable:true,get:function(){return chunkR2ZZMATR_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_LONG",{enumerable:true,get:function(){return chunkZVOIR4QH_js.b}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_SHORT",{enumerable:true,get:function(){return chunkZVOIR4QH_js.a}});Object.defineProperty(exports,"legalDisclaimerBlock",{enumerable:true,get:function(){return chunkZVOIR4QH_js.c}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunk7563FVMY_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunk7563FVMY_js.b}});Object.defineProperty(exports,"localStorageAdapter",{enumerable:true,get:function(){return chunkVWED6UTN_js.a}});
|
|
1
|
+
'use strict';var chunkR3CU7DTT_js=require('./chunk-R3CU7DTT.js'),chunkLP5KXMBY_js=require('./chunk-LP5KXMBY.js'),chunkNUOHT3LO_js=require('./chunk-NUOHT3LO.js'),chunkXCKX2WKD_js=require('./chunk-XCKX2WKD.js'),chunkJS7SYL5P_js=require('./chunk-JS7SYL5P.js'),chunkWKY26JLT_js=require('./chunk-WKY26JLT.js'),chunk7TTXS7JX_js=require('./chunk-7TTXS7JX.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkY346CURW_js=require('./chunk-Y346CURW.js'),chunkD2ZKDQVL_js=require('./chunk-D2ZKDQVL.js'),chunk6LJHLE6G_js=require('./chunk-6LJHLE6G.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunkC2KEXHRX_js=require('./chunk-C2KEXHRX.js'),chunkDKLJ5DYN_js=require('./chunk-DKLJ5DYN.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkR2ZZMATR_js=require('./chunk-R2ZZMATR.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunk7563FVMY_js=require('./chunk-7563FVMY.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunkR3CU7DTT_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunkR3CU7DTT_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunkR3CU7DTT_js.b}});Object.defineProperty(exports,"arabicLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.e}});Object.defineProperty(exports,"frenchLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.f}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunkLP5KXMBY_js.a}});Object.defineProperty(exports,"ORG_POLICY_TEMPLATE_REGISTRY",{enumerable:true,get:function(){return chunkNUOHT3LO_js.a}});Object.defineProperty(exports,"createOrgTemplate",{enumerable:true,get:function(){return chunkNUOHT3LO_js.b}});Object.defineProperty(exports,"templateContextFor",{enumerable:true,get:function(){return chunkNUOHT3LO_js.b}});Object.defineProperty(exports,"formatNdprAuditReport",{enumerable:true,get:function(){return chunkXCKX2WKD_js.b}});Object.defineProperty(exports,"runNdprAudit",{enumerable:true,get:function(){return chunkXCKX2WKD_js.a}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkJS7SYL5P_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkJS7SYL5P_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkJS7SYL5P_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkJS7SYL5P_js.c}});Object.defineProperty(exports,"classifyDCPMI",{enumerable:true,get:function(){return chunkWKY26JLT_js.c}});Object.defineProperty(exports,"generateComplianceAuditReturn",{enumerable:true,get:function(){return chunkWKY26JLT_js.d}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunk7TTXS7JX_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunk3YTAOT5O_js.a}});Object.defineProperty(exports,"assessBreachNotification",{enumerable:true,get:function(){return chunkY346CURW_js.a}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.e}});Object.defineProperty(exports,"findUnfilledTokens",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.a}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkD2ZKDQVL_js.b}});Object.defineProperty(exports,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunk6LJHLE6G_js.d}});Object.defineProperty(exports,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunk6LJHLE6G_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunk6LJHLE6G_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunk6LJHLE6G_js.c}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunk6LJHLE6G_js.e}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunk6LJHLE6G_js.f}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkWZYCBW2R_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkWZYCBW2R_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkWZYCBW2R_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkWZYCBW2R_js.a}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunk4CVBQC66_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunk4CVBQC66_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunk3IA3KDII_js.b}});Object.defineProperty(exports,"cookieAdapter",{enumerable:true,get:function(){return chunkC2KEXHRX_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunkC2KEXHRX_js.a}});Object.defineProperty(exports,"validateConsentOptionsStructured",{enumerable:true,get:function(){return chunkDKLJ5DYN_js.b}});Object.defineProperty(exports,"validateConsentStructured",{enumerable:true,get:function(){return chunkDKLJ5DYN_js.a}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkUXUMYP4L_js.a}});Object.defineProperty(exports,"formatDSRRequestStructured",{enumerable:true,get:function(){return chunkR2ZZMATR_js.b}});Object.defineProperty(exports,"validateDsrSubmissionStructured",{enumerable:true,get:function(){return chunkR2ZZMATR_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_LONG",{enumerable:true,get:function(){return chunkZVOIR4QH_js.b}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_SHORT",{enumerable:true,get:function(){return chunkZVOIR4QH_js.a}});Object.defineProperty(exports,"legalDisclaimerBlock",{enumerable:true,get:function(){return chunkZVOIR4QH_js.c}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunk7563FVMY_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunk7563FVMY_js.b}});Object.defineProperty(exports,"localStorageAdapter",{enumerable:true,get:function(){return chunkVWED6UTN_js.a}});
|
package/dist/server.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-7PMPKVY3.mjs';export{e as arabicLocale,f as frenchLocale,c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-KUI5W44P.mjs';export{a as ORG_POLICY_TEMPLATE_REGISTRY,b as createOrgTemplate,b as templateContextFor}from'./chunk-CWY2FMIC.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-IVSNHT24.mjs';export{a as getComplianceScore}from'./chunk-6A7M4CGJ.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-NBQQ2GN3.mjs';export{d as DEFAULT_DATA_CATEGORIES,a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-BIJSMSUU.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-XC3DLYEG.mjs';export{b as validateConsentOptionsStructured,a as validateConsentStructured}from'./chunk-R3ZKV2J7.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as formatDSRRequestStructured,a as validateDsrSubmissionStructured}from'./chunk-RRVML7CU.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-5LJ652AH.mjs';export{a as localStorageAdapter}from'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';
|
|
1
|
+
export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-7PMPKVY3.mjs';export{e as arabicLocale,f as frenchLocale,c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-KUI5W44P.mjs';export{a as ORG_POLICY_TEMPLATE_REGISTRY,b as createOrgTemplate,b as templateContextFor}from'./chunk-CWY2FMIC.mjs';export{b as formatNdprAuditReport,a as runNdprAudit}from'./chunk-JXK5RUR3.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-IVSNHT24.mjs';export{c as classifyDCPMI,d as generateComplianceAuditReturn}from'./chunk-SZXHNJGG.mjs';export{a as getComplianceScore}from'./chunk-6A7M4CGJ.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{a as assessBreachNotification}from'./chunk-WJSUVPYX.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-NBQQ2GN3.mjs';export{d as DEFAULT_DATA_CATEGORIES,a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-BIJSMSUU.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-XC3DLYEG.mjs';export{b as validateConsentOptionsStructured,a as validateConsentStructured}from'./chunk-R3ZKV2J7.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as formatDSRRequestStructured,a as validateDsrSubmissionStructured}from'./chunk-RRVML7CU.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-5LJ652AH.mjs';export{a as localStorageAdapter}from'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tantainnovative/ndpr-toolkit",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"packageManager": "pnpm@10.34.1",
|
|
6
6
|
"description": "Nigeria Data Protection Toolkit — enterprise-grade compliance components for the Nigeria Data Protection Act (NDPA) 2023",
|
|
@@ -98,6 +98,9 @@
|
|
|
98
98
|
"main": "./dist/index.js",
|
|
99
99
|
"module": "./dist/index.mjs",
|
|
100
100
|
"types": "./dist/index.d.ts",
|
|
101
|
+
"bin": {
|
|
102
|
+
"ndpr": "./bin/ndpr.mjs"
|
|
103
|
+
},
|
|
101
104
|
"exports": {
|
|
102
105
|
".": {
|
|
103
106
|
"types": "./dist/index.d.ts",
|
|
@@ -291,6 +294,7 @@
|
|
|
291
294
|
"dist/**/*.d.ts",
|
|
292
295
|
"dist/**/*.d.mts",
|
|
293
296
|
"dist/**/*.css",
|
|
297
|
+
"bin/ndpr.mjs",
|
|
294
298
|
"README.md",
|
|
295
299
|
"CHANGELOG.md",
|
|
296
300
|
"LICENSE"
|
package/dist/chunk-6MO3GS3B.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkAME4HJR4_js=require('./chunk-AME4HJR4.js'),chunkI5ZDNSX5_js=require('./chunk-I5ZDNSX5.js'),chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var fr=({categories:Ze,onSubmit:Ge,onValidationError:u,title:x,description:C,submitButtonText:S,className:Q="",buttonClassName:X="",classNames:d={},unstyled:c=false,isSubmitting:f=false,showConfirmation:Ke=true,confirmationMessage:We="Your breach report has been submitted successfully. The data protection team has been notified.",allowAttachments:Je=true,maxAttachments:D=5,maxFileSize:A=5*1024*1024,allowedFileTypes:R=[".pdf",".jpg",".jpeg",".png",".doc",".docx",".xls",".xlsx",".txt"],defaultValues:t,onReset:w})=>{var we,Fe,qe,Pe,ke,je,Te,Ie,Be,Ee,Me,$e,Oe,Le;let F=chunkI5ZDNSX5_js.c(),Qe=(we=x!=null?x:F.breach.title)!=null?we:"Report a Data Breach",Xe=(Fe=C!=null?C:F.breach.description)!=null?Fe:"Use this form to report a suspected or confirmed data breach in accordance with NDPA Section 40. All fields marked with * are required.",Ve=(qe=S!=null?S:F.breach.submitReport)!=null?qe:"Submit Report",V=r=>{if(!r)return "";let o=new Date(r),l=s=>String(s).padStart(2,"0");return `${o.getFullYear()}-${l(o.getMonth()+1)}-${l(o.getDate())}T${l(o.getHours())}:${l(o.getMinutes())}`},[q,ee]=react.useState((t==null?void 0:t.title)||""),[P,re]=react.useState((t==null?void 0:t.description)||""),[k,te]=react.useState((t==null?void 0:t.category)||""),[j,ie]=react.useState(V(t==null?void 0:t.discoveredAt)),[T,ae]=react.useState(V(t==null?void 0:t.occurredAt)),[I,ne]=react.useState(((Pe=t==null?void 0:t.reporter)==null?void 0:Pe.name)||""),[N,oe]=react.useState(((ke=t==null?void 0:t.reporter)==null?void 0:ke.email)||""),[B,se]=react.useState(((je=t==null?void 0:t.reporter)==null?void 0:je.department)||""),[E,de]=react.useState(((Te=t==null?void 0:t.reporter)==null?void 0:Te.phone)||""),[me,ce]=react.useState((t==null?void 0:t.affectedSystems)||[]),[er,pe]=react.useState(((Ie=t==null?void 0:t.affectedSystems)==null?void 0:Ie.join(", "))||""),[M,le]=react.useState((t==null?void 0:t.dataTypes)||[]),[h,ge]=react.useState((t==null?void 0:t.estimatedAffectedSubjects)!=null?String(t.estimatedAffectedSubjects):""),[$,be]=react.useState((t==null?void 0:t.approximateRecordCount)!=null?String(t.approximateRecordCount):""),[O,fe]=react.useState(((Be=t==null?void 0:t.dataSubjectCategories)==null?void 0:Be.join(", "))||""),[he,ve]=react.useState((Ee=t==null?void 0:t.involvesSensitiveData)!=null?Ee:false),[L,Ne]=react.useState((t==null?void 0:t.likelyConsequences)||""),[z,_e]=react.useState((t==null?void 0:t.mitigationMeasures)||""),[Y,ye]=react.useState(((Me=t==null?void 0:t.dpoContact)==null?void 0:Me.name)||""),[U,ue]=react.useState((($e=t==null?void 0:t.dpoContact)==null?void 0:$e.email)||""),[H,xe]=react.useState(((Oe=t==null?void 0:t.dpoContact)==null?void 0:Oe.phone)||""),[Z,Ce]=react.useState((Le=t==null?void 0:t.isPhasedReport)!=null?Le:false),[G,Se]=react.useState((t==null?void 0:t.supplementsReportId)||""),[De,Ae]=react.useState((t==null?void 0:t.status)||"ongoing"),[K,Re]=react.useState((t==null?void 0:t.initialActions)||""),[_,W]=react.useState([]),[rr,J]=react.useState(false),[a,v]=react.useState({}),tr=()=>{ee(""),re(""),te(""),ie(""),ae(""),ne(""),oe(""),se(""),de(""),ce([]),pe(""),le([]),ge(""),be(""),fe(""),ve(false),Ne(""),_e(""),ye(""),ue(""),xe(""),Ce(false),Se(""),Ae("ongoing"),Re(""),W([]),J(false),v({}),w==null||w();},ir=r=>{let o=r.target.value;pe(o);let l=o.split(",").map(s=>s.trim()).filter(Boolean);ce(l);},ar=r=>{le(o=>o.includes(r)?o.filter(l=>l!==r):[...o,r]);},nr=r=>{var ze;let o=r.target.files;if(!o)return;let l=[],s={};if(_.length+o.length>D){s.attachments=`Maximum of ${D} files allowed`,v(g=>chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},g),s));return}for(let g=0;g<o.length;g++){let y=o[g];if(y.size>A){s.attachments=`File ${y.name} exceeds the maximum size of ${A/(1024*1024)}MB`;continue}let Ye="."+((ze=y.name.split(".").pop())==null?void 0:ze.toLowerCase());if(!R.includes(Ye)){s.attachments=`File type ${Ye} is not allowed`;continue}l.push(y);}l.length>0&&W(g=>[...g,...l]),Object.keys(s).length>0?v(g=>chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},g),s)):v(g=>chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},g),{attachments:""}));},or=r=>{W(o=>o.filter((l,s)=>s!==r));},sr=()=>{let r={};return q.trim()||(r.breachTitle="Breach title is required"),P.trim()||(r.description="Description is required"),k||(r.category="Category is required"),j||(r.discoveredAt="Discovery date is required"),I.trim()||(r.reporterName="Reporter name is required"),N.trim()?/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(N)||(r.reporterEmail="Reporter email is invalid"):r.reporterEmail="Reporter email is required",B.trim()||(r.reporterDepartment="Reporter department is required"),me.length===0&&(r.affectedSystems="At least one affected system is required"),M.length===0&&(r.dataTypes="At least one data type is required"),h&&isNaN(Number(h))&&(r.estimatedAffectedSubjects="Estimated affected subjects must be a number"),v(r),r},dr=r=>{r.preventDefault();let o=sr();if(Object.keys(o).length>0){u==null||u(o);return}let l={title:chunkUXUMYP4L_js.a(q),description:chunkUXUMYP4L_js.a(P),category:k,discoveredAt:new Date(j).getTime(),occurredAt:T?new Date(T).getTime():void 0,reportedAt:Date.now(),reporter:{name:chunkUXUMYP4L_js.a(I),email:chunkUXUMYP4L_js.a(N),department:chunkUXUMYP4L_js.a(B),phone:E?chunkUXUMYP4L_js.a(E):void 0},affectedSystems:me.map(s=>chunkUXUMYP4L_js.a(s)),dataTypes:M,estimatedAffectedSubjects:h?Number(h):void 0,approximateRecordCount:$?Number($):void 0,dataSubjectCategories:O?O.split(",").map(s=>chunkUXUMYP4L_js.a(s.trim())).filter(Boolean):void 0,involvesSensitiveData:he,likelyConsequences:L?chunkUXUMYP4L_js.a(L):void 0,mitigationMeasures:z?chunkUXUMYP4L_js.a(z):void 0,dpoContact:Y||U?{name:chunkUXUMYP4L_js.a(Y),email:chunkUXUMYP4L_js.a(U),phone:H?chunkUXUMYP4L_js.a(H):void 0}:void 0,isPhasedReport:Z||void 0,supplementsReportId:G?chunkUXUMYP4L_js.a(G):void 0,status:De,initialActions:K?chunkUXUMYP4L_js.a(K):void 0,attachments:_.map(s=>({name:s.name,type:s.type,size:s.size,file:s}))};Ge(l),Ke&&J(true);};if(rr)return jsxRuntime.jsxs("div",{"data-ndpr-component":"breach-report-form",className:`p-4 bg-green-50 dark:bg-green-900/20 rounded-md ${Q}`,children:[jsxRuntime.jsx("h2",{className:"text-lg font-bold ndpr-text-success mb-2",children:"Report Submitted"}),jsxRuntime.jsx("p",{className:"ndpr-text-success",children:We}),jsxRuntime.jsxs("div",{className:"mt-4 p-4 bg-yellow-50 dark:bg-yellow-900/20 rounded-md",children:[jsxRuntime.jsx("h3",{className:"text-sm font-bold ndpr-text-warning mb-2",children:"Important: Next Steps"}),jsxRuntime.jsx("p",{className:"ndpr-text-warning text-sm",children:"Under the NDPA (Section 40), data breaches that pose a risk to the rights and freedoms of data subjects must be reported to the NDPC within 72 hours of discovery. The data protection team will assess this breach and determine if notification is required."})]}),jsxRuntime.jsx("button",{onClick:()=>J(false),className:`mt-4 px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700 ${X}`,children:"Report Another Breach"})]});let mr=[{id:"personal",label:"Personal Information (names, addresses)"},{id:"contact",label:"Contact Information (email, phone)"},{id:"financial",label:"Financial Information (bank details, payment info)"},{id:"health",label:"Health Information"},{id:"identification",label:"Identification Documents (ID cards, passports)"},{id:"login",label:"Login Credentials"},{id:"biometric",label:"Biometric Data"},{id:"children",label:"Children's Data"},{id:"location",label:"Location Data"},{id:"communications",label:"Communications Content"}];return jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a(`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${Q}`,d.root,c),children:[jsxRuntime.jsx("h2",{className:chunkAME4HJR4_js.a("ndpr-section-heading",d.title,c),children:Qe}),jsxRuntime.jsx("p",{className:"ndpr-card__subtitle",children:Xe}),jsxRuntime.jsx("form",{onSubmit:dr,className:chunkAME4HJR4_js.a("",d.form,c),children:jsxRuntime.jsxs("div",{className:"ndpr-form-section",children:[jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("",d.fieldGroup,c),children:[jsxRuntime.jsx("h3",{className:"ndpr-section-heading",children:"Breach Information"}),jsxRuntime.jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"breachTitle",className:chunkAME4HJR4_js.a("ndpr-form-field__label",d.label,c),children:["Breach Title/Summary ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"text",id:"breachTitle",value:q,onChange:r=>ee(r.target.value),className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.input,c),required:true,"aria-invalid":!!a.breachTitle,"aria-describedby":a.breachTitle?"breachTitle-error":void 0}),a.breachTitle&&jsxRuntime.jsx("p",{id:"breachTitle-error",role:"alert",className:"ndpr-form-field__error",children:a.breachTitle})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"category",className:chunkAME4HJR4_js.a("ndpr-form-field__label",d.label,c),children:["Breach Category ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsxs("select",{id:"category",value:k,onChange:r=>te(r.target.value),className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.select,c),required:true,"aria-invalid":!!a.category,"aria-describedby":a.category?"category-error":void 0,children:[jsxRuntime.jsx("option",{value:"",children:"Select a category"}),Ze.map(r=>jsxRuntime.jsx("option",{value:r.id,children:r.name},r.id))]}),a.category&&jsxRuntime.jsx("p",{id:"category-error",role:"alert",className:"ndpr-form-field__error",children:a.category})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsxs("label",{htmlFor:"description",className:chunkAME4HJR4_js.a("ndpr-form-field__label",d.label,c),children:["Detailed Description ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("textarea",{id:"description",value:P,onChange:r=>re(r.target.value),rows:4,className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.textarea,c),required:true,"aria-invalid":!!a.description,"aria-describedby":a.description?"description-error":void 0}),a.description&&jsxRuntime.jsx("p",{id:"description-error",role:"alert",className:"ndpr-form-field__error",children:a.description})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"discoveredAt",className:"ndpr-form-field__label",children:["Date Discovered ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"datetime-local",id:"discoveredAt",value:j,onChange:r=>ie(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a.discoveredAt,"aria-describedby":a.discoveredAt?"discoveredAt-error":void 0}),a.discoveredAt&&jsxRuntime.jsx("p",{id:"discoveredAt-error",role:"alert",className:"ndpr-form-field__error",children:a.discoveredAt})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"occurredAt",className:"ndpr-form-field__label",children:"Date Occurred (if known)"}),jsxRuntime.jsx("input",{type:"datetime-local",id:"occurredAt",value:T,onChange:r=>ae(r.target.value),className:"ndpr-form-field__input"})]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"ndpr-section-heading",children:"Reporter Information"}),jsxRuntime.jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"reporterName",className:"ndpr-form-field__label",children:["Your Name ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"text",id:"reporterName",value:I,onChange:r=>ne(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a.reporterName,"aria-describedby":a.reporterName?"reporterName-error":void 0}),a.reporterName&&jsxRuntime.jsx("p",{id:"reporterName-error",role:"alert",className:"ndpr-form-field__error",children:a.reporterName})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"reporterEmail",className:"ndpr-form-field__label",children:["Your Email ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"email",id:"reporterEmail",value:N,onChange:r=>oe(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a.reporterEmail,"aria-describedby":a.reporterEmail?"reporterEmail-error":void 0}),a.reporterEmail&&jsxRuntime.jsx("p",{id:"reporterEmail-error",role:"alert",className:"ndpr-form-field__error",children:a.reporterEmail})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"reporterDepartment",className:"ndpr-form-field__label",children:["Your Department ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"text",id:"reporterDepartment",value:B,onChange:r=>se(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a.reporterDepartment,"aria-describedby":a.reporterDepartment?"reporterDepartment-error":void 0}),a.reporterDepartment&&jsxRuntime.jsx("p",{id:"reporterDepartment-error",role:"alert",className:"ndpr-form-field__error",children:a.reporterDepartment})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"reporterPhone",className:"ndpr-form-field__label",children:"Your Phone Number (Optional)"}),jsxRuntime.jsx("input",{type:"tel",id:"reporterPhone",value:E,onChange:r=>de(r.target.value),className:"ndpr-form-field__input"})]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"ndpr-section-heading",children:"Impact Information"}),jsxRuntime.jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"affectedSystems",className:"ndpr-form-field__label",children:["Affected Systems/Applications ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsx("input",{type:"text",id:"affectedSystems",value:er,onChange:ir,placeholder:"e.g. CRM, Email Server, Website (comma separated)",className:"ndpr-form-field__input",required:true,"aria-invalid":!!a.affectedSystems,"aria-describedby":a.affectedSystems?"affectedSystems-error":void 0}),a.affectedSystems&&jsxRuntime.jsx("p",{id:"affectedSystems-error",role:"alert",className:"ndpr-form-field__error",children:a.affectedSystems})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"estimatedAffectedSubjects",className:"ndpr-form-field__label",children:"Estimated Number of Affected Data Subjects"}),jsxRuntime.jsx("input",{type:"text",id:"estimatedAffectedSubjects",value:h,onChange:r=>ge(r.target.value),placeholder:"e.g. 100",className:"ndpr-form-field__input","aria-invalid":!!a.estimatedAffectedSubjects,"aria-describedby":a.estimatedAffectedSubjects?"estimatedAffectedSubjects-error":void 0}),a.estimatedAffectedSubjects&&jsxRuntime.jsx("p",{id:"estimatedAffectedSubjects-error",role:"alert",className:"ndpr-form-field__error",children:a.estimatedAffectedSubjects})]}),jsxRuntime.jsxs("fieldset",{className:"md:col-span-2","aria-invalid":!!a.dataTypes,"aria-describedby":a.dataTypes?"dataTypes-error":void 0,children:[jsxRuntime.jsxs("legend",{className:"ndpr-form-field__label",children:["Types of Data Involved ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required","aria-hidden":"true",children:"*"}),jsxRuntime.jsx("span",{className:"sr-only",children:"(required)"})]}),jsxRuntime.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:mr.map(r=>jsxRuntime.jsxs("div",{className:"flex items-center",children:[jsxRuntime.jsx("input",{type:"checkbox",id:`dataType_${r.id}`,checked:M.includes(r.id),onChange:()=>ar(r.id),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsxRuntime.jsx("label",{htmlFor:`dataType_${r.id}`,className:"ml-2 text-sm ndpr-text-muted",children:r.label})]},r.id))}),a.dataTypes&&jsxRuntime.jsx("p",{id:"dataTypes-error",role:"alert",className:"ndpr-form-field__error",children:a.dataTypes})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("label",{htmlFor:"status",className:"ndpr-form-field__label",children:["Current Status ",jsxRuntime.jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxRuntime.jsxs("select",{id:"status",value:De,onChange:r=>Ae(r.target.value),className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.select,c),required:true,children:[jsxRuntime.jsx("option",{value:"ongoing",children:"Ongoing (breach is still active)"}),jsxRuntime.jsx("option",{value:"contained",children:"Contained (breach is stopped but not resolved)"}),jsxRuntime.jsx("option",{value:"resolved",children:"Resolved (breach is fully addressed)"})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"approximateRecordCount",className:"ndpr-form-field__label",children:"Approximate Number of Records Concerned"}),jsxRuntime.jsx("input",{type:"text",id:"approximateRecordCount",value:$,onChange:r=>be(r.target.value),placeholder:"e.g. 5000",className:"ndpr-form-field__input"}),jsxRuntime.jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Required for the NDPC report (NDPA Section 40(2))."})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"dataSubjectCategories",className:"ndpr-form-field__label",children:"Categories of Data Subjects Affected"}),jsxRuntime.jsx("input",{type:"text",id:"dataSubjectCategories",value:O,onChange:r=>fe(r.target.value),placeholder:"e.g. customers, employees, minors",className:"ndpr-form-field__input"}),jsxRuntime.jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Comma-separated. Required for the NDPC report (NDPA Section 40(2))."})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2 flex items-center",children:[jsxRuntime.jsx("input",{id:"involvesSensitiveData",type:"checkbox",checked:he,onChange:r=>ve(r.target.checked),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsxRuntime.jsx("label",{htmlFor:"involvesSensitiveData",className:"ml-2 text-sm ndpr-text-muted",children:"Sensitive personal data (NDPA Section 30) is involved"})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsx("label",{htmlFor:"likelyConsequences",className:"ndpr-form-field__label",children:"Likely Consequences for Data Subjects"}),jsxRuntime.jsx("textarea",{id:"likelyConsequences",value:L,onChange:r=>Ne(r.target.value),placeholder:"e.g. identity theft, financial loss, reputational damage, discrimination",rows:3,className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.textarea,c)}),jsxRuntime.jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Required content for NDPC report and Section 40(3) communications to data subjects."})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsx("label",{htmlFor:"mitigationMeasures",className:"ndpr-form-field__label",children:"Mitigation Measures"}),jsxRuntime.jsx("textarea",{id:"mitigationMeasures",value:z,onChange:r=>_e(r.target.value),placeholder:"Measures taken or proposed to mitigate possible adverse effects (NDPA Section 40(3))",rows:3,className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.textarea,c)})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsx("h4",{className:"ndpr-section-heading text-sm mt-4",children:"Data Protection Officer (NDPC contact)"}),jsxRuntime.jsx("p",{className:"text-xs ndpr-text-muted mb-2",children:"Defaults to organisation-level DPO if left blank."})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"dpoName",className:"ndpr-form-field__label",children:"DPO Name"}),jsxRuntime.jsx("input",{type:"text",id:"dpoName",value:Y,onChange:r=>ye(r.target.value),className:"ndpr-form-field__input"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"dpoEmail",className:"ndpr-form-field__label",children:"DPO Email"}),jsxRuntime.jsx("input",{type:"email",id:"dpoEmail",value:U,onChange:r=>ue(r.target.value),className:"ndpr-form-field__input"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"dpoPhone",className:"ndpr-form-field__label",children:"DPO Phone"}),jsxRuntime.jsx("input",{type:"tel",id:"dpoPhone",value:H,onChange:r=>xe(r.target.value),className:"ndpr-form-field__input"})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2 flex items-center mt-2",children:[jsxRuntime.jsx("input",{id:"isPhasedReport",type:"checkbox",checked:Z,onChange:r=>Ce(r.target.checked),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsxRuntime.jsx("label",{htmlFor:"isPhasedReport",className:"ml-2 text-sm ndpr-text-muted",children:"This is a phased / interim report (Section 40(2) \u2014 complete info not yet available)"})]}),Z&&jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsx("label",{htmlFor:"supplementsReportId",className:"ndpr-form-field__label",children:"Supplements Report ID (if applicable)"}),jsxRuntime.jsx("input",{type:"text",id:"supplementsReportId",value:G,onChange:r=>Se(r.target.value),placeholder:"Prior report ID this report supplements",className:"ndpr-form-field__input"})]}),jsxRuntime.jsxs("div",{className:"md:col-span-2",children:[jsxRuntime.jsx("label",{htmlFor:"initialActions",className:"ndpr-form-field__label",children:"Initial Actions Taken"}),jsxRuntime.jsx("textarea",{id:"initialActions",value:K,onChange:r=>Re(r.target.value),placeholder:"Describe any immediate actions that have been taken to address the breach",rows:3,className:chunkAME4HJR4_js.a("ndpr-form-field__input",d.textarea,c)})]})]})]}),Je&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"ndpr-section-heading",children:"Attachments"}),jsxRuntime.jsxs("div",{className:"ndpr-form-field",children:[jsxRuntime.jsx("label",{htmlFor:"breach-attachments",className:"ndpr-form-field__label",children:"Upload Supporting Files (Optional)"}),jsxRuntime.jsxs("p",{className:"text-xs ndpr-text-muted mb-2",children:["Max ",D," files, ",A/(1024*1024),"MB each. Allowed types: ",R.join(", ")]}),jsxRuntime.jsx("input",{id:"breach-attachments",type:"file",onChange:nr,multiple:true,className:"ndpr-form-field__input",accept:R.join(",")}),a.attachments&&jsxRuntime.jsx("p",{id:"attachments-error",role:"alert",className:"ndpr-form-field__error",children:a.attachments})]}),_.length>0&&jsxRuntime.jsxs("div",{className:"ndpr-form-field",children:[jsxRuntime.jsx("h4",{className:"ndpr-form-field__label",children:"Attached Files:"}),jsxRuntime.jsx("ul",{className:"ndpr-form-section",children:_.map((r,o)=>jsxRuntime.jsxs("li",{className:"flex items-center justify-between p-2 bg-gray-50 dark:bg-gray-700 rounded",children:[jsxRuntime.jsxs("div",{className:"flex items-center",children:[jsxRuntime.jsx("svg",{"aria-hidden":"true",focusable:"false",className:"w-4 h-4 ndpr-text-muted mr-2",fill:"currentColor",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg",children:jsxRuntime.jsx("path",{fillRule:"evenodd",d:"M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z",clipRule:"evenodd"})}),jsxRuntime.jsx("span",{className:"text-sm ndpr-text-muted",children:r.name}),jsxRuntime.jsxs("span",{className:"ml-2 text-xs ndpr-text-muted",children:["(",(r.size/1024).toFixed(1)," KB)"]})]}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>or(o),"aria-label":`Remove attachment ${r.name}`,className:"text-red-500 hover:ndpr-text-destructive p-2 min-w-[44px] min-h-[44px] flex items-center justify-center",children:[jsxRuntime.jsx("svg",{"aria-hidden":"true",focusable:"false",className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg",children:jsxRuntime.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})}),jsxRuntime.jsx("span",{className:"sr-only",children:"Remove"})]})]},o))})]})]}),jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("ndpr-alert ndpr-alert--info",d.notice,c),children:[jsxRuntime.jsx("h3",{className:"text-sm font-bold ndpr-text-info mb-2",children:"NDPA Breach Notification Requirements"}),jsxRuntime.jsx("p",{className:"ndpr-text-info text-sm",children:"Under the Nigeria Data Protection Act (NDPA), Section 40, data breaches that pose a risk to the rights and freedoms of data subjects must be reported to the NDPC within 72 hours of discovery. The data protection team will assess this breach and determine if notification is required."})]}),jsxRuntime.jsxs("div",{className:"mt-6 relative flex gap-3",children:[f&&d.loadingOverlay&&jsxRuntime.jsx("div",{className:d.loadingOverlay}),jsxRuntime.jsx("button",{type:"submit",disabled:f,className:chunkAME4HJR4_js.a(`px-6 py-3 bg-[rgb(var(--ndpr-primary))] text-white rounded-md hover:bg-[rgb(var(--ndpr-primary-hover))] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ndpr-ring))] focus:ring-offset-2 ${X} ${f?"opacity-50 cursor-not-allowed":""}`,d.primaryButton||d.submitButton,c),children:f?"Submitting...":Ve}),jsxRuntime.jsx("button",{type:"button",onClick:tr,disabled:f,className:chunkAME4HJR4_js.a("px-6 py-3 bg-gray-200 dark:bg-gray-600 text-gray-700 dark:text-gray-200 rounded-md hover:bg-gray-300 dark:hover:bg-gray-500 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2",void 0,c),children:"Reset"})]})]})})]})};
|
|
2
|
-
exports.a=fr;
|
package/dist/chunk-GYLUTVKB.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkOXFULQTE_js=require('./chunk-OXFULQTE.js'),chunk7TTXS7JX_js=require('./chunk-7TTXS7JX.js'),react=require('react');function u(t,e){return react.useMemo(()=>chunkOXFULQTE_js.a(t,e),[t,e])}function M({input:t}){let e=JSON.stringify(t);return react.useMemo(()=>chunk7TTXS7JX_js.a(t),[e])}function D(t,e){return react.useMemo(()=>chunkOXFULQTE_js.d(t,e),[t.dataSubjectsInSixMonths,t.isDesignated,e])}function P(t,e){return react.useMemo(()=>chunkOXFULQTE_js.e(t,e),[t.commencementDate,t.asOf,t.tier,e])}exports.a=u;exports.b=M;exports.c=D;exports.d=P;
|
package/dist/chunk-KOHFQIV4.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {a}from'./chunk-ZJYULEER.mjs';var d=e=>typeof e=="string"&&e.trim().length>0,R=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0,x=e=>Array.isArray(e)&&e.length>0,H=e=>!!e&&d(e.name)&&d(e.email);function G(e,n={}){var C,A,I,N,O;let i=(C=n.asOf)!=null?C:Date.now(),r=(A=n.deadlineHours)!=null?A:72,s=e.discoveredAt+r*36e5,o=n.notification,t=!!o,c=o==null?void 0:o.sentAt,a=(t?c:i)>s,h={deadline:s,hoursSinceDiscovery:Math.round((i-e.discoveredAt)/36e5),notified:t,notifiedAt:c,withinDeadline:!a,hoursRemaining:Math.round((s-i)/36e5),overdue:a,requiresDelayJustification:a},f=[{id:"circumstances",label:"Description of the circumstances of the breach",section:"GAID 2025 Art. 33(5)(a)",satisfied:d(e.description)},{id:"occurrence",label:"Date or time period of the breach",section:"GAID 2025 Art. 33(5)(b)",satisfied:R(e.occurredAt)},{id:"personalInfo",label:"Description of the personal data involved",section:"GAID 2025 Art. 33(5)(c)",satisfied:x(e.dataTypes)},{id:"riskOfHarm",label:"Assessment of the risk of harm to data subjects",section:"GAID 2025 Art. 33(5)(d)",satisfied:d(e.likelyConsequences)},{id:"numberAtRisk",label:"Estimated number of data subjects at risk of significant harm",section:"GAID 2025 Art. 33(5)(e)",satisfied:R(e.estimatedAffectedSubjects)},{id:"mitigation",label:"Steps taken to reduce the risk of harm",section:"GAID 2025 Art. 33(5)(f)",satisfied:d(e.mitigationMeasures)},{id:"notifySteps",label:"Steps taken to notify affected data subjects",section:"GAID 2025 Art. 33(5)(g)",satisfied:d(e.initialActions)},{id:"contactPoint",label:"Name and contact details of a contact point",section:"GAID 2025 Art. 33(5)(h)",satisfied:H(e.dpoContact)},{id:"dataSubjectCategories",label:"Categories of data subjects concerned",section:"NDPA 2023 S. 40(2)",satisfied:x(e.dataSubjectCategories)},{id:"recordCount",label:"Approximate number of personal data records concerned",section:"NDPA 2023 S. 40(2)",satisfied:R(e.approximateRecordCount)}],D=(O=(N=n.highRisk)!=null?N:(I=n.assessment)==null?void 0:I.highRisksToRightsAndFreedoms)!=null?O:false,g=D?[{id:"dsNature",label:"Nature and context of the breach in plain language",section:"NDPA 2023 S. 40(3)",satisfied:d(e.description)},{id:"dsConsequences",label:"Likely consequences of the breach",section:"NDPA 2023 S. 40(3)",satisfied:d(e.likelyConsequences)},{id:"dsMeasures",label:"Safeguards and measures data subjects can take",section:"NDPA 2023 S. 40(3)",satisfied:d(e.mitigationMeasures)},{id:"dsContact",label:"Contact point for data subjects",section:"NDPA 2023 S. 40(3)",satisfied:H(e.dpoContact)}]:[],l=[...f,...g],P=l.filter(m=>m.satisfied).length,S=Math.round(P/l.length*100),p=l.filter(m=>!m.satisfied).map(m=>m.label),y=p.length===0,u=[];for(let m of l.filter(L=>!L.satisfied))u.push(`Add: ${m.label} (${m.section}).`);return a?u.push("The 72-hour notification deadline has passed \u2014 notify the NDPC now and state the reasons for the delay; phased reporting is permitted where complete details are not yet available (NDPA S. 40(2))."):t||u.push(`${Math.max(0,h.hoursRemaining)} hour(s) remain to notify the NDPC within the 72-hour window (NDPA S. 40(2)).`),D&&u.push("High risk to data subjects \u2014 communicate the breach to affected data subjects immediately, in plain and clear language (NDPA S. 40(3))."),{complete:y,completeness:S,notificationToCommission:f,dataSubjectCommunication:g,dataSubjectCommunicationRequired:D,timing:h,missing:p,recommendations:u,asOf:i}}var j={ohl:200,ehl:1e3,uhl:5e3},k={UHL:25e4,EHL:1e5,OHL:1e4};function _(e,n={}){let i=a(a({},j),n.thresholds),r=a(a({},k),n.fees),s=e==null?void 0:e.dataSubjectsInSixMonths,o=typeof s=="number"&&s>0?Math.floor(s):0,t;o>i.uhl?t="UHL":o>=i.ehl?t="EHL":o>=i.ohl?t="OHL":e!=null&&e.isDesignated?t="listed":t="none";let c=t!=="none",b=t==="UHL"||t==="EHL"||t==="OHL"?r[t]:0,a$1=[];return t==="listed"&&a$1.push("Designated as a DCPMI below the volume tiers \u2014 confirm the applicable registration tier and fee with the NDPC."),c&&a$1.push(t==="OHL"?"OHL organisations renew their NDPC registration annually and file Compliance Audit Returns (CAR) each year.":"Register once with the NDPC, then file Compliance Audit Returns (CAR) annually."),a$1.push("Thresholds, fees, and filing dates follow the NDPC GAID 2025 baseline and can change \u2014 verify against current NDPC guidance before relying on them."),{tier:t,isDCPMI:c,annualFeeNGN:b,registration:{required:c,renewsAnnually:t==="OHL"},compliance:{auditReturnsAnnual:c,initialAuditWithinMonths:15},notes:a$1,dataSubjectsConsidered:o}}function w(e){return String(e).padStart(2,"0")}function T(e){let[n,i,r]=e.split("-").map(Number);return new Date(Date.UTC(n,i-1,r))}function B(e){return e.toISOString().slice(0,10)}function U(e,n){let[i,r,s]=e.split("-").map(Number);return B(new Date(Date.UTC(i,r-1+n,s)))}function F(){return new Date().toISOString().slice(0,10)}function W(e,n={}){var P,S,p,y,u,C,A;let i=(P=e.asOf)!=null?P:F(),r=(S=n.initialAuditWithinMonths)!=null?S:15,s=(y=(p=n.annualDeadline)==null?void 0:p.month)!=null?y:3,o=(C=(u=n.annualDeadline)==null?void 0:u.day)!=null?C:31,t=(A=n.deadlineOverrides)!=null?A:{},c=e.tier===void 0?true:e.tier!=="none",b=U(e.commencementDate,r),a=I=>{var N;return (N=t[I])!=null?N:`${I}-${w(s)}-${w(o)}`},h=Number(i.slice(0,4)),f=a(h);i>f&&(h+=1,f=a(h));let D=Math.round((T(f).getTime()-T(i).getTime())/864e5),g=i>=b,l=[];return c?(l.push("File the Compliance Audit Return with the NDPC via the NDPC Information Management Portal (NIMP)."),g&&l.push("The initial compliance-audit window has elapsed \u2014 ensure the initial audit has been conducted.")):l.push("Compliance Audit Returns apply only to Data Controllers/Processors of Major Importance."),l.push("Filing deadlines follow the NDPC GAID 2025 baseline and can be extended \u2014 verify the current deadline with the NDPC."),{applicable:c,schedule:{commencementDate:e.commencementDate,initialAuditWithinMonths:r,initialAuditDueDate:b,nextFilingDeadline:f,filingYear:h},status:{initialAuditDue:g,daysUntilNextDeadline:D},notes:l,asOf:i}}export{G as a,j as b,k as c,_ as d,W as e};
|
package/dist/chunk-NKFTLFPD.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {a,d,e}from'./chunk-KOHFQIV4.mjs';import {a as a$1}from'./chunk-6A7M4CGJ.mjs';import {useMemo}from'react';function u(t,e){return useMemo(()=>a(t,e),[t,e])}function M({input:t}){let e=JSON.stringify(t);return useMemo(()=>a$1(t),[e])}function D(t,e){return useMemo(()=>d(t,e),[t.dataSubjectsInSixMonths,t.isDesignated,e])}function P(t,e$1){return useMemo(()=>e(t,e$1),[t.commencementDate,t.asOf,t.tier,e$1])}export{u as a,M as b,D as c,P as d};
|
package/dist/chunk-OXFULQTE.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js');var d=e=>typeof e=="string"&&e.trim().length>0,R=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0,x=e=>Array.isArray(e)&&e.length>0,H=e=>!!e&&d(e.name)&&d(e.email);function G(e,n={}){var C,A,I,N,O;let i=(C=n.asOf)!=null?C:Date.now(),r=(A=n.deadlineHours)!=null?A:72,s=e.discoveredAt+r*36e5,o=n.notification,t=!!o,c=o==null?void 0:o.sentAt,a=(t?c:i)>s,h={deadline:s,hoursSinceDiscovery:Math.round((i-e.discoveredAt)/36e5),notified:t,notifiedAt:c,withinDeadline:!a,hoursRemaining:Math.round((s-i)/36e5),overdue:a,requiresDelayJustification:a},f=[{id:"circumstances",label:"Description of the circumstances of the breach",section:"GAID 2025 Art. 33(5)(a)",satisfied:d(e.description)},{id:"occurrence",label:"Date or time period of the breach",section:"GAID 2025 Art. 33(5)(b)",satisfied:R(e.occurredAt)},{id:"personalInfo",label:"Description of the personal data involved",section:"GAID 2025 Art. 33(5)(c)",satisfied:x(e.dataTypes)},{id:"riskOfHarm",label:"Assessment of the risk of harm to data subjects",section:"GAID 2025 Art. 33(5)(d)",satisfied:d(e.likelyConsequences)},{id:"numberAtRisk",label:"Estimated number of data subjects at risk of significant harm",section:"GAID 2025 Art. 33(5)(e)",satisfied:R(e.estimatedAffectedSubjects)},{id:"mitigation",label:"Steps taken to reduce the risk of harm",section:"GAID 2025 Art. 33(5)(f)",satisfied:d(e.mitigationMeasures)},{id:"notifySteps",label:"Steps taken to notify affected data subjects",section:"GAID 2025 Art. 33(5)(g)",satisfied:d(e.initialActions)},{id:"contactPoint",label:"Name and contact details of a contact point",section:"GAID 2025 Art. 33(5)(h)",satisfied:H(e.dpoContact)},{id:"dataSubjectCategories",label:"Categories of data subjects concerned",section:"NDPA 2023 S. 40(2)",satisfied:x(e.dataSubjectCategories)},{id:"recordCount",label:"Approximate number of personal data records concerned",section:"NDPA 2023 S. 40(2)",satisfied:R(e.approximateRecordCount)}],D=(O=(N=n.highRisk)!=null?N:(I=n.assessment)==null?void 0:I.highRisksToRightsAndFreedoms)!=null?O:false,g=D?[{id:"dsNature",label:"Nature and context of the breach in plain language",section:"NDPA 2023 S. 40(3)",satisfied:d(e.description)},{id:"dsConsequences",label:"Likely consequences of the breach",section:"NDPA 2023 S. 40(3)",satisfied:d(e.likelyConsequences)},{id:"dsMeasures",label:"Safeguards and measures data subjects can take",section:"NDPA 2023 S. 40(3)",satisfied:d(e.mitigationMeasures)},{id:"dsContact",label:"Contact point for data subjects",section:"NDPA 2023 S. 40(3)",satisfied:H(e.dpoContact)}]:[],l=[...f,...g],P=l.filter(m=>m.satisfied).length,S=Math.round(P/l.length*100),p=l.filter(m=>!m.satisfied).map(m=>m.label),y=p.length===0,u=[];for(let m of l.filter(L=>!L.satisfied))u.push(`Add: ${m.label} (${m.section}).`);return a?u.push("The 72-hour notification deadline has passed \u2014 notify the NDPC now and state the reasons for the delay; phased reporting is permitted where complete details are not yet available (NDPA S. 40(2))."):t||u.push(`${Math.max(0,h.hoursRemaining)} hour(s) remain to notify the NDPC within the 72-hour window (NDPA S. 40(2)).`),D&&u.push("High risk to data subjects \u2014 communicate the breach to affected data subjects immediately, in plain and clear language (NDPA S. 40(3))."),{complete:y,completeness:S,notificationToCommission:f,dataSubjectCommunication:g,dataSubjectCommunicationRequired:D,timing:h,missing:p,recommendations:u,asOf:i}}var j={ohl:200,ehl:1e3,uhl:5e3},k={UHL:25e4,EHL:1e5,OHL:1e4};function _(e,n={}){let i=chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},j),n.thresholds),r=chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},k),n.fees),s=e==null?void 0:e.dataSubjectsInSixMonths,o=typeof s=="number"&&s>0?Math.floor(s):0,t;o>i.uhl?t="UHL":o>=i.ehl?t="EHL":o>=i.ohl?t="OHL":e!=null&&e.isDesignated?t="listed":t="none";let c=t!=="none",b=t==="UHL"||t==="EHL"||t==="OHL"?r[t]:0,a=[];return t==="listed"&&a.push("Designated as a DCPMI below the volume tiers \u2014 confirm the applicable registration tier and fee with the NDPC."),c&&a.push(t==="OHL"?"OHL organisations renew their NDPC registration annually and file Compliance Audit Returns (CAR) each year.":"Register once with the NDPC, then file Compliance Audit Returns (CAR) annually."),a.push("Thresholds, fees, and filing dates follow the NDPC GAID 2025 baseline and can change \u2014 verify against current NDPC guidance before relying on them."),{tier:t,isDCPMI:c,annualFeeNGN:b,registration:{required:c,renewsAnnually:t==="OHL"},compliance:{auditReturnsAnnual:c,initialAuditWithinMonths:15},notes:a,dataSubjectsConsidered:o}}function w(e){return String(e).padStart(2,"0")}function T(e){let[n,i,r]=e.split("-").map(Number);return new Date(Date.UTC(n,i-1,r))}function B(e){return e.toISOString().slice(0,10)}function U(e,n){let[i,r,s]=e.split("-").map(Number);return B(new Date(Date.UTC(i,r-1+n,s)))}function F(){return new Date().toISOString().slice(0,10)}function W(e,n={}){var P,S,p,y,u,C,A;let i=(P=e.asOf)!=null?P:F(),r=(S=n.initialAuditWithinMonths)!=null?S:15,s=(y=(p=n.annualDeadline)==null?void 0:p.month)!=null?y:3,o=(C=(u=n.annualDeadline)==null?void 0:u.day)!=null?C:31,t=(A=n.deadlineOverrides)!=null?A:{},c=e.tier===void 0?true:e.tier!=="none",b=U(e.commencementDate,r),a=I=>{var N;return (N=t[I])!=null?N:`${I}-${w(s)}-${w(o)}`},h=Number(i.slice(0,4)),f=a(h);i>f&&(h+=1,f=a(h));let D=Math.round((T(f).getTime()-T(i).getTime())/864e5),g=i>=b,l=[];return c?(l.push("File the Compliance Audit Return with the NDPC via the NDPC Information Management Portal (NIMP)."),g&&l.push("The initial compliance-audit window has elapsed \u2014 ensure the initial audit has been conducted.")):l.push("Compliance Audit Returns apply only to Data Controllers/Processors of Major Importance."),l.push("Filing deadlines follow the NDPC GAID 2025 baseline and can be extended \u2014 verify the current deadline with the NDPC."),{applicable:c,schedule:{commencementDate:e.commencementDate,initialAuditWithinMonths:r,initialAuditDueDate:b,nextFilingDeadline:f,filingYear:h},status:{initialAuditDue:g,daysUntilNextDeadline:D},notes:l,asOf:i}}exports.a=G;exports.b=j;exports.c=k;exports.d=_;exports.e=W;
|