Here is the syntax for 2 x Roles and 2 x PCAT areas identified as needing the custom fields required, does this look right?
<PDM_IF $SESSION.ROLE_ID == 400001 || $SESSION.ROLE_ID == 400151 && "$args.category" == "pcat:400054">
<PDM_MACRO name=dtlTextbox attr=zz_PCName make_required=yes>
<PDM_ELSE>
<PDM_MACRO name=dtlReadonly attr=zz_PCName>
</PDM_IF>
<PDM_IF $SESSION.ROLE_ID == 400001 || $SESSION.ROLE_ID == 400151 && "$args.category" == "pcat:400055">
<PDM_MACRO name=dtlTextbox attr=zz_PCName make_required=yes>
<PDM_ELSE>
<PDM_MACRO name=dtlReadonly attr=zz_PCName>
</PDM_IF>
<PDM_IF $SESSION.ROLE_ID == 400303 || $SESSION.ROLE_ID == 400303 && "$args.category" == "pcat:400054">
<PDM_MACRO name=dtlTextbox attr=zz_PCName make_required=yes>
<PDM_ELSE>
<PDM_MACRO name=dtlReadonly attr=zz_PCName>
</PDM_IF>
<PDM_IF $SESSION.ROLE_ID == 400303 || $SESSION.ROLE_ID == 400303 && "$args.category" == "pcat:400055">
<PDM_MACRO name=dtlTextbox attr=zz_PCName make_required=yes>
<PDM_ELSE>
<PDM_MACRO name=dtlReadonly attr=zz_PCName>
</PDM_IF>