P6 and Microsoft Project
P6 Activity Codes ≠ MSP Outline Code / Text1
ACTVTYPE ≠ Outline Code ≠ Text1; zero or one value per type

What each actually is
P6: a dictionary (ACTVTYPE) + hierarchical values (ACTVCODE) + one assignment per type per activity (TASKACTV). Scopes: Global / EPS / Project. REST: zero or one value per code type. See Activity Codes Are a Pick-List, Not a UDF.
MSP: Outline Code1–10 (or Enterprise Task Outline Code1–30) is a hierarchical lookup on the task. Text1–30 is free text (255 characters), optionally with a value list. Fixed slots, not a three-table dictionary.
Same idea (tag tasks from a list). Not the same object. They usually do not survive a clean XER → MSPDI round-trip as P6 activity codes. See xer-mspdi.md.
What Do not treat as the same
- Do not map ACTVTYPE to MSP Text1 and call it an activity code. Text1 is a UDF-shaped slot.
- Do not map one P6 code type onto Outline Code1 and drop the rest without saying values were lost. Outline codes are numbered slots; P6 types are unbounded.
- Do not assign two values of the same P6 code type to one activity to mimic a multi-value MSP lookup.
- Do not invent
AS_Global/AS_EPS/AS_Projectas Oracle XER tokens. UI/REST say Global, EPS, Project. - Do not treat
wbs_short_nameor a project code (PROJPCAT) as an activity code. - Do not treat an activity code as a UDF. Different tables. See udf-map.md.