93 lines
4.8 KiB
Markdown
93 lines
4.8 KiB
Markdown
# 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`
|