Schedule/Activities Module¶
Last Updated: 2026-01-19
Overview¶
The Schedule/Activities module enables importing Primavera P6 schedule data into the LCO platform. It supports SQLite database files from P6, extracts WBS hierarchy and activities, and provides a paginated UI for viewing and managing schedule data.
Architecture¶
[P6 SQLite Upload] -> [Azure Blob Storage] -> [Service Bus Queue]
|
v
[Azure Function Extractor]
|
v
[Cosmos DB: ScheduleActivities]
|
v
[Frontend UI] <-- [useInfiniteActivities] <-- [scheduleApi]
Key Files¶
| Layer | File | Purpose |
|---|---|---|
| Backend Router | backend/app/api/v1/routers/schedule.py |
REST endpoints |
| Backend Schema | backend/app/schemas/schedule.py |
Pydantic models |
| Repository | backend/app/repositories/activity.py |
Cosmos DB operations |
| SQLite Extractor | backend/app/services/primavera/sqlite_extractor.py |
P6 data extraction |
| Frontend Types | frontend/src/types/schedule.ts |
TypeScript interfaces |
| Frontend API | frontend/src/services/api/schedule.ts |
HTTP client |
| Frontend Hooks | frontend/src/hooks/schedule/ |
React hooks |
| Main Page | frontend/src/pages/SchedulingPage.tsx |
Schedule UI |
Frontend Hooks¶
useInfiniteActivities¶
Paginated activity fetching with filtering support.
const {
items,
total,
loadingInitial,
isFetchingNext,
hasNextPage,
loadMore,
refetch,
} = useInfiniteActivities({
projectId,
filters: { wbsCode, discipline },
});
useExtractionStatus¶
Polls extraction progress with resume support.
const { status, progress, error, isComplete } = useExtractionStatus({
taskId,
projectId,
enabled: true,
});
useScheduleBulkTask¶
Polls async bulk operations (delete/fill).
useScheduleConfig¶
CRUD for clean level column configurations.
API Endpoints¶
File Upload Pipeline¶
| Endpoint | Method | Description |
|---|---|---|
/schedule/upload/init |
POST | Initialize upload, get SAS URL |
/schedule/upload/complete |
POST | Mark upload complete, queue extraction |
/schedule/upload/status/{taskId} |
GET | Poll extraction status |
/schedule/upload/cancel/{taskId} |
POST | Cancel extraction |
Primavera Extraction¶
| Endpoint | Method | Description |
|---|---|---|
/schedule/primavera/projects |
GET | List projects in uploaded DB |
/schedule/primavera/extract |
POST | Extract specific project |
Activities CRUD¶
| Endpoint | Method | Description |
|---|---|---|
/schedule/activities |
GET | List with pagination/filters |
/schedule/activities/{id} |
GET | Single activity |
/schedule/activities |
POST | Create activity |
/schedule/activities/{id} |
PATCH | Update activity |
/schedule/activities/{id} |
DELETE | Delete activity |
Bulk Operations¶
| Endpoint | Method | Description |
|---|---|---|
/schedule/activities/bulk-delete |
POST | Sync delete (<1000 items) |
/schedule/activities/bulk-delete/async |
POST | Async delete (>1000 items) |
/schedule/activities/fill |
POST | Fill activities from template |
Data Model¶
Activity Schema¶
interface ScheduleActivity {
id: string;
activityId: string; // P6 activity ID
projectId: string; // Partition key
activityName: string;
startDate: string; // ISO date
endDate: string;
duration: number; // Days
wbsCode?: string;
discipline?: string;
kpiName?: string;
package?: string;
systemSubsystem?: string;
procurementMilestone?: string;
cleanLevels?: Record<string, string>; // L1-L8 column values
}
Clean Levels Configuration¶
Clean levels map WBS hierarchy to custom column names:
interface ScheduleConfig {
projectId: string;
cleanLevelNames: {
l1?: string; // e.g., "Division"
l2?: string; // e.g., "Area"
l3?: string; // e.g., "System"
// ... l4-l8
};
}
Upload Workflow¶
- User uploads
.dbfile - Frontend calls/upload/initto get SAS URL - Direct upload to Blob - File uploaded directly to Azure Blob Storage
- Complete notification - Frontend calls
/upload/complete - Service Bus queue - Message queued for extraction
- Azure Function processes - Extracts WBS and activities from SQLite
- Batch upsert - Activities saved to Cosmos DB (100/batch)
- Frontend polls - UI polls
/upload/status/{taskId}until complete - Data displayed -
useInfiniteActivitiesloads paginated results
Integration Points¶
| Feature | Integration |
|---|---|
| WBS | Clean levels map to WBS hierarchy nodes |
| Packages | package field links to Packages container |
| Systems/Subsystems | systemSubsystem field for organization |
| COA/KPI | discipline and kpiName for cost categorization |
| S-Curve | Schedule dates used for progress curves |
Performance Considerations¶
- Pagination: Uses offset-based pagination with 100 items per page
- Async bulk ops: Operations >1000 items run asynchronously
- Batch processing: Extraction uses 100-item batches with retry
- Blob direct upload: Files uploaded directly to Azure, not through API