Import projects & estimates from SharePoint¶
| Stage | Building |
|---|---|
| Status | Partial |
| Design status | In review |
| Estimate | S |
| Confidence | High |
| Linear | PIN-501 ↗ PIN-508 ↗ PIN-506 ↗ |
| Linear status | Done · +1 planned |
| Cycle | C14-C15 |
| Design | Design ↗ |
| Linear epic | Runtime, Delivery & Operations |
| Module | Runtime & Ops ↗ |
Design — backend-only, no canon needed
Backend import job (SharePoint → Azure Blob via Microsoft Graph); no design canon applies and this is not a design gap. The user-facing browse / stage / review UI is the separate Smart Import SharePoint page.
Priority: High · Route: /settings/sharepoint
Scope¶
Out-of-band importer walks Pinley's SharePoint libraries via Microsoft Graph and streams every file into Azure Blob — the permanent, versioned source of truth — preserving the folder tree into bids, projects, and documents. Scoped to Conor's active-projects list (2024/25 plus all 2026) and Estimating content from 2023/24 onward, not the full archive; estimates land as browsable document archives first, with AI parsing into structured line items as later work. (Source: PIN-501, PIN-508, PIN-506.)
Acceptance criteria¶
- Importer authenticates against SharePoint and lists the Estimating, Projects, and Takeoffs drives
- Project import restricted to the active-projects list; Estimating import restricted to 2023/24-onward folders
- Files stream to Azure Blob; folder tree preserved and mapped into bids, projects, and documents
- Bid/project metadata populated from the Master Bid List; a folder missing a metadata row still imports as a name-only invite, never a hard failure
- Re-running the import is idempotent — no duplicate files or records
- Runs as an explicit one-off job, never as part of normal app boot/seeding
- Dedicated runner sized for the filtered import volume, with egress to both SharePoint and Blob
Conor's comments¶
Needs to be properly testings and trained before mass import. How are estimate values assigned to cost codes.
Notes¶
Run in prod
Open question for Conor¶
-