P6 and Microsoft Project
Calendar Data That Typically Survives XER ↔ MSPDI
Work weeks vs exceptions that typically survive XER ↔ MSPDI

Never write a real MPP. Generate MSPDI.
Models (do not force them to match)
P6 (Oracle / MPXJ): Global, Project, Resource (Shared or Personal). Project calendars may derive from a Global. Resource calendars may derive from a Global or have no parent. Activity clndr_id is required (global or project pool). Work week + exceptions live in CALENDAR.clndr_data (Oracle label: Data). Blob layout is unverified.
Project (Microsoft): Base templates + one project calendar + optional task calendar + per-resource calendars derived from a base. Task calendars are optional.
MPXJ: reads both into ProjectCalendar (hours per weekday, exceptions, work weeks, parent). On write, MPXJ "may end up flattening or otherwise simplifying" a hierarchy so the target app gets something functionally equivalent.
Typically survives (has an analogue)
| From | To | Caveat |
|---|---|---|
| Weekday working / non-working + hours | MSPDI week days / P6 week in clndr_data | Hours/day may not match Admin time-period settings |
| Named one-day or range exceptions | Project exceptions / P6 exceptions | Recurrence expansion can differ |
| Calendar name + assignment to task/activity | Task calendar (Project, optional) / TASK.clndr_id | Project files often have no task calendar |
| Resource calendar | Resource calendar | P6 personal vs shared is not an MSPDI concept |
| Hours per day/week | day_hr_cnt / week_hr_cnt vs Project MinutesPerDay / MinutesPerWeek | Conversion uncertain if "use assigned calendar for time periods" is on |
Usually does not survive cleanly
- P6 global dictionary as a first-class pool inside MSPDI (MSPDI has a calendar list, not EPS-global vs project pools).
clndr_datablob round-trip bit-identical.- P6 resource-cannot-use-project-calendar rule (Plan Academy) vs Project resources based on the project/base calendar.
- Lag calendar option (P6 pred/succ/24h/project). Project lag calendar is unverified.
- Personal resource calendars (
rsrc_private, EPPM-only column).
Uncertain (do not implement as fact)
- Whether MPXJ writes every P6 exception (including recurring / work-week date ranges) into MSPDI
Exceptionrecords completely. - Whether MSPDI
WorkWeeksurvives back into P6clndr_data. - Hours-per-day used when expanding XER
*_hr_cntinto Project durations. - Stored
clndr_typecodes (CA_Base/CA_Project/CA_Rsrcare unverified against Oracle).