This query shows that ArticleProcessingCharge uses two different fields (hasPrice, hasValue) for the same attribute,
depending on the incoming relation (is it about Work or Source):
PREFIX soa: <https://semopenalex.org/ontology/>
select * {
{select * {
?x ?p ?y. ?y soa:hasPrice []; a ?type
} limit 5 offset 456}
union
{select * {
?x ?p ?y. ?y soa:hasValue []; a ?type
} limit 5 offset 123}
}
The same holds of hasPriceUSD vs hasValueUSD.
These 4 fields are properly documented in the ontology:

But there is no justification to keep all 4.
I vote to keep hasValue, hasValueUSD because some may argue that "charge" and "price" are not quite the same thing.