Relationships & Logic
Project Constraints vs P6 Constraint Codes
ASAP…MFO and MSPDI ConstraintType 0–7 vs P6 CS_*

Project / MSPDI
Microsoft ConstraintType (Task element). ConstraintDate required unless type is 0 or 1.
| MSPDI | Name | Common abbrev |
|---|---|---|
| 0 | As soon as possible | ASAP |
| 1 | As late as possible | ALAP |
| 2 | Must start on | MSO |
| 3 | Must finish on | MFO |
| 4 | Start no earlier than | SNET |
| 5 | Start no later than | SNLT |
| 6 | Finish no earlier than | FNET |
| 7 | Finish no later than | FNLT |
Contrast with P6
| P6 (CS_*) | Closest Project | Not the same because |
|---|---|---|
| CS_ASAP / none | ASAP (0) | Whether XER stores ASAP is unverified |
| CS_ALAP | ALAP (1) | Similar idea; calendars differ |
| CS_MSOA | SNET (4) | MPXJ maps it this way |
| CS_MSOB | SNLT (5) | MPXJ maps it this way |
| CS_MEOA | FNET (6) | MPXJ maps it this way |
| CS_MEOB | FNLT (7) | MPXJ maps it this way |
| CS_MSO | MSO (2) | P6 "Start On" is soft in P6 help; Project MSO is a must |
| CS_MEO | MFO (3) | Same caveat |
| CS_MANDSTART | MSO (2) | P6 mandatory overrides logic; Project has no separate mandatory |
| CS_MANDFIN | MFO (3) | Same |
Proved for this team: MPXJ collapses P6 mandatory and "on" constraints to the same Project type. A round-trip cannot restore Mandatory vs Start On.