You're getting confused between the reader property branch and the partition plan property parameterForWhereClause whose value is substituted into the per-partition value for branch.
Something like this would work, in JSL:
<step id="StepID" start-limit="1">
<chunk checkpoint-policy="item" item-count="10">
<reader
ref="ReaderClass">
<properties >
<property name="parameterForWhereClause" value="#{partitionPlan['branch']}"/>
</properties>
</reader>
<writer
ref="WriterClass">
</writer>
</chunk>
<partition>
<plan partitions="2" threads="2">
<properties partition="0">
<property name="branch" value="XYZ"/>
</properties>
<properties partition="1">
<property name="branch" value="ABC"/>
</properties>
</plan>
</partition>
</step>
(I took out the step-level property since it wasn't obvious you were really making use of it.)
So the way to understand this is that the Java artifact's property name (which is just going to be the field name if you have a @BatchProperty without a name annotation value) is going to match the JSL reader property's name. So I changed the JSL reader property's name to parameterForWhereClause to match your field.
Since the reader is a partition-level artifact (for a partitioned step), it can use a partitionPlan substitution, which is what I show supplying the value for the parameterForWhereClause property of the reader.