Update Value.amount description to suggest/recommend tax-free amounts
Closed this issue ยท 10 comments
Following discussion from #383 (comment) and following comments.
In CRM-5172, we discussed the possibility of a publisher/aggregator having a tax-inclusive amount and not being able to determine the tax-free amount. The options would be:
- Put the value after tax in
amountGross
, and don't setamount
. This will produce a combined dataset in which eitheramount
oramountGross
is set depending on whether tax is included or not. Not every value will have anamount
(tools or analyses that are unaware ofamountGross
, and that don't warn or error whenamount
is missing, will have incomplete data), but at least every field will have consistent semantics, independent of the values of other fields. - Use the boolean
valueAddedTaxIncluded
from this extension, and put the value after tax inamount
. This will produce a combined dataset in whichamount
is either with or without tax depending onvalueAddedTaxIncluded
. This will make amounts harder to compare (tools or analyses that are unaware ofvalueAddedTaxIncluded
will get incorrect answers), but at least every value will have anamount
.
The first option is preferred, because inconsistent semantics (second option) seems very bad. And it is easier for a tool/analysis to error/warn if an expected field is missing, than for it to somehow know that another field is changing the semantics of amount
.
We should determine whether any publishers are in a scenario where they either (1) don't know which amounts are tax-free or (2) can't calculate the tax-free amount.
If so, we can clarify that amount
is for the amount as stated on the tender notice / award notice / contract document. We would then recommend that, wherever possible, both amountNet
and amountGross
fields are filled in. That way, if a dataset has amountNet
and amountGross
, then users can have access to fields with consistent semantics; if the dataset lacks the fields, then users can know the caveats around amount
.
Our scenario as a publisher is mentioned in #817 (comment). We have a dataset that is compiled from many different sources, all of them relating to contracts published by different agencies in the Mexican government. We know that some of the datasets have taxes included in the amount and some don't, but the exact percentage of tax has been impossible to determine.
On all of our datasets the exact percentage of tax varies from contract to contract, whether the amount provided includes tax or not. We have filed many requests for information to determine exact tax percentages by contract, but the responses have not helped us solve this, since they only include the possible values for tax percentage but not which contracts are associated with each tax value. So the best we can do is to express whether or not the amount includes taxes or not.
We agree with the last comment. The best solution would be to have all 3 fields present in the compiled dataset. This way all contracts provide at least one amount (in the amount field) and in the cases where we do know whether or not tax is included we can fill in either amountGross or amountNet.
Thank you, @fmatzdorf, for sharing evidence supporting that option!
If so, we can clarify that amount is for the amount as stated on the tender notice / award notice / contract document. We would then recommend that, wherever possible, both amountNet and amountGross fields are filled in. That way, if a dataset has amountNet and amountGross, then users can have access to fields with consistent semantics; if the dataset lacks the fields, then users can know the caveats around amount.
I quite like the approach above, but I have two doubts:
- Do I understand it correctly that the two new fields are either including / excluding all taxes, not just VAT? If yes, good. Knowing the exact values/percentages for different types of taxes is unnecessary for most users, I think.
- In #896 (comment), we mention distinguishing
value
andmaximumValue
(for a framework agreement) as well as potentially anestimatedValue
(for a framework agreement). Combining it with the three tax-related fields, we have nine value fields (applicable inTender
,Award
andContract
), which is a bit longwinded.-
Perhaps that's not a problem.
-
Perhaps that's something we can live with in OCDS 1.2 and then we can do a backwards-incompatible change in OCDS 2.0 of adding a layer into
Value
, so thatValue
contains the nine values, each of which then contains anamount
andcurrency
. -
Perhaps we should change
Value
into an array and add something liketax
within, which can contain 'gross', 'net' and 'unknown' (and probably clarifies that empty means 'unknown' as well); as well as adding something liketype
intoValue
, which can contain 'maximum', 'estimated', 'actual/real/awarded/signed'. This would make it more compact (and probably more flexible for the future, e.g. for adding detailed tax information), but the meaning of one field would influence another. On the other hand, that's always been the case forValue
, so I'm wondering whether it's a serious problem. Assuming that changing a normal field to an array is a backwards incompatible change, in OCDS 1.2, we could only add the classifying fields, but not changeValue
to an array, that would have to wait for OCDS 2.0.I find the third option slightly preferable.
-
Do I understand it correctly that the two new fields are either including / excluding all taxes, not just VAT? If yes, good. Knowing the exact values/percentages for different types of taxes is unnecessary for most users, I think.
Yes, amountNet
should be defined to exclude all taxes.
For the rest, I think we need a separate issue, as it's about changing the structure of the Value
object, rather than adding/updating its fields. I created #1143
Does this issue (expanding the description of Value.amount
) depend on the fate of #1143?
#1143 is abandoned. This issue can proceed.
Checking if this issue can move to PR and if so clarifying that what's required is 2 new fields value.amountNet
and value.amountGross
and an update to the description of value.amount
to make clear it's the amount as stated in the tender/award/contract documentation?
Yes, there seems to be consensus around #817 (comment)