#!/usr/bin/env python3 """Generate sample documents from every DOCX template and email them.""" import os import smtplib import tempfile from datetime import datetime from email import encoders from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText WORK = tempfile.mkdtemp(prefix="pw_template_test_") DATE_STR = datetime.now().strftime("%Y%m%d") TODAY = datetime.now().strftime("%B %d, %Y") generated = [] def try_gen(num, name, func): try: result = func() if result: generated.append((name, result)) print(f"{num}. {name}: {'OK' if result else 'FAIL'}") except Exception as e: print(f"{num}. {name}: ERROR - {str(e)[:150]}") # ── Common kwargs for CPNI variants ──────────────────────────────── CPNI_COMMON = dict( entity_name="Acme Telecom LLC", frn="0015341902", filer_id_499="829999", address_street="1712 Pioneer Ave, Suite 200", address_city="Cheyenne", address_state="WY", address_zip="82001", officer_name="John Smith", officer_title="CEO", contact_email="john@acmetelecom.example", contact_phone="(307) 555-0142", reporting_year=2025, complaints_count=0, ) # ── Common kwargs for CALEA variants ─────────────────────────────── CALEA_COMMON = dict( entity_name="Acme Telecom LLC", frn="0015341902", law_enforcement_contact={ "name": "Jane Doe", "phone": "(307) 555-0199", "email_24h": "compliance@acmetelecom.example", }, signatory_name="John Smith", signatory_title="CEO", ) # 1. RMD Letter def gen1(): from scripts.document_gen.templates.rmd_letter_generator import generate_rmd_letter return generate_rmd_letter( entity_name="Acme Telecom LLC", frn="0015341902", provider_classification="voice_service_provider", carrier_category="interconnected_voip", stir_shaken_status="partial_implementation", upstream_provider_name="Bandwidth.com", address_street="1712 Pioneer Ave, Suite 200", address_city="Cheyenne", address_state="WY", address_zip="82001", contact_name="John Smith", contact_title="CEO", contact_email="john@acmetelecom.example", contact_phone="(307) 555-0142", ceo_name="John Smith", ceo_title="CEO", output_path=os.path.join(WORK, f"01_rmd_letter.docx"), ) try_gen(1, "RMD Certification Letter", gen1) # 2. RMD Exhibit A def gen2(): from scripts.document_gen.templates.rmd_exhibit_a_generator import generate_exhibit_a return generate_exhibit_a( entity_name="Acme Telecom LLC", frn="0015341902", carrier_role="ucaas", rmd_option="option2", upstream_provider_name="Bandwidth.com", contact_name="John Smith", contact_title="CEO", contact_email="john@acmetelecom.example", contact_phone="(307) 555-0142", address="1712 Pioneer Ave, Suite 200, Cheyenne, WY 82001", principals=["John Smith (CEO)"], output_path=os.path.join(WORK, f"02_rmd_exhibit_a.docx"), ) try_gen(2, "RMD Exhibit A (Robocall Mitigation Plan)", gen2) # 3. CPNI Certification Letter (generic) def gen3(): from scripts.document_gen.templates.cpni_cert_letter_generator import generate_cpni_cert_letter return generate_cpni_cert_letter( entity_name="Acme Telecom LLC", frn="0015341902", filer_id_499="829999", address_street="1712 Pioneer Ave, Suite 200", address_city="Cheyenne", address_state="WY", address_zip="82001", officer_name="John Smith", officer_title="CEO", contact_email="john@acmetelecom.example", contact_phone="(307) 555-0142", reporting_year=2025, complaints_count=0, output_path=os.path.join(WORK, f"03_cpni_cert_generic.docx"), ) try_gen(3, "CPNI Certification Letter (Generic)", gen3) # 4. CPNI Procedure Statement def gen4(): from scripts.document_gen.templates.cpni_procedure_statement_generator import generate_cpni_procedure_statement return generate_cpni_procedure_statement( entity_name="Acme Telecom LLC", signatory_name="John Smith", signatory_title="CEO", support_email="support@acmetelecom.example", output_path=os.path.join(WORK, f"04_cpni_procedures.docx"), ) try_gen(4, "CPNI Procedure Statement", gen4) # 5. CALEA SSI Plan (generic VoIP) def gen5(): from scripts.document_gen.templates.calea_ssi_generator import generate_calea_ssi_plan return generate_calea_ssi_plan( **CALEA_COMMON, output_path=os.path.join(WORK, f"05_calea_ssi_voip.docx"), ) try_gen(5, "CALEA SSI Plan (VoIP)", gen5) # 6. Discontinuance Letter def gen6(): from scripts.document_gen.templates.form_499a_discontinuance_letter_generator import generate_discontinuance_letter return generate_discontinuance_letter( entity_name="Acme Telecom LLC", filer_id="829999", frn="0015341902", ein="87-1234567", address="1712 Pioneer Ave, Suite 200, Cheyenne, WY 82001", officer_name="John Smith", officer_title="CEO", officer_email="john@acmetelecom.example", officer_phone="(307) 555-0142", termination_date="April 30, 2026", discontinuance_reason="Company no longer providing telecommunications services", output_path=os.path.join(WORK, f"06_discontinuance.docx"), ) try_gen(6, "USAC Discontinuance Letter", gen6) # 7. OCN Request Form def gen7(): from scripts.document_gen.templates.ocn_request_form_generator import generate_ocn_request_packet return generate_ocn_request_packet( entity_name="Acme Telecom LLC", company_contact_name="John Smith", company_contact_voice="(307) 555-0142", company_contact_email="john@acmetelecom.example", company_contact_address="1712 Pioneer Ave, Suite 200, Cheyenne, WY 82001", service_category="IPES", operating_states=["WY", "CO", "MT"], output_path=os.path.join(WORK, f"07_ocn_request.docx"), ) try_gen(7, "NECA OCN Request Form", gen7) # 8. Reseller Certification def gen8(): from scripts.document_gen.templates.reseller_cert_attestation_generator import generate_reseller_cert_attestation return generate_reseller_cert_attestation( output_path=os.path.join(WORK, f"08_reseller_cert.docx"), filer_legal_name="Acme Telecom LLC", filer_filer_id_499="829999", reseller_legal_name="Upstream Carrier Inc", reseller_filer_id_499="123456", reporting_year=2025, filer_contact_name="John Smith", filer_contact_email="john@acmetelecom.example", ) try_gen(8, "Reseller Certification Attestation", gen8) # 9. CRTC Letter def gen9(): from scripts.document_gen.templates.crtc_letter_generator import generate_crtc_letter return generate_crtc_letter( entity_name="1234567 B.C. Ltd.", incorporation_number="BC1234567", registered_office="123 W Georgia St, Vancouver, BC V6B 1J5", services_description="Interconnected VoIP and UCaaS services", director_name="John Smith", ca_domain="acmetelecom.ca", output_path=os.path.join(WORK, f"09_crtc_letter.docx"), ) try_gen(9, "CRTC Registration Letter", gen9) # 10-18. CPNI variants CPNI_VARIANTS = [ ("cpni_clec_generator", "generate_cpni_clec", "CPNI CLEC (Facilities)"), ("cpni_ixc_generator", "generate_cpni_ixc", "CPNI IXC (Facilities)"), ("cpni_wireless_generator", "generate_cpni_wireless", "CPNI Wireless (CMRS)"), ("cpni_clec_reseller_generator", "generate_cpni_clec_reseller", "CPNI CLEC Reseller"), ("cpni_ixc_reseller_generator", "generate_cpni_ixc_reseller", "CPNI IXC Reseller"), ("cpni_wireless_mvno_generator", "generate_cpni_wireless_mvno", "CPNI Wireless MVNO"), ("cpni_private_line_generator", "generate_cpni_private_line", "CPNI Private Line"), ("cpni_satellite_generator", "generate_cpni_satellite", "CPNI Satellite"), ("cpni_audio_bridge_generator", "generate_cpni_audio_bridge", "CPNI Audio Bridge"), ] for i, (module, func_name, label) in enumerate(CPNI_VARIANTS, 10): def make_gen(m=module, fn=func_name, n=i): def gen(): mod = __import__(f"scripts.document_gen.templates.{m}", fromlist=[fn]) func = getattr(mod, fn) return func(**CPNI_COMMON, output_path=os.path.join(WORK, f"{n:02d}_{m}.docx")) return gen try_gen(i, label, make_gen()) # 19-24. CALEA variants CALEA_VARIANTS = [ ("calea_wireless_generator", "generate_calea_wireless", "CALEA Wireless (CMRS)"), ("calea_ixc_ss7_generator", "generate_calea_ixc_ss7", "CALEA IXC SS7"), ("calea_clec_ss7_generator", "generate_calea_clec_ss7", "CALEA CLEC SS7"), ("calea_satellite_generator", "generate_calea_satellite", "CALEA Satellite"), ("calea_wireless_mvno_generator", "generate_calea_wireless_mvno", "CALEA Wireless MVNO"), ("calea_audio_bridge_generator", "generate_calea_audio_bridge", "CALEA Audio Bridge"), ] for i, (module, func_name, label) in enumerate(CALEA_VARIANTS, 19): def make_gen(m=module, fn=func_name, n=i): def gen(): mod = __import__(f"scripts.document_gen.templates.{m}", fromlist=[fn]) func = getattr(mod, fn) return func(**CALEA_COMMON, output_path=os.path.join(WORK, f"{n:02d}_{m}.docx")) return gen try_gen(i, label, make_gen()) # 25. Engagement Letter (499-A) def gen25(): from scripts.document_gen.templates.engagement_letter_499a import generate_engagement_letter return generate_engagement_letter( entity_name="Acme Telecom LLC", contact_name="John Smith", contact_email="john@acmetelecom.example", order_number="CO-TEST-ENG", filing_years=[2023, 2024, 2025], output_path=os.path.join(WORK, f"25_engagement_letter.docx"), ) try_gen(25, "Engagement Letter (499-A Past-Due)", gen25) print(f"\n=== Generated {len(generated)} documents ===") # Email all if generated: msg = MIMEMultipart() msg["From"] = "Performance West " msg["To"] = "justin@performancewest.net" msg["Subject"] = f"All Templates: {len(generated)} documents ({TODAY})" msg["Reply-To"] = "info@performancewest.net" body = f"{len(generated)} document templates generated with sample data.\n\n" body += "Entity: Acme Telecom LLC (FRN: 0015341902)\n\n" for name, path in generated: size = os.path.getsize(path) body += f" {name}: {os.path.basename(path)} ({size:,} bytes)\n" msg.attach(MIMEText(body, "plain")) for name, path in generated: with open(path, "rb") as f: part = MIMEBase("application", "octet-stream") part.set_payload(f.read()) encoders.encode_base64(part) part.add_header("Content-Disposition", f'attachment; filename="{os.path.basename(path)}"') msg.attach(part) with smtplib.SMTP("email-smtp.us-east-2.amazonaws.com", 587, timeout=30) as s: s.starttls() s.login("AKIAYEWLMNWPHSHQWCRD", "BKrUBud+KjyaRA1RiA26FFu1R+hqR4cpFShwbZf7RUzG") s.send_message(msg) print(f"\nEmailed {len(generated)} documents to justin@performancewest.net")