Files
alla-allaos-fullstack/docs/implementation/task-ep1.2-activity-integration-legacy-followup-adapter-2026-07-13.md
phaichayon e96320a24d task-ep.1.2
2026-07-13 09:49:45 +07:00

6.5 KiB

Task EP.1.2 Activity Integration & Legacy Follow-up Adapter - 2026-07-13

Scope

  • introduced adapter-based Activity timeline integration for legacy lead, opportunity, and quotation follow-ups
  • added additive recentActivities detail API data for customer, lead, opportunity, and quotation workspaces
  • kept existing follow-up APIs, dashboard consumers, report datasets, and audit history unchanged
  • added Activity numbering through the Document Sequence Foundation using documentType = activity
  • added Activity attachment foundation service on top of Storage and Document Artifact foundations
  • documented migration readiness without executing migration, dual-write, projections, calendar, timeline, notifications, or dashboard swaps

Review Summary

Reviewed before and during implementation:

  • AGENTS.md
  • plans/task-ep.1.2.md
  • docs/standards/task-catalog.md
  • docs/standards/project-foundations.md
  • docs/standards/architecture-rules.md
  • docs/standards/ui-ux-rules.md
  • docs/standards/task-review-checklist.md
  • docs/security/crm-authorization-boundaries.md
  • docs/implementation/task-ep1.1-activity-domain-foundation-2026-07-10.md
  • docs/implementation/task-ar.1-architecture-transition-plan-2026-07-07.md
  • docs/implementation/task-ar.2-epic-technical-design-2026-07-07.md
  • docs/implementation/task-ar.2-workspace-ui-ux-design-note-2026-07-07.md
  • existing lead, opportunity, quotation follow-up services and APIs
  • existing dashboard and report follow-up consumers
  • existing audit, storage, document artifact, and document sequence foundations

Implementation Summary

Legacy Follow-up Adapters

Created Activity-compatible timeline adapters:

  • src/features/crm/activities/server/adapters/lead-followup.adapter.ts
  • src/features/crm/activities/server/adapters/opportunity-followup.adapter.ts
  • src/features/crm/activities/server/adapters/quotation-followup.adapter.ts

The adapters only read and translate legacy records. They do not migrate data, dual-write, or remove existing follow-up behavior.

Compatibility Layer

Added src/features/crm/activities/server/timeline-service.ts as the single Activity compatibility read layer for detail-page recent activity views.

Current composition:

  • new crm_activities rows queried by context columns such as customerId, leadId, opportunityId, and quotationId
  • legacy lead follow-ups adapted from audit-log-backed records
  • legacy opportunity follow-ups adapted from row-backed records
  • legacy quotation follow-ups adapted from row-backed records

Dashboard and report datasets remain on their existing legacy sources for EP.1.2.

Activity Context Integration

Integrated recent activity reads into:

  • customer detail API and UI
  • lead detail API and UI
  • opportunity detail API and UI
  • quotation detail API and UI

The UI uses RecentActivitiesPanel and keeps existing follow-up tabs and audit log tabs in place.

Activity Type Governance

Expanded the official fallback Activity catalog to cover the EP.1.2 minimum types and kept backward-compatible aliases.

Reference data now prefers crm_activity_type master options when configured, with static catalog fallback for environments that have not seeded the new category yet.

Activity Numbering Strategy

Activity creation now calls generateNextDocumentCode() from the Document Sequence Foundation using:

  • documentType = activity
  • branch scope from the resolved Activity context
  • product type scope from the resolved Activity context
  • default prefix ACT
  • period-based sequence from the existing foundation

The generated code is stored in crm_activities.metadata.activityCode to avoid a schema migration in EP.1.2.

Activity Attachment Foundation

Added src/features/crm/activities/server/attachment-service.ts.

The service supports Activity attachment metadata and binary storage through:

  • Storage Foundation object writes
  • Document Artifact Foundation metadata records
  • entityType = crm_activity
  • artifactType = attachment

Supported attachment kinds are image, pdf, office_document, voice_recording, drawing, and other.

No separate storage engine or attachment table was introduced.

Adapter Validation

Source Legacy Storage Adapter Output Validation Status
Lead follow-up audit log payload ActivityTimelineItem implemented
Opportunity follow-up crm_opportunity_followups ActivityTimelineItem implemented
Quotation follow-up crm_quotation_followups ActivityTimelineItem implemented
New Activity crm_activities ActivityTimelineItem implemented

Legacy Usage Inventory

Existing consumers intentionally remain unchanged:

  • lead follow-up API and panel
  • opportunity follow-up API and tab
  • quotation follow-up API and tab
  • CRM dashboard service follow-up queries
  • pipeline/report datasets reading legacy follow-up state
  • audit log views for customer, lead, opportunity, and quotation details

Projection Readiness

EP.1.3 can consume the following stable contracts:

  • ActivityTimelineItem
  • legacy follow-up adapters
  • listRecentActivitiesForContext()
  • Activity numbering metadata under metadata.activityCode
  • Activity attachment artifacts under entityType = crm_activity

Projection consumers should still wait for EP.1.3 event and projection contracts before replacing dashboard, report, calendar, or timeline behavior.

Migration Checklist

  • Keep legacy follow-up writes active until adapter parity is validated with production-like data.
  • Backfill or project legacy follow-ups only after a separate migration task approves the source-of-truth switch.
  • Decide whether metadata.activityCode should become a first-class column in a future schema task.
  • Add upload/download route handlers for Activity attachments when the UI workflow is scheduled.
  • Add seeded crm_activity_type master options before disabling fallback catalog behavior.
  • Run dataset regression checks before dashboard/report consumers switch from legacy follow-ups to Activity projections.

Verification

  • npm run typecheck
  • targeted npx oxlint for Activity adapter, timeline, route, and detail UI files

Residual Risks

  • Activity attachment upload/download routes are intentionally deferred; the foundation service is ready for those routes.
  • Activity numbering is metadata-backed in EP.1.2 to honor the no-migration constraint.
  • Detail pages show recent activity read integration, but create-activity shortcuts from each detail page are still deferred to the next UI workflow task.