Letters can attach to a CECase, a Property/parcel, or an OccPeriod (permit file) via
IFace_LetterHolder. Core classes: LetterCoordinator (business logic), LetterIntegrator
(JDBC), LetterFlowBB (the 4-step creation dialog), LetterHtmlRenderer (mail-merge token
substitution), LetterTemplate/LetterCodeViolation/LetterDistributionEntry (entities).
LetterFlowMode (NEW_LETTER / PURE_CLONE / EDITABLE_COPY) drives whichletter.cloneof_letterid for aLetterDistributionEntry (renamed from LetterMailingAttempt) recordsletterTableCC.xhtml's unified Distribution/Correspondence panel. Seeletter_generateFinalizationPDF() renders the frozen HTML to PDF vialetter_buildPdfReadyHtml()/buildHeaderImageHtml() recompress embedded JPEGs (downscale + requantize) for the generatedrenderedHtml used by the browser preview/emailed HTML body are never touched.dbFixedValueLookup.properties. See theletter_distributeByEmail() sends via Resend, with inbound delivery-statusLetterEmailWebhookResource) updating the distribution entry. Full webhookLetterTokenType; LetterHtmlRendererisApplicableTo(LetterParentType). See theFull implementation history, as-built deviations from spec, and the active backlog live in
the codenforce repo at docs/subsystems/letters+emailing/ (letterUpgrades-jul2026.md,
letterSubsystem-remainingWork-aug2026.md) — that folder is engineering scratch space, not
end-user documentation, but it's the authoritative source for anything not covered here.
See also: subsystem registry, entry #12.