Views, Filters & Print
P6 Activity Constraints (Task.cstr_type)
TASK.cstr_type codes and float effects

P6 allows an activity to carry a primary and a secondary constraint at once, stored as cstr_type / cstr_type2 with dates cstr_date / cstr_date2.
Codes
Oracle's XER TASK map labels cstr_type as "Primary Constraint" but does not list the stored strings that column can hold. The codes below come from two other Oracle sources — the CPP constraint list and the Prime-to-P6 map — and MPXJ's PrimaveraReader maps the same CS_* strings in its own converter. Where a code appears in only one of the two Oracle lists, that gap is noted rather than assumed away.
| Code | Meaning | Hard/soft (Oracle) | In CPP map | In Prime map | MPXJ maps to |
|---|---|---|---|---|---|
CS_ASAP | As Soon As Possible | — | yes | not listed on the page fetched | not in the historical MPXJ map we fetched |
CS_MSO | Must Start On / Start On | CPP: hard | yes | yes (START_ON) | MUST_START_ON |
CS_MSOA | Start On or After | CPP: soft | yes | yes | START_NO_EARLIER_THAN |
CS_MSOB | Start On or Before | CPP: hard | yes | yes | START_NO_LATER_THAN |
CS_MEO | Must Finish On / Finish On | CPP: hard | yes | yes (FINISH_ON) | MUST_FINISH_ON |
CS_MEOA | Finish On or After | CPP: soft | yes | yes | FINISH_NO_EARLIER_THAN |
CS_MEOB | Finish On or Before | CPP: hard | yes | yes | FINISH_NO_LATER_THAN |
CS_MANDSTART | Mandatory Start | hard | yes | yes | MUST_START_ON (MPXJ collapses this) |
CS_MANDFIN | Mandatory Finish | hard | yes | yes | MUST_FINISH_ON (MPXJ collapses this) |
CS_ALAP | As Late As Possible | — | not in CPP list fetched | yes | AS_LATE_AS_POSSIBLE |
Whether the XER stores "no constraint" as a blank field, as CS_ASAP, or simply omits the field entirely is unverified. Confirm on a live XER before treating an empty value as ASAP.
P6 Professional help and P6 EPPM help disagree with the CPP map on which constraints count as "hard" versus "soft." Professional and EPPM help define hard as Mandatory Start and Mandatory Finish only, with everything else — Start On, Start On or Before/After, Finish On, Finish On or Before/After — counted as soft; soft constraints, in Oracle's words, "do not prevent activities from being moved, but can distort float." The CPP map instead treats CS_MSO, CS_MSOB, CS_MEO, and CS_MEOB as hard. Both sources are worth recording, but for actual scheduling behavior, defer to the P6 help pages rather than the CPP hard/soft tags.
Effects on dates and float (P6 help)
Start On can delay the early start or pull the late start to the constraint date. Start On or Before affects late dates only, and can decrease total float — it is applied on the backward pass only if the calculated late start would otherwise fall later than the imposed date. Start On or After affects early dates only, applied on the forward pass only if the calculated early start would otherwise fall earlier than the imposed date. Finish On can delay the early finish or pull the late finish. Finish On or Before affects late dates only. Finish On or After sets the earliest finish and, in Oracle's phrasing, "reduces float to coordinate parallel activities." As Late As Possible, applied to an activity with positive float, sets the early dates as late as possible without delaying successors. Mandatory Start imposes both the early and late start regardless of network logic, and Oracle notes it is used "regardless of its effect on network logic" — it can change the late dates of predecessors and the early dates of successors. Mandatory Finish does the same for finish dates, overriding network logic in the same way.
Expected Finish is not a cstr_type value. It lives in a separate column, TASK.expect_end_date, and is used only optionally when scheduling.
P6 vs Project names
Microsoft Project has no Mandatory Start/Finish category distinct from Must Start On / Must Finish On. MPXJ maps both P6's mandatory constraints and its "on" constraints to the same Project fields — Must Start On and Must Finish On — which means that collapse loses the P6 distinction between a mandatory constraint and an "on" constraint. See msp/constraints.md and convert/xer-mspdi.md for how that mapping plays out in practice.