# Task D.5.5.1: Force Rename Enquiry Domain to Opportunity ## Status Breaking Change (Development Only) ## Objective Perform a full domain rename from **Enquiry** to **Opportunity** across the CRM codebase. This task intentionally introduces breaking changes and requires a full database reset. The goal is to eliminate future ambiguity between: ```txt Sales Opportunity ``` and the future business document: ```txt Sales Enquiry ``` After this task: ```txt Lead ↓ Opportunity ↓ Quotation ``` becomes the official CRM domain model. --- # Preconditions This task assumes: * Development environment only * Existing data may be discarded * Database will be dropped * Migration history may be regenerated * Seed data will be recreated No production migration compatibility is required. --- # Mandatory Review Review: * AGENTS.md * Project Foundations Registry * Task Catalog * ADR-0018 Lead / Enquiry Domain Separation * Task D.5.1 – D.5.5 * CRM Authorization Boundaries * Database schema * Navigation configuration * Route structure --- # Scope D5.5.1.1 Database Rename Rename tables: ```txt crm_enquiries → crm_opportunities crm_enquiry_followups → crm_opportunity_followups crm_enquiry_customers → crm_opportunity_customers ``` Rename foreign keys accordingly. Rename indexes and constraints to use the new naming convention. Keep: ```txt crm_leads crm_quotations ``` unchanged. --- # Scope D5.5.1.2 Schema Refactor Update: ```txt src/db/schema.ts ``` Rename: ```txt enquiries → opportunities ``` Rename: ```txt enquiryRelations → opportunityRelations ``` Rename every Drizzle export to Opportunity terminology. --- # Scope D5.5.1.3 Domain Refactor Rename feature module: ```txt src/features/crm/enquiries ``` to ```txt src/features/crm/opportunities ``` Rename: ```txt service.ts types.ts schemas components hooks queries mutations ``` to Opportunity terminology. No legacy aliases remain. --- # Scope D5.5.1.4 API Refactor Replace: ```txt /api/crm/enquiries ``` with ```txt /api/crm/opportunities ``` Routes: ```txt GET POST PATCH DELETE followups assign ``` must all use Opportunity. Do not leave compatibility aliases. --- # Scope D5.5.1.5 App Route Refactor Rename: ```txt / dashboard / crm / enquiries ``` to ```txt / dashboard / crm / opportunities ``` Update navigation accordingly. --- # Scope D5.5.1.6 Type Refactor Rename: ```txt EnquirySummary → OpportunitySummary EnquiryDetail → OpportunityDetail CreateEnquiryInput → CreateOpportunityInput UpdateEnquiryInput → UpdateOpportunityInput ``` Apply consistently across server and client. --- # Scope D5.5.1.7 Permission Refactor Rename permissions: ```txt crm.enquiry.read crm.enquiry.create crm.enquiry.update crm.enquiry.delete crm.enquiry.assign crm.enquiry.followup.* ``` to ```txt crm.opportunity.read crm.opportunity.create crm.opportunity.update crm.opportunity.delete crm.opportunity.assign crm.opportunity.followup.* ``` Update seed/configuration if permissions are managed in code. --- # Scope D5.5.1.8 Document Sequence Rename: ```txt crm_enquiry ``` to ```txt crm_opportunity ``` Document code format remains unchanged unless business requires a new prefix. Update sequence configuration and seed. --- # Scope D5.5.1.9 Audit Refactor Rename audit entity: ```txt crm_enquiry ``` to ```txt crm_opportunity ``` Rename audit actions: ```txt create_enquiry update_enquiry delete_enquiry assign_enquiry ``` to ```txt create_opportunity update_opportunity delete_opportunity assign_opportunity ``` --- # Scope D5.5.1.10 UI Refactor Rename all user-facing wording: ```txt Enquiry ``` to ```txt Opportunity ``` except historical documentation. Update: * page titles * dialogs * breadcrumbs * badges * table headers * empty states * permission messages --- # Scope D5.5.1.11 Documentation Update: * ADR references * task documentation * architecture diagrams * implementation notes Replace "Enquiry" with "Opportunity" where referring to the sales execution domain. Keep historical notes where necessary. --- # Database Reset This task requires: ```txt Drop Database Schema Run Fresh Migration Run Seed ``` Old migration history does not need compatibility. --- # Deliverables Updated: ```txt src/db/schema.ts src/features/crm/opportunities/** src/app/api/crm/opportunities/** src/app/dashboard/crm/opportunities/** ``` Updated documentation: ```txt ADR Task documents Architecture documents ``` --- # Explicit Non-Scope Do not: * change Lead domain * change Quotation domain * change Approval workflow * change Dashboard * change Reports * implement Won/Lost lifecycle * introduce Sales Enquiry document Those belong to later tasks. --- # Verification Run: ```txt npm exec tsc --noEmit npm run lint npm run build ``` Verify: ```txt Opportunity CRUD Opportunity Assignment Lead → Opportunity Opportunity → Quotation Follow-up Permissions Navigation Document Sequence Audit Logging ``` Verify no remaining references: ```txt crm_enquiries /api/crm/enquiries features/crm/enquiries EnquiryDetail EnquirySummary crm.enquiry.* ``` except historical documentation. --- # Definition of Done Task is complete when: * Opportunity becomes the official CRM sales domain * Database uses `crm_opportunities` * API uses `/api/crm/opportunities` * Feature module uses `opportunities` * UI uses Opportunity terminology * Permission namespace uses `crm.opportunity.*` * Audit uses Opportunity terminology * Fresh migration and seed complete successfully * No active application code depends on the old Enquiry domain Result: ```txt Lead Domain = Established Opportunity Domain = Established Quotation Domain = Unchanged Ready for D.5.6 Opportunity Lifecycle ```