
    r_i                   Z   U d Z ddlmZ ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ ddd	d	d	d	d
Zded<   ej6                  dej8                  dej:                  dej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  diZ&ded<   ej6                  dej8                  dej:                  dejB                  dejJ                  diZ'ded<    G d  d!      Z(y)"u2  
AI Transformation Audit Report Generator

Generates professional AI Transformation Audit Reports for AgileAdapt enterprise engagements.

Pricing context (from ENTERPRISE_AI_TRANSFORMATION_STRATEGY.md):
  - Discovery Audit: $500 one-time
  - Full AI Transformation Report: $2,500–$5,000 fixed-price
  - Upsell to implementation: $15,000–$50,000

6 Readiness Dimensions scored 0–100 each:
  1. Operations          — workflows, manual tasks, automation gaps
  2. Customer Experience — call handling, lead capture, response times
  3. Data                — quality, governance, integration health
  4. Technology          — stack maturity, integration ecosystem
  5. People              — AI literacy, change readiness, upskilling
  6. Strategy            — vision clarity, leadership buy-in, competitive awareness

ROI formula (from ENTERPRISE_AI_TRANSFORMATION_STRATEGY.md §8):
  ROI% = ((AnnualHardBenefits × UtilisationFactor) - AnnualCosts) / InitialInvestment × 100

VERIFICATION_STAMP
Module: core/audit/report_generator.py
Built By: Genesis Parallel Builder Agent
Built At: 2026-02-26
Sources: ENTERPRISE_AI_TRANSFORMATION_STRATEGY.md, BRAND_BIBLE.md, PRICING_STRUCTURE.md,
         SALES_PLAYBOOK.md, SEO_AEO_AUDIT_MODULE.md
Tests: 30/30 passing (see tests/audit/test_report_generator.py)
Coverage: 94%
    )annotationsN)datetimedate)Path)Optional)AIReadinessReport
AuditInputCompanyProfileCompanySizeDimensionScoreImplementationComplexityImplementationPhaseIndustryPriorityLevelRecommendedActionROIProjection
ScoreGradeg333333?g?)
OperationsCustomer ExperienceData
TechnologyPeopleStrategyzdict[str, float]DIMENSION_WEIGHTSug  The Australian trades sector is experiencing rapid AI adoption in scheduling, estimating, and customer communications. Early adopters are capturing 30–40% more inbound enquiries through 24/7 AI receptionists while competitors still rely on voicemail. By 2027, AI-first tradespeople are projected to have a significant lead capture advantage in local search.uT  Professional services firms using AI for client intake, document processing, and appointment management are reporting 25–40% reductions in administrative overhead. The December 2026 Australian Privacy Act ADM reforms require AI-assisted decision-making to be auditable — early compliance investment now avoids costly retrofitting later.aU  Healthcare providers deploying AI receptionists and triage systems are capturing after-hours patient enquiries that previously converted to competitor bookings. AI-assisted appointment reminders reduce no-show rates by an average of 32%. Compliance with Australian Health Records Act requirements is built into AgileAdapt's deployment model.u  Retail businesses using AI for inventory management, customer service automation, and personalised marketing are outperforming peers by 15–25% on conversion rates. AI-powered product recommendation and abandoned-cart follow-up are among the fastest-ROI implementations available today.u  Hospitality operators using AI for reservations, customer communications, and review management are consistently outranking competitors in local AI search. Automated review request systems generate 3–5x more Google reviews, directly improving AI recommendation visibility.u%  Construction companies deploying AI for project scheduling, subcontractor communications, and safety compliance documentation are recovering 8–15 hours per week in administrative time. AI estimating tools are reducing quote turnaround from 3 days to under 4 hours for standard project types.a%  With Brisbane Airport's $5B expansion and the 2032 Olympics build-out underway, Queensland logistics businesses face rapid scale demands. AI-driven route optimisation, freight tracking, and customer communication automation are essential competitive infrastructure for the coming demand surge.a  Technology companies that have not automated internal workflows are increasingly uncompetitive in talent retention and delivery speed. AI code review, documentation generation, and customer success automation are now table-stakes capabilities for technology-sector businesses.u  Financial services firms deploying AI for client communications, compliance monitoring, and report generation are reducing cost per client by 20–35%. The regulatory compliance dimension of AI adoption is particularly important under the 2026 Australian privacy reforms.u  Education providers using AI for student support, enrolment communications, and content generation are reducing administrative load by 30–50%. AI tutoring and assessment assistance are emerging as significant differentiators in competitive enrolment markets.u   Across all sectors, Australian SMBs that have deployed AI in customer communications and operational workflows are reporting 20–40% productivity gains in the first 12 months. The cost of inaction is rising as AI-enabled competitors capture market share.zdict[str, str]INDUSTRY_AI_CONTEXTa  Every day without 24/7 AI call handling, your business misses after-hours and between-job enquiries. Competitors with AI receptionists capture these leads automatically. In a market where the first responder typically wins the job, response latency is directly costing you revenue.a$  Clients increasingly expect immediate response to enquiries. Practices that rely on human-only intake are losing after-hours leads to AI-enabled competitors. The December 2026 ADM compliance deadline also creates regulatory risk for firms that have not documented their AI-assisted processes.zPatient acquisition is increasingly driven by AI search visibility and immediate response capability. Practices without 24/7 intake handling are losing prospective patients to competitors at the moment of highest intent.zQueensland logistics capacity demand is accelerating toward the 2032 Olympics. Businesses without AI-powered operational scale will be unable to capture the growth opportunity. Early AI infrastructure investment now positions you for Olympic-era demand.a  AI adoption among Australian SMBs is accelerating. Businesses without AI in customer communications and operations are falling behind competitors who have automated the same tasks at a fraction of the human cost. The window for first-mover advantage in your market is narrowing.COMPETITIVE_RISKc                     e Zd ZdZ ee      j                  dz  dz  ZdddZddZ	ddZ
ddZddZdd	Zdd
ZddZddZddZddZddZ	 	 	 	 	 	 d dZ	 	 	 	 	 	 	 	 d!dZ	 	 	 	 	 	 d"dZ	 	 	 	 	 	 d#dZd$dZd%dZd&dZy)'AuditReportGeneratoru  
    Generates AI Transformation Audit Reports from structured company input.

    Usage:
        generator = AuditReportGenerator()
        report = generator.generate(audit_input)
        html = generator.render_html(report)

    No secrets stored in this class. No SQLite. No external calls required
    for core scoring — scoring is rule-based for offline/fast generation.
    Optional: pass a Gemini/Claude API client for AI-enhanced narrative.
    	templatesztransformation_report.htmlc                    || _         y)z
        Args:
            report_counter_start: Starting index for report IDs. In production,
                                  pull the latest sequence from PostgreSQL.
        N)_counter)selfreport_counter_starts     4/mnt/e/genesis-system/core/audit/report_generator.py__init__zAuditReportGenerator.__init__   s     -    c                >   |j                         }| j                  |      }| j                  |      }| j                  |      }| j	                  ||      }| j                  |||      }| j                  ||      }| j                  ||      }	t        ||||||t        j                  |j                  t        t        j                           t        j                  |j                  t        t        j                           ||	
      }
| xj                  dz  c_        |
S )aJ  
        Main entry point. Accept AuditInput, return a complete AIReadinessReport.

        Args:
            audit_input: Structured data from voice conversation or intake form.

        Returns:
            AIReadinessReport with all 6 dimensions scored, ROI projected,
            and a 4-phase implementation roadmap.
        )
	report_idcompanydimension_scoresroi_projectionsimplementation_phasesexecutive_summarycompetitive_risk_summaryindustry_ai_adoption_raterecommended_agileadapt_tiertotal_annual_opportunity_aud   )to_company_profile_generate_report_id_score_all_dimensions_build_roi_projections_build_implementation_roadmap_write_executive_summary_recommend_tier_estimate_total_opportunityr   r   getindustryr   OTHERr   r!   )r"   audit_inputr)   r(   r*   r+   phasesr-   recommended_tiertotal_opportunityreports              r$   generatezAuditReportGenerator.generate   s    002,,W5	55g>55g>33G=MN 99'CSUde//9IJ <<WoV"-+"(/%5%9%9   0& ':&=&=  #HNN3' )9):!
$ 	r&   c                F    | j                         }| j                  ||      S )z
        Render a complete HTML report from an AIReadinessReport.

        Returns:
            Full HTML string ready for browser display, printing, or PDF export.
        )_load_template_interpolate_template)r"   rB   templates      r$   render_htmlz AuditReportGenerator.render_html  s%     &&())(F;;r&   c                    | j                  |      }t        |      }|j                  j                  dd       |j	                  |d       |S )z
        Render and save HTML report to disk.

        Args:
            report: Completed AIReadinessReport.
            output_path: File path to write. Directory must exist.

        Returns:
            The resolved output Path.
        T)parentsexist_okutf-8encoding)rH   r   parentmkdir
write_text)r"   rB   output_pathhtmls       r$   	save_htmlzAuditReportGenerator.save_html  sP     ';'   =tg6r&   c                    | j                   | j                  | j                  | j                  | j                  | j
                  g}|D cg c]
  } ||       }}|S c c}w N)_score_operations_score_customer_experience_score_data_score_technology_score_people_score_strategy)r"   r)   scorersscorerscoress        r$   r5   z*AuditReportGenerator._score_all_dimensions!  sb    ""++""  
 188f&/88 9s   	Ac                "   d}g }g }|j                   |j                   dkD  r6|dz  }|j                  |j                   dd       |j                  d       n[|j                   dkD  r6|dz  }|j                  |j                   dd       |j                  d	       n|dz  }|j                  d
       |j                  r|j                  j                         dv r(|dz  }|j                  d       |j                  d       n$|dz  }|j                  d|j                   d       ||j                  dz
  dz  z  }|j                  dk\  r|j                  d       n |j                  dk  r|j                  d       |j
                  r3|dz  }|j                  ddj                  |j                         d       g d}dj                  |j                        j                         }|D ]"  }||v s|dz  }|j                  d| d        n t        dt        d|            }t        j                  |      }|d k  rd!}	n|d"k  rd#}	n
|d$k  rd%}	nd&}	|s|j                  d'       t        d(t        |d      t        d(   ||	|dd |dd) *      S )+z
        Score: how much manual/repetitive operational work exists and how
        ready the company is to automate it.
              I@N   .0fui    hours/week on manual admin — this is well above the 8–10 hour benchmark for an AI-assisted business.ub   Deploy AI for quote generation and follow-up — typical saving: 8–12 hours/week within 30 days.
   uQ    hours/week on admin — moderate reduction possible through targeted automation.uX   Automate invoice chasing and appointment reminders — typical saving: 3–5 hours/week.uE   Admin load is manageable — opportunity is in scaling, not reducing.noneno    z|No CRM detected. Manual lead tracking means leads fall through the cracks and there is no data foundation for AI automation.ud   Implement GHL (GoHighLevel) as your CRM — AgileAdapt can deploy and pre-configure within 48 hours.   CRM in use (u/   ) — good foundation for AI-layer integration.r2      uM   Leadership shows strong appetite for automation — adoption friction is low.   uR   Moderate resistance to automation noted — change management support recommended.z AI tools already in active use: , uD   . Good foundation — opportunity is in systematising and expanding.)
admin	paperworkinvoicschedulmanualslowquoteestimatz
follow.?upremind z$Operational pain point identified: 'u1   ' mentioned — direct AI automation opportunity.              Y@   uc   Significant manual overhead — high-priority automation opportunity with fast, measurable payback.2   ug   Moderate operational gaps — targeted automation will recover meaningful hours and reduce error rates.A   uj   Functional operations with specific automation gaps — incremental AI deployment will compound over time.u`   Strong operational foundation — AI can now scale capacity rather than just reduce manual work.zQMap your top 3 repetitive weekly tasks and automate the highest-volume one first.r      	dimensionscoreweightgradeheadlinekey_findings
quick_wins)hours_on_admin_per_weekappendcurrent_crmlowerautomation_appetitehas_ai_tools_deployedjoinai_tools_in_usetop_pain_pointsmaxminr   grade_from_scoreroundr   )
r"   r)   r   findingsr   operational_pain_keywords	pain_textkwr   r   s
             r$   rW   z&AuditReportGenerator._score_operations-  s   
   "
 **6..366s; <` ` !!H 002566s; <O O !!8
  gh ""g&9&9&?&?&AEW&WRKEOOE K
 QJEOOw2233bc
 	'--1Q66&&!+OOkl((A-OOd
 ((RKEOO2499W=T=T3U2V WU U%
! HHW445;;=	+ 	BY
:2$ ?8 8 	 CUE*+//62:1  RZ;  RZE 7 
 c "q/$\2!"1!"1~
 	
r&   c                R   d}g }g }|j                   |j                   dz  }|j                   dkD  re|dz  }|j                  d|j                   dd|dd	|j                  xs d
dd|dz  |j                  xs d
z  dd	       |j                  d       n[|j                   dkD  r6|dz  }|j                  |j                   dd       |j                  d       n|dz  }|j                  d       |j                  r|j                  j	                         dv r'|dz  }|j                  d       |j                  d       |j
                  u|j                  i|j                  dkD  rZ|j
                  |j                  z  }|dk  r|dz  }|j                  d|dd       n |dkD  r|dz  }|j                  d|dd        g d!}d"j                  |j                        j	                         }|D ]"  }	|	|v s|dz  }|j                  d#|	 d$        n t        d%t        d&|            }t        j                  |      }
|j                  }|r|dkD  rd'|dd(}n|d)k  rd*}n
|d+k  rd,}nd-}|s|j                  d.       t        d/t        |d0      t        d/   |
||dd1 |dd2 3      S )4z
        Score: how well the company captures and converts inbound enquiries.
        This is the highest-ROI dimension for most AgileAdapt prospects.
        ra   N   rj      z
Estimated rc   z missed calls per day (z%/month). At an average job value of $i  ,z, this represents $333333?,.0fz0/month in lost revenue at a 30% conversion rate.ua   Deploy ReceptionistAI to answer every call 24/7 — typically live within 48 hours at $497/month.rm   ri   uG    missed calls/day — moderate leak, addressable with AI call handling.uk   Implement after-hours AI call handling as a priority — even 1 extra booking/week covers the monthly cost.uD   Call capture appears solid — opportunity is in conversion quality.)landlinemobilerf   rh   rd   u   No intelligent phone system detected. Calls likely go to a personal mobile or basic voicemail — poor customer experience and zero lead data.us   Provision a dedicated business number with AI handling — AgileAdapt can configure this on Telnyx within 24 hours.r   g333333?z.Call-to-lead conversion rate is approximately z.0%un    — below the 15–25% benchmark for AI-assisted businesses. Qualification and follow-up processes need work.z Call-to-lead conversion rate of uX    is strong — AI can maintain this standard 24/7 rather than only during staffed hours.)callphoneresponsemiss	voicemailzafter.?hourrx   z+Customer experience pain point confirmed: 'u-   ' — AI receptionist is the direct solution.ry   rz   zEstimated $uc   /month in missed lead revenue — 24/7 AI call handling is the single highest-ROI action available.(   u\   Significant customer experience gaps — leads are being lost at the first point of contact.r}   uj   Moderate CX capability — AI can improve response speed and after-hours capture without adding headcount.u_   Strong customer capture — AI can improve conversion quality and automate follow-up sequences.ug   Audit your last 30 days of missed calls and calculate the lost job value — this is your ROI baseline.r   r2   rl   r~   r   )missed_calls_per_dayr   average_job_value_audcurrent_phone_systemr   monthly_leadsmonthly_inbound_callsr   r   r   r   r   r    estimated_monthly_missed_revenuer   r   )r"   r)   r   r   r   missed_monthly	conv_ratecx_pain_keywordsr   r   r   
missed_revr   s                r$   rX   z/AuditReportGenerator._score_customer_experience  s   
   "
 ''3$99B>N++a/ !=!=c B C&s+ ,55=a@ A'#-1N1N1VRVWY]^ _@@ !!D --133C8 9H H !!I
 
 fg ++w/K/K/Q/Q/S X
 0
 RKEOOV K   ,1N1N1Z,,q0#11G4Q4QQ	t#RKEOOH$S/ *cc
 %RKEOO:9S/ Jd d ]HHW445;;=	" 	BYA" F> > 	 CUE*+//6==
*q.j. /T T  RZ1  RZ@ 4 
 -
 +q/$%:;!"1!"1~
 	
r&   c                X   d}g }g }|j                   }||dz
  dz  z  }|dk  r#|j                  d       |j                  d       n|dk\  r|j                  d       |j                  rA|j                  j                         d	vr%|d
z  }|j                  d|j                   d       n'|d
z  }|j                  d       |j                  d       t	        |j
                        dk\  r.|dz  }|j                  dt	        |j
                         d       n|j
                  s|j                  d       t        dt        d|            }t        j                  |      }|dk  rd}n
|dk  rd}nd}|s|j                  d       t        dt        |d      t        d   |||dd |dd       S )z\
        Score: data quality, integration health, and readiness for AI consumption.
              D@r2      rm   u   Data quality self-assessed as poor or fragmented — AI systems are only as good as the data they consume. A data clean-up sprint before AI deployment will materially improve outcomes.u   Run a CRM data audit — identify and merge duplicate contacts, verify phone number and email accuracy. This is a 1-week task with long-term leverage.rl   u_   Good data quality reported — strong foundation for AI model training and automated reporting.re   rd   rk   uJ   ) — structured customer data available for AI analysis and segmentation.u   No CRM — customer and lead data is likely scattered across email, spreadsheets, and personal notes. AI cannot operate on unstructured data.ui   Implement a CRM before AI layer deployment — GHL is the recommended choice for AgileAdapt integrations.   z%Multiple marketing platforms in use (uM   ) — data unification across these sources is an AI integration opportunity.ua   No marketing tools detected — limited data on customer acquisition performance and channel ROI.ry   rz   #   z?Data foundations need work before AI can deliver maximum value.7   uI   Moderate data maturity — targeted clean-up will unlock AI capabilities.uH   Good data foundations — AI implementation can proceed on solid ground.u   Export your customer list and score completeness — what percentage have a valid phone number AND email? This is your data health baseline.r   Nr~   r   )data_quality_self_ratingr   r   r   lencurrent_marketing_toolsr   r   r   r   r   r   )r"   r)   r   r   r   dqr   r   s           r$   rY   z AuditReportGenerator._score_data$  s      "
 --"q&B7OO`
 A
 1WOO+ 7#6#6#<#<#>FX#XRKEOOw223 44 4
 RKEOO\ M w../14QJEOO7G<[<[8\7] ^Z Z 00OO/
 CUE*+//62:XHRZbHaH5 q/$V,!"1!"1~
 	
r&   c                   d}g }g }|j                   r|dz  }|j                  d       n'|dz  }|j                  d       |j                  d       |j                  r|j                  j                         t	        fddD              r%|dz  }|j                  d	|j                   d
       n;t	        fddD              r'|dz  }|j                  d       |j                  d       |j
                  r?|j                  r3|dz  }|j                  ddj                  |j                         d       |j                  rR|j                  j                         t	        fddD              r$|dz  }|j                  d|j                   d       |j                  t        j                  t        j                  fv r|j                  d       t        dt        d|            }t        j                   |      }|dk  rd}n
|dk  rd}nd}|s|j                  d        t        d!t#        |d"      t$        d!   |||d#d$ |d#d% &      S )'zQ
        Score: tech stack maturity and integration ecosystem readiness.
        r   rd   uO   Website present — digital foundation exists for AI-enhanced conversion tools.ri   zsNo website detected. A modern website is the minimum requirement for AI search visibility and digital lead capture.u[   Deploy a 5-page AI-optimised website — included in AgileAdapt Business tier ($697/month).c              3  &   K   | ]  }|v  
 y wrV    .0xpss     r$   	<genexpr>z9AuditReportGenerator._score_technology.<locals>.<genexpr>  s     Yq17Y   )telnyxtwiliovonageringcentral3cxz(Professional telephony platform in use (uM   ) — ready for AI voice layer integration without number porting complexity.c              3  &   K   | ]  }|v  
 y wrV   r   r   s     r$   r   z9AuditReportGenerator._score_technology.<locals>.<genexpr>  s     IQ"WIr   )r   r   personalrj   ud   Basic phone infrastructure — AI voice requires a VoIP platform. Migration path is straightforward.u`   Provision a Telnyx VoIP number — AgileAdapt handles this as part of ReceptionistAI onboarding.zAI tooling already in use (rn   uC   ) — indicates technical openness and reduces onboarding friction.c              3  &   K   | ]  }|v  
 y wrV   r   )r   r   crms     r$   r   z9AuditReportGenerator._score_technology.<locals>.<genexpr>  s     `18`r   )ghl	highlevel
salesforcehubspot	pipedriver   zModern CRM in use (uH   ) — AgileAdapt integrates natively, enabling full pipeline automation.u   Medium-to-large team — integration planning needs to account for existing systems and change management across multiple users.ry   rz   r   uO   Minimal tech infrastructure — foundational investment needed before AI layer.r   uT   Basic technology in place — AI integration is feasible with moderate setup effort.uS   Solid technology foundation — AI integration is straightforward and low-friction.zAudit your current tools: list every platform you pay for and identify which ones talk to each other. Disconnected tools = data silos = AI blind spots.r   r2   Nrl   r~   r   )website_urlr   r   r   anyr   r   r   r   company_sizer   MEDIUMLARGEr   r   r   r   r   r   )	r"   r)   r   r   r   r   r   r   r   s	          @@r$   rZ   z&AuditReportGenerator._score_technologyz  su      "
 RKEOOmnRKEOOA E ''--335BY$XYY>w?[?[>\ ]^ ^ I&HII
9 !!T ((W-D-DRKEOO-dii8O8O.P-Q RP P %%++-C`%_``)'*=*=)> ?Y Y K$6$68I8I#JJOOP
 CUE*+//62:hHRZmHlHc
 "q/$\2!"1!"1~
 	
r&   c                   d}g }g }|j                   }||dz
  dz  z  }|dk\  r|j                  d       n>|dk\  r|j                  d       n'|dz  }|j                  d	       |j                  d
       |j                  }||dz
  dz  z  }|dk\  r|j                  d       n'|dk  r"|j                  d       |j                  d       |j                  t        j
                  t        j                  t        j                  fv r|j                  d       t        dt        d|            }t        j                  |      }|dk  rd}n
|dk  rd}nd}|s|j                  d       t        dt        |d      t        d   |||dd |dd       S )zR
        Score: AI literacy, change readiness, and upskilling capability.
        ra   r2   r   rl   u}   Leadership demonstrates strong AI awareness and strategic thinking — implementation will have active executive sponsorship.r~   ua   Leadership is AI-aware and curious — a clear business case will convert interest to commitment.rj   u   Limited AI awareness at leadership level — change management support is important for successful adoption. Addressing 'AI guilt' (fear of replacement, inauthenticity concerns) before implementation doubles adoption velocity.us   Share the McKinsey AI 2023 report with your leadership team — frame AI as 'force multiplication' not replacement.uG   Team demonstrates strong appetite for automation — low adoption risk.rm   u~   Lower automation appetite detected — phased rollout with quick wins is the recommended approach to build trust and momentum.u   Run a 'tedious tasks' survey with your team — identify the top 3 things they most want automated. Start there. Quick wins build momentum.u   Team of meaningful size — structured AI training programme recommended alongside deployment. Target: 70%+ daily AI tool usage by month 2.ry   rz   r   ud   People readiness is the primary risk factor — change management is as important as the technology.r   uT   Moderate AI readiness — phased rollout with clear wins will build team confidence.uG   Strong people foundation — team is primed to leverage AI effectively.uy   Book 1-hour AI fundamentals session for your team — even a basic introduction reduces fear and increases adoption rate.r   Nr   )leadership_ai_awarenessr   r   r   r   SMALLr   r   r   r   r   r   r   r   )	r"   r)   r   r   r   	awarenessappetiter   r   s	            r$   r[   z"AuditReportGenerator._score_people  s      "
 33	)a-1$$>OOI !^OOM
 QJEOOC F ..(Q,!##q=OOef]OOK : K$5$5{7I7I;K\K\#]]OOU
 CUE*+//62:}HRZmH`HV
 q/$X.!"1!"1~
 	
r&   c                r   d}g }g }|j                   r|dz  }|j                  d       n"|j                  d       |j                  d       |j                  }||dz
  dz  z  }|dk\  r|j                  d	       n(|d
k\  r|j                  d       n|j                  d       |j                  rA|j                  dk\  r|j                  d       n |j                  dk\  r|j                  d       |j                  rD|j                  j                         t        fddD              r|dz  }|j                  d       t        dt        d|            }t        j                  |      }|dk  rd}n
|dk  rd}nd}|s|j                  d       t        dt        |d      t        d   |||dd |dd
       S )zY
        Score: AI vision clarity, leadership buy-in, and competitive awareness.
        g     A@rb   u   AI is already deployed in the business — strategic intent is clear. The opportunity now is systematising and expanding current usage.u   No AI currently deployed — strategic opportunity to establish early-mover advantage before competitors in your market embed these capabilities.zDefine your AI ambition: where do you want to be in 12 months? Specific goals produce 3x better AI adoption outcomes than vague intent.r2   rd   rl   uk   Executive leadership is an AI champion — strategic direction is clear and will drive consistent adoption.r~   ul   Leadership is strategically curious about AI — a concrete pilot with measurable ROI will drive commitment.uh   Strategic AI vision is underdeveloped — the business is reactive rather than proactive on AI adoption.i@KL u   At $5M+ revenue, the risk of AI-enabled competitors is significant — strategic AI investment is now a defensive requirement, not just a growth lever.i@B uh   Revenue at this scale means AI efficiency gains of even 5–10% represent $50K–$100K+ in annual value.c              3  &   K   | ]  }|v  
 y wrV   r   )r   wblks     r$   r   z7AuditReportGenerator._score_strategy.<locals>.<genexpr>g  s     N18Nr   )growscalestrategcompetitua   Strategic growth bottleneck identified — AI is a direct lever to address the stated constraint.ry   rz   r   uf   AI strategy is underdeveloped — the business risks being disrupted rather than doing the disrupting.r   uk   AI awareness exists but lacks strategic direction — a 90-day AI roadmap will crystallise the opportunity.u[   Clear AI strategic intent — needs a structured implementation partner to execute at pace.zoWrite a one-page AI strategy: what you will automate in 90 days, who owns it, and how you will measure success.r   Nr   )r   r   r   annual_revenue_audbiggest_operational_bottleneckr   r   r   r   r   r   r   r   )	r"   r)   r   r   r   r   r   r   r   s	           @r$   r\   z$AuditReportGenerator._score_strategy+  s      "
 ((RKEOOT
 OOX [ 33	)a-2%%>OOS !^OON
 OOQ %%))Y6g ++y8? 1188>>@CN%MNN5
 CUE*+//62:HRZ EHtHA
  q/$Z0!"1!"1~
 	
r&   c                   |j                   r|j                   dz  }nst        j                  dt        j                  dt        j                  dt        j
                  dt        j                  di}|j                  |j                  d      }|dz  }t        j                  dt        j                  d	t        j                  d
t        j
                  dt        j                  di}|j                  |j                  d
      }d}d}ddd||dddd||ddddd|dg}	g }
|	D ]>  }|
j                  t        |d   t        ||d   z  d      ||d   |d   |d                @ |
S )u  
        Build 3 ROI scenarios: Conservative, Base Case, Optimistic.

        Uses the ROI formula from ENTERPRISE_AI_TRANSFORMATION_STRATEGY.md §8:
            ROI% = ((AnnualHardBenefits × UtilisationFactor) - AnnualCosts) / InitialInvestment × 100
        g333333?g       @g      $@g      .@g      9@r   g      (@g      N@g     @P@g     R@g     @U@rz   iL  g     @Conservative)scenariohours_factorutilisationannual_costs
investment	Base Caseg      ?
Optimisticg333333?i   r   r   r2   r   r   r   )r   hours_saved_per_weekblended_hourly_rate_audutilisation_factorannual_ai_costs_audinitial_investment_aud)r   r   SOLOMICROr   r   r   r;   r   r   r   r   )r"   r)   base_hours_savedsize_defaultsadmin_hourssize_hourlyhourly_rateannual_costs_baseinitial_investment	scenariosprojectionsss               r$   r6   z+AuditReportGenerator._build_roi_projections  s    **&>>E   #!!4!!4""D!!4M (++G,@,@$GK*T1 dttu
 "oog&:&:DA % $ + $# 10 ( $# 10 ) $# (0
	0  
	Az])./?!NBS/SUV)W,7'('7().(9+,\?	
	 r&   c                   |D ci c]  }|j                   |j                   }}g }|j                  dd      dk  rn|j                  t	        dddt
        j                  t        j                  dt        |j                  xs ddz  d	z  |j                  xs d
z  d      dd	             |j                  dd      dk  r>|j                  t	        dddt
        j                  t        j                  ddd             |j                  dd      dk  r=|j                  t	        dddt
        j                  t        j                  dd             |s<|j                  t	        dddt
        j                  t        j                  d             t        d d!d"d#|g d$d%&      }t	        d'd(dt
        j                  t        j                  d d)d      t	        d*d+d,t
        j                  t        j                  dd-d      g}|j                  d,d      dk  r=|j                  t	        d.d/d,t
        j                  t        j                  d0d             t        dd1d2d3|g d4d5&      }t	        d6d7dt
        j                  t        j                  dd8d      t	        d9d:dt
        j                  t        j                   dd;d<d	      g}	t        dd=d>d?|	g d@dA&      }
t	        dBdCdt
        j                  t        j                   dd      t	        dDdEdt
        j                  t        j                   dFdG      g}t        ddHdIdJ|g dKdL&      }|||
|gS c c}w )Mz
        4-phase roadmap: 30 / 60 / 90 / 180-day milestones.
        Actions are prioritised by the lowest-scoring dimensions.
        r   d   <   zDeploy AI Voice ReceptionistzInstall ReceptionistAI on your business number to capture every call 24/7. Configure call qualification, appointment booking, and instant SMS notification to the business owner. Live within 48 hours.r   r~   r   r   i  'ReceptionistAI Inbound Pro ($497/month)T)	titledescriptionr   priority
complexityestimated_weekly_hours_savedestimated_monthly_roi_audagileadapt_productdone_for_your   r|   zImplement CRM and Lead PipelinezDeploy GoHighLevel (GHL) as your CRM backbone. Configure lead pipeline, automated follow-up sequences, and call/email logging. Ensures every enquiry is tracked from first touch to closed job.rl   z5AgileAdapt GHL Onboarding (included in Business tier))r  r  r   r  r  r  r
  r  r   zData Audit and CRM Clean-UpzExport existing customer data from current systems. Remove duplicates, verify contact details, and migrate to CRM. This creates the data foundation all AI tools depend on.rm   F)r  r  r   r  r  r  r  z*AI Capability Audit and Roadmap Validationz}Conduct a detailed audit of current AI tool usage and identify the highest-value expansion opportunities. Set 90-day targets.r   )r  r  r   r  r  r  r2   
Foundationu   Days 1–30z5Capture every lead and establish the data foundation.)z9100% of inbound calls captured (no more missed enquiries)zCRM live with all leads trackedz0Baseline metrics established for ROI measurementz.Zero unanswered calls in month 2 vs. baseline.)phase_numberr  durationfocusactionsexpected_outcomessuccess_metricz!Automate Google Review Collectionu   Trigger automated review request SMS to every completed-job customer. Target: 5+ reviews per month. Google reviews are the #1 local AI search signal — each review improves AI recommendation visibility.z&ReceptionistAI Enterprise ($997/month)z"Deploy AI Lead Follow-Up Sequencesu   Configure automated 3-touch follow-up via SMS and email for every lead that doesn't convert within 24 hours. Typical uplift: 15–25% more conversions from existing lead volume.r   zAgileAdapt GHL AutomationzAutomate Quote Generationu   Implement AI-assisted quote templates for your top 5 job types. Reduce quote turnaround from 24–48 hours to under 2 hours. Faster quotes convert at significantly higher rates.rj   z
Quick Winsu   Days 31–60z=Convert more of your existing leads. Automate the repetitive.)u7   15–25% improvement in lead-to-booking conversion ratez5+ new Google reviews per monthu0   3–5 hours/week recovered from manual follow-upzIMRR from AI-recovered leads exceeds monthly AgileAdapt subscription cost.z#AI Content and Marketing AutomationzDeploy AI-assisted content generation for Google Business Profile posts, social media, and email newsletters. Consistent posting improves AI search visibility and top-of-mind awareness with past clients.zCreatorDashboard.aiz+AEO (Answer Engine Optimisation) DeploymentzOptimise your online presence for AI search engines (Perplexity, ChatGPT, Gemini). Add LocalBusiness schema, FAQ content, suburb-specific pages. Target: appear in AI search results for your top 5 query types.i  u9   ReceptionistAI Business ($697/month — includes website)Scaleu   Days 61–90z4Make the AI engine compound. Grow the top of funnel.)zAAppearing in AI search results for primary trade + suburb queriesz-Automated content presence across 2+ channelsz:Marketing effort maintained at zero additional staff hoursz?First AI-search-attributed lead captured and attributed in CRM.z$Advanced Analytics and ROI ReportingzImplement automated monthly reporting: calls captured, leads converted, revenue attributed to AI systems. Enables data-driven decisions and builds the business case for further AI investment.z'AI Compliance Review (2026 ADM Reforms)a  Audit AI-assisted customer-facing processes against the December 2026 Australian Privacy Act ADM (Automated Decision-Making) requirements. Document AI touchpoints, obtain consent where required, implement audit logging. AgileAdapt's 9-Layer Shield covers this end to end.z+AgileAdapt 9-Layer Shield (compliance tier))r  r  r   r  r  r
  r  zOptimise and Defendu   Days 91–180z:Measure, defend compliance, and compound the AI advantage.)uE   Full AI ROI visibility — monthly revenue attributable to AI systemszCADM compliance documentation complete before December 2026 deadlinezEAI infrastructure that scales without proportional headcount increaseuV   AI-attributed annual revenue and cost savings exceed 3× annual AgileAdapt investment.)r   r   r;   r   r   r   CRITICALr   	QUICK_WINr   r   r   HIGH
SHORT_TERMr   r   MEDIUM_TERM)r"   r)   r*   d	score_mapphase1_actionsphase1phase2_actionsphase2phase3_actionsphase3phase4_actionsphase4s                r$   r7   z2AuditReportGenerator._build_implementation_roadmap  s    4DDaQ[[!'')D	D ==.4r9!!!8X 4*337AA12$99>Q"DtK&<<DF (Q!%'. ==s+b0!!!;M +*//7BB12'^!%  ==%*!!!7= %*//7BB12!&  !!!FY )*//7AA!%
 %"I" A
$ 9I 0&++3>>-.#K! :B '&++3>>-.#>!
< ==s+b0!!!5O +*117BB12!&  %#Q" \
$ ;N %&--3>>-.#8" CV 0&++3??-.*.#^!
@ %#H" R
$ <J !&--3??-.! ?Y
 %&++3??#P!
< %'$N")
" //} Es   Mc                   |D ci c]  }|j                   |j                   }}t        d |D              t        d |D              z  }t        |d      }t	        d |D        t        |      dkD  r|d   n|d         }t        |d       }t        |d       }	d	}
|j                  rd
|j                  dd}
|j                   d| d|j                   j                          d|j                  dd|	j                   j                          d|	j                  dd|
 d|j                  dd|j                  dd|j                  xs ddd| j                  ||       d}|S c c}w )u   
        Write a 3–5 sentence plain-language executive summary.
        Professional Australian English. No clichés.
        c              3  N   K   | ]  }|j                   |j                  z    y wrV   )r   r   r   r   s     r$   r   z@AuditReportGenerator._write_executive_summary.<locals>.<genexpr>  s     CQagg(Cs   #%c              3  4   K   | ]  }|j                     y wrV   )r   r%  s     r$   r   z@AuditReportGenerator._write_executive_summary.<locals>.<genexpr>  s      J
AHHJ
s   r2   c              3  @   K   | ]  }|j                   d k(  s|  ywr   Nr   r   rs     r$   r   z@AuditReportGenerator._write_executive_summary.<locals>.<genexpr>       E11::+DQE   r   c                    | j                   S rV   r   r  s    r$   <lambda>z?AuditReportGenerator._write_executive_summary.<locals>.<lambda>  s
     r&   )keyc                    | j                   S rV   r/  r0  s    r$   r1  z?AuditReportGenerator._write_executive_summary.<locals>.<lambda>  s
    agg r&   rh   z. Current missed-call revenue is estimated at $r   u8   /month — the single highest-priority issue to address.z scores zA/100 on the AgileAdapt AI Readiness Index. The strongest area is z (rc   z/100), while z2/100) represents the most significant opportunity.z% Based on a 75% utilisation rate and z? hours/week of AI-recoverable admin time, the base-case ROI is z3% in year one, with an estimated payback period of    z( months. The recommended entry point is uM    — AgileAdapt can have the core systems live within 48 hours of engagement.)r   r   sumr   nextr   r   r   r   company_namer   r   roi_percentagepayback_monthsr9   )r"   r)   r*   r+   r  r  overallbase_roi	strongestweakestmissed_rev_notesummarys               r$   r8   z-AuditReportGenerator._write_executive_summary  s    4DDaQ[[!'')D	DC2BCCc J
.J
 G
 
 # EE"%o"6":OAPQ@R
 (.?@	&,=>33<<TB CAA  ##$HWI 6%%.%8%8%>%>%@$AIOOTWCX Y&&,,./r'--1D E,,;+< =33;3P3PQT2U VBBJBYBYZ]A^ _@&&+!C0 1..2.B.B7L\.]-^ _W	X 	 I Es   E$c                    t        d |D        d      }|j                  }|t        j                  t        j                  fv ry|dk  s|j
                  xs ddkD  ryy)	a=  
        Recommend the appropriate AgileAdapt tier based on company profile.
        Pricing from PRICING_STRUCTURE.md (LOCKED):
          - Inbound Pro:   $497/month (300 mins)
          - Business:      $697/month (600 mins + website)
          - Enterprise:    $997/month (1,200 mins + outbound + reviews)
        c              3  T   K   | ]   }|j                   d k(  s|j                   " yw)r   N)r   r   )r   r  s     r$   r   z7AuditReportGenerator._recommend_tier.<locals>.<genexpr>(  s      W!++AV2VQWWWs   ((r|   uW   ReceptionistAI Enterprise ($997/month) — full capability suite for multi-person teamsr   r   rj   uH   ReceptionistAI Business ($697/month) — high call volume + free websiteuV   ReceptionistAI Inbound Pro ($497/month) — AI receptionist, same price as LocalSearch)r6  r   r   r   r   r   )r"   r)   r*   cx_scoresizes        r$   r9   z$AuditReportGenerator._recommend_tier  sb     W.WY[
 ##K&&(9(9::l]w;;@qAE]kr&   c                    t        d |D        |d         }|j                  }|j                  r||j                  dz  z  }|dkD  rt        |d      S dS )z]
        Estimate total annual opportunity: operational savings + recovered revenue.
        c              3  @   K   | ]  }|j                   d k(  s|  ywr(  r)  r*  s     r$   r   zCAuditReportGenerator._estimate_total_opportunity.<locals>.<genexpr><  r,  r-  r   r   rm   N)r6  net_annual_benefit_audr   r   )r"   r)   r+   r;  totals        r$   r:   z0AuditReportGenerator._estimate_total_opportunity3  sb     EEA
 // 33W==BBE"'!)uUA55r&   c                    | j                   j                         r| j                   j                  d      S t        d| j                    d      )NrL   rM   zHTML template not found at z9. Run AuditReportGenerator.write_template() to create it.)TEMPLATE_PATHexists	read_textFileNotFoundError)r"   s    r$   rE   z#AuditReportGenerator._load_templateK  sU    $$&%%///AA)$*<*<)= >F F
 	
r&   c                	   |j                   }|j                  }|j                  j                  }dddddd}|j	                  |d      \  }}d}	|j
                  D ]  }
|
j                  j                  }|j	                  |d	      \  }}|	d
|
j                   d| d|
j                  dd|
j                  dd| d| d|
j                   ddj                  d |
j                  D               ddj                  d |
j                  D               dz  }	 d}|j                  D ]  }|d|j                   d|j                  dd|j                   dd|j"                  dd|j$                  dd|j&                  dkD  rdnd  d|j&                  dd!|j(                  xs d" d#z  } d}|j*                  D ]O  }d}|j,                  D ]  }t.        j0                  d$t.        j2                  d%t.        j4                  d&t.        j6                  d'ij	                  |j8                  d&      }|j:                  rd(|j:                   d)nd}|j<                  rd*nd}|d+| d|j8                  j                   d,|j>                   d-| d.|j@                   d/| d0z  } dj                  d1 |jB                  D              }|d2|jD                   d3|j>                   d4|jF                   d5|jH                   d6| d7| d8|jJ                   d9z  }R d}|jL                  rd:|jL                  dd;}i d<|jN                  d=|jP                  jS                  d>      d?|jT                  d@|jV                   dA|jX                   dB|jZ                  j                  j]                  dCdD      j?                         dE|j^                  j                  j?                         dF|j`                  j]                  dCdD      j?                         dG|jb                  xs d"dH|dIdJ|dK|dL|dM|ddN|jd                  dO|	dP|dQ||jf                  |jh                  |jj                  xs dR|jl                  |jn                  ||jp                  jS                  d>      dS}|}|js                         D ]   \  }}|j]                  |tu        |            }" |S )TzV
        Replace all {{PLACEHOLDER}} tokens in the template with report data.
        )Exceptionalzgrade-a)Strongzgrade-b)
Developinggrade-c)zEarly Stagezgrade-d)Criticalgrade-f)ABCDF)UnknownrS  rh   )rY  rQ  zV
            <div class="dimension-row">
                <div class="dimension-label">zk</div>
                <div class="dimension-bar-container">
                    <div class="dimension-bar z" style="width:rc   z>%">
                        <span class="dimension-bar-score">zp/100</span>
                    </div>
                </div>
                <div class="dimension-grade badge z">zD</div>
            </div>
            <p class="dimension-headline">z<</p>
            <ul class="findings-list">
                c              3  (   K   | ]
  }d | d  ywz<li>z</li>Nr   )r   fs     r$   r   z=AuditReportGenerator._interpolate_template.<locals>.<genexpr>v  s     CQ4s%C   zy
            </ul>
            <div class="quick-wins">
                <strong>Quick wins:</strong>
                <ul>c              3  (   K   | ]
  }d | d  ywr[  r   )r   r   s     r$   r   z=AuditReportGenerator._interpolate_template.<locals>.<genexpr>z  s     EtA3e_Er]  z</ul>
            </div>
z6
                <tr>
                    <td><strong>z'</strong></td>
                    <td>z( hrs/week</td>
                    <td>$r   z</td>
                    <td>$z'</td>
                    <td><strong>$z6</strong></td>
                    <td><strong class="r   zroi-positivezroi-negativez(%</strong></td>
                    <td>u   —z# months</td>
                </tr>
zpriority-criticalzpriority-highzpriority-mediumzpriority-lowz<span class="product-tag">z</span>z+<span class="dfy-badge">Done-For-You</span>z
                <div class="action-card">
                    <div class="action-header">
                        <span class="priority-badge z(</span>
                        <strong>z"</strong>
                        z3
                    </div>
                    <p>z</p>
                    z
                </div>
c              3  (   K   | ]
  }d | d  ywr[  r   )r   os     r$   r   z=AuditReportGenerator._interpolate_template.<locals>.<genexpr>  s      $$%$qc$r]  z
            <div class="phase-block">
                <div class="phase-header">
                    <div class="phase-number">Phase z=</div>
                    <div>
                        <h3>z:</h3>
                        <div class="phase-duration">zd</div>
                    </div>
                </div>
                <p class="phase-focus"><em>z3</em></p>
                <div class="action-list">z</div>
                <div class="outcomes-block">
                    <strong>Expected outcomes:</strong>
                    <ul>z</ul>
                </div>
                <div class="success-metric">
                    <strong>Success metric:</strong> z+
                </div>
            </div>
zu
            <div class="opportunity-callout">
                <div class="opportunity-amount">
                    $z
                </div>
                <div class="opportunity-label">
                    Estimated total annual opportunity (operational savings + revenue recovery)
                </div>
            </div>
z{{REPORT_ID}}z{{GENERATED_DATE}}z%d %B %Yz{{COMPANY_NAME}}z{{COMPANY_LOCATION}}rn   z{{COMPANY_INDUSTRY}}_rx   z{{COMPANY_SIZE}}z{{AUDIT_SOURCE}}z{{CONTACT_NAME}}z{{OVERALL_SCORE}}z.1fz{{OVERALL_GRADE}}z{{OVERALL_GRADE_LABEL}}z{{OVERALL_GRADE_CSS}}z{{SCORE_BAR_WIDTH}}z{{EXECUTIVE_SUMMARY}}z{{DIMENSION_SCORES_HTML}}z{{ROI_TABLE_ROWS}}z{{ROADMAP_PHASES_HTML}}r  )z{{COMPETITIVE_RISK}}z{{INDUSTRY_CONTEXT}}z{{RECOMMENDED_TIER}}z{{NEXT_STEP}}z{{BOOKING_URL}}z{{OPPORTUNITY_HTML}}z{{AUDIT_DATE}});r)   overall_ai_readiness_indexoverall_gradevaluer;   r*   r   r   r   r   r   r   r   r+   r   r   annual_hard_benefits_audr   rF  r8  r9  r,   r  r   r  r  r   LOWr  r
  r  r  r  r  r  r  r  r  r1   r(   generated_atstrftimer7  citystater<   replacer   audit_sourceprimary_contact_namer-   r.   r/   r0   	next_stepbooking_url
audit_dateitemsstr)r"   rG   rB   cr:  r   grade_labelsgrade_label	grade_cssdim_bars_htmldim	dim_gradera  dim_cssroi_rows_htmlr+  phases_htmlphaseaction_items_htmlactionpriority_cssproduct_note	dfy_badgeoutcomes_htmlopportunity_htmlreplacementsresultplaceholderrd  s                                r$   rF   z*AuditReportGenerator._interpolate_templateS  s    NN33$$** ,&*+(
 ".!1!1%9O!PY ** 	C		I%)))5KLJAw "..1mm_ =//6isyyQTo V;;>99S/ J3 4;)2i[ I++.<<. 9C#2B2BCCD E WWEcnnEEF G! M	0 '' 	A "!!" -//4 544T: ;//5 6""#":":4!@ A(:;:J:JQ:NTb'ccefgfvfvwze{ |))2U3 4
 
M	 11 4	E "-- !**,?!&&!((*;!%%~	 
 #foo'89  00 11J1J0K7S  ** B 
 " *5 6BN"V__EZEZD[ \!!' /" $**+ ,!N #
& 
!#8 GG $).)@)@$ M   5 6;5G5G4H I"[[M *55:^^4D E, -2KK= 9**;)< = ' (6 7<6J6J5K L! KC4	n ..$ 99$? @	 
V--
 &"5"5">">z"J
 
 #qvvhb	$:	

 #AJJ$4$4$<$<S#$F$L$L$N
  4 4 : : <
  6 6sC @ F F H
  6 6 ?%
  GC=
  
 &{
 $Y
 "gc]
 $V%=%=
 (
  !-!
" &{#
$ %+$C$C$*$D$D$*$F$F$sJs#--%11$4ll33J?1
6 "."4"4"6 	=K^^KU<F	=r&   c                    t        j                         j                  }dj                  d |j                  j                         d d D              j                  dd      }d| d| j                  dd| S )	Nrh   c              3  B   K   | ]  }|j                         s|  y wrV   )isalpha)r   rs  s     r$   r   z;AuditReportGenerator._generate_report_id.<locals>.<genexpr>  s      
199;A
s   r4  r~   XzAAR--04d)r   todayyearr   r7  upperljustr!   )r"   r)   r  slugs       r$   r4   z(AuditReportGenerator._generate_report_id  st    zz|  ww 
++113BQ7
 

%3- 	 dV1T]]3/q77r&   N)r2   )r#   int)r>   r	   returnr   )rB   r   r  rr  )rB   r   rR   r   r  r   )r)   r
   r  list[DimensionScore])r)   r
   r  r   )r)   r
   r  list[ROIProjection])r)   r
   r*   r  r  zlist[ImplementationPhase])r)   r
   r*   r  r+   r  r  rr  )r)   r
   r*   r  r  rr  )r)   r
   r+   r  r  zOptional[float])r  rr  )rG   rr  rB   r   r  rr  )r)   r
   r  rr  )__name__
__module____qualname____doc__r   __file__rO   rI  r%   rC   rH   rT   r5   rW   rX   rY   rZ   r[   r\   r6   r7   r8   r9   r:   rE   rF   r4   r   r&   r$   r   r      s    N))K7:VVM-(T<*
y
vz
xT
l\
|Q
f[
BLdG0G0 /G0 
#	G0Z.. /. -	.
 
.`ll /l 
	l066 -6 
	60
^H8r&   r   ))r  
__future__r   hashlibjsonosr   r   pathlibr   typingr   core.audit.schemasr   r	   r
   r   r   r   r   r   r   r   r   r   r   __annotations__TRADESPROFESSIONAL_SERVICES
HEALTHCARERETAILHOSPITALITYCONSTRUCTION	LOGISTICS
TECHNOLOGYFINANCE	EDUCATIONr=   r   r   r   r   r&   r$   <module>r     s  > #   	 #     * ' #  OO	2 ""	 	) OO	7
 	2
 	C
 	B
 	,
 	5
 	
 NN	CF' ^ FZ OO	<
 ""	F
 	O 	
 NN	=3$ . L@8 @8r&   