# 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`
