本文へ移動
cccskills
無料GitHub で公開

privacy-metrics-dashboard

Build privacy KPI dashboards tracking DSAR volume and response time, breach count and severity, DPIA completion rate, training coverage, and consent rates. Includes metric definitions, data collection patterns, visualization designs, and executive reporting templates for privacy program measurement.

インストール方法を見る

含まれるファイル(5)

  • SKILL.md17.9 KB
  • assets/template.md1.2 KB
  • references/standards.md834 B
  • references/workflows.md1.0 KB
  • scripts/process.py6.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Privacy Metrics Dashboard

Overview

A privacy metrics dashboard provides quantitative visibility into the effectiveness and maturity of an organization's privacy program. This skill defines the key privacy performance indicators (KPIs), data collection methods, visualization patterns, and reporting cadences needed to measure, monitor, and continuously improve privacy operations.

Core Privacy KPI Categories

1. Data Subject Access Requests (DSARs)

MetricDefinitionTargetFrequency
DSAR VolumeTotal DSARs received per periodTrend monitoringMonthly
DSAR by TypeBreakdown by right exercised (access, deletion, portability, rectification)N/A (distribution)Monthly
Average Response TimeMean calendar days from receipt to completion< 25 days (GDPR: 30 day limit)Monthly
Median Response TimeMedian calendar days from receipt to completion< 20 daysMonthly
P95 Response Time95th percentile response time< 28 daysMonthly
On-Time Completion Rate% completed within regulatory deadline> 98%Monthly
DSAR BacklogOpen DSARs at period end< 10% of monthly volumeWeekly
Automated Fulfillment Rate% of DSARs fulfilled without manual intervention> 60%Quarterly
Identity Verification Failure Rate% of DSARs where identity could not be verified< 5%Monthly
Cost per DSARAverage cost to process one DSARTrend reductionQuarterly

2. Data Breaches

MetricDefinitionTargetFrequency
Breach CountTotal confirmed breaches per period0 (minimize)Monthly
Breach Severity DistributionCount by severity level (low/medium/high/critical)No critical breachesMonthly
Mean Time to Detect (MTTD)Average hours from breach occurrence to detection< 24 hoursPer incident
Mean Time to Notify (MTTN)Average hours from detection to regulatory notification< 48 hours (GDPR: 72 hours)Per incident
Mean Time to Contain (MTTC)Average hours from detection to containment< 12 hoursPer incident
Records AffectedTotal data subject records affectedMinimizePer incident
Repeat Breach Rate% of breaches with same root cause as prior breach0%Quarterly
Regulatory FinesTotal fines imposed due to breaches$0Annual
Breach Simulation ScoreScore from most recent tabletop exercise> 85%Semi-annual

3. Privacy Impact Assessments (DPIAs)

MetricDefinitionTargetFrequency
DPIA Completion Rate% of high-risk processing with completed DPIA100%Quarterly
DPIA BacklogDPIAs required but not yet started0Monthly
Average DPIA DurationMean days from initiation to sign-off< 30 daysQuarterly
DPIA Findings Remediated% of identified risks with implemented mitigations> 90%Quarterly
DPIA Review Rate% of existing DPIAs reviewed within their review cycle> 95%Quarterly
New Processing Without DPIACount of new high-risk processing launched without DPIA0Monthly

4. Training and Awareness

MetricDefinitionTargetFrequency
Training Completion Rate% of staff who completed required privacy training> 95%Quarterly
Training Pass Rate% passing the assessment on first attempt> 85%Quarterly
New Hire Training TimeAverage days from start date to training completion< 14 daysMonthly
Specialist Certification Rate% of privacy team with professional certification> 80%Annual
Privacy Champion Coverage% of business units with designated privacy champion100%Quarterly
Phishing Simulation Pass Rate% of staff correctly identifying privacy-related phishing> 90%Quarterly

5. Consent Management

MetricDefinitionTargetFrequency
Consent Rate% of users providing consent (by purpose)Trend monitoringMonthly
Opt-in Rate% choosing to opt in to optional processingTrend monitoringMonthly
Opt-out/Withdrawal Rate% withdrawing previously given consent< 5% monthlyMonthly
Consent Freshness% of active consents collected within last 12 months> 70%Quarterly
Consent Collection Coverage% of data processing with documented consent/legal basis100%Quarterly
Cookie Consent Rate% of website visitors accepting cookies (by category)Trend monitoringMonthly
Consent Record Accuracy% of consent records matching actual processing> 99%Quarterly

6. Operational Metrics

MetricDefinitionTargetFrequency
Privacy Incidents ReportedInternal privacy incidents reported (not just breaches)Trend monitoringMonthly
Vendor Privacy Assessments Completed% of high-risk vendors assessed100%Quarterly
Data Inventory Completeness% of processing activities documented in ROPA> 95%Quarterly
Policy Acknowledgment Rate% of staff acknowledging updated privacy policies> 98%Per update
Privacy-by-Design Gate Pass Rate% of projects passing privacy review at design gate> 85%Quarterly
Regulatory Inquiry Response TimeAverage days to respond to regulatory inquiries< 5 daysPer event

Data Collection Architecture

Data Sources                    Collection Layer              Dashboard Layer
+------------------+
| DSAR Platform    |---+
+------------------+   |
                       |    +-------------------+    +-----------------------+
+------------------+   +--->|                   |    |                       |
| Breach Tracker   |------->| Data Integration  |--->| Visualization Engine  |
+------------------+   +--->| (ETL Pipeline)    |    | (Grafana / Tableau /  |
                       |    |                   |    |  Power BI / Metabase) |
+------------------+   |    +-------------------+    +-----------------------+
| DPIA Register    |---+           |                          |
+------------------+   |           v                          v
                       |    +-------------------+    +-----------------------+
+------------------+   |    | Metrics Database  |    | Alerting System       |
| LMS (Training)   |---+    | (Time-series /    |    | - Threshold breaches  |
+------------------+   |    |  PostgreSQL)      |    | - Trend deviations    |
                       |    +-------------------+    | - SLA warnings        |
+------------------+   |                              +-----------------------+
| Consent Platform |---+
+------------------+

Metric Collection Implementation

"""
Privacy metrics collection and aggregation engine.
Collects KPI data from multiple privacy operational systems
and computes dashboard-ready metrics.
"""

from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import Optional
import statistics


@dataclass
class DSARMetrics:
    period_start: datetime
    period_end: datetime
    total_received: int
    total_completed: int
    total_overdue: int
    avg_response_days: float
    median_response_days: float
    p95_response_days: float
    on_time_rate: float
    by_type: dict[str, int]
    backlog: int
    automated_rate: float


@dataclass
class BreachMetrics:
    period_start: datetime
    period_end: datetime
    total_breaches: int
    by_severity: dict[str, int]
    avg_detection_hours: float
    avg_notification_hours: float
    avg_containment_hours: float
    total_records_affected: int
    repeat_breach_count: int


@dataclass
class ConsentMetrics:
    period_start: datetime
    period_end: datetime
    total_consent_events: int
    opt_in_rate: float
    withdrawal_rate: float
    consent_rate_by_purpose: dict[str, float]
    cookie_acceptance_rate: float
    consent_freshness_pct: float


class PrivacyMetricsCollector:
    """
    Collect and compute privacy KPIs from operational data sources.
    """

    def __init__(self, dsar_repo, breach_repo, dpia_repo, training_repo, consent_repo):
        self.dsar_repo = dsar_repo
        self.breach_repo = breach_repo
        self.dpia_repo = dpia_repo
        self.training_repo = training_repo
        self.consent_repo = consent_repo

    def compute_dsar_metrics(
        self,
        start_date: datetime,
        end_date: datetime,
        regulatory_deadline_days: int = 30
    ) -> DSARMetrics:
        """Compute DSAR KPIs for a given period."""
        dsars = self.dsar_repo.get_by_period(start_date, end_date)

        completed = [d for d in dsars if d.status == "completed"]
        response_times = [
            (d.completed_at - d.received_at).days
            for d in completed
            if d.completed_at and d.received_at
        ]

        on_time = [
            d for d in completed
            if (d.completed_at - d.received_at).days <= regulatory_deadline_days
        ]

        automated = [d for d in completed if d.automated]
        open_dsars = [d for d in dsars if d.status in ("open", "in_progress")]

        by_type = {}
        for d in dsars:
            by_type[d.request_type] = by_type.get(d.request_type, 0) + 1

        return DSARMetrics(
            period_start=start_date,
            period_end=end_date,
            total_received=len(dsars),
            total_completed=len(completed),
            total_overdue=len(dsars) - len(on_time) - len(open_dsars),
            avg_response_days=statistics.mean(response_times) if response_times else 0,
            median_response_days=statistics.median(response_times) if response_times else 0,
            p95_response_days=(
                sorted(response_times)[int(len(response_times) * 0.95)]
                if len(response_times) >= 20 else
                max(response_times) if response_times else 0
            ),
            on_time_rate=len(on_time) / len(completed) if completed else 1.0,
            by_type=by_type,
            backlog=len(open_dsars),
            automated_rate=len(automated) / len(completed) if completed else 0,
        )

    def compute_breach_metrics(
        self,
        start_date: datetime,
        end_date: datetime
    ) -> BreachMetrics:
        """Compute breach KPIs for a given period."""
        breaches = self.breach_repo.get_by_period(start_date, end_date)

        by_severity = {}
        detection_hours = []
        notification_hours = []
        containment_hours = []
        total_records = 0

        for b in breaches:
            by_severity[b.severity] = by_severity.get(b.severity, 0) + 1
            total_records += b.records_affected or 0

            if b.detected_at and b.occurred_at:
                detection_hours.append(
                    (b.detected_at - b.occurred_at).total_seconds() / 3600
                )
            if b.notified_at and b.detected_at:
                notification_hours.append(
                    (b.notified_at - b.detected_at).total_seconds() / 3600
                )
            if b.contained_at and b.detected_at:
                containment_hours.append(
                    (b.contained_at - b.detected_at).total_seconds() / 3600
                )

        # Count repeat breaches (same root cause as previous)
        root_causes = [b.root_cause for b in breaches if b.root_cause]
        repeat_count = len(root_causes) - len(set(root_causes))

        return BreachMetrics(
            period_start=start_date,
            period_end=end_date,
            total_breaches=len(breaches),
            by_severity=by_severity,
            avg_detection_hours=statistics.mean(detection_hours) if detection_hours else 0,
            avg_notification_hours=statistics.mean(notification_hours) if notification_hours else 0,
            avg_containment_hours=statistics.mean(containment_hours) if containment_hours else 0,
            total_records_affected=total_records,
            repeat_breach_count=repeat_count,
        )

    def generate_executive_report(
        self,
        period_start: datetime,
        period_end: datetime
    ) -> dict:
        """
        Generate a comprehensive executive privacy report.
        Combines all KPI categories into a single report structure.
        """
        dsar = self.compute_dsar_metrics(period_start, period_end)
        breach = self.compute_breach_metrics(period_start, period_end)

        # Calculate overall privacy health score (0-100)
        health_components = []

        # DSAR component (25% weight)
        dsar_score = min(100, dsar.on_time_rate * 100)
        health_components.append(("DSAR Compliance", dsar_score, 0.25))

        # Breach component (30% weight)
        breach_score = 100 if breach.total_breaches == 0 else max(0, 100 - breach.total_breaches * 20)
        health_components.append(("Breach Prevention", breach_score, 0.30))

        # Response time component (20% weight)
        response_score = min(100, max(0, (30 - dsar.avg_response_days) / 30 * 100))
        health_components.append(("Response Timeliness", response_score, 0.20))

        # Detection speed component (25% weight)
        detection_score = min(100, max(0, (72 - breach.avg_detection_hours) / 72 * 100)) if breach.total_breaches > 0 else 100
        health_components.append(("Detection Speed", detection_score, 0.25))

        overall_score = sum(score * weight for _, score, weight in health_components)

        return {
            "period": {
                "start": period_start.isoformat(),
                "end": period_end.isoformat()
            },
            "overall_privacy_health_score": round(overall_score, 1),
            "health_rating": (
                "Excellent" if overall_score >= 90 else
                "Good" if overall_score >= 75 else
                "Needs Improvement" if overall_score >= 60 else
                "Critical"
            ),
            "components": {
                name: {"score": round(score, 1), "weight": f"{weight*100:.0f}%"}
                for name, score, weight in health_components
            },
            "dsar_summary": {
                "volume": dsar.total_received,
                "on_time_rate": f"{dsar.on_time_rate*100:.1f}%",
                "avg_response_days": round(dsar.avg_response_days, 1),
                "backlog": dsar.backlog
            },
            "breach_summary": {
                "count": breach.total_breaches,
                "severity_distribution": breach.by_severity,
                "avg_detection_hours": round(breach.avg_detection_hours, 1),
                "records_affected": breach.total_records_affected
            },
        }

Dashboard Visualization Patterns

Executive Summary View

PanelChart TypeMetrics DisplayedRefresh Rate
Privacy Health ScoreGauge (0-100)Overall weighted scoreDaily
DSAR Volume TrendLine chartMonthly DSAR count (12-month rolling)Daily
Breach TimelineEvent timelineBreaches by severity over timeReal-time
On-Time RateSingle stat with spark lineDSAR on-time completion %Daily
Training CoverageHorizontal barCompletion rate by departmentWeekly
Consent Rate TrendMulti-line chartOpt-in rate by purpose (6-month)Daily

Operational View

PanelChart TypeMetrics DisplayedRefresh Rate
Active DSARsTable with statusOpen requests with deadlinesHourly
DSAR AgingHistogramDistribution of open DSAR agesDaily
Response Time Box PlotBox plotResponse time distribution by monthDaily
Breach Detection FunnelFunnel chartDetection > Assessment > Notification > ResolutionPer event
DPIA PipelineKanbanDPIAs by status (draft, review, approved)Daily
Vendor Risk Heat MapHeat mapVendors by risk score and last assessment dateWeekly

Alerting Rules

AlertConditionSeverityRecipient
DSAR SLA WarningAny DSAR open > 21 daysWarningDSAR team
DSAR SLA BreachAny DSAR open > 28 daysCriticalCPO + Legal
Breach DetectedNew breach record createdCriticalIncident team + CPO
Training Compliance DropDepartment completion < 90%WarningHR + Privacy
Consent Rate AnomalyOpt-in rate drops > 20% in a weekWarningPrivacy + Marketing
DPIA OverdueDPIA review past scheduled dateWarningDPIA owner + CPO
Vendor Assessment DueHigh-risk vendor assessment > 11 months oldWarningProcurement + Privacy

Executive Reporting Template

Monthly Privacy Board Report Structure

  1. Privacy Health Score: Overall score with trend arrow
  2. Key Highlights: 3-5 bullet points on notable events
  3. DSAR Performance: Volume, on-time rate, top request types
  4. Breach Status: Count, severity, response times, lessons learned
  5. Compliance Posture: DPIA coverage, training rates, policy updates
  6. Risk Outlook: Emerging risks, regulatory developments, planned changes
  7. Resource Needs: Budget requests, headcount, tooling

References

  • IAPP Privacy Program Management Guide (CIPM Body of Knowledge)
  • NIST Privacy Framework — GV.MT Monitoring and Review
  • ISO/IEC 27701:2019 — Clause 9 (Performance Evaluation)
  • EDPB Guidelines on Data Breach Notification (WP250 rev.01)
  • Gartner Privacy Program Metrics Framework
  • ISACA Privacy Audit and Assurance Program

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Implements 42 CFR Part 2 protections for substance use disorder patient records. Covers written consent requirements stricter than HIPAA, re-disclosure prohibition, court order procedures, qualified service organization agreements, and 2024 amendments aligning Part 2 with HIPAA. Keywords: 42 CFR Part 2, substance use disorder, SUD records, re-disclosure, consent, Part 2 amendments.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

Guides assessment of third-country adequacy decisions under GDPR Article 45 for international data transfers. Covers the current EC adequacy decisions list, adequacy assessment criteria, partial adequacy handling, and monitoring of adequacy decision reviews. Keywords: adequacy decision, Article 45, third country, adequate protection, EC adequacy list.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

Implements age-gating mechanisms for online services to restrict access based on user age. Covers hard gates versus soft gates, neutral age prompts, re-verification triggers, circumvention prevention, and regulatory requirements under GDPR, COPPA, UK Online Safety Act, and DSA. Keywords: age gate, age restriction, neutral prompt, children, online services, access control.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

Evaluates and implements age estimation and verification technologies for online services. Covers facial age estimation, digital ID verification, self-declaration with risk assessment, AI-based age estimation, and the accuracy versus privacy tradeoff. Includes ICO guidance and euCONSENT framework. Keywords: age verification, age estimation, facial analysis, digital ID, children, online safety.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

Preparing EU AI Act compliance documentation for high-risk AI systems. Covers Annex III classification, technical documentation under Art. 11, conformity assessment, risk management systems, and CE marking requirements. Keywords: EU AI Act, high-risk AI, Annex III, conformity assessment, CE marking.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

Implements GDPR Art. 22 automated decision-making and AI Act Art. 14 human oversight requirements for AI systems. Covers identification of solely automated decisions, meaningful human intervention design, logic explanation mechanisms, and contestation procedures. Keywords: Art. 22, automated decision, human oversight, AI Act, profiling, contestation.

日本語の概要は準備中です。原文の説明を表示しています。

mukul975/Privacy-Data-Protection-Skills3032026年3月17日 更新

mukul975 のスキルをすべて見る

このスキルの問題を報告する