BuiltEmail workspace

Report generation completed contract

Purpose/audience: $report->user, the requesting user.

Implementation: App\Mail\ReportGenerated. Baseline view: resources/views/emails/management-reports/generation-completed.blade.php. Usage evidence: app/Jobs/CFOAIReport/NotifyUserReportCompleted.php:57. These are static references, not proof of current production delivery.

Suggested subject: Report Generation Completed. HTML title alone does not set the mail header.

Suggested preheader: Your requested report is ready. The PDF is attached.

Portable placeholder contract

TokenExisting source / derivationRequirement
{{logo_url}}Existing Built app_name PNGOptional deployment override; the concrete project HTTPS PNG is the default. Approved HTTPS or matching CID only.
{{preheader}}Suggested text above, assembled only from already available valuesRequired escaped text; not a new backend record or processing guarantee.
{{first_name}}$report->user->first_nameRequired escaped name of the report requester.
{{business_name}}$report->business_nameRequired escaped report business identity.
{{report_name}}$report->nameRequired escaped report title; preserve long values.
{{period_from}}$report->from->format('d-m-Y')Required formatted source date; no inferred timezone or altered reporting period.
{{period_to}}$report->to->format('d-m-Y')Required formatted source date; no invented expiry or completion time.
{{report_url}}$url = 'https://cfoai.built.africa/reports/' + $report->uuidRequired complete existing CFO AI report URL; this is an external destination relative to the main app, not an attachment-download endpoint.

Content, states and integration decisions

Portable HTML/text and safe handling

ready/report-completed.html and ready/report-completed.txt provide the portable extracts. Every populated state has matching .html and .txt files under previews/. All sample links are local design explanations; no real invitation, report or account action is executed. Placeholder {{names}} are not automatically Laravel Blade syntax. Convert each mapping explicitly using existing data and server-side URL generation; retain all required values and do not insert untrusted raw HTML.

Escape text and attribute values. Validate any application/CFO AI URL separately against approved HTTPS hosts before escaping it; preserve complete generated links and encrypted/signed parameters. Use the provided concrete public PNG or an approved HTTPS/CID override. There are no hidden optional content sections to populate here; required identities/counts should not be silently omitted. Unsupported data has not been invented.

All drafts use the approved compact transactional shell with 16px body text, a minimal Built footer and native light/dark CSS. Email-client rendering and blocked-image behavior remain separate tests. See integration-notes.html for shared provider/image limitations, and easy-wins-batch.md for the whole batch. No production template, sender, transport or application behavior is changed.