new-site/scripts/workers/services/privacy_policy.py
justin f8cd37ac8c Initial commit — Performance West telecom compliance platform
Includes: API (Express/TypeScript), Astro site, Python workers,
document generators, FCC compliance tools, Canada CRTC formation,
Ansible infrastructure, and deployment scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 06:54:22 -05:00

66 lines
3.2 KiB
Python

"""Privacy Policy Generator handler (template-based).
Generates a comprehensive privacy policy document by filling a DOCX template
with customer-specific information. Does not require LLM generation — uses
pre-written policy sections with variable substitution.
"""
from __future__ import annotations
import os
from datetime import datetime
from .base_handler import BaseServiceHandler
class PrivacyPolicyHandler(BaseServiceHandler):
SERVICE_SLUG = "privacy-policy"
SERVICE_NAME = "Privacy Policy Generation"
TEMPLATE_NAME = "privacy_policy_template.docx"
REQUIRES_LLM = False
async def process(self, order_data: dict) -> list[str]:
work_dir = self._make_work_dir()
order_number = order_data["name"]
template_path = self._get_template_path()
docx_filename = self._output_filename(order_number, "docx")
docx_path = os.path.join(work_dir, docx_filename)
# Extract intake data for template variables
now = datetime.now()
variables = {
"order_number": order_number,
"customer_name": order_data.get("customer_name", ""),
"date": now.strftime("%B %d, %Y"),
"effective_date": now.strftime("%B %d, %Y"),
"service_name": self.SERVICE_NAME,
# Company details
"company_name": order_data.get("custom_company_legal_name", order_data.get("customer_name", "")),
"company_website": order_data.get("custom_company_website", "[WEBSITE]"),
"company_address": order_data.get("custom_company_address", "[ADDRESS]"),
"company_email": order_data.get("custom_contact_email", "[EMAIL]"),
"company_phone": order_data.get("custom_contact_phone", "[PHONE]"),
# Privacy officer
"privacy_officer_name": order_data.get("custom_privacy_officer", "[PRIVACY OFFICER]"),
"privacy_officer_email": order_data.get("custom_privacy_officer_email", "[PRIVACY OFFICER EMAIL]"),
# Data practices
"data_collected": order_data.get("custom_data_types_collected", "name, email address, phone number, and other information you provide"),
"data_purposes": order_data.get("custom_data_purposes", "providing our services, communicating with you, and improving our offerings"),
"data_sharing": order_data.get("custom_data_sharing_parties", "service providers who assist in our operations"),
"data_retention": order_data.get("custom_data_retention_period", "as long as necessary to fulfill the purposes described in this policy"),
# Jurisdiction
"state": order_data.get("custom_state", "California"),
"applicable_laws": order_data.get("custom_applicable_privacy_laws", "CCPA/CPRA"),
# Cookies
"uses_cookies": order_data.get("custom_uses_cookies", "Yes"),
"uses_analytics": order_data.get("custom_uses_analytics", "Yes"),
"analytics_provider": order_data.get("custom_analytics_provider", "Google Analytics"),
}
self._fill_template(template_path, variables, docx_path)
# Convert to PDF
pdf_path = self._convert_to_pdf(docx_path)
return [docx_path, pdf_path]