@tantainnovative/ndpr-toolkit 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/next-env.d.ts +5 -0
  2. package/package.json +1 -1
  3. package/packages/ndpr-toolkit/dist/components/breach/BreachNotificationManager.d.ts +62 -0
  4. package/packages/ndpr-toolkit/dist/components/breach/BreachReportForm.d.ts +66 -0
  5. package/packages/ndpr-toolkit/dist/components/breach/BreachRiskAssessment.d.ts +50 -0
  6. package/packages/ndpr-toolkit/dist/components/breach/RegulatoryReportGenerator.d.ts +94 -0
  7. package/packages/ndpr-toolkit/dist/components/consent/ConsentBanner.d.ts +79 -0
  8. package/packages/ndpr-toolkit/dist/components/consent/ConsentManager.d.ts +73 -0
  9. package/packages/ndpr-toolkit/dist/components/consent/ConsentStorage.d.ts +41 -0
  10. package/packages/ndpr-toolkit/dist/components/dpia/DPIAQuestionnaire.d.ts +70 -0
  11. package/packages/ndpr-toolkit/dist/components/dpia/DPIAReport.d.ts +40 -0
  12. package/packages/ndpr-toolkit/dist/components/dpia/StepIndicator.d.ts +64 -0
  13. package/packages/ndpr-toolkit/dist/components/dsr/DSRDashboard.d.ts +58 -0
  14. package/packages/ndpr-toolkit/dist/components/dsr/DSRRequestForm.d.ts +74 -0
  15. package/packages/ndpr-toolkit/dist/components/dsr/DSRTracker.d.ts +56 -0
  16. package/packages/ndpr-toolkit/dist/components/policy/PolicyExporter.d.ts +65 -0
  17. package/packages/ndpr-toolkit/dist/components/policy/PolicyGenerator.d.ts +54 -0
  18. package/packages/ndpr-toolkit/dist/components/policy/PolicyPreview.d.ts +71 -0
  19. package/packages/ndpr-toolkit/dist/hooks/useBreach.d.ts +97 -0
  20. package/packages/ndpr-toolkit/dist/hooks/useConsent.d.ts +63 -0
  21. package/packages/ndpr-toolkit/dist/hooks/useDPIA.d.ts +92 -0
  22. package/packages/ndpr-toolkit/dist/hooks/useDSR.d.ts +72 -0
  23. package/packages/ndpr-toolkit/dist/hooks/usePrivacyPolicy.d.ts +87 -0
  24. package/packages/ndpr-toolkit/dist/index.d.ts +31 -0
  25. package/packages/ndpr-toolkit/dist/index.esm.js +2 -0
  26. package/packages/ndpr-toolkit/dist/index.esm.js.map +1 -0
  27. package/packages/ndpr-toolkit/dist/index.js +2 -0
  28. package/packages/ndpr-toolkit/dist/index.js.map +1 -0
  29. package/packages/ndpr-toolkit/dist/setupTests.d.ts +2 -0
  30. package/packages/ndpr-toolkit/dist/types/breach.d.ts +239 -0
  31. package/packages/ndpr-toolkit/dist/types/consent.d.ts +95 -0
  32. package/packages/ndpr-toolkit/dist/types/dpia.d.ts +196 -0
  33. package/packages/ndpr-toolkit/dist/types/dsr.d.ts +162 -0
  34. package/packages/ndpr-toolkit/dist/types/privacy.d.ts +204 -0
  35. package/packages/ndpr-toolkit/dist/utils/breach.d.ts +14 -0
  36. package/packages/ndpr-toolkit/dist/utils/consent.d.ts +10 -0
  37. package/packages/ndpr-toolkit/dist/utils/dpia.d.ts +12 -0
  38. package/packages/ndpr-toolkit/dist/utils/dsr.d.ts +11 -0
  39. package/packages/ndpr-toolkit/dist/utils/privacy.d.ts +12 -0
  40. package/src/components/consent/ConsentBanner.tsx +82 -48
  41. package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +240 -129
  42. package/src/components/dpia/DPIAQuestionnaire.tsx +162 -122
  43. package/src/components/privacy-policy/PolicyGenerator.tsx +5 -5
  44. package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +103 -77
  45. package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +117 -63
  46. package/src/hooks/useConsent.ts +16 -10
  47. package/src/lib/consentService.ts +44 -37
  48. package/src/lib/dpiaQuestions.ts +139 -99
  49. package/src/lib/requestService.ts +21 -17
  50. package/src/types/index.ts +13 -8
  51. package/.claude/settings.local.json +0 -20
  52. package/.eslintrc.json +0 -10
  53. package/.github/workflows/ci.yml +0 -36
  54. package/.github/workflows/nextjs.yml +0 -104
  55. package/.husky/commit-msg +0 -4
  56. package/.husky/pre-commit +0 -4
  57. package/.lintstagedrc.js +0 -4
  58. package/.nvmrc +0 -1
  59. package/.versionrc +0 -17
  60. package/CLAUDE.md +0 -90
  61. package/commitlint.config.js +0 -36
  62. package/jest.config.js +0 -31
  63. package/jest.setup.js +0 -15
  64. package/packages/ndpr-toolkit/jest.config.js +0 -23
  65. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentBanner.test.tsx +0 -119
  66. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentManager.test.tsx +0 -122
  67. package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentStorage.test.tsx +0 -270
  68. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRDashboard.test.tsx +0 -199
  69. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRRequestForm.test.tsx +0 -224
  70. package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRTracker.test.tsx +0 -104
  71. package/packages/ndpr-toolkit/src/__tests__/hooks/useConsent.test.tsx +0 -161
  72. package/packages/ndpr-toolkit/src/__tests__/hooks/useDSR.test.tsx +0 -330
  73. package/packages/ndpr-toolkit/src/__tests__/utils/breach.test.ts +0 -149
  74. package/packages/ndpr-toolkit/src/__tests__/utils/consent.test.ts +0 -88
  75. package/packages/ndpr-toolkit/src/__tests__/utils/dpia.test.ts +0 -160
  76. package/packages/ndpr-toolkit/src/__tests__/utils/dsr.test.ts +0 -110
  77. package/packages/ndpr-toolkit/src/__tests__/utils/privacy.test.ts +0 -97
  78. package/src/__tests__/example.test.ts +0 -13
  79. package/src/__tests__/requestService.test.ts +0 -57
  80. package/src/app/docs/components/DocLayout.tsx +0 -267
  81. package/src/app/docs/components/breach-notification/page.tsx +0 -797
  82. package/src/app/docs/components/consent-management/page.tsx +0 -576
  83. package/src/app/docs/components/data-subject-rights/page.tsx +0 -511
  84. package/src/app/docs/components/dpia-questionnaire/layout.tsx +0 -15
  85. package/src/app/docs/components/dpia-questionnaire/metadata.ts +0 -31
  86. package/src/app/docs/components/dpia-questionnaire/page.tsx +0 -666
  87. package/src/app/docs/components/hooks/page.tsx +0 -305
  88. package/src/app/docs/components/page.tsx +0 -84
  89. package/src/app/docs/components/privacy-policy-generator/page.tsx +0 -634
  90. package/src/app/docs/guides/breach-notification-process/components/BestPractices.tsx +0 -123
  91. package/src/app/docs/guides/breach-notification-process/components/ImplementationSteps.tsx +0 -328
  92. package/src/app/docs/guides/breach-notification-process/components/Introduction.tsx +0 -28
  93. package/src/app/docs/guides/breach-notification-process/components/NotificationTimeline.tsx +0 -91
  94. package/src/app/docs/guides/breach-notification-process/components/Resources.tsx +0 -118
  95. package/src/app/docs/guides/breach-notification-process/page.tsx +0 -39
  96. package/src/app/docs/guides/conducting-dpia/page.tsx +0 -593
  97. package/src/app/docs/guides/data-subject-requests/page.tsx +0 -666
  98. package/src/app/docs/guides/managing-consent/page.tsx +0 -738
  99. package/src/app/docs/guides/ndpr-compliance-checklist/components/ComplianceChecklist.tsx +0 -296
  100. package/src/app/docs/guides/ndpr-compliance-checklist/components/ImplementationTools.tsx +0 -145
  101. package/src/app/docs/guides/ndpr-compliance-checklist/components/Introduction.tsx +0 -33
  102. package/src/app/docs/guides/ndpr-compliance-checklist/components/KeyRequirements.tsx +0 -99
  103. package/src/app/docs/guides/ndpr-compliance-checklist/components/Resources.tsx +0 -159
  104. package/src/app/docs/guides/ndpr-compliance-checklist/page.tsx +0 -38
  105. package/src/app/docs/guides/page.tsx +0 -67
  106. package/src/app/docs/layout.tsx +0 -15
  107. package/src/app/docs/metadata.ts +0 -31
  108. package/src/app/docs/page.tsx +0 -572
  109. package/src/components/docs/DocLayout.tsx +0 -289
  110. package/src/components/docs/index.ts +0 -2
@@ -1,593 +0,0 @@
1
- 'use client';
2
-
3
- import Link from 'next/link';
4
- import { DocLayout } from '@/components/docs/DocLayout';
5
- import { Button } from '@/components/ui/Button';
6
- import { Card, CardContent } from '@/components/ui/Card';
7
-
8
- export default function ConductingDPIAGuide() {
9
- return (
10
- <DocLayout
11
- title="Conducting a Data Protection Impact Assessment"
12
- description="Step-by-step guide to conducting a DPIA using the NDPR Toolkit"
13
- >
14
- <div className="flex mb-6 space-x-2">
15
- <Button asChild variant="outline" size="sm">
16
- <Link href="/demo/dpia">
17
- View DPIA Demo
18
- </Link>
19
- </Button>
20
- <Button asChild variant="outline" size="sm">
21
- <Link href="/docs/components/dpia-questionnaire">
22
- DPIA Component Docs
23
- </Link>
24
- </Button>
25
- </div>
26
-
27
- <section id="introduction" className="mb-8">
28
- <h2 className="text-2xl font-bold mb-4">Introduction</h2>
29
- <p className="mb-4">
30
- A Data Protection Impact Assessment (DPIA) is a process designed to help organizations identify and minimize
31
- the data protection risks of a project. Under the Nigeria Data Protection Regulation (NDPR), organizations
32
- are required to conduct DPIAs for processing activities that are likely to result in a high risk to the
33
- rights and freedoms of individuals.
34
- </p>
35
- <div className="bg-blue-50 dark:bg-blue-900/20 p-4 rounded-md">
36
- <h4 className="text-blue-800 dark:text-blue-200 font-medium mb-2">When is a DPIA Required?</h4>
37
- <p className="text-blue-700 dark:text-blue-300 text-sm mb-0">
38
- Under the NDPR, a DPIA is mandatory when processing is likely to result in a high risk to individuals,
39
- particularly when using new technologies. This includes:
40
- </p>
41
- <ul className="list-disc pl-6 mt-2 text-blue-700 dark:text-blue-300 text-sm">
42
- <li>Systematic and extensive profiling with significant effects</li>
43
- <li>Processing of special categories of data on a large scale</li>
44
- <li>Systematic monitoring of publicly accessible areas</li>
45
- <li>Processing involving sensitive personal data</li>
46
- <li>Processing data relating to vulnerable subjects (e.g., children)</li>
47
- </ul>
48
- </div>
49
- </section>
50
-
51
- <section id="dpia-process" className="mb-8">
52
- <h2 className="text-2xl font-bold mb-4">The DPIA Process</h2>
53
- <p className="mb-4">
54
- The NDPR Toolkit provides a structured approach to conducting DPIAs through the DPIAQuestionnaire component.
55
- Here&apos;s how to implement a complete DPIA process in your organization:
56
- </p>
57
-
58
- <div className="relative border-l-2 border-blue-500 pl-8 pb-8 space-y-10">
59
- <div className="relative">
60
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
61
- <span className="text-white font-bold text-sm">1</span>
62
- </div>
63
- <h3 className="text-xl font-bold">Identify the Need for a DPIA</h3>
64
- <p className="text-gray-600 dark:text-gray-300 mt-2">
65
- Before starting a DPIA, determine whether your processing activity requires one. Consider the nature, scope,
66
- context, and purposes of the processing, as well as the potential risks to individuals.
67
- </p>
68
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
69
- <h4 className="font-medium mb-2">Implementation Tip</h4>
70
- <p className="text-sm">
71
- Create a simple screening questionnaire to help project managers determine if a DPIA is needed.
72
- This can be implemented using the NDPR Toolkit&apos;s form components.
73
- </p>
74
- </div>
75
- </div>
76
-
77
- <div className="relative">
78
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
79
- <span className="text-white font-bold text-sm">2</span>
80
- </div>
81
- <h3 className="text-xl font-bold">Describe the Processing</h3>
82
- <p className="text-gray-600 dark:text-gray-300 mt-2">
83
- Document the nature, scope, context, and purposes of the processing. Include:
84
- </p>
85
- <ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
86
- <li>How data is collected, used, stored, and deleted</li>
87
- <li>Who has access to the data</li>
88
- <li>Who the data is shared with</li>
89
- <li>The types of personal data processed</li>
90
- <li>The retention periods for the data</li>
91
- </ul>
92
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
93
- <h4 className="font-medium mb-2">Code Example</h4>
94
- <div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
95
- <pre><code>{`import { DPIAQuestionnaire } from '@tantainnovative/ndpr-toolkit';
96
-
97
- // Define the processing description questions
98
- const processingQuestions = [
99
- {
100
- id: 'dataTypes',
101
- question: 'What types of personal data will be processed?',
102
- type: 'checkbox',
103
- options: [
104
- { value: 'basic', label: 'Basic contact information' },
105
- { value: 'financial', label: 'Financial information' },
106
- { value: 'health', label: 'Health information' },
107
- { value: 'biometric', label: 'Biometric data' },
108
- { value: 'location', label: 'Location data' },
109
- { value: 'other', label: 'Other' }
110
- ]
111
- },
112
- {
113
- id: 'processingPurpose',
114
- question: 'What is the purpose of the processing?',
115
- type: 'textarea'
116
- },
117
- {
118
- id: 'dataSubjects',
119
- question: 'Who are the data subjects?',
120
- type: 'checkbox',
121
- options: [
122
- { value: 'customers', label: 'Customers' },
123
- { value: 'employees', label: 'Employees' },
124
- { value: 'children', label: 'Children' },
125
- { value: 'patients', label: 'Patients' },
126
- { value: 'other', label: 'Other' }
127
- ]
128
- }
129
- ];
130
-
131
- function ProcessingDescriptionStep() {
132
- const handleSubmit = (answers) => {
133
- // Save answers and proceed to next step
134
- console.log(answers);
135
- };
136
-
137
- return (
138
- <div>
139
- <h2>Step 2: Describe the Processing</h2>
140
- <DPIAQuestionnaire
141
- questions={processingQuestions}
142
- onSubmit={handleSubmit}
143
- />
144
- </div>
145
- );
146
- }`}</code></pre>
147
- </div>
148
- </div>
149
- </div>
150
-
151
- <div className="relative">
152
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
153
- <span className="text-white font-bold text-sm">3</span>
154
- </div>
155
- <h3 className="text-xl font-bold">Identify and Assess Risks</h3>
156
- <p className="text-gray-600 dark:text-gray-300 mt-2">
157
- Identify potential risks to individuals&apos; rights and freedoms. For each risk, assess:
158
- </p>
159
- <ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
160
- <li>The likelihood of the risk occurring (low, medium, high)</li>
161
- <li>The severity of the impact if it does occur (low, medium, high)</li>
162
- <li>The overall risk level (combination of likelihood and severity)</li>
163
- </ul>
164
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
165
- <h4 className="font-medium mb-2">Code Example</h4>
166
- <div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
167
- <pre><code>{`import { DPIAQuestionnaire } from '@tantainnovative/ndpr-toolkit';
168
-
169
- // Define risk assessment questions
170
- const riskQuestions = [
171
- {
172
- id: 'unauthorizedAccess',
173
- question: 'Risk: Unauthorized access to personal data',
174
- type: 'riskAssessment',
175
- subQuestions: [
176
- {
177
- id: 'likelihood',
178
- question: 'Likelihood of occurrence',
179
- type: 'select',
180
- options: [
181
- { value: 'low', label: 'Low' },
182
- { value: 'medium', label: 'Medium' },
183
- { value: 'high', label: 'High' }
184
- ]
185
- },
186
- {
187
- id: 'impact',
188
- question: 'Potential impact',
189
- type: 'select',
190
- options: [
191
- { value: 'low', label: 'Low' },
192
- { value: 'medium', label: 'Medium' },
193
- { value: 'high', label: 'High' }
194
- ]
195
- },
196
- {
197
- id: 'mitigation',
198
- question: 'Possible mitigation measures',
199
- type: 'textarea'
200
- }
201
- ]
202
- },
203
- // Add more risks as needed
204
- ];
205
-
206
- function RiskAssessmentStep() {
207
- const handleSubmit = (answers) => {
208
- // Calculate overall risk levels and proceed to next step
209
- console.log(answers);
210
- };
211
-
212
- return (
213
- <div>
214
- <h2>Step 3: Identify and Assess Risks</h2>
215
- <DPIAQuestionnaire
216
- questions={riskQuestions}
217
- onSubmit={handleSubmit}
218
- />
219
- </div>
220
- );
221
- }`}</code></pre>
222
- </div>
223
- </div>
224
- </div>
225
-
226
- <div className="relative">
227
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
228
- <span className="text-white font-bold text-sm">4</span>
229
- </div>
230
- <h3 className="text-xl font-bold">Identify Measures to Mitigate Risks</h3>
231
- <p className="text-gray-600 dark:text-gray-300 mt-2">
232
- For each identified risk, determine measures to reduce or eliminate the risk. Consider:
233
- </p>
234
- <ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
235
- <li>Technical measures (e.g., encryption, access controls)</li>
236
- <li>Organizational measures (e.g., policies, training)</li>
237
- <li>Legal measures (e.g., contracts with processors)</li>
238
- </ul>
239
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
240
- <h4 className="font-medium mb-2">Implementation Tip</h4>
241
- <p className="text-sm">
242
- Create a library of common mitigation measures that can be reused across DPIAs.
243
- This helps ensure consistency and saves time when conducting multiple assessments.
244
- </p>
245
- </div>
246
- </div>
247
-
248
- <div className="relative">
249
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
250
- <span className="text-white font-bold text-sm">5</span>
251
- </div>
252
- <h3 className="text-xl font-bold">Document the DPIA</h3>
253
- <p className="text-gray-600 dark:text-gray-300 mt-2">
254
- Compile all the information gathered in the previous steps into a comprehensive DPIA report. The report should include:
255
- </p>
256
- <ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
257
- <li>A description of the processing operations</li>
258
- <li>The purpose of the processing</li>
259
- <li>An assessment of the necessity and proportionality of the processing</li>
260
- <li>The risks to individuals</li>
261
- <li>The measures implemented to address those risks</li>
262
- <li>The outcome of the assessment (whether to proceed with the processing)</li>
263
- </ul>
264
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
265
- <h4 className="font-medium mb-2">Code Example</h4>
266
- <div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
267
- <pre><code>{`import { DPIAReport } from '@tantainnovative/ndpr-toolkit';
268
-
269
- function GenerateDPIAReport({ dpiaData }) {
270
- const handleExport = (format) => {
271
- // Export the DPIA report in the specified format
272
- console.log(\`Exporting DPIA report in \${format} format\`);
273
- };
274
-
275
- return (
276
- <div>
277
- <h2>DPIA Report</h2>
278
- <DPIAReport
279
- data={dpiaData}
280
- onExport={handleExport}
281
- exportFormats={['pdf', 'docx', 'html']}
282
- />
283
- </div>
284
- );
285
- }`}</code></pre>
286
- </div>
287
- </div>
288
- </div>
289
-
290
- <div className="relative">
291
- <div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
292
- <span className="text-white font-bold text-sm">6</span>
293
- </div>
294
- <h3 className="text-xl font-bold">Implement and Review</h3>
295
- <p className="text-gray-600 dark:text-gray-300 mt-2">
296
- Implement the identified mitigation measures and regularly review the DPIA, especially when there are changes to the processing activity.
297
- </p>
298
- <div className="mt-4 bg-gray-100 dark:bg-gray-800 p-4 rounded-md">
299
- <h4 className="font-medium mb-2">Implementation Tip</h4>
300
- <p className="text-sm">
301
- Set up a review schedule for each DPIA, with automatic reminders for stakeholders.
302
- The NDPR Toolkit can be integrated with your calendar system to facilitate this.
303
- </p>
304
- </div>
305
- </div>
306
- </div>
307
- </section>
308
-
309
- <section id="complete-implementation" className="mb-8">
310
- <h2 className="text-2xl font-bold mb-4">Complete Implementation Example</h2>
311
- <p className="mb-4">
312
- Here&apos;s a complete example of how to implement a multi-step DPIA process using the NDPR Toolkit:
313
- </p>
314
- <div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
315
- <pre><code>{`import { useState } from 'react';
316
- import {
317
- DPIAQuestionnaire,
318
- DPIAReport,
319
- StepIndicator
320
- } from '@tantainnovative/ndpr-toolkit';
321
-
322
- // Import question sets for each step
323
- import {
324
- screeningQuestions,
325
- processingQuestions,
326
- riskQuestions,
327
- mitigationQuestions
328
- } from './dpia-questions';
329
-
330
- function DPIAProcess() {
331
- const [currentStep, setCurrentStep] = useState(0);
332
- const [dpiaData, setDpiaData] = useState({
333
- screening: null,
334
- processing: null,
335
- risks: null,
336
- mitigation: null
337
- });
338
-
339
- const steps = [
340
- { id: 'screening', label: 'Screening' },
341
- { id: 'processing', label: 'Processing Description' },
342
- { id: 'risks', label: 'Risk Assessment' },
343
- { id: 'mitigation', label: 'Mitigation Measures' },
344
- { id: 'report', label: 'DPIA Report' }
345
- ];
346
-
347
- const handleScreeningSubmit = (answers) => {
348
- setDpiaData({ ...dpiaData, screening: answers });
349
-
350
- // Check if a DPIA is required based on screening answers
351
- const dpiaRequired = answers.some(answer =>
352
- answer.id === 'highRiskProcessing' && answer.value === true
353
- );
354
-
355
- if (dpiaRequired) {
356
- setCurrentStep(1); // Proceed to processing description
357
- } else {
358
- // Skip to final step with a simplified report
359
- setCurrentStep(4);
360
- }
361
- };
362
-
363
- const handleProcessingSubmit = (answers) => {
364
- setDpiaData({ ...dpiaData, processing: answers });
365
- setCurrentStep(2); // Proceed to risk assessment
366
- };
367
-
368
- const handleRiskSubmit = (answers) => {
369
- setDpiaData({ ...dpiaData, risks: answers });
370
- setCurrentStep(3); // Proceed to mitigation measures
371
- };
372
-
373
- const handleMitigationSubmit = (answers) => {
374
- setDpiaData({ ...dpiaData, mitigation: answers });
375
- setCurrentStep(4); // Proceed to DPIA report
376
- };
377
-
378
- const handleExport = (format) => {
379
- // Export the DPIA report
380
- console.log(\`Exporting DPIA report in \${format} format\`);
381
- };
382
-
383
- return (
384
- <div className="max-w-4xl mx-auto">
385
- <h1 className="text-2xl font-bold mb-6">Data Protection Impact Assessment</h1>
386
-
387
- <StepIndicator
388
- steps={steps}
389
- currentStep={currentStep}
390
- onStepClick={(step) => {
391
- // Only allow navigation to completed steps
392
- if (step < currentStep) {
393
- setCurrentStep(step);
394
- }
395
- }}
396
- />
397
-
398
- <div className="mt-8">
399
- {currentStep === 0 && (
400
- <div>
401
- <h2 className="text-xl font-bold mb-4">Step 1: DPIA Screening</h2>
402
- <p className="mb-4">
403
- Answer the following questions to determine if a DPIA is required for your processing activity.
404
- </p>
405
- <DPIAQuestionnaire
406
- questions={screeningQuestions}
407
- onSubmit={handleScreeningSubmit}
408
- />
409
- </div>
410
- )}
411
-
412
- {currentStep === 1 && (
413
- <div>
414
- <h2 className="text-xl font-bold mb-4">Step 2: Processing Description</h2>
415
- <p className="mb-4">
416
- Provide details about the processing activity.
417
- </p>
418
- <DPIAQuestionnaire
419
- questions={processingQuestions}
420
- onSubmit={handleProcessingSubmit}
421
- />
422
- </div>
423
- )}
424
-
425
- {currentStep === 2 && (
426
- <div>
427
- <h2 className="text-xl font-bold mb-4">Step 3: Risk Assessment</h2>
428
- <p className="mb-4">
429
- Identify and assess the risks associated with the processing activity.
430
- </p>
431
- <DPIAQuestionnaire
432
- questions={riskQuestions}
433
- onSubmit={handleRiskSubmit}
434
- />
435
- </div>
436
- )}
437
-
438
- {currentStep === 3 && (
439
- <div>
440
- <h2 className="text-xl font-bold mb-4">Step 4: Mitigation Measures</h2>
441
- <p className="mb-4">
442
- Identify measures to mitigate the identified risks.
443
- </p>
444
- <DPIAQuestionnaire
445
- questions={mitigationQuestions}
446
- onSubmit={handleMitigationSubmit}
447
- />
448
- </div>
449
- )}
450
-
451
- {currentStep === 4 && (
452
- <div>
453
- <h2 className="text-xl font-bold mb-4">DPIA Report</h2>
454
- <p className="mb-4">
455
- Review and export the DPIA report.
456
- </p>
457
- <DPIAReport
458
- data={dpiaData}
459
- onExport={handleExport}
460
- exportFormats={['pdf', 'docx', 'html']}
461
- />
462
- </div>
463
- )}
464
- </div>
465
- </div>
466
- );
467
- }`}</code></pre>
468
- </div>
469
- </section>
470
-
471
- <section id="best-practices" className="mb-8">
472
- <h2 className="text-2xl font-bold mb-4">Best Practices</h2>
473
- <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
474
- <Card>
475
- <CardContent className="p-6">
476
- <h3 className="font-bold text-lg mb-2">Start Early</h3>
477
- <p className="text-gray-600 dark:text-gray-300 text-sm">
478
- Begin the DPIA process as early as possible in the project lifecycle, ideally during the planning phase.
479
- This allows you to identify and address risks before significant resources are committed.
480
- </p>
481
- </CardContent>
482
- </Card>
483
-
484
- <Card>
485
- <CardContent className="p-6">
486
- <h3 className="font-bold text-lg mb-2">Involve Stakeholders</h3>
487
- <p className="text-gray-600 dark:text-gray-300 text-sm">
488
- Include relevant stakeholders in the DPIA process, such as IT, legal, business units, and the Data Protection Officer.
489
- Different perspectives help identify risks that might otherwise be overlooked.
490
- </p>
491
- </CardContent>
492
- </Card>
493
-
494
- <Card>
495
- <CardContent className="p-6">
496
- <h3 className="font-bold text-lg mb-2">Be Thorough</h3>
497
- <p className="text-gray-600 dark:text-gray-300 text-sm">
498
- don&apos;t rush the DPIA process. Take the time to thoroughly identify and assess all potential risks.
499
- A comprehensive DPIA is more effective at protecting both individuals and your organization.
500
- </p>
501
- </CardContent>
502
- </Card>
503
-
504
- <Card>
505
- <CardContent className="p-6">
506
- <h3 className="font-bold text-lg mb-2">Document Everything</h3>
507
- <p className="text-gray-600 dark:text-gray-300 text-sm">
508
- Maintain detailed documentation of the DPIA process, including all decisions made and the rationale behind them.
509
- This is essential for demonstrating compliance with the NDPR.
510
- </p>
511
- </CardContent>
512
- </Card>
513
-
514
- <Card>
515
- <CardContent className="p-6">
516
- <h3 className="font-bold text-lg mb-2">Regular Reviews</h3>
517
- <p className="text-gray-600 dark:text-gray-300 text-sm">
518
- Review and update DPIAs regularly, especially when there are changes to the processing activity or the associated risks.
519
- Data protection is an ongoing process, not a one-time exercise.
520
- </p>
521
- </CardContent>
522
- </Card>
523
-
524
- <Card>
525
- <CardContent className="p-6">
526
- <h3 className="font-bold text-lg mb-2">Integrate with Existing Processes</h3>
527
- <p className="text-gray-600 dark:text-gray-300 text-sm">
528
- Integrate the DPIA process with existing project management and risk assessment processes in your organization.
529
- This helps ensure that DPIAs become a standard part of your operations.
530
- </p>
531
- </CardContent>
532
- </Card>
533
- </div>
534
- </section>
535
-
536
- <section id="ndpr-compliance" className="mb-8">
537
- <h2 className="text-2xl font-bold mb-4">NDPR Compliance Considerations</h2>
538
- <p className="mb-4">
539
- When conducting a DPIA to comply with the NDPR, keep the following considerations in mind:
540
- </p>
541
- <ul className="list-disc pl-6 space-y-2">
542
- <li>
543
- <strong>Documentation:</strong> The NDPR requires organizations to document their DPIAs as part of their accountability obligations.
544
- </li>
545
- <li>
546
- <strong>DPO Involvement:</strong> If your organization has a Data Protection Officer (DPO), they should be involved in the DPIA process.
547
- </li>
548
- <li>
549
- <strong>Consultation:</strong> In some cases, you may need to consult with NITDA before proceeding with high-risk processing.
550
- </li>
551
- <li>
552
- <strong>Transparency:</strong> Consider publishing a summary of your DPIA to demonstrate transparency to data subjects.
553
- </li>
554
- <li>
555
- <strong>Ongoing Compliance:</strong> Use the DPIA as a tool for ongoing compliance, not just a one-time assessment.
556
- </li>
557
- </ul>
558
- </section>
559
-
560
- <section id="resources" className="mb-8">
561
- <h2 className="text-2xl font-bold mb-4">Additional Resources</h2>
562
- <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
563
- <Card>
564
- <CardContent className="p-4">
565
- <h3 className="font-medium text-gray-900 dark:text-white mb-2">NDPR Implementation Framework</h3>
566
- <p className="text-gray-600 dark:text-gray-300 text-sm mb-3">
567
- Official guidance on implementing the NDPR, including DPIA requirements.
568
- </p>
569
- <Button asChild variant="outline" size="sm">
570
- <a href="https://nitda.gov.ng/wp-content/uploads/2020/01/NDPR-Implementation-Framework.pdf" target="_blank" rel="noopener noreferrer">
571
- View Framework
572
- </a>
573
- </Button>
574
- </CardContent>
575
- </Card>
576
- <Card>
577
- <CardContent className="p-4">
578
- <h3 className="font-medium text-gray-900 dark:text-white mb-2">DPIA Component Documentation</h3>
579
- <p className="text-gray-600 dark:text-gray-300 text-sm mb-3">
580
- Technical documentation for the DPIA Questionnaire component.
581
- </p>
582
- <Button asChild variant="outline" size="sm">
583
- <Link href="/docs/components/dpia-questionnaire">
584
- View Documentation
585
- </Link>
586
- </Button>
587
- </CardContent>
588
- </Card>
589
- </div>
590
- </section>
591
- </DocLayout>
592
- );
593
- }