How to avoid verbose fields in transactions

Good day, everyone!
i’m writing a testbench for a module, that receives coded word from two input lines of one interface. every line may have distorted bits.

My code for transaction look this way:

class ds_transaction extens uvm_sequence_item;

rand bit [DATA_W-1:0] data;//not coded data

rand bit [CODE_W-1:0] error_ch1;//distortion in coded data in ch1 (hot-bit)
rand bit [CODE_W-1:0] error_ch2;//distortion in coded data in ch2 (hot-bit)
...
endclass

In children classes i make constraints for error_ch1 and error_ch2:

constraint err1_con {
$countones(error_ch1) inside [0:2];
}

constraint err2_con {
$countones(error_ch2) inside [0:2];
}

But when i started to write monitor for this interface, i realized, that i need two additional fields in my transaction class: one for coded data in first channel, and one - in second. Now transaction looks like this:

class ds_transaction extens uvm_sequence_item;

rand bit [DATA_W-1:0] data;//not coded data

rand bit [CODE_W-1:0] error_ch1;//distortion in coded data in ch1 (hot-bit)
rand bit [CODE_W-1:0] error_ch2;//distortion in coded data in ch2 (hot-bit)

bit [CODE_W-1:0] coded_data_ch1;
bit [CODE_W-1:0] coded_data_ch2;
...
endclass

Now i make coded words and distort them in sequnce (i used to do it in driver before). But when i look at this transaction,
i realise, that the only place, where variables “data”, “error_ch1” and “error_ch2” are required, is my sequence. So, in fact,
I’ve made my transaction class pretty verbose.
How should i properly write transaction then? Or, maybe, it’s a common problem and there’s nothing to worry about?