# RE Dealer Management System — Email Communications Catalogue **Document Owner:** Dealer Development — Product / Engineering **Last updated:** 2026-05-11 **Status:** Living document. Section A lists every email wired in the application. **Section B** covers the ten **onboarding document / LOI / LOA / FDD / architecture** templates that are now implemented; share **`RE_Dealer_Email_Content_Client_Brief.md`** with non-technical stakeholders for copy sign-off. > Purpose: A single source of truth for every outbound mail the platform sends — what triggers it, who receives it, what channels it goes on, and the exact copy currently rendered to the recipient. Use this for stakeholder sign-off, copy review, and to plan the next set of communications (Document Collection, Statutory Document Collection, etc.). --- ## Table of Contents 1. [Conventions & Common Elements](#1-conventions--common-elements) 2. [Master Index of Email Templates](#2-master-index-of-email-templates) 3. [Section A — Currently Implemented Mails](#section-a--currently-implemented-mails) - A.1 Dealer Onboarding - A.2 Dealer Resignation - A.3 Dealer Termination - A.4 Constitutional Change - A.5 Dealer Relocation - A.6 Full & Final (F&F) Settlement - A.7 Workflow / Collaboration / Generic - A.8 SLA & Escalation Mails 4. [Section B — Onboarding extensions (implemented)](#section-b--onboarding-extensions-implemented) 5. [Appendix — Common Header / Footer / CTA Partials](#appendix--common-header--footer--cta-partials) --- ## 1. Conventions & Common Elements - Every mail is rendered through a Handlebars template stored under `backend/src/emailtemplates/*.html` and seeded into the `email_templates` table (`backend/src/scripts/seed-master-emails.ts`, `seed-missing-templates.ts`, `seed-interview-templates.ts`). - Master Configuration (`Admin → Master → Email Templates`) lets DD-Admin edit Subject, Body, and toggle Active without code changes. - Each template ships with a fixed set of merge placeholders (e.g. `{{applicantName}}`, `{{applicationId}}`, `{{link}}`). - Every mail is wrapped with: - **Header partial:** Royal Enfield black banner with logo (`partials/email_header.html`). - **Footer partial:** Copyright + "do not reply" line (`partials/email_footer.html`). - **Primary CTA partial:** Red action button rendered only when `ctaUrl` is supplied (`partials/primary_cta.html`). - Channels per recipient are decided in code (`NotificationService.notify`) — typically a combination of `system` (in‑app), `email`, and `whatsapp` (when a mobile number is on file). --- ## 2. Master Index of Email Templates | # | Template Code | Module | Recipient(s) | Channels | Status | |---|---|---|---|---|---| | 1 | `OPPORTUNITY` | Onboarding | Applicant | email | Implemented | | 2 | `NON_OPPORTUNITY` | Onboarding | Applicant | email | Implemented | | 3 | `QUESTIONNAIRE_SUBMITTED` | Onboarding | Applicant | email | Implemented | | 4 | `QUESTIONNAIRE_REMINDER` | Onboarding | Applicant | email + whatsapp | Implemented | | 5 | `APPLICANT_SHORTLISTED` | Onboarding | Applicant | email | Implemented | | 6 | `APPLICANT_REJECTED` | Onboarding | Applicant | email + whatsapp | Implemented | | 7 | `INTERVIEW_SCHEDULED` | Onboarding | Applicant / Panelist | email | Implemented (legacy) | | 8 | `INTERVIEW_SCHEDULED_APPLICANT` | Onboarding | Applicant | email + whatsapp + system | Implemented | | 9 | `INTERVIEW_SCHEDULED_PANELIST` | Onboarding | Panelist (Internal) | email + whatsapp + system | Implemented | | 10 | `INTERVIEW_RESCHEDULED_APPLICANT` | Onboarding | Applicant | email + system | Implemented | | 11 | `INTERVIEW_RESCHEDULED_PANELIST` | Onboarding | Panelist | email + system | Implemented | | 12 | `INTERVIEW_CANCELLED_APPLICANT` | Onboarding | Applicant | email + system | Implemented | | 13 | `INTERVIEW_CANCELLED_PANELIST` | Onboarding | Panelist | email + system | Implemented | | 14 | `USER_ASSIGNED` | Collaboration | Internal user (participant) | email + system | Implemented | | 15 | `LOI_ISSUED` | Onboarding | Applicant | email | Implemented | | 16 | `LOA_ISSUED` | Onboarding | Applicant + internal | email + system | Implemented | | 17 | `DEALER_CODE_READY` | Onboarding | Applicant + internal | email + system | Implemented | | 18 | `ONBOARDING_STATUS_UPDATE` | Onboarding | Applicant | email + system | Implemented | | 19 | `ONBOARDING_PAYMENT_VERIFIED` | Onboarding | DD-Admin / Internal | email + system | Implemented | | 20 | `EOR_COMPLETED` | Onboarding | DD-Head + NBH | email + system | Implemented | | 21 | `INAUGURATION_COMPLETED` | Onboarding | Internal teams | email + system | Implemented | | 22 | `RESIGNATION_RECEIVED` | Resignation | Dealer | email + whatsapp | Implemented | | 23 | `RESIGNATION_SUBMITTED` | Resignation | Internal (ASM, RBM, DD-ZM, …) | email + whatsapp + system | Implemented | | 24 | `RESIGNATION_APPROVED` | Resignation | Dealer | email + system | Implemented | | 25 | `RESIGNATION_UPDATE` | Resignation | Dealer | system (email optional) | Implemented | | 26 | `TERMINATION_INITIATED` | Termination | Internal stakeholders | email + whatsapp + system | Implemented | | 27 | `TERMINATION_SCN_ISSUED` | Termination | Dealer + Internal | email + whatsapp + system | Implemented | | 28 | `TERMINATION_LETTER_ISSUED` | Termination | DD-Lead, DD-Admin, Finance | email + system | Implemented | | 29 | `TERMINATION_FINAL_CLOSURE_DEALER` | Termination | Dealer | email + whatsapp + system | Implemented | | 30 | `TERMINATION_UPDATE` | Termination | Dealer | system (email optional) | Implemented | | 31 | `CONSTITUTIONAL_CHANGE_SUBMITTED` | Constitutional | Internal stakeholders | email + whatsapp + system | Implemented | | 32 | `CONSTITUTIONAL_CHANGE_APPROVED` | Constitutional | Dealer | email + system | Implemented | | 33 | `CONSTITUTIONAL_CHANGE_UPDATE` | Constitutional | Dealer | system (email optional) | Implemented | | 34 | `RELOCATION_RECEIVED` | Relocation | Dealer | email + system | Implemented | | 35 | `RELOCATION_SUBMITTED` | Relocation | ASM | email + whatsapp + system | Implemented | | 36 | `RELOCATION_APPROVED` | Relocation | Dealer | email + system | Implemented | | 37 | `RELOCATION_UPDATE` | Relocation | Dealer | system (email optional) | Implemented | | 38 | `FNF_INITIATED` | F&F | Finance, Dept heads, DD-Admin | email + system | Implemented | | 39 | `FNF_SUMMARY_PREPARED` | F&F | Finance | email + system | Implemented | | 40 | `FNF_SETTLEMENT_APPROVED` | F&F | DD-Admin, Legal, Finance | email + system | Implemented | | 41 | `WORKFLOW_ACTION_REQUIRED` | Workflow (cross-module) | Next actor | email + whatsapp + system | Implemented | | 42 | `WORKFLOW_STATUS_UPDATE_DEALER` | Workflow (cross-module) | Dealer | system (terminal: + email + whatsapp) | Implemented | | 43 | `WORKNOTE_NOTIFICATION` | Collaboration | Mentioned user | email | Implemented | | 44 | `GENERIC_NOTIFICATION` | Cross-cutting | Any | email | Implemented | | 45 | `SLA_REMINDER` | SLA | Stage owner | email + system | Implemented | | 46 | `SLA_BREACH_WARNING` | SLA | Stage owner | email + system | Implemented | | 47 | `SLA_BREACH` | SLA | Stage owner + escalation | email + system | Implemented | | 48 | `SLA_ESCALATION` | SLA | Escalation level user | email + system | Implemented | | **B.1** | `PROSPECT_DOCUMENT_REQUEST` | Onboarding | Applicant | email + whatsapp | **Live** | | **B.2** | `STATUTORY_DOCUMENT_REQUEST` | Onboarding | Applicant | email | **Live** | | **B.3** | `DOCUMENT_SUBMISSION_REMINDER` | Onboarding | Applicant | email + whatsapp | **Live** (bulk) | | **B.4** | `DOCUMENT_RECEIVED_ACKNOWLEDGEMENT` | Onboarding | Applicant | email | **Live** | | **B.5** | `DOCUMENT_REJECTED_RESUBMIT` | Onboarding | Applicant | email + whatsapp | **Live** | | **B.6** | `FDD_DOCUMENT_REQUEST` | Onboarding | Applicant | email | **Live** | | **B.7** | `LOI_ACKNOWLEDGEMENT_REQUEST` | Onboarding | Applicant | email + whatsapp | **Live** (bulk) | | **B.8** | `SECURITY_DEPOSIT_REQUEST` | Onboarding | Applicant | email + whatsapp | **Live** | | **B.9** | `DEALERSHIP_AGREEMENT_SIGNATURE_REQUEST` | Onboarding | Applicant | email | **Live** | | **B.10** | `ARCHITECTURAL_PLAN_REQUEST` | Onboarding | Applicant | email | **Live** | --- # Section A — Currently Implemented Mails For every template below the document records: - **Template Code**, **File path**, **Subject line** - **Trigger (When sent)** - **Recipients (To)** - **Channels** (email / WhatsApp / in‑app) - **Placeholders** - **Current body copy** as rendered (after substituting partials) --- ## A.1 — Dealer Onboarding ### A.1.1 `OPPORTUNITY` — Opportunity Available | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/opportunity.html` | | **Subject** | `Action Required: Royal Enfield Dealership Opportunity` | | **Trigger** | Applicant applies for a location where a Dealer Development opportunity window is **open**. Sent automatically from `onboarding.controller.ts` on `submitApplication` and on bulk conversion of non-opportunity → opportunity. | | **Recipient** | Applicant (external) | | **Channels** | Email | | **Placeholders** | `applicantName`, `location`, `applicationId`, `link`, `ctaLabel` | **Body (rendered):** > **Hi {{applicantName}},** > > Thank you for expressing interest in a Royal Enfield dealership opportunity for **{{location}}**. > > To proceed with your application, we require you to complete a mandatory business assessment questionnaire. This will help us evaluate your profile better. > > [ **Complete Questionnaire** ] ← CTA button linking to `{{link}}` > > Please complete this at your earliest convenience. If you have any questions, feel free to contact our development team. > > Regards, > Royal Enfield Team --- ### A.1.2 `NON_OPPORTUNITY` — Regret Email | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/non_opportunity.html` | | **Subject** | `Update on your Royal Enfield Dealership Application` | | **Trigger** | Applicant applies for a location where **no** opportunity window is open. | | **Recipient** | Applicant | | **Channels** | Email | | **Placeholders** | `applicantName`, `location` | **Body:** > Dear {{applicantName}}, > > Thank you for your interest in a Royal Enfield dealership for **{{location}}**. > > After careful review of your application and the current organizational requirements, we regret to inform you that we are unable to proceed with your request at this time. > > We will keep your profile in our database for future opportunities. We wish you the very best in your future endeavors. > > Regards, > Royal Enfield Team --- ### A.1.3 `QUESTIONNAIRE_SUBMITTED` — Questionnaire Acknowledgement | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/questionnaire_submitted.html` | | **Subject** | `Questionnaire Submitted Successfully: {{applicationId}}` | | **Trigger** | Applicant submits the assessment questionnaire (`questionnaire.controller.ts` / `assessment.controller.ts`). | | **Recipient** | Applicant | | **Channels** | Email | | **Placeholders** | `applicantName`, `location`, `applicationId` | **Body:** > Hi {{applicantName}}, > > Your business assessment questionnaire for **{{location}}** (Application ID: {{applicationId}}) has been successfully submitted. > > Our team will review your responses and get back to you with the next steps. > > Regards, > Royal Enfield Team --- ### A.1.4 `QUESTIONNAIRE_REMINDER` — Pending Questionnaire Reminder | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/questionnaire_reminder.html` | | **Subject** | `Reminder: Complete your Dealer Assessment` | | **Trigger** | Scheduled job (NotificationService) for applicants whose questionnaire is still pending. | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp | | **Placeholders** | `applicantName`, `location` | **Body:** > Hi {{applicantName}}, > > This is a reminder that we are awaiting your response to the dealership assessment questionnaire for **{{location}}**. > > Completing this questionnaire is a mandatory step to move forward with your application. > > [ **Complete Questionnaire** ] > > If you have already submitted it, please ignore this email. --- ### A.1.5 `APPLICANT_SHORTLISTED` — Shortlist Notification | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/applicant_shortlisted.html` | | **Subject** | `Congratulations! You are Shortlisted: {{applicationId}}` | | **Trigger** | DD-Admin shortlists the application (`onboarding.controller.ts → shortlistApplication`). | | **Recipient** | Applicant | | **Channels** | Email | | **Placeholders** | `applicantName`, `location`, `applicationId`, `portalLink`, `ctaLabel` | **Body:** > Hi {{applicantName}}, > > We are pleased to inform you that your dealership application for **{{location}}** has been shortlisted for further evaluation. > > Our team will contact you shortly to schedule the next level of interviews. In the meantime, you can track your application status on our dealer portal. > > [ **Visit Dealer Portal** ] > > Regards, > Royal Enfield Dealer Development Team --- ### A.1.6 `APPLICANT_REJECTED` — Rejection Notice | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/applicant_rejected.html` | | **Subject** | `Update on Your Dealership Application — {{applicationId}}` | | **Trigger** | `WorkflowService.transitionApplication` reaches any rejection stage (Level 1 / Level 2 / Level 3 / LOI / LOA). | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp (if phone available) | | **Placeholders** | `applicantName`, `applicationId`, `location`, `rejectionReason` | **Body:** > ## Application Rejected — {{applicationId}} > > Dear {{applicantName}}, > > We regret to inform you that your Royal Enfield Dealership Application (**{{applicationId}}**) for location **{{location}}** has been **rejected** after careful evaluation. > > **Reason for Rejection:** > {{rejectionReason}} > > We appreciate your interest in partnering with Royal Enfield. You may reapply in the future when opportunities are available in your area. > > For any queries, please contact your local RE representative or reach us at dealer-support@royalenfield.com. > > Best Regards, > Royal Enfield Dealer Development Team --- ### A.1.7 `INTERVIEW_SCHEDULED` — Generic Interview Scheduled (legacy) | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/interview_scheduled.html` | | **Subject** | `Interview Scheduled: {{applicationId}}` | | **Trigger** | Legacy fallback when interview-specific variants are not available. | | **Recipient** | Applicant / Panelist | | **Channels** | Email | | **Placeholders** | `name`, `applicationId`, `level`, `dateTime`, `type`, `location` | **Body:** > Hi {{name}}, > > Your interview for the Royal Enfield dealership application (**{{applicationId}}**) has been scheduled. > > - **Interview Level:** {{level}} > - **Date & Time:** {{dateTime}} > - **Mode/Location:** {{location}} > - **Type:** {{type}} > > Please ensure you are available at the scheduled time. If it's a virtual interview, the link will be shared separately or is included in the location field above. --- ### A.1.8 `INTERVIEW_SCHEDULED_APPLICANT` | Field | Value | |---|---| | **Seeded by** | `seed-interview-templates.ts` | | **Subject** | `Interview Scheduled: {{applicationId}}` | | **Trigger** | DD-Admin schedules a Level 1 / 2 / 3 interview (`assessment.controller.ts`). | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `applicantName`, `applicationId`, `type`, `scheduledAt`, `meetLink`, `appLink` | **Body:** > Dear {{applicantName}}, > > Your **{{type}}** for Royal Enfield Dealership Application ({{applicationId}}) has been scheduled. > > - **Scheduled Time:** {{scheduledAt}} > - **Meeting Link/Location:** {{meetLink}} > > Please ensure you are available at the scheduled time. > > [ **Join Meeting** ] [ View Application ] > > Best Regards, > Royal Enfield Onboarding Team --- ### A.1.9 `INTERVIEW_SCHEDULED_PANELIST` | Field | Value | |---|---| | **Seeded by** | `seed-interview-templates.ts` | | **Subject** | `New Interview Assignment: {{applicationId}}` | | **Trigger** | DD-Admin assigns / re-assigns a panelist. | | **Recipient** | Panelist (Internal user: DD-ZM, RBM, ZBH, DD-Lead, NBH, DD-Head) | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `panelistName`, `applicantName`, `applicationId`, `type`, `scheduledAt`, `meetLink`, `appLink` | **Body:** > Hi {{panelistName}}, > > You have been assigned as a panelist for **{{type}}** with **{{applicantName}}**. > > - **Application ID:** {{applicationId}} > - **Scheduled Time:** {{scheduledAt}} > - **Meeting Link/Location:** {{meetLink}} > > [ **Join Meeting** ] [ Open Assessment Dashboard ] > > Please review the applicant's profile before the session. > > Regards, > System Administrator --- ### A.1.10 `INTERVIEW_RESCHEDULED_APPLICANT` | Field | Value | |---|---| | **Subject** | `Interview Rescheduled: {{applicationId}}` | | **Trigger** | DD-Admin reschedules an interview. | | **Recipient** | Applicant | | **Channels** | Email + System | **Body:** > Dear {{applicantName}}, > > Your **{{type}}** for Royal Enfield Dealership Application ({{applicationId}}) has been **rescheduled**. > > - **New Scheduled Time:** {{scheduledAt}} > - **Meeting Link/Location:** {{meetLink}} > > [ **Join Meeting** ] [ View Application ] > > Best Regards, Royal Enfield Onboarding Team --- ### A.1.11 `INTERVIEW_RESCHEDULED_PANELIST` Same scenario as above, sent to panelist instead of applicant. **Body:** > Hi {{panelistName}}, > > The **{{type}}** for **{{applicantName}}** ({{applicationId}}) has been **rescheduled**. > > - **New Scheduled Time:** {{scheduledAt}} > - **Meeting Link/Location:** {{meetLink}} > > [ Join Meeting ] [ Open Assessment Dashboard ] > > Please update your calendar accordingly. --- ### A.1.12 `INTERVIEW_CANCELLED_APPLICANT` | Field | Value | |---|---| | **Subject** | `Interview Cancelled: {{applicationId}}` | | **Recipient** | Applicant | | **Channels** | Email + System | **Body:** > Dear {{applicantName}}, > > We inform you that your **{{type}}** for Royal Enfield Dealership Application ({{applicationId}}) has been **cancelled**. > > Our team will reach out to you if a new session is required. > > Best Regards, Royal Enfield Onboarding Team --- ### A.1.13 `INTERVIEW_CANCELLED_PANELIST` | Field | Value | |---|---| | **Subject** | `Interview Cancelled: {{applicationId}}` | | **Recipient** | Panelist | | **Channels** | Email + System | **Body:** > Hi {{panelistName}}, > > The **{{type}}** for **{{applicantName}}** ({{applicationId}}) has been **cancelled**. > > You no longer need to attend this session. --- ### A.1.14 `USER_ASSIGNED` — Participant Assignment | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/user_assigned.html` | | **Subject** | `New Application Assignment: {{applicationId}}` | | **Trigger** | DD-Admin adds a participant to an application (`collaboration.controller.ts`). | | **Recipient** | Internal user being added (e.g. FDD, Legal, Architecture, ASM) | | **Channels** | Email + System | | **Placeholders** | `userName`, `applicationId`, `dealerName`, `participantType` | **Body:** > Hi {{userName}}, > > You have been assigned as a **{{participantType}}** for the following dealership application: > > - **Applicant:** {{dealerName}} > - **Application ID:** {{applicationId}} > > Please log in to the portal to review the application and complete your tasks. --- ### A.1.15 `LOI_ISSUED` — Letter of Intent Issued | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/loi_issued.html` | | **Subject** | `Letter of Intent (LOI) Issued: {{applicationId}}` | | **Trigger** | DD-Admin issues the LOI after NBH approval (`loi.controller.ts → issueLoi`). | | **Recipient** | Applicant | | **Channels** | Email **only** (per SRS §6.16.3.6 — explicitly **no** WhatsApp for LOI/LOA documents) | | **Placeholders** | `applicantName`, `applicationId`, `ctaLabel` | **Body:** > ## Congratulations {{applicantName}}! > > We are delighted to inform you that your Letter of Intent (LOI) for the Royal Enfield dealership has been issued for the application **{{applicationId}}**. > > Please log in to the portal to view and acknowledge the document to move to the next stage. > > [ **View LOI** ] --- ### A.1.16 `LOA_ISSUED` — Letter of Appointment Issued | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/loa_issued.html` | | **Subject** | `Letter of Appointment (LOA) Issued: {{applicationId}}` | | **Trigger** | LOA fully approved by DD-Head + NBH (`loa.controller.ts`). | | **Recipient** | Applicant + DD-Admin, DD-Lead (internal copy) | | **Channels** | Email + System | | **Placeholders** | `applicantName`, `applicationId`, `dealerCode`, `ctaLabel` | **Body:** > ## Welcome to the Family! > > Dear {{applicantName}}, > > We are honored to issue your Letter of Appointment (LOA) for the Royal Enfield dealership ({{applicationId}}). Your dealership is now officially authorized under the code: **{{dealerCode}}**. > > We look forward to a successful partnership. > > [ **View LOA** ] --- ### A.1.17 `DEALER_CODE_READY` — SAP Dealer Codes Generated | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/dealer_code_ready.html` | | **Subject** | `SAP Dealer Codes Readiness for {{applicationId}}` | | **Trigger** | DD-Admin triggers SAP Dealer Code creation (`WorkflowService` → `Dealer Code Generated`). | | **Recipient** | Applicant + DD-Admin, Finance, Sales, Service heads | | **Channels** | Email + System | | **Placeholders** | `applicantName`, `applicationId`, `salesCode`, `serviceCode` | **Body:** > ## SAP Dealer Codes Generated > > Hi {{applicantName}}, > > We are pleased to inform you that your SAP Dealer Codes for application **{{applicationId}}** are now ready and active in our system. > > ``` > Sales Code: {{salesCode}} > Service Code: {{serviceCode}} > ``` > > You can now proceed with system onboarding and initial orders. --- ### A.1.18 `ONBOARDING_STATUS_UPDATE` — Generic Status Update | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/onboarding_status_update.html` | | **Subject** | `Onboarding Status Update: {{status}} — {{applicationId}}` | | **Trigger** | Any onboarding status change not covered by LOI / LOA / Dealer Code specific mails (`WorkflowService.transitionApplication`). | | **Recipient** | Applicant | | **Channels** | Email + System | | **Placeholders** | `applicantName`, `applicationId`, `status`, `reason`, `salesCode`, `serviceCode` | **Body:** > Hi {{applicantName}}, > > Your dealership onboarding application status has been updated. > > - **Current status:** {{status}} > - **Application ID:** {{applicationId}} > - **Details:** {{reason}} > > You can sign in to the dealer development portal for more information. > > [ **View Application** ] --- ### A.1.19 `ONBOARDING_PAYMENT_VERIFIED` — Security Deposit / Payment Verified | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/onboarding_payment_verified.html` | | **Subject** | `Payment Verified: {{applicationId}}` | | **Trigger** | Finance verifies the Security Deposit / initial payment (`settlement.controller.ts`). | | **Recipient** | DD-Admin, DD-Lead, Finance Team (Internal copy). The applicant is acknowledged via the workflow status update. | | **Channels** | Email + System | | **Placeholders** | `applicationId`, `dealerName`, `paymentType`, `amount`, `link` | **Body:** > ## Payment Verified — {{applicationId}} > > Dear Team, > > Finance has successfully verified the **{{paymentType}}** for **{{dealerName}}** (Application ID: **{{applicationId}}**). > > - **Verified Amount:** ₹{{amount}} > - **Status:** Verified & Approved > > The onboarding process can now proceed to the next stage. > > [ **View Application** ] --- ### A.1.20 `EOR_COMPLETED` — EOR Checklist 100% Complete | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/eor_completed.html` | | **Subject** | `EOR Readiness 100% Completed: {{applicationId}}` | | **Trigger** | All EOR checklist items verified (`eor.controller.ts`). | | **Recipient** | DD-Head, NBH (also applies to relocation-EOR scenario for DD-Admin) | | **Channels** | Email + System (alert-class — SRS §6.19.3.4) | | **Placeholders** | `recipientName`, `applicantName`, `requestId`, `location`, `completedOn`, `link` | **Body:** > ## EOR Checklist Complete — {{requestId}} > > Dear {{recipientName}}, > > All **Essential Operating Requirements (EOR)** for dealer application **{{requestId}}** (Applicant: **{{applicantName}}**) have been marked as completed and verified. > > **EOR Status: 100% Complete** — The dealership outlet is now ready for Inauguration review. > > | Field | Value | > |---|---| > | Application ID | {{requestId}} | > | Applicant Name | {{applicantName}} | > | Location | {{location}} | > | Completed On | {{completedOn}} | > > Please review the EOR checklist and authorize the **Inauguration** stage to mark this dealership as live. > > [ **Authorize Inauguration** ] --- ### A.1.21 `INAUGURATION_COMPLETED` — Dealership Inauguration Logged | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/inauguration_completed.html` | | **Subject** | `Dealership Inauguration Logged: {{applicationId}}` | | **Trigger** | DD-Admin marks the inauguration as complete; dealership goes Live. | | **Recipient** | DD-Admin, DD-Lead, NBH, Finance, Sales, Service | | **Channels** | Email + System | | **Placeholders** | `dealerName`, `applicationId`, `location`, `date` | **Body:** > ## Dealership Inauguration Logged — {{applicationId}} > > Dear Team, > > We are pleased to inform you that the inauguration for dealer **{{dealerName}}** (Application ID: **{{applicationId}}**) at **{{location}}** has been successfully logged on **{{date}}**. > > The dealership is now marked as **Active** in the system. All relevant teams are requested to update their records accordingly. --- ## A.2 — Dealer Resignation ### A.2.1 `RESIGNATION_RECEIVED` — Dealer Acknowledgement | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/resignation_received.html` | | **Subject** | `We received your resignation — {{resignationId}}` | | **Trigger** | Dealer submits resignation via portal (`workflow-email-notifications.ts → notifyResignationSubmittedEmails`). | | **Recipient** | Dealer | | **Channels** | Email + WhatsApp | | **Placeholders** | `dealerName`, `resignationId`, `lwd`, `link`, `ctaLabel` | **Body:** > Hi {{dealerName}}, > > We have received your resignation request **{{resignationId}}**. > > **Last working day (as submitted):** {{lwd}} > > Our team will review and progress clearances as per process. You can track status anytime on the portal. > > [ **View Request** ] --- ### A.2.2 `RESIGNATION_SUBMITTED` — Internal Notification | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/resignation_submitted.html` | | **Subject** | `New Resignation Request: {{resignationId}}` | | **Trigger** | Same event as A.2.1, but for internal reviewers. | | **Recipient** | ASM (DD-ASM), RBM, DD-ZM, ZBH, DD-Lead, DD-Head, NBH, Legal, DD-Admin | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `dealerName`, `resignationId`, `lwd`, `link`, `ctaLabel` | **Body:** > Hi Team, > > A new resignation request has been submitted by **{{dealerName}}**. > > - **Request ID:** {{resignationId}} > - **Proposed Last Working Day:** {{lwd}} > > Please log in to the Dealer Development portal to review and initiate the clearance process. > > [ **Review Resignation** ] --- ### A.2.3 `RESIGNATION_APPROVED` — Resignation Approved | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/resignation_approved.html` | | **Subject** | `Resignation Request Approved: {{resignationId}}` | | **Trigger** | NBH issues final approval; Legal uploads acceptance letter. | | **Recipient** | Dealer | | **Channels** | Email + System | | **Placeholders** | `dealerName`, `resignationId`, `lwd` | **Body:** > ## Resignation Request Approved > > Dear {{dealerName}}, > > Your resignation request (Request ID: {{resignationId}}) has been approved by the Dealer Development team. > > **Proposed Last Working Day:** {{lwd}} > > The clearance process has been initiated. Please ensure all department dues are cleared as per the timeline. --- ### A.2.4 `RESIGNATION_UPDATE` — Interim Status Update | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/resignation_update.html` | | **Subject** | `Resignation Status Update: {{status}}` | | **Trigger** | Any interim stage transition during resignation. | | **Recipient** | Dealer | | **Channels** | System (email optional via Admin) | | **Placeholders** | `dealerName`, `status`, `remarks` | **Body:** > Hi {{dealerName}}, > > This is to inform you that the status of your resignation request has been updated. > > - **Current Stage:** {{status}} > > {{remarks}} > > You can track the progress and clearance status on the dealer development portal. > > [ **View Status** ] --- ## A.3 — Dealer Termination ### A.3.1 `TERMINATION_INITIATED` — Case Initiation Internal Alert | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/termination_initiated.html` | | **Subject** | `Dealer Termination Case Initiated — {{requestId}}` | | **Trigger** | DD-ASM creates a termination request (`termination.controller.ts`). | | **Recipient** | RBM, DD-ZM, ZBH, DD-Lead, Legal, NBH | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `recipientName`, `dealerName`, `requestId`, `category`, `initiatedBy`, `currentStage`, `remarks`, `link`, `ctaLabel` | **Body (key bits):** > ## Dealer Termination Initiated — {{requestId}} > > Dear {{recipientName}}, > > A formal termination process has been initiated for dealer **{{dealerName}}** (Request: **{{requestId}}**). > > | Field | Value | > |---|---| > | Request ID | {{requestId}} | > | Dealer Name | {{dealerName}} | > | Termination Category | {{category}} | > | Initiated By | {{initiatedBy}} | > | Current Stage | {{currentStage}} | > > **Remarks:** {{remarks}} > > Please review the termination case and provide your evaluation as required. All decisions must be documented with mandatory work notes. > > [ **Review Termination Case** ] > > *This notification is confidential and intended only for the named recipient. Do not share this information externally without authorization.* --- ### A.3.2 `TERMINATION_SCN_ISSUED` — Show Cause Notice | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/termination_scn.html` | | **Subject** | `URGENT: Show Cause Notice Issued: {{terminationId}}` | | **Trigger** | Legal uploads & issues SCN (`TerminationWorkflowService` / `termination.controller.ts → issueScn`). | | **Recipient** | Dealer + DD-Admin / Legal copy | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `dealerName`, `terminationId`, `deadline`, `link`, `ctaLabel` | **Body:** > ## URGENT: Show Cause Notice Issued > > Dear {{dealerName}}, > > This is to inform you that a **Show Cause Notice** has been issued regarding your dealership contract (Request ID: {{terminationId}}). > > You are required to submit your response on the dealer development portal by **{{deadline}}**. Failure to respond may lead to further action as per the dealership agreement. > > [ **Submit Response** ] --- ### A.3.3 `TERMINATION_LETTER_ISSUED` — Internal Letter Generated Alert | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/termination_letter_issued.html` | | **Subject** | `Termination Letter Generated: {{requestId}}` | | **Trigger** | Legal generates/uploads the official termination letter (`workflow-email-notifications.ts` → terminal event override). | | **Recipient** | DD-Lead, DD-Admin, Finance | | **Channels** | Email + System | | **Placeholders** | `recipientName`, `dealerName`, `requestId`, `link`, `ctaLabel` | **Body:** > ## Termination Letter Generated — {{requestId}} > > Dear {{recipientName}}, > > The official **Termination Letter** has been generated and uploaded to the portal for dealer **{{dealerName}}** (Request ID: **{{requestId}}**). > > This letter is now visible to the DD-Lead, DD-Admin, and Finance teams. Please proceed with the necessary administrative and financial closure steps. > > [ **View Letter** ] --- ### A.3.4 `TERMINATION_FINAL_CLOSURE_DEALER` — Final Closure to Dealer | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/termination_final_closure.html` | | **Subject** | `Official Notice: Termination of Dealership — {{requestId}}` | | **Trigger** | Workflow reaches `TERMINATION_STAGES.TERMINATED` (terminal event for dealer). | | **Recipient** | Dealer | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `dealerName`, `requestId`, `terminationDate`, `link`, `ctaLabel` | **Body:** > ## Notice of Termination — {{requestId}} > > Dear {{dealerName}}, > > This is the official notification that your dealership agreement with Royal Enfield (Request ID: **{{requestId}}**) has been formally terminated effective **{{terminationDate}}**. > > The final Termination Letter is available for your reference in the dealer portal. Your portal access will remain active for a limited period to allow you to download relevant documents and track the Full & Final (F&F) settlement progress. > > [ **View Letter & Portal** ] > > For any clarifications regarding the settlement process, please contact the Dealer Development Admin team. > > Best Regards, > Royal Enfield Dealer Development Team --- ### A.3.5 `TERMINATION_UPDATE` — Interim Status to Dealer | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/termination_update.html` | | **Subject** | `Termination Status Update: {{status}}` | | **Recipient** | Dealer | | **Channels** | System (email optional) | | **Placeholders** | `dealerName`, `status`, `remarks` | **Body:** > Hi {{dealerName}}, > > This is to inform you that the status of your dealership termination request has been updated. > > - **Current Stage:** {{status}} > > {{remarks}} > > Please log in to the portal to check if any actions are required from your end. --- ## A.4 — Constitutional Change ### A.4.1 `CONSTITUTIONAL_CHANGE_SUBMITTED` — Internal Alert | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/constitutional_change_submitted.html` | | **Subject** | `New Constitutional Change Request: {{requestId}}` | | **Trigger** | Dealer submits constitutional change request (`constitutional.controller.ts`). | | **Recipient** | ASM, RBM, DD-ZM, ZBH, DD-Lead, DD-Head, NBH, Legal | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `dealerName`, `changeType`, `requestId`, `link`, `ctaLabel` | **Body:** > Hi Team, > > A new Constitutional Change request has been submitted by **{{dealerName}}**. > > - **Request Type:** {{changeType}} > - **Request ID:** {{requestId}} > > Please log in to the Dealer Development portal to review the request and documents. > > [ **Review Request** ] --- ### A.4.2 `CONSTITUTIONAL_CHANGE_APPROVED` — Final Approval to Dealer | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/constitutional_change_approved.html` | | **Subject** | `Constitutional Change Approved — {{requestId}}` | | **Trigger** | Workflow reaches `CONSTITUTIONAL_STAGES.COMPLETED` (terminal). | | **Recipient** | Dealer | | **Channels** | Email + System | | **Placeholders** | `dealerName`, `requestId`, `proposedConstitution`, `link` | **Body:** > ## Constitutional Change Approved — {{requestId}} > > Dear {{dealerName}}, > > We are pleased to inform you that your request for a **Change in Constitution** (Request ID: **{{requestId}}**) has been officially approved by the Royal Enfield management. > > - **New Constitution:** {{proposedConstitution}} > - **Status:** Approved & Updated > > The system records have been updated to reflect this change. You can now proceed with the legally compliant transition as per the approved structure. > > [ **View Request Details** ] --- ### A.4.3 `CONSTITUTIONAL_CHANGE_UPDATE` — Interim Update | Field | Value | |---|---| | **Subject** | `Constitutional Change Update: {{status}}` | | **Recipient** | Dealer | | **Channels** | System (email optional) | **Body:** > Hi {{dealerName}}, > > This is to inform you that your Constitutional Change request has been updated. > > - **Current Stage:** {{status}} > > {{remarks}} > > [ **View Status** ] --- ## A.5 — Dealer Relocation ### A.5.1 `RELOCATION_RECEIVED` — Dealer Acknowledgement | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/relocation_received.html` | | **Subject** | `Relocation request received — {{requestId}}` | | **Trigger** | Dealer submits a relocation request. | | **Recipient** | Dealer | | **Channels** | Email + System | | **Placeholders** | `dealerName`, `requestId`, `link`, `ctaLabel`, `distance` | **Body:** > ## Relocation Request Received — {{requestId}} > > Dear {{dealerName}}, > > We have received your request for dealership relocation (Request ID: **{{requestId}}**). > > The internal feasibility assessment and multi-level review process have been initiated. You will be notified of any document requirements or status updates via the portal and email. > > **Current Status:** ASM Review (In Progress) > > [ **Track Request** ] > > You can track the real-time progress of your request by logging into the Dealer Portal. --- ### A.5.2 `RELOCATION_SUBMITTED` — Internal Alert to ASM | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/relocation_submitted.html` | | **Subject** | `New relocation request: {{requestId}}` | | **Trigger** | Same event as A.5.1, sent to assigned ASM. | | **Recipient** | ASM | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `dealerName`, `requestId`, `outletCode`, `link`, `ctaLabel`, `distance` | **Body:** > ## New Relocation Request: {{requestId}} > > Dear Team, > > A new dealership relocation request has been submitted by **{{dealerName}}** for outlet **{{outletCode}}**. > > - Request ID: {{requestId}} > - Outlet Code: {{outletCode}} > - Distance from existing site: {{distance}} km > > Please log in to the Dealer Development portal to review the proposed location, property documents, and feasibility details. > > [ **Review Request** ] --- ### A.5.3 `RELOCATION_APPROVED` — Final Approval to Dealer | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/relocation_approved.html` | | **Subject** | `Relocation Approved — {{requestId}}` | | **Recipient** | Dealer | | **Channels** | Email + System | | **Placeholders** | `dealerName`, `requestId`, `newLocation`, `link` | **Body:** > ## Relocation Approved — {{requestId}} > > Dear {{dealerName}}, > > We are pleased to inform you that your request for **Dealership Relocation** (Request ID: **{{requestId}}**) has been officially approved by the Royal Enfield management. > > - **New Location:** {{newLocation}} > - **Status:** Approved & Records Updated > > Our team will coordinate with you for the physical transition and site readiness audit. You can track the next steps via the portal. > > [ **View Request Details** ] --- ### A.5.4 `RELOCATION_UPDATE` — Interim Status | Field | Value | |---|---| | **Subject** | `Relocation update — {{requestId}} ({{status}})` | | **Recipient** | Dealer | | **Channels** | System (email optional) | **Body:** > Hi {{dealerName}}, > > Your relocation request **{{requestId}}** has been updated. > > - **Current stage:** {{status}} > > {{remarks}} > > [ **View Status** ] --- ## A.6 — Full & Final (F&F) Settlement ### A.6.1 `FNF_INITIATED` — F&F Triggered | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/fnf_initiated.html` | | **Subject** | `F&F Settlement Initiated — {{requestId}}` | | **Trigger** | F&F case is created on or after the Last Working Day (resignation closure / termination closure / settlement controller). | | **Recipient** | Finance, Spares Manager, Service Manager, Accounts Manager, DD-Admin, DD-Lead, ZBH, RBM | | **Channels** | Email + System | | **Placeholders** | `recipientName`, `dealerName`, `requestId`, `lwd`, `initiatedBy`, `link`, `ctaLabel` | **Body:** > ## Full & Final Settlement Initiated — {{requestId}} > > Dear {{recipientName}}, > > The Full & Final (F&F) settlement process has been initiated for dealer **{{dealerName}}** (Request: **{{requestId}}**) effective from the Last Working Day. > > | Field | Value | > |---|---| > | Request ID | {{requestId}} | > | Dealer Name | {{dealerName}} | > | Initiated By | {{initiatedBy}} | > | Last Working Day | {{lwd}} | > > All department clearances (NOC, Payables, Receivables, etc.) must be submitted within the stipulated timeline. Please log in and update your department's clearance status. > > [ **View F&F Settlement** ] --- ### A.6.2 `FNF_SUMMARY_PREPARED` — Summary Ready for Finance | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/fnf_summary_prepared.html` | | **Subject** | `F&F Settlement Summary Prepared: {{fnfId}}` | | **Trigger** | All 16 department clearances received; Finance auto-summary computed. | | **Recipient** | Finance team | | **Channels** | Email + System | | **Placeholders** | `fnfId`, `dealerName`, `netAmount`, `link`, `ctaLabel` | **Body:** > ## F&F Settlement Summary Prepared — {{fnfId}} > > Dear Finance Team, > > The initial Full & Final (F&F) settlement summary has been prepared for **{{dealerName}}** (F&F ID: **{{fnfId}}**). > > - **Calculated Net Amount:** ₹{{netAmount}} > - **Status:** Pending Final Approval > > Please review the consolidated departmental responses and the settlement summary to proceed with final approval and payment processing. > > [ **Review & Approve** ] > > *Confidential: This summary contains sensitive financial data. Review only via authorized portal access.* --- ### A.6.3 `FNF_SETTLEMENT_APPROVED` — Final F&F Approval | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/fnf_settlement_approved.html` | | **Subject** | `F&F Settlement Approved: {{fnfId}}` | | **Trigger** | Finance approves the final settlement summary. | | **Recipient** | DD-Admin, Legal, Finance | | **Channels** | Email + System | | **Placeholders** | `fnfId`, `dealerName`, `settlementAmount`, `link`, `ctaLabel` | **Body:** > ## F&F Settlement Approved — {{fnfId}} > > Dear Team, > > The final Full & Final (F&F) settlement for dealer **{{dealerName}}** (F&F ID: **{{fnfId}}**) has been **Approved** by Finance. > > - **Settlement Amount:** ₹{{settlementAmount}} > - **Status:** Approved & Closed > > The DD-Admin and Legal teams are requested to update their records and proceed with final account closure. > > [ **View Settlement** ] --- ## A.7 — Workflow / Collaboration / Generic ### A.7.1 `WORKFLOW_ACTION_REQUIRED` — Generic Next-Actor Alert | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/workflow_action_required.html` | | **Subject** | `Action Required: {{requestId}} — {{targetStage}}` | | **Trigger** | Cross-module workflow transition reaches the next actor's stage (or a send-back to ASM occurs). | | **Recipient** | Next assigned actor (role-based; DD-ZM / RBM / ZBH / DD-Lead / DD-Head / NBH / Legal / Finance / FDD / Architecture) | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `requestId`, `dealerName`, `targetStage`, `remarks`, `link`, `ctaLabel` | **Body:** > ## Action Required: {{requestId}} > > Hi, > > The request **{{requestId}}** (Dealer: **{{dealerName}}**) has reached the **{{targetStage}}** stage and requires your review and action. > > **Remarks from previous stage:** {{remarks}} > > Please log in to the RE Dealer Management Portal to review the case details and take action. > > [ **Review & Take Action** ] > > *This is an automated notification. Please do not reply to this email.* --- ### A.7.2 `WORKFLOW_STATUS_UPDATE_DEALER` — Generic Dealer Update | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/workflow_status_update_dealer.html` | | **Subject** | `Update on Your Request — {{requestId}}` | | **Trigger** | Any interim or terminal workflow event (Resignation / Termination / Constitutional / Relocation / Onboarding) that affects the dealer. | | **Recipient** | Dealer | | **Channels** | System always; Email + WhatsApp on terminal events (rejection / completion / revocation) | | **Placeholders** | `requestId`, `dealerName`, `targetStage`, `remarks`, `link`, `ctaLabel` | **Body:** > ## Update on Your Request — {{requestId}} > > Dear {{dealerName}}, > > Your request **{{requestId}}** has been updated. Current status: **{{targetStage}}**. > > **Note:** {{remarks}} > > You can track the live progress of your request on the dealer portal: > > [ **View Request** ] --- ### A.7.3 `WORKNOTE_NOTIFICATION` — Mention Notification | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/worknote_notification.html` | | **Subject** | `New Update on Application: {{applicationId}}` | | **Trigger** | A user is @mentioned in a work note (`collaboration.controller.ts`). | | **Recipient** | The mentioned user | | **Channels** | Email | | **Placeholders** | `userName`, `applicationId`, `dealerName`, `message` | **Body:** > Hi {{userName}}, > > You have a new work note or update on an application you are participating in. > > - **Application:** {{dealerName}} ({{applicationId}}) > - **Update:** {{message}} > > [ **View Worknote** ] --- ### A.7.4 `GENERIC_NOTIFICATION` — Fallback Template | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/generic_notification.html` | | **Subject** | `{{title}}` | | **Trigger** | Used by NotificationService when no specific template applies. | | **Recipient** | Any user | | **Channels** | Email | | **Placeholders** | `title`, `message` | **Body:** > ## {{title}} > > {{message}} > > Please log in to the portal for more details. --- ## A.8 — SLA & Escalation Mails ### A.8.1 `SLA_REMINDER` — Approaching Deadline | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/sla_reminder.html` | | **Subject** | `SLA Reminder: {{applicationId}} — {{stageName}}` | | **Trigger** | SLA scheduler detects stage nearing TAT. | | **Recipient** | Current stage owner | | **Channels** | Email + System | | **Placeholders** | `applicationId`, `stageName`, `link` | **Body:** > ## SLA Reminder > > This is a reminder that the following application is approaching its SLA deadline. > > - **Application ID:** {{applicationId}} > - **SLA Stage:** {{stageName}} > > Please ensure this stage is completed promptly to avoid a breach. > > [ **Open Case** ] --- ### A.8.2 `SLA_BREACH_WARNING` | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/sla_breach_warning.html` | | **Subject** | `SLA breach: {{applicationId}} — {{stageName}}` | | **Trigger** | An SLA tracking record breaches its deadline. | | **Recipient** | Stage owner | | **Channels** | Email + System | | **Placeholders** | `applicationId`, `stageName`, `currentStage` | **Body:** > ## SLA breach alert > > The following application has breached SLA for a workflow stage. > > - Application ID: {{applicationId}} > - SLA stage: {{stageName}} > - Current stage: {{currentStage}} > > Please take immediate action in the portal. > > [ **Open Case** ] --- ### A.8.3 `SLA_BREACH` | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/sla_breach.html` | | **Subject** | `SLA BREACHED: {{applicationId}} — {{stageName}}` | | **Trigger** | Confirmed breach event. | | **Recipient** | Stage owner + escalation cohort | | **Channels** | Email + System | **Body:** > ## SLA BREACHED > > The following application has exceeded its allotted Turnaround Time (TAT). > > - **Application ID:** {{applicationId}} > - **SLA Stage:** {{stageName}} > > Action is required immediately to minimize further delay. > > [ **Open Case** ] --- ### A.8.4 `SLA_ESCALATION` — Multi-Level Escalation | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/sla_escalation.html` | | **Subject** | `SLA ESCALATION [L{{level}}]: {{applicationId}} — {{stageName}}` | | **Trigger** | Escalation chain L1 → L2 → L3 triggered when previous level does not act. | | **Recipient** | Escalation level user (typically RBM → ZBH → DD-Head / NBH) | | **Channels** | Email + System | | **Placeholders** | `applicationId`, `stageName`, `level`, `timeValue`, `timeUnit`, `link` | **Body:** > ## SLA ESCALATION [Level {{level}}] > > The following application remains incomplete after an SLA breach for **{{stageName}}** and has been escalated to you. > > - **Application ID:** {{applicationId}} > - **Escalation Level:** Level {{level}} > - **Delay:** {{timeValue}} {{timeUnit}} past breach > > Please review and intervene to resolve the pending activity. > > [ **Open Case** ] --- # Section B — Onboarding extensions (implemented) > **For clients / Marketing / Legal:** Use **`RE_Dealer_Email_Content_Client_Brief.md`** in this folder — no code, only audiences, triggers, and sign-off. > Subsections **B.1–B.10** below keep technical fields (files, placeholders) and sample prose for administrators. Templates are in `backend/src/emailtemplates/`, codes in `allowed-email-template-codes.ts`, seeds in `seed-master-emails.ts`, and triggers in `onboarding.controller.ts`, `loi.controller.ts`, `loa.controller.ts`, and `fdd.controller.ts` as noted per template. --- ## B.1 `PROSPECT_DOCUMENT_REQUEST` — Initial prospect document collection *(implemented)* | Field | Value | |---|---| | **File** | `backend/src/emailtemplates/prospect_document_request.html` | | **Subject** | `Documents Required — Royal Enfield Dealership Application {{applicationId}}` | | **Trigger** | Automatically after **shortlist** (same flow as shortlisted congratulations mail). | | **Recipient** | Applicant; WhatsApp if mobile on file. | | **Placeholders** | `applicantName`, `location`, `applicationId`, `dueDate`, `documentList`, `link`, `ctaLabel` | > Hi {{applicantName}}, > > Congratulations on being shortlisted for the Royal Enfield Dealership opportunity at **{{location}}** (Application ID: **{{applicationId}}**). > > To proceed with your evaluation we need the following documents to be uploaded on the Dealer Portal by **{{dueDate}}**: > > 1. PAN Card (Proprietor / Partners / Directors) > 2. Aadhaar Card or Passport > 3. Address Proof of the proposed dealership site (Lease deed / Title deed) > 4. Net Worth Certificate from a Chartered Accountant (last 2 years) > 5. Bank Statement (last 6 months) > 6. Income Tax Returns (last 3 years) > 7. Photograph(s) of the proposed dealership site > > *(Final document list is determined by your application type — please refer to the portal for the authoritative checklist.)* > > [ **Upload Documents** ] → opens `{{uploadLink}}` > > All documents must be clear, in PDF / JPG format, and under 10 MB per file. For any clarifications, contact your local RE representative or write to dealer-support@royalenfield.com. > > Regards, > Royal Enfield Dealer Development Team --- ## B.2 `STATUTORY_DOCUMENT_REQUEST` — Statutory Documents Collection (Post LOI) | Field | Value | |---|---| | **Subject** | `Statutory Documents Required — {{applicationId}}` | | **Trigger** | Sent after the LOI is issued. Aligns with the Architectural Work stage and Statutory Document Collection sub-stage of Module 1.8.2 in the test stories. | | **Recipient** | Applicant (now Dealer-in-making) | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `applicantName`, `applicationId`, `dealerCode`, `statutoryList`, `dueDate`, `uploadLink`, `ctaLabel` | **Proposed body:** > Hi {{applicantName}}, > > With the Letter of Intent issued for application **{{applicationId}}**, we now need the statutory documents necessary to open the dealership at the agreed location. > > Please upload the following on the Dealer Portal by **{{dueDate}}**: > > 1. **GST Registration Certificate** > 2. **Trade License / Shop & Establishment Certificate** from the local municipal authority > 3. **MSME / Udyam Registration Certificate** (if applicable) > 4. **Fire Safety NOC** from the local fire department > 5. **Pollution Control Board NOC** > 6. **Building Plan Approval** from the local municipal corporation > 7. **Electricity / Power Sanction Letter** (commercial) > 8. **Lease Agreement / Sale Deed** (registered) of the dealership premises > 9. **Property Tax Receipt** (latest) > 10. **Insurance** — Building, Inventory & Public Liability > 11. **Bank Account Opening Letter** in the dealership entity's name > 12. **Memorandum / Articles of Association** (for Pvt. Ltd. entities) **or** Partnership Deed (for LLPs / Firms) > 13. **Authorized Signatory List** + Board Resolution (where applicable) > > [ **Upload Statutory Documents** ] → `{{uploadLink}}` > > These documents are mandatory for the issuance of the Letter of Appointment (LOA) and SAP Dealer Codes. Any delay or missing documents will postpone your onboarding timeline. Our DD-Admin team will reach out for clarifications if anything needs re-submission. > > Regards, > Royal Enfield Dealer Development Team --- ## B.3 `DOCUMENT_SUBMISSION_REMINDER` — Pending Document Reminder | Field | Value | |---|---| | **Subject** | `Reminder: Pending documents for {{applicationId}}` | | **Trigger** | Cron job — fires if a prospect / dealer has not uploaded all required documents within the configured SLA (e.g. T+3 days after `PROSPECT_DOCUMENT_REQUEST` / `STATUTORY_DOCUMENT_REQUEST`). | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp | | **Placeholders** | `applicantName`, `applicationId`, `pendingDocuments`, `dueDate`, `uploadLink` | **Proposed body:** > Hi {{applicantName}}, > > Friendly reminder — the following documents are still pending against your application **{{applicationId}}**: > > {{pendingDocuments}} > > Please upload them by **{{dueDate}}** to avoid delays in your application processing. > > [ **Upload Pending Documents** ] > > If you have already uploaded these documents, please ignore this email. --- ## B.4 `DOCUMENT_RECEIVED_ACKNOWLEDGEMENT` | Field | Value | |---|---| | **Subject** | `Documents received — {{applicationId}}` | | **Trigger** | When the prospect / dealer uploads all mandatory documents for a category. | | **Recipient** | Applicant + DD-Admin (cc) | | **Channels** | Email | | **Placeholders** | `applicantName`, `applicationId`, `documentCategory`, `receivedOn`, `link` | **Proposed body:** > Hi {{applicantName}}, > > Thank you. We have received the following documents for your dealership application **{{applicationId}}** (Category: **{{documentCategory}}**) on **{{receivedOn}}**. > > Our DD-Admin and Legal teams will now verify the submitted documents. You will receive a separate notification if any document needs to be re-submitted, or once the verification is complete. > > [ **View Submission** ] --- ## B.5 `DOCUMENT_REJECTED_RESUBMIT` — Resubmission Request | Field | Value | |---|---| | **Subject** | `Action Required: Re-submit documents for {{applicationId}}` | | **Trigger** | DD-Admin / Legal marks a submitted document as Rejected / Re-submission Required. | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp + System | | **Placeholders** | `applicantName`, `applicationId`, `documentName`, `rejectionReason`, `dueDate`, `uploadLink` | **Proposed body:** > Hi {{applicantName}}, > > One or more documents you uploaded for application **{{applicationId}}** could not be accepted. > > - **Document:** {{documentName}} > - **Reason:** {{rejectionReason}} > > Please re-upload the corrected document on the Dealer Portal by **{{dueDate}}**. > > [ **Re-Upload Document** ] > > If you have any queries regarding the reason, please contact your assigned DD representative or write to dealer-support@royalenfield.com. --- ## B.6 `FDD_DOCUMENT_REQUEST` — FDD (Financial Due Diligence) Document Collection | Field | Value | |---|---| | **Subject** | `FDD Documents Required — {{applicationId}}` | | **Trigger** | DD-Admin assigns an FDD partner; the partner needs to receive a complete document checklist from the applicant. | | **Recipient** | Applicant (cc: FDD partner, DD-Admin) | | **Channels** | Email | | **Placeholders** | `applicantName`, `applicationId`, `fddPartnerName`, `documentChecklist`, `dueDate`, `uploadLink` | **Proposed body:** > Hi {{applicantName}}, > > As part of the Financial Due Diligence (FDD) for your dealership application **{{applicationId}}**, **{{fddPartnerName}}** has been engaged to perform the assessment. > > Please upload the following documents on the Dealer Portal by **{{dueDate}}**: > > {{documentChecklist}} > > Typical documents include audited financial statements (last 3 FYs), GST returns (last 12 months), bank statements (last 12 months), proof of working capital, existing loan obligations, and director / partner net worth statements. > > [ **Upload FDD Documents** ] > > The FDD partner will independently contact you for any clarifications. Any non-disclosure will impact your application evaluation. --- ## B.7 `LOI_ACKNOWLEDGEMENT_REQUEST` | Field | Value | |---|---| | **Subject** | `Action Required: Acknowledge your Letter of Intent — {{applicationId}}` | | **Trigger** | Within 24h of `LOI_ISSUED` if the applicant has not signed / acknowledged the LOI in the portal. | | **Recipient** | Applicant | | **Channels** | Email + WhatsApp | | **Placeholders** | `applicantName`, `applicationId`, `loiLink`, `dueDate` | **Proposed body:** > Hi {{applicantName}}, > > Your Letter of Intent (LOI) for **{{applicationId}}** is awaiting your acknowledgement. > > Please log in to the Dealer Portal, review the document, and digitally acknowledge it by **{{dueDate}}**. Without your acknowledgement we cannot proceed to the next stage of onboarding. > > [ **Acknowledge LOI** ] --- ## B.8 `SECURITY_DEPOSIT_REQUEST` | Field | Value | |---|---| | **Subject** | `Security Deposit Payment Required — {{applicationId}}` | | **Trigger** | After LOI is acknowledged by the applicant; before LOA processing. | | **Recipient** | Applicant | | **Channels** | Email | | **Placeholders** | `applicantName`, `applicationId`, `amount`, `paymentLink`, `bankDetails`, `dueDate` | **Proposed body:** > Hi {{applicantName}}, > > Per the terms of your Letter of Intent for **{{applicationId}}**, the next step is to remit the **Security Deposit of ₹{{amount}}** before **{{dueDate}}**. > > You may pay through any of the following channels: > > - Online payment via the Dealer Portal: [ **Pay Now** ] → `{{paymentLink}}` > - RTGS / NEFT to the following account: > > ``` > {{bankDetails}} > ``` > > After remitting, please upload the payment confirmation (UTR / Transaction reference) on the portal. Finance will verify within 2 working days and we will notify you (see `ONBOARDING_PAYMENT_VERIFIED`). --- ## B.9 `DEALERSHIP_AGREEMENT_SIGNATURE_REQUEST` | Field | Value | |---|---| | **Subject** | `Dealership Agreement ready for signature — {{applicationId}}` | | **Trigger** | LOA is issued — Legal generates the dealership agreement; awaiting applicant + Royal Enfield authorised signatory's e-sign. | | **Recipient** | Applicant | | **Channels** | Email | | **Placeholders** | `applicantName`, `applicationId`, `dealerCode`, `agreementLink`, `dueDate` | **Proposed body:** > Hi {{applicantName}}, > > Congratulations once again on your appointment as a Royal Enfield Dealer ({{dealerCode}}). > > The **Dealership Agreement** for application **{{applicationId}}** is now ready for your signature. Please review the document in full and e-sign it on the Dealer Portal by **{{dueDate}}**. > > [ **Review & Sign Agreement** ] > > Once your signature is recorded, the document is automatically routed to Royal Enfield's authorised signatory for counter-signature. --- ## B.10 `ARCHITECTURAL_PLAN_REQUEST` | Field | Value | |---|---| | **Subject** | `Architectural Plan & Site Inputs Required — {{applicationId}}` | | **Trigger** | DD-Admin assigns the Architecture team to a freshly issued LOI (Test Story 1.8.1). | | **Recipient** | Applicant (cc: Architecture Lead) | | **Channels** | Email | | **Placeholders** | `applicantName`, `applicationId`, `architectName`, `inputsList`, `dueDate`, `uploadLink` | **Proposed body:** > Hi {{applicantName}}, > > Our Architecture team (led by **{{architectName}}**) is ready to begin the dealership site design for **{{applicationId}}**. > > To kick this off, please share the following on the portal by **{{dueDate}}**: > > {{inputsList}} > > Typical inputs needed: > > 1. Site dimensions and orientation drawings > 2. Photographs of site (front, side, internal) and surroundings > 3. Civic / municipal site approvals and zoning details > 4. Electricity load sanction letter > 5. Soil-test report (if available) > 6. Proposed entry, parking, signage location preferences > > [ **Upload Site Inputs** ] > > Once these are received, the Architecture team will share a draft plan within 7 working days. --- # Appendix — Common Header / Footer / CTA Partials ### Header Partial — `partials/email_header.html` Renders the black Royal Enfield banner with the centred logo. Used by every templated email. ```html
Royal Enfield
``` ### Footer Partial — `partials/email_footer.html` ```html
``` ### Primary CTA Partial — `partials/primary_cta.html` Renders a red action button when a CTA URL is supplied. ```html {{#if ctaUrl}}
{{#if ctaLabel}}{{ctaLabel}}{{else}}View details{{/if}}
{{/if}} ``` --- ## Change Log | Date | Author | Description | |---|---|---| | 2026-05-11 | Engineering | Section B templates implemented in app; added `RE_Dealer_Email_Content_Client_Brief.md` for client copy prep. |