@tantainnovative/ndpr-toolkit 5.1.4 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -123,6 +123,12 @@ export declare interface ApiAdapterSuccessContext<T = unknown> {
123
123
  */
124
124
  export declare function appendAuditEntry(entry: ConsentAuditEntry, storageKey?: string): void;
125
125
 
126
+ /**
127
+ * Assess a breach report against the NDPA S. 40 / GAID 2025 Article 33
128
+ * notification requirements.
129
+ */
130
+ export declare function assessBreachNotification(report: BreachReport, options?: BreachNotificationOptions): BreachNotificationAssessment;
131
+
126
132
  /**
127
133
  * Analyzes all processing activities and returns compliance gaps including
128
134
  * missing DPO approval, overdue reviews, undocumented justifications,
@@ -259,6 +265,36 @@ export declare interface BreachFormSubmission {
259
265
  }>;
260
266
  }
261
267
 
268
+ export declare interface BreachNotificationAssessment {
269
+ /** Whether all applicable mandated content items are satisfied. */
270
+ complete: boolean;
271
+ /** Completeness of applicable content items, 0–100. */
272
+ completeness: number;
273
+ /** GAID 2025 Article 33(5) / NDPA S. 40(2) content of the notification to the Commission. */
274
+ notificationToCommission: BreachNotificationItem[];
275
+ /** NDPA S. 40(3) communication to data subjects — populated only when high-risk. */
276
+ dataSubjectCommunication: BreachNotificationItem[];
277
+ /** Whether a data-subject communication is owed (high risk). */
278
+ dataSubjectCommunicationRequired: boolean;
279
+ timing: BreachNotificationTiming;
280
+ /** Labels of unsatisfied applicable items. */
281
+ missing: string[];
282
+ /** Actionable next steps, including timing warnings. */
283
+ recommendations: string[];
284
+ asOf: number;
285
+ }
286
+
287
+ export declare interface BreachNotificationItem {
288
+ /** Stable identifier for the requirement. */
289
+ id: string;
290
+ /** Human-readable requirement. */
291
+ label: string;
292
+ /** Authoritative citation, e.g. `GAID 2025 Art. 33(5)(a)`. */
293
+ section: string;
294
+ /** Whether the report satisfies it. */
295
+ satisfied: boolean;
296
+ }
297
+
262
298
  /**
263
299
  * Breach notification management component. Implements NDPA Section 40 requirements for
264
300
  * managing breach notifications, tracking 72-hour NDPC reporting deadlines, and coordinating
@@ -346,6 +382,63 @@ export declare interface BreachNotificationManagerProps {
346
382
  showDeadlineAlerts?: boolean;
347
383
  }
348
384
 
385
+ /**
386
+ * Personal-data-breach notification completeness checker for NDPA 2023
387
+ * Section 40, as detailed by NDPC General Application and Implementation
388
+ * Directive (GAID) 2025 Article 33.
389
+ *
390
+ * Section 40(2) requires a data controller to notify the Commission within 72
391
+ * hours of becoming aware of a breach likely to result in a risk to data
392
+ * subjects' rights and freedoms. GAID 2025 Article 33(5)(a)–(h) enumerates the
393
+ * content that a notification to the Commission "shall include". Where the
394
+ * breach is likely to result in a *high* risk, Section 40(3) additionally
395
+ * requires the controller to communicate the breach to affected data subjects
396
+ * in plain and clear language.
397
+ *
398
+ * This assesses a `BreachReport` against those requirements: which mandated
399
+ * content items are present, whether the 72-hour window is met, and whether a
400
+ * data-subject communication is owed. It is a documentation-completeness aid,
401
+ * not legal advice — verify against current NDPC guidance.
402
+ *
403
+ * @see NDPA 2023 Section 40 (Personal data breaches)
404
+ * @see NDPC GAID 2025 Article 33 (Data Breach Notification)
405
+ */
406
+
407
+ export declare interface BreachNotificationOptions {
408
+ /** Risk assessment for the breach; drives whether data-subject communication is required. */
409
+ assessment?: RiskAssessment;
410
+ /** The regulatory notification actually sent, if any — used to judge timeliness. */
411
+ notification?: RegulatoryNotification;
412
+ /** Reference "now" in epoch ms. Defaults to `Date.now()`. */
413
+ asOf?: number;
414
+ /** Notification window in hours. Defaults to 72 (NDPA S. 40(2)). */
415
+ deadlineHours?: number;
416
+ /**
417
+ * Explicit high-risk flag (NDPA S. 40(3)). When omitted, derived from
418
+ * `assessment.highRisksToRightsAndFreedoms`.
419
+ */
420
+ highRisk?: boolean;
421
+ }
422
+
423
+ export declare interface BreachNotificationTiming {
424
+ /** `discoveredAt` + the notification window. */
425
+ deadline: number;
426
+ /** Whole hours between discovery and `asOf`. */
427
+ hoursSinceDiscovery: number;
428
+ /** Whether a regulatory notification has been recorded. */
429
+ notified: boolean;
430
+ /** When the regulatory notification was sent, if any. */
431
+ notifiedAt?: number;
432
+ /** Whether the notification (or, if none, `asOf`) falls within the deadline. */
433
+ withinDeadline: boolean;
434
+ /** Whole hours from `asOf` to the deadline (negative once past). */
435
+ hoursRemaining: number;
436
+ /** Whether the deadline has been missed. */
437
+ overdue: boolean;
438
+ /** Late filings must state the reasons for the delay (NDPA S. 40(2)). */
439
+ requiresDelayJustification: boolean;
440
+ }
441
+
349
442
  /**
350
443
  * Represents a data breach report
351
444
  */
@@ -639,6 +732,74 @@ export declare function calculateBreachSeverity(report: BreachReport, assessment
639
732
  justification: string;
640
733
  };
641
734
 
735
+ /**
736
+ * Compliance Audit Returns (CAR) scheduling under the NDPC General Application
737
+ * and Implementation Directive (GAID) 2025.
738
+ *
739
+ * A Data Controller/Processor of Major Importance (DCPMI) must conduct an
740
+ * initial compliance audit within 15 months of commencing data processing, and
741
+ * thereafter file a Compliance Audit Return with the NDPC annually (default
742
+ * deadline 31 March, filed through the NDPC Information Management Portal/NIMP).
743
+ *
744
+ * This computes the schedule (initial-audit due date, the next annual filing
745
+ * deadline relative to a reference date) and a light status. NDPC deadlines
746
+ * shift (the 2026 filing was extended to 30 May), so the annual deadline is
747
+ * configurable and per-year overrides are supported. The audit *content* itself
748
+ * is the organisation's compliance posture — pair this with `getComplianceScore`.
749
+ *
750
+ * @see NDPC General Application and Implementation Directive (GAID) 2025
751
+ */
752
+
753
+ export declare interface CARInput {
754
+ /** ISO date (YYYY-MM-DD) the organisation commenced data processing. */
755
+ commencementDate: string;
756
+ /** Reference date to evaluate against (YYYY-MM-DD). Defaults to today. */
757
+ asOf?: string;
758
+ /** DCPMI tier; CAR applies to DCPMIs only. Omit to assume applicable. */
759
+ tier?: DCPMITier;
760
+ }
761
+
762
+ export declare interface CAROptions {
763
+ /** Default annual filing deadline (month is 1-12). Defaults to 31 March. */
764
+ annualDeadline?: {
765
+ month: number;
766
+ day: number;
767
+ };
768
+ /** Per-year overrides for the annual deadline, e.g. `{ 2026: '2026-05-30' }`. */
769
+ deadlineOverrides?: Record<number, string>;
770
+ /** Months after commencement the initial audit is due. Defaults to 15. */
771
+ initialAuditWithinMonths?: number;
772
+ }
773
+
774
+ /**
775
+ * Classify an organisation's DCPMI status, registration tier, annual fee, and
776
+ * Compliance Audit Returns obligations under NDPC GAID 2025.
777
+ */
778
+ export declare function classifyDCPMI(input: DCPMIInput, options?: DCPMIClassificationOptions): DCPMIClassification;
779
+
780
+ export declare interface ComplianceAuditReturn {
781
+ /** Whether CAR applies (false for non-DCPMI organisations). */
782
+ applicable: boolean;
783
+ schedule: {
784
+ commencementDate: string;
785
+ initialAuditWithinMonths: number;
786
+ /** Commencement date + the initial-audit window. */
787
+ initialAuditDueDate: string;
788
+ /** The next annual filing deadline on or after `asOf`. */
789
+ nextFilingDeadline: string;
790
+ /** The year the next filing deadline falls in. */
791
+ filingYear: number;
792
+ };
793
+ status: {
794
+ /** Whether the initial-audit obligation has arisen (asOf ≥ due date). */
795
+ initialAuditDue: boolean;
796
+ /** Whole days from `asOf` to the next filing deadline. */
797
+ daysUntilNextDeadline: number;
798
+ };
799
+ notes: string[];
800
+ asOf: string;
801
+ }
802
+
642
803
  /** A single gap found during NDPA compliance evaluation. */
643
804
  declare interface ComplianceGap {
644
805
  /** Machine-readable requirement identifier. */
@@ -1408,6 +1569,90 @@ declare interface DataCategory {
1408
1569
  selected: boolean;
1409
1570
  }
1410
1571
 
1572
+ export declare interface DCPMIClassification {
1573
+ /** Registration tier (or `'none'` when not a DCPMI). */
1574
+ tier: DCPMITier;
1575
+ /** Whether the organisation is a Data Controller/Processor of Major Importance. */
1576
+ isDCPMI: boolean;
1577
+ /** Annual registration fee in Nigerian Naira (0 when not a volume-tiered DCPMI). */
1578
+ annualFeeNGN: number;
1579
+ registration: {
1580
+ /** Whether NDPC registration is required. */
1581
+ required: boolean;
1582
+ /** OHL renews registration annually; UHL/EHL register once and file CAR annually. */
1583
+ renewsAnnually: boolean;
1584
+ };
1585
+ compliance: {
1586
+ /** Whether the organisation must file annual Compliance Audit Returns (CAR). */
1587
+ auditReturnsAnnual: boolean;
1588
+ /** Initial compliance audit is due within this many months of commencing processing. */
1589
+ initialAuditWithinMonths: number;
1590
+ };
1591
+ /** Human-readable caveats and next steps. */
1592
+ notes: string[];
1593
+ /** The count actually used for classification, after defensive normalisation. */
1594
+ dataSubjectsConsidered: number;
1595
+ }
1596
+
1597
+ export declare interface DCPMIClassificationOptions {
1598
+ thresholds?: Partial<DCPMIThresholds>;
1599
+ fees?: Partial<DCPMIFees>;
1600
+ }
1601
+
1602
+ export declare interface DCPMIFees {
1603
+ UHL: number;
1604
+ EHL: number;
1605
+ OHL: number;
1606
+ }
1607
+
1608
+ export declare interface DCPMIInput {
1609
+ /** Distinct data subjects whose data was processed in the relevant six-month window. */
1610
+ dataSubjectsInSixMonths?: number;
1611
+ /** True if the Commission has separately designated/listed the organisation as a DCPMI. */
1612
+ isDesignated?: boolean;
1613
+ }
1614
+
1615
+ export declare interface DCPMIThresholds {
1616
+ /** Lower bound (inclusive) for OHL. */
1617
+ ohl: number;
1618
+ /** Lower bound (inclusive) for EHL. */
1619
+ ehl: number;
1620
+ /** A count strictly greater than this is UHL. */
1621
+ uhl: number;
1622
+ }
1623
+
1624
+ /**
1625
+ * Data Controller/Processor of Major Importance (DCPMI) classification under the
1626
+ * NDPC General Application and Implementation Directive (GAID) 2025.
1627
+ *
1628
+ * Volume-based tiers — data subjects processed within a six-month window:
1629
+ * - UHL (Ultra High Level): more than 5,000 → ₦250,000 / year
1630
+ * - EHL (Extra High Level): 1,000 – 5,000 → ₦100,000 / year
1631
+ * - OHL (Ordinary High Level): 200 – 999 → ₦10,000 / year
1632
+ * - below 200: not a DCPMI by volume
1633
+ *
1634
+ * Boundaries: the 1,000 mark resolves to EHL (so OHL is 200–999); UHL is
1635
+ * strictly greater than 5,000 (so 5,000 itself is EHL). The NDPC has revised
1636
+ * classification metrics before and shifts filing deadlines, so thresholds and
1637
+ * fees are configurable — treat the defaults as the September 2025 GAID
1638
+ * baseline, not a constant.
1639
+ *
1640
+ * `isDesignated` marks an organisation the Commission has otherwise listed as a
1641
+ * DCPMI; it is then a DCPMI regardless of volume. Below the volume tiers such an
1642
+ * organisation is reported as `'listed'` with the fee left at 0 and a note to
1643
+ * confirm the applicable tier/fee with the NDPC.
1644
+ *
1645
+ * @see NDPC General Application and Implementation Directive (GAID) 2025
1646
+ * @see NDPC Guidance Notice on the Registration of Data Controllers and Processors of Major Importance
1647
+ */
1648
+ export declare type DCPMITier = 'UHL' | 'EHL' | 'OHL' | 'listed' | 'none';
1649
+
1650
+ /** September 2025 GAID baseline annual fees (NGN). */
1651
+ export declare const DEFAULT_DCPMI_FEES_NGN: DCPMIFees;
1652
+
1653
+ /** September 2025 GAID baseline — override via {@link DCPMIClassificationOptions} as the rules evolve. */
1654
+ export declare const DEFAULT_DCPMI_THRESHOLDS: DCPMIThresholds;
1655
+
1411
1656
  /**
1412
1657
  * Default NDPA-compliant privacy policy sections.
1413
1658
  * Each section uses {{variable}} placeholders that are resolved at generation time.
@@ -2231,6 +2476,11 @@ export declare interface FormatDSRRequestStructuredResult {
2231
2476
  data?: DSRRequest;
2232
2477
  }
2233
2478
 
2479
+ /**
2480
+ * Derive the CAR schedule and status for a DCPMI under NDPC GAID 2025.
2481
+ */
2482
+ export declare function generateComplianceAuditReturn(input: CARInput, options?: CAROptions): ComplianceAuditReturn;
2483
+
2234
2484
  /**
2235
2485
  * Generates a summary of all lawful basis documentation across processing activities.
2236
2486
  *
@@ -4354,6 +4604,14 @@ export declare interface UseAdaptivePolicyWizardReturn {
4354
4604
  */
4355
4605
  export declare function useBreach({ categories, initialReports, adapter, storageKey, useLocalStorage, onReport, onAssessment, onNotification, }: UseBreachOptions): UseBreachReturn;
4356
4606
 
4607
+ /**
4608
+ * React hook that memoises the `assessBreachNotification` utility — checks a
4609
+ * breach report's completeness against the NDPA S. 40 / GAID 2025 Article 33
4610
+ * notification requirements (mandated content, the 72-hour window, and any
4611
+ * data-subject communication owed on high risk).
4612
+ */
4613
+ export declare function useBreachNotificationAssessment(report: BreachReport, options?: BreachNotificationOptions): BreachNotificationAssessment;
4614
+
4357
4615
  declare interface UseBreachOptions {
4358
4616
  /**
4359
4617
  * Available breach categories
@@ -4457,6 +4715,13 @@ declare interface UseBreachReturn {
4457
4715
  isLoading: boolean;
4458
4716
  }
4459
4717
 
4718
+ /**
4719
+ * React hook that memoises the `generateComplianceAuditReturn` utility — derives
4720
+ * a DCPMI's Compliance Audit Returns schedule (initial-audit due date, next
4721
+ * annual filing deadline) and status under NDPC GAID 2025.
4722
+ */
4723
+ export declare function useComplianceAuditReturn(input: CARInput, options?: CAROptions): ComplianceAuditReturn;
4724
+
4460
4725
  /**
4461
4726
  * Computes an NDPA compliance score and returns a structured report
4462
4727
  * (score, rating, per-module breakdown, recommendations).
@@ -4674,6 +4939,13 @@ declare interface UseCrossBorderTransferReturn {
4674
4939
  isLoading: boolean;
4675
4940
  }
4676
4941
 
4942
+ /**
4943
+ * React hook that memoises the `classifyDCPMI` utility — derives an organisation's
4944
+ * Data Controller/Processor of Major Importance tier, annual registration fee,
4945
+ * and Compliance Audit Returns obligations under NDPC GAID 2025.
4946
+ */
4947
+ export declare function useDCPMI(input: DCPMIInput, options?: DCPMIClassificationOptions): DCPMIClassification;
4948
+
4677
4949
  /**
4678
4950
  * Convenience wrapper around `usePrivacyPolicy`. With `orgInfo` provided
4679
4951
  * and `autoGenerate` enabled (default), `policy` is non-null on the first
package/dist/index.d.ts CHANGED
@@ -123,6 +123,12 @@ export declare interface ApiAdapterSuccessContext<T = unknown> {
123
123
  */
124
124
  export declare function appendAuditEntry(entry: ConsentAuditEntry, storageKey?: string): void;
125
125
 
126
+ /**
127
+ * Assess a breach report against the NDPA S. 40 / GAID 2025 Article 33
128
+ * notification requirements.
129
+ */
130
+ export declare function assessBreachNotification(report: BreachReport, options?: BreachNotificationOptions): BreachNotificationAssessment;
131
+
126
132
  /**
127
133
  * Analyzes all processing activities and returns compliance gaps including
128
134
  * missing DPO approval, overdue reviews, undocumented justifications,
@@ -259,6 +265,36 @@ export declare interface BreachFormSubmission {
259
265
  }>;
260
266
  }
261
267
 
268
+ export declare interface BreachNotificationAssessment {
269
+ /** Whether all applicable mandated content items are satisfied. */
270
+ complete: boolean;
271
+ /** Completeness of applicable content items, 0–100. */
272
+ completeness: number;
273
+ /** GAID 2025 Article 33(5) / NDPA S. 40(2) content of the notification to the Commission. */
274
+ notificationToCommission: BreachNotificationItem[];
275
+ /** NDPA S. 40(3) communication to data subjects — populated only when high-risk. */
276
+ dataSubjectCommunication: BreachNotificationItem[];
277
+ /** Whether a data-subject communication is owed (high risk). */
278
+ dataSubjectCommunicationRequired: boolean;
279
+ timing: BreachNotificationTiming;
280
+ /** Labels of unsatisfied applicable items. */
281
+ missing: string[];
282
+ /** Actionable next steps, including timing warnings. */
283
+ recommendations: string[];
284
+ asOf: number;
285
+ }
286
+
287
+ export declare interface BreachNotificationItem {
288
+ /** Stable identifier for the requirement. */
289
+ id: string;
290
+ /** Human-readable requirement. */
291
+ label: string;
292
+ /** Authoritative citation, e.g. `GAID 2025 Art. 33(5)(a)`. */
293
+ section: string;
294
+ /** Whether the report satisfies it. */
295
+ satisfied: boolean;
296
+ }
297
+
262
298
  /**
263
299
  * Breach notification management component. Implements NDPA Section 40 requirements for
264
300
  * managing breach notifications, tracking 72-hour NDPC reporting deadlines, and coordinating
@@ -346,6 +382,63 @@ export declare interface BreachNotificationManagerProps {
346
382
  showDeadlineAlerts?: boolean;
347
383
  }
348
384
 
385
+ /**
386
+ * Personal-data-breach notification completeness checker for NDPA 2023
387
+ * Section 40, as detailed by NDPC General Application and Implementation
388
+ * Directive (GAID) 2025 Article 33.
389
+ *
390
+ * Section 40(2) requires a data controller to notify the Commission within 72
391
+ * hours of becoming aware of a breach likely to result in a risk to data
392
+ * subjects' rights and freedoms. GAID 2025 Article 33(5)(a)–(h) enumerates the
393
+ * content that a notification to the Commission "shall include". Where the
394
+ * breach is likely to result in a *high* risk, Section 40(3) additionally
395
+ * requires the controller to communicate the breach to affected data subjects
396
+ * in plain and clear language.
397
+ *
398
+ * This assesses a `BreachReport` against those requirements: which mandated
399
+ * content items are present, whether the 72-hour window is met, and whether a
400
+ * data-subject communication is owed. It is a documentation-completeness aid,
401
+ * not legal advice — verify against current NDPC guidance.
402
+ *
403
+ * @see NDPA 2023 Section 40 (Personal data breaches)
404
+ * @see NDPC GAID 2025 Article 33 (Data Breach Notification)
405
+ */
406
+
407
+ export declare interface BreachNotificationOptions {
408
+ /** Risk assessment for the breach; drives whether data-subject communication is required. */
409
+ assessment?: RiskAssessment;
410
+ /** The regulatory notification actually sent, if any — used to judge timeliness. */
411
+ notification?: RegulatoryNotification;
412
+ /** Reference "now" in epoch ms. Defaults to `Date.now()`. */
413
+ asOf?: number;
414
+ /** Notification window in hours. Defaults to 72 (NDPA S. 40(2)). */
415
+ deadlineHours?: number;
416
+ /**
417
+ * Explicit high-risk flag (NDPA S. 40(3)). When omitted, derived from
418
+ * `assessment.highRisksToRightsAndFreedoms`.
419
+ */
420
+ highRisk?: boolean;
421
+ }
422
+
423
+ export declare interface BreachNotificationTiming {
424
+ /** `discoveredAt` + the notification window. */
425
+ deadline: number;
426
+ /** Whole hours between discovery and `asOf`. */
427
+ hoursSinceDiscovery: number;
428
+ /** Whether a regulatory notification has been recorded. */
429
+ notified: boolean;
430
+ /** When the regulatory notification was sent, if any. */
431
+ notifiedAt?: number;
432
+ /** Whether the notification (or, if none, `asOf`) falls within the deadline. */
433
+ withinDeadline: boolean;
434
+ /** Whole hours from `asOf` to the deadline (negative once past). */
435
+ hoursRemaining: number;
436
+ /** Whether the deadline has been missed. */
437
+ overdue: boolean;
438
+ /** Late filings must state the reasons for the delay (NDPA S. 40(2)). */
439
+ requiresDelayJustification: boolean;
440
+ }
441
+
349
442
  /**
350
443
  * Represents a data breach report
351
444
  */
@@ -639,6 +732,74 @@ export declare function calculateBreachSeverity(report: BreachReport, assessment
639
732
  justification: string;
640
733
  };
641
734
 
735
+ /**
736
+ * Compliance Audit Returns (CAR) scheduling under the NDPC General Application
737
+ * and Implementation Directive (GAID) 2025.
738
+ *
739
+ * A Data Controller/Processor of Major Importance (DCPMI) must conduct an
740
+ * initial compliance audit within 15 months of commencing data processing, and
741
+ * thereafter file a Compliance Audit Return with the NDPC annually (default
742
+ * deadline 31 March, filed through the NDPC Information Management Portal/NIMP).
743
+ *
744
+ * This computes the schedule (initial-audit due date, the next annual filing
745
+ * deadline relative to a reference date) and a light status. NDPC deadlines
746
+ * shift (the 2026 filing was extended to 30 May), so the annual deadline is
747
+ * configurable and per-year overrides are supported. The audit *content* itself
748
+ * is the organisation's compliance posture — pair this with `getComplianceScore`.
749
+ *
750
+ * @see NDPC General Application and Implementation Directive (GAID) 2025
751
+ */
752
+
753
+ export declare interface CARInput {
754
+ /** ISO date (YYYY-MM-DD) the organisation commenced data processing. */
755
+ commencementDate: string;
756
+ /** Reference date to evaluate against (YYYY-MM-DD). Defaults to today. */
757
+ asOf?: string;
758
+ /** DCPMI tier; CAR applies to DCPMIs only. Omit to assume applicable. */
759
+ tier?: DCPMITier;
760
+ }
761
+
762
+ export declare interface CAROptions {
763
+ /** Default annual filing deadline (month is 1-12). Defaults to 31 March. */
764
+ annualDeadline?: {
765
+ month: number;
766
+ day: number;
767
+ };
768
+ /** Per-year overrides for the annual deadline, e.g. `{ 2026: '2026-05-30' }`. */
769
+ deadlineOverrides?: Record<number, string>;
770
+ /** Months after commencement the initial audit is due. Defaults to 15. */
771
+ initialAuditWithinMonths?: number;
772
+ }
773
+
774
+ /**
775
+ * Classify an organisation's DCPMI status, registration tier, annual fee, and
776
+ * Compliance Audit Returns obligations under NDPC GAID 2025.
777
+ */
778
+ export declare function classifyDCPMI(input: DCPMIInput, options?: DCPMIClassificationOptions): DCPMIClassification;
779
+
780
+ export declare interface ComplianceAuditReturn {
781
+ /** Whether CAR applies (false for non-DCPMI organisations). */
782
+ applicable: boolean;
783
+ schedule: {
784
+ commencementDate: string;
785
+ initialAuditWithinMonths: number;
786
+ /** Commencement date + the initial-audit window. */
787
+ initialAuditDueDate: string;
788
+ /** The next annual filing deadline on or after `asOf`. */
789
+ nextFilingDeadline: string;
790
+ /** The year the next filing deadline falls in. */
791
+ filingYear: number;
792
+ };
793
+ status: {
794
+ /** Whether the initial-audit obligation has arisen (asOf ≥ due date). */
795
+ initialAuditDue: boolean;
796
+ /** Whole days from `asOf` to the next filing deadline. */
797
+ daysUntilNextDeadline: number;
798
+ };
799
+ notes: string[];
800
+ asOf: string;
801
+ }
802
+
642
803
  /** A single gap found during NDPA compliance evaluation. */
643
804
  declare interface ComplianceGap {
644
805
  /** Machine-readable requirement identifier. */
@@ -1408,6 +1569,90 @@ declare interface DataCategory {
1408
1569
  selected: boolean;
1409
1570
  }
1410
1571
 
1572
+ export declare interface DCPMIClassification {
1573
+ /** Registration tier (or `'none'` when not a DCPMI). */
1574
+ tier: DCPMITier;
1575
+ /** Whether the organisation is a Data Controller/Processor of Major Importance. */
1576
+ isDCPMI: boolean;
1577
+ /** Annual registration fee in Nigerian Naira (0 when not a volume-tiered DCPMI). */
1578
+ annualFeeNGN: number;
1579
+ registration: {
1580
+ /** Whether NDPC registration is required. */
1581
+ required: boolean;
1582
+ /** OHL renews registration annually; UHL/EHL register once and file CAR annually. */
1583
+ renewsAnnually: boolean;
1584
+ };
1585
+ compliance: {
1586
+ /** Whether the organisation must file annual Compliance Audit Returns (CAR). */
1587
+ auditReturnsAnnual: boolean;
1588
+ /** Initial compliance audit is due within this many months of commencing processing. */
1589
+ initialAuditWithinMonths: number;
1590
+ };
1591
+ /** Human-readable caveats and next steps. */
1592
+ notes: string[];
1593
+ /** The count actually used for classification, after defensive normalisation. */
1594
+ dataSubjectsConsidered: number;
1595
+ }
1596
+
1597
+ export declare interface DCPMIClassificationOptions {
1598
+ thresholds?: Partial<DCPMIThresholds>;
1599
+ fees?: Partial<DCPMIFees>;
1600
+ }
1601
+
1602
+ export declare interface DCPMIFees {
1603
+ UHL: number;
1604
+ EHL: number;
1605
+ OHL: number;
1606
+ }
1607
+
1608
+ export declare interface DCPMIInput {
1609
+ /** Distinct data subjects whose data was processed in the relevant six-month window. */
1610
+ dataSubjectsInSixMonths?: number;
1611
+ /** True if the Commission has separately designated/listed the organisation as a DCPMI. */
1612
+ isDesignated?: boolean;
1613
+ }
1614
+
1615
+ export declare interface DCPMIThresholds {
1616
+ /** Lower bound (inclusive) for OHL. */
1617
+ ohl: number;
1618
+ /** Lower bound (inclusive) for EHL. */
1619
+ ehl: number;
1620
+ /** A count strictly greater than this is UHL. */
1621
+ uhl: number;
1622
+ }
1623
+
1624
+ /**
1625
+ * Data Controller/Processor of Major Importance (DCPMI) classification under the
1626
+ * NDPC General Application and Implementation Directive (GAID) 2025.
1627
+ *
1628
+ * Volume-based tiers — data subjects processed within a six-month window:
1629
+ * - UHL (Ultra High Level): more than 5,000 → ₦250,000 / year
1630
+ * - EHL (Extra High Level): 1,000 – 5,000 → ₦100,000 / year
1631
+ * - OHL (Ordinary High Level): 200 – 999 → ₦10,000 / year
1632
+ * - below 200: not a DCPMI by volume
1633
+ *
1634
+ * Boundaries: the 1,000 mark resolves to EHL (so OHL is 200–999); UHL is
1635
+ * strictly greater than 5,000 (so 5,000 itself is EHL). The NDPC has revised
1636
+ * classification metrics before and shifts filing deadlines, so thresholds and
1637
+ * fees are configurable — treat the defaults as the September 2025 GAID
1638
+ * baseline, not a constant.
1639
+ *
1640
+ * `isDesignated` marks an organisation the Commission has otherwise listed as a
1641
+ * DCPMI; it is then a DCPMI regardless of volume. Below the volume tiers such an
1642
+ * organisation is reported as `'listed'` with the fee left at 0 and a note to
1643
+ * confirm the applicable tier/fee with the NDPC.
1644
+ *
1645
+ * @see NDPC General Application and Implementation Directive (GAID) 2025
1646
+ * @see NDPC Guidance Notice on the Registration of Data Controllers and Processors of Major Importance
1647
+ */
1648
+ export declare type DCPMITier = 'UHL' | 'EHL' | 'OHL' | 'listed' | 'none';
1649
+
1650
+ /** September 2025 GAID baseline annual fees (NGN). */
1651
+ export declare const DEFAULT_DCPMI_FEES_NGN: DCPMIFees;
1652
+
1653
+ /** September 2025 GAID baseline — override via {@link DCPMIClassificationOptions} as the rules evolve. */
1654
+ export declare const DEFAULT_DCPMI_THRESHOLDS: DCPMIThresholds;
1655
+
1411
1656
  /**
1412
1657
  * Default NDPA-compliant privacy policy sections.
1413
1658
  * Each section uses {{variable}} placeholders that are resolved at generation time.
@@ -2231,6 +2476,11 @@ export declare interface FormatDSRRequestStructuredResult {
2231
2476
  data?: DSRRequest;
2232
2477
  }
2233
2478
 
2479
+ /**
2480
+ * Derive the CAR schedule and status for a DCPMI under NDPC GAID 2025.
2481
+ */
2482
+ export declare function generateComplianceAuditReturn(input: CARInput, options?: CAROptions): ComplianceAuditReturn;
2483
+
2234
2484
  /**
2235
2485
  * Generates a summary of all lawful basis documentation across processing activities.
2236
2486
  *
@@ -4354,6 +4604,14 @@ export declare interface UseAdaptivePolicyWizardReturn {
4354
4604
  */
4355
4605
  export declare function useBreach({ categories, initialReports, adapter, storageKey, useLocalStorage, onReport, onAssessment, onNotification, }: UseBreachOptions): UseBreachReturn;
4356
4606
 
4607
+ /**
4608
+ * React hook that memoises the `assessBreachNotification` utility — checks a
4609
+ * breach report's completeness against the NDPA S. 40 / GAID 2025 Article 33
4610
+ * notification requirements (mandated content, the 72-hour window, and any
4611
+ * data-subject communication owed on high risk).
4612
+ */
4613
+ export declare function useBreachNotificationAssessment(report: BreachReport, options?: BreachNotificationOptions): BreachNotificationAssessment;
4614
+
4357
4615
  declare interface UseBreachOptions {
4358
4616
  /**
4359
4617
  * Available breach categories
@@ -4457,6 +4715,13 @@ declare interface UseBreachReturn {
4457
4715
  isLoading: boolean;
4458
4716
  }
4459
4717
 
4718
+ /**
4719
+ * React hook that memoises the `generateComplianceAuditReturn` utility — derives
4720
+ * a DCPMI's Compliance Audit Returns schedule (initial-audit due date, next
4721
+ * annual filing deadline) and status under NDPC GAID 2025.
4722
+ */
4723
+ export declare function useComplianceAuditReturn(input: CARInput, options?: CAROptions): ComplianceAuditReturn;
4724
+
4460
4725
  /**
4461
4726
  * Computes an NDPA compliance score and returns a structured report
4462
4727
  * (score, rating, per-module breakdown, recommendations).
@@ -4674,6 +4939,13 @@ declare interface UseCrossBorderTransferReturn {
4674
4939
  isLoading: boolean;
4675
4940
  }
4676
4941
 
4942
+ /**
4943
+ * React hook that memoises the `classifyDCPMI` utility — derives an organisation's
4944
+ * Data Controller/Processor of Major Importance tier, annual registration fee,
4945
+ * and Compliance Audit Returns obligations under NDPC GAID 2025.
4946
+ */
4947
+ export declare function useDCPMI(input: DCPMIInput, options?: DCPMIClassificationOptions): DCPMIClassification;
4948
+
4677
4949
  /**
4678
4950
  * Convenience wrapper around `usePrivacyPolicy`. With `orgInfo` provided
4679
4951
  * and `autoGenerate` enabled (default), `policy` is non-null on the first