Lawful Basis Tracker

Track and document the lawful basis for every data processing activity under NDPA 2023

Overview

The Lawful Basis Tracker component helps organisations identify, document, and maintain records of the lawful basis for each data processing activity. Under the Nigeria Data Protection Act 2023 (NDPA), every processing of personal data must be grounded in a valid lawful basis as defined in Section 25.

NDPA Section 25 — Lawful Basis for Processing

The NDPA 2023 requires that personal data shall only be processed if at least one of the following applies: consent of the data subject, performance of a contract, compliance with a legal obligation, protection of vital interests, performance of a task carried out in the public interest, or legitimate interests of the controller (subject to the rights of the data subject).

Installation

Install the NDPR Toolkit package which includes the Lawful Basis Tracker components:

pnpm add @tantainnovative/ndpr-toolkit

Import

Import from the main package:

import { LawfulBasisTracker, useLawfulBasis } from '@tantainnovative/ndpr-toolkit';

// Utility functions
import {
  validateProcessingActivity,
  getLawfulBasisDescription,
  assessComplianceGaps,
  generateLawfulBasisSummary,
} from '@tantainnovative/ndpr-toolkit';

Components

The Lawful Basis Tracker provides a component and hook for managing lawful basis records:

LawfulBasisTracker

A comprehensive component for tracking and documenting the lawful basis for each data processing activity. It provides a UI for adding, editing, and reviewing processing activities with their associated lawful basis.

import { LawfulBasisTracker, useLawfulBasis } from '@tantainnovative/ndpr-toolkit';

function LawfulBasisPage() {
  const { activities, addActivity, updateActivity, archiveActivity } = useLawfulBasis();

  return (
    <LawfulBasisTracker
      activities={activities}
      onAdd={addActivity}
      onUpdate={updateActivity}
      onArchive={archiveActivity}
    />
  );
}

API Reference

LawfulBasisTracker Props

PropTypeDefaultDescription
activitiesProcessingActivity[]RequiredList of processing activities to display
onAdd(activity: Omit<ProcessingActivity, 'id' | 'createdAt' | 'updatedAt'>) => voidundefinedCallback when a new activity is created
onUpdate(id: string, updates: Partial<ProcessingActivity>) => voidundefinedCallback when an activity is updated
onArchive(id: string) => voidundefinedCallback when an activity is archived
titlestring"Lawful Basis Tracker"Title displayed on the tracker
descriptionstringNDPA Section 25 defaultDescription text displayed on the tracker
classNamestringundefinedCustom CSS class for the tracker container
buttonClassNamestringundefinedCustom CSS class for buttons
showSummarybooleantrueWhether to show the compliance summary at the top
showComplianceGapsbooleantrueWhether to show compliance gap alerts
classNamesLawfulBasisTrackerClassNamesundefinedOverride class names for individual sections; takes priority over className / buttonClassName
unstyledbooleanundefinedWhen true, all default styling is removed so consumers can style from scratch using classNames

Lawful Basis Types

// The six lawful bases for processing personal data per NDPA Section 25(1)
type LawfulBasis =
  | 'consent'              // Section 25(1)(a)
  | 'contract'             // Section 25(1)(b)
  | 'legal_obligation'     // Section 25(1)(c)
  | 'vital_interests'      // Section 25(1)(d)
  | 'public_interest'      // Section 25(1)(e)
  | 'legitimate_interests'; // Section 25(1)(f)

interface ProcessingActivity {
  id: string;
  name: string;
  description: string;
  lawfulBasis: LawfulBasis;
  lawfulBasisJustification: string;
  dataCategories: string[];
  involvesSensitiveData: boolean;
  sensitiveDataCondition?: SensitiveDataCondition;
  dataSubjectCategories: string[];
  purposes: string[];
  retentionPeriod: string;
  retentionJustification?: string;
  recipients?: string[];
  crossBorderTransfer: boolean;
  createdAt: number;
  updatedAt: number;
  reviewDate?: number;
  status: 'active' | 'inactive' | 'under_review' | 'archived';
  dpoApproval?: {
    approved: boolean;
    approvedBy: string;
    approvedAt: number;
    notes?: string;
  };
}

Lite variant (read-only)

For read-only surfaces such as dashboards and audit pages, use LawfulBasisTrackerLite from the new /lawful-basis/lite subpath. It renders the same list-and-summary view as the Full component without any Add, Edit, Archive, or CSV-export affordances — and ships at 12.7 KB instead of 36.7 KB (a 65% saving, minified and pre-gzip).

import { LawfulBasisTrackerLite } from '@tantainnovative/ndpr-toolkit/lawful-basis/lite';

<LawfulBasisTrackerLite
  activities={activities}
  onActivityClick={(activity) => router.push(`/lawful-basis/${activity.id}`)}
/>

See the Lite vs Full Managers guide for migration notes, side-by-side examples, and the full bundle-size table.

Best Practices

  • Assess Before Processing: Determine and document the lawful basis before starting any new processing activity.
  • Review Regularly: Periodically review lawful basis assessments, especially when the nature of processing changes.
  • Be Specific: Do not rely on a blanket lawful basis for all activities; each processing purpose should have its own documented basis.
  • Consent as Last Resort: Where another lawful basis applies, consider using it instead of consent, as consent can be withdrawn at any time.
  • Keep Records: Maintain audit trails of all assessments for regulatory accountability under the NDPA.

Need Help?

GitHub Issues

Report bugs or request features on our GitHub repository.

View Issues

NDPA Resources

Learn more about NDPA 2023 compliance requirements.

NDPC Website