As Niyas mentioned, api.constrains is the correct way to do this. However, looking at why your code didn't work may help you learn. There were three main issues with the code:
Doing you check before calling super. This means that you are actually checking the values before they are updated. You need to call after super for vals to be applied.
Doing a write hook only. This will not be called on the creation of a record, so a create hook would be required.
Calling self.<field_name> in a function that can take multiple records. This will break if write was called on two or more records. You need to loop over the records in self.
This code will work, but you should still take Niyas' approach as it is the standard way to do this:
def write(self, vals):
# Call super
res = super(df_en_cda001_aprov_com, self).write(vals)
# Loop over records
for rec in self:
if rec.total_desglose_store < rec.plan_year_store:
raise ValidationError(_('Error'))
return res