@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.
- package/next-env.d.ts +5 -0
- package/package.json +1 -1
- package/packages/ndpr-toolkit/dist/components/breach/BreachNotificationManager.d.ts +62 -0
- package/packages/ndpr-toolkit/dist/components/breach/BreachReportForm.d.ts +66 -0
- package/packages/ndpr-toolkit/dist/components/breach/BreachRiskAssessment.d.ts +50 -0
- package/packages/ndpr-toolkit/dist/components/breach/RegulatoryReportGenerator.d.ts +94 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentBanner.d.ts +79 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentManager.d.ts +73 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentStorage.d.ts +41 -0
- package/packages/ndpr-toolkit/dist/components/dpia/DPIAQuestionnaire.d.ts +70 -0
- package/packages/ndpr-toolkit/dist/components/dpia/DPIAReport.d.ts +40 -0
- package/packages/ndpr-toolkit/dist/components/dpia/StepIndicator.d.ts +64 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRDashboard.d.ts +58 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRRequestForm.d.ts +74 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRTracker.d.ts +56 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyExporter.d.ts +65 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyGenerator.d.ts +54 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyPreview.d.ts +71 -0
- package/packages/ndpr-toolkit/dist/hooks/useBreach.d.ts +97 -0
- package/packages/ndpr-toolkit/dist/hooks/useConsent.d.ts +63 -0
- package/packages/ndpr-toolkit/dist/hooks/useDPIA.d.ts +92 -0
- package/packages/ndpr-toolkit/dist/hooks/useDSR.d.ts +72 -0
- package/packages/ndpr-toolkit/dist/hooks/usePrivacyPolicy.d.ts +87 -0
- package/packages/ndpr-toolkit/dist/index.d.ts +31 -0
- package/packages/ndpr-toolkit/dist/index.esm.js +2 -0
- package/packages/ndpr-toolkit/dist/index.esm.js.map +1 -0
- package/packages/ndpr-toolkit/dist/index.js +2 -0
- package/packages/ndpr-toolkit/dist/index.js.map +1 -0
- package/packages/ndpr-toolkit/dist/setupTests.d.ts +2 -0
- package/packages/ndpr-toolkit/dist/types/breach.d.ts +239 -0
- package/packages/ndpr-toolkit/dist/types/consent.d.ts +95 -0
- package/packages/ndpr-toolkit/dist/types/dpia.d.ts +196 -0
- package/packages/ndpr-toolkit/dist/types/dsr.d.ts +162 -0
- package/packages/ndpr-toolkit/dist/types/privacy.d.ts +204 -0
- package/packages/ndpr-toolkit/dist/utils/breach.d.ts +14 -0
- package/packages/ndpr-toolkit/dist/utils/consent.d.ts +10 -0
- package/packages/ndpr-toolkit/dist/utils/dpia.d.ts +12 -0
- package/packages/ndpr-toolkit/dist/utils/dsr.d.ts +11 -0
- package/packages/ndpr-toolkit/dist/utils/privacy.d.ts +12 -0
- package/src/components/consent/ConsentBanner.tsx +82 -48
- package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +240 -129
- package/src/components/dpia/DPIAQuestionnaire.tsx +162 -122
- package/src/components/privacy-policy/PolicyGenerator.tsx +5 -5
- package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +103 -77
- package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +117 -63
- package/src/hooks/useConsent.ts +16 -10
- package/src/lib/consentService.ts +44 -37
- package/src/lib/dpiaQuestions.ts +139 -99
- package/src/lib/requestService.ts +21 -17
- package/src/types/index.ts +13 -8
- package/.claude/settings.local.json +0 -20
- package/.eslintrc.json +0 -10
- package/.github/workflows/ci.yml +0 -36
- package/.github/workflows/nextjs.yml +0 -104
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -4
- package/.lintstagedrc.js +0 -4
- package/.nvmrc +0 -1
- package/.versionrc +0 -17
- package/CLAUDE.md +0 -90
- package/commitlint.config.js +0 -36
- package/jest.config.js +0 -31
- package/jest.setup.js +0 -15
- package/packages/ndpr-toolkit/jest.config.js +0 -23
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentBanner.test.tsx +0 -119
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentManager.test.tsx +0 -122
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentStorage.test.tsx +0 -270
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRDashboard.test.tsx +0 -199
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRRequestForm.test.tsx +0 -224
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRTracker.test.tsx +0 -104
- package/packages/ndpr-toolkit/src/__tests__/hooks/useConsent.test.tsx +0 -161
- package/packages/ndpr-toolkit/src/__tests__/hooks/useDSR.test.tsx +0 -330
- package/packages/ndpr-toolkit/src/__tests__/utils/breach.test.ts +0 -149
- package/packages/ndpr-toolkit/src/__tests__/utils/consent.test.ts +0 -88
- package/packages/ndpr-toolkit/src/__tests__/utils/dpia.test.ts +0 -160
- package/packages/ndpr-toolkit/src/__tests__/utils/dsr.test.ts +0 -110
- package/packages/ndpr-toolkit/src/__tests__/utils/privacy.test.ts +0 -97
- package/src/__tests__/example.test.ts +0 -13
- package/src/__tests__/requestService.test.ts +0 -57
- package/src/app/docs/components/DocLayout.tsx +0 -267
- package/src/app/docs/components/breach-notification/page.tsx +0 -797
- package/src/app/docs/components/consent-management/page.tsx +0 -576
- package/src/app/docs/components/data-subject-rights/page.tsx +0 -511
- package/src/app/docs/components/dpia-questionnaire/layout.tsx +0 -15
- package/src/app/docs/components/dpia-questionnaire/metadata.ts +0 -31
- package/src/app/docs/components/dpia-questionnaire/page.tsx +0 -666
- package/src/app/docs/components/hooks/page.tsx +0 -305
- package/src/app/docs/components/page.tsx +0 -84
- package/src/app/docs/components/privacy-policy-generator/page.tsx +0 -634
- package/src/app/docs/guides/breach-notification-process/components/BestPractices.tsx +0 -123
- package/src/app/docs/guides/breach-notification-process/components/ImplementationSteps.tsx +0 -328
- package/src/app/docs/guides/breach-notification-process/components/Introduction.tsx +0 -28
- package/src/app/docs/guides/breach-notification-process/components/NotificationTimeline.tsx +0 -91
- package/src/app/docs/guides/breach-notification-process/components/Resources.tsx +0 -118
- package/src/app/docs/guides/breach-notification-process/page.tsx +0 -39
- package/src/app/docs/guides/conducting-dpia/page.tsx +0 -593
- package/src/app/docs/guides/data-subject-requests/page.tsx +0 -666
- package/src/app/docs/guides/managing-consent/page.tsx +0 -738
- package/src/app/docs/guides/ndpr-compliance-checklist/components/ComplianceChecklist.tsx +0 -296
- package/src/app/docs/guides/ndpr-compliance-checklist/components/ImplementationTools.tsx +0 -145
- package/src/app/docs/guides/ndpr-compliance-checklist/components/Introduction.tsx +0 -33
- package/src/app/docs/guides/ndpr-compliance-checklist/components/KeyRequirements.tsx +0 -99
- package/src/app/docs/guides/ndpr-compliance-checklist/components/Resources.tsx +0 -159
- package/src/app/docs/guides/ndpr-compliance-checklist/page.tsx +0 -38
- package/src/app/docs/guides/page.tsx +0 -67
- package/src/app/docs/layout.tsx +0 -15
- package/src/app/docs/metadata.ts +0 -31
- package/src/app/docs/page.tsx +0 -572
- package/src/components/docs/DocLayout.tsx +0 -289
- 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'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'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' 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'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'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
|
-
}
|