anchor.diff:  
   %% @hidden
   update(Type, Charge, Reserve, Now, ServiceId, ChargingKey, SessionId,
  -		[#bucket{end_date = Expires, attributes = [],
  +		[#bucket{end_date = Expires, attributes = #{bucket_type := normal},
   		remain_amount = Remain} | T], Acc, Charged, Reserved)
   		when Expires /= undefined, Expires =< Now, Remain >= 0 ->
   	update(Type, Charge, Reserve, Now,
  
positive.code: 			Now, lists:reverse(Acc) ++ CentsBuckets, UnitsBuckets, []);
  convert(Price, Type, Size, ServiceId, ChargingKey, SessionId, Now,
  		[#bucket{remain_amount = R, end_date = Expires,
  		attributes = []} | T], UnitsBuckets, Acc)
  		when R >= 0, Expires /= undefined, Expires =< Now ->
  	convert(Price, Type, Size, ServiceId, ChargingKey, SessionId,
  			Now, T, UnitsBuckets, Acc);
  
negative.code: 			ServiceId, ChargingKey, SessionId, sort(Buckets), 0, []).
  %% @hidden
  charge_session(Type, Charge, Now, ServiceId, ChargingKey, SessionId,
  		[#bucket{remain_amount = Remain, attributes = #{bucket_type := normal},
  		start_date = Start, end_date = Expires} | T], Charged, Acc)
  		when Remain >= 0, Expires /= undefined, Expires =/= Start,
  		Expires =< Now ->
  