task-d.5.5
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Task D.5.5: Opportunity / Sales Workspace Refinement
|
||||
|
||||
## Objective
|
||||
Refine the sales-facing enquiry workspace so lead-origin enquiries are presented as opportunities without renaming the underlying `crm_enquiries` model or changing quotation, dashboard, report, or approval foundations.
|
||||
|
||||
## Review Completed
|
||||
- `AGENTS.md`
|
||||
- `plans/task-d.5.5.md`
|
||||
- `docs/standards/project-foundations.md`
|
||||
- `docs/standards/task-catalog.md`
|
||||
- `docs/adr/0018-lead-enquiry-domain-separation.md`
|
||||
- `docs/implementation/task-d5-lead-enquiry-domain-separation.md`
|
||||
- `docs/implementation/task-d52-lead-domain-service-api-foundation.md`
|
||||
- `docs/implementation/task-d53-lead-assignment-create-enquiry-foundation.md`
|
||||
- `docs/implementation/task-d54-lead-enquiry-workspace-separation-ui-foundation.md`
|
||||
- `docs/security/crm-authorization-boundaries.md`
|
||||
- existing enquiry list/detail/form/assignment UI
|
||||
- existing quotation reference-data and creation UI
|
||||
|
||||
## What Changed
|
||||
- Updated [enquiries page](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/app/dashboard/crm/enquiries/page.tsx) to use sales-facing opportunity wording in page title and description while keeping the same enquiry route.
|
||||
- Refined list-loading and table UI in:
|
||||
- [enquiry-listing.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/enquiry-listing.tsx)
|
||||
- [enquiries-table.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/enquiries-table.tsx)
|
||||
- [enquiry-columns.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/enquiry-columns.tsx)
|
||||
- Opportunity list now emphasizes sales execution fields:
|
||||
- opportunity code
|
||||
- source lead indicator
|
||||
- customer
|
||||
- project name
|
||||
- product type
|
||||
- sales owner
|
||||
- status
|
||||
- estimated value
|
||||
- chance percent
|
||||
- expected close date
|
||||
- next follow-up
|
||||
- created date
|
||||
- Updated [opportunity detail page](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/app/dashboard/crm/enquiries/[id]/page.tsx) to load:
|
||||
- optional source lead summary
|
||||
- quotation reference data when quotation creation permission exists
|
||||
- Rebuilt [enquiry-detail.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/enquiry-detail.tsx) around clearer sales sections:
|
||||
- Opportunity Summary
|
||||
- Source Lead
|
||||
- Customer / Contact
|
||||
- Requirement
|
||||
- Sales Qualification
|
||||
- Follow-up Timeline
|
||||
- Linked Quotations
|
||||
- Activity
|
||||
- Quotation Readiness
|
||||
- Added [source-lead-card.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/source-lead-card.tsx) for read-only lead provenance visibility.
|
||||
- Added [quotation-readiness-panel.tsx](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/components/quotation-readiness-panel.tsx) for non-blocking readiness checks.
|
||||
- Extended [types.ts](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/src/features/crm/enquiries/api/types.ts) with optional list-only fields for future source lead and follow-up enrichment without breaking existing API consumers.
|
||||
|
||||
## UI Wording Decisions
|
||||
- Route kept as `/dashboard/crm/enquiries`
|
||||
- Page title changed to `CRM Opportunities`
|
||||
- Detail title changed to `Opportunity Detail`
|
||||
- Technical code and API names remain `enquiry` / `crm_enquiries`
|
||||
|
||||
## APIs and Foundations Reused
|
||||
- Existing enquiry APIs remained unchanged:
|
||||
- `GET /api/crm/enquiries`
|
||||
- `GET /api/crm/enquiries/[id]`
|
||||
- existing follow-up and assignment APIs
|
||||
- Existing quotation reference-data foundation reused for the `Create Quotation` action.
|
||||
- Lead detail service reused for source lead summary display.
|
||||
|
||||
## Permission Mapping
|
||||
- Opportunity list/detail still rely on existing enquiry permissions:
|
||||
- `crm.enquiry.read`
|
||||
- `crm.enquiry.update`
|
||||
- `crm.enquiry.assign`
|
||||
- `crm.enquiry.reassign`
|
||||
- `crm.enquiry.followup.create`
|
||||
- `crm.enquiry.followup.update`
|
||||
- `crm.enquiry.followup.delete`
|
||||
- Quotation action is shown only when `crm.quotation.create` is available.
|
||||
- Source lead visibility on the opportunity page does not widen lead permissions; it is only rendered for users who can already access the enquiry page.
|
||||
|
||||
## Compatibility Notes
|
||||
- `crm_enquiries`, `/api/crm/enquiries`, and existing quotation flows were not renamed.
|
||||
- Records without `lead_id` continue to render as direct sales opportunities.
|
||||
- Dashboard, reports, approvals, and quotation services were not changed.
|
||||
|
||||
## Known Limitations
|
||||
- The current `Create Quotation` action opens the existing quotation creation sheet without automatically preselecting the current opportunity.
|
||||
- Source-lead-specific list enrichment is prepared at the UI contract level, but the list still uses lightweight lead linkage signaling rather than a fully joined source-lead dataset.
|
||||
|
||||
## Verification
|
||||
- `npm exec tsc --noEmit`
|
||||
Reference in New Issue
Block a user