본문으로 건너뛰기
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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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-Skills3172026년 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-Skills3172026년 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-Skills3172026년 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-Skills3172026년 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-Skills3172026년 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-Skills3172026년 3월 17일 업데이트

mukul975의 스킬 모두 보기

이 스킬의 문제 신고