anchor.diff:  	Chars = [{struct, [{"todo", "todo"}]}],
   	Char = {"usageSpecCharacteristic", {array, Chars}},
   	{struct, [ID, Href, Name, Desc, Valid, Char]}.
  +
  +spec_voip() ->
  +	ID = {"id", "VoIPUsageSpec"},
  +	Href = {"href", ?usageSpecPath ++ "VoIPUsageSpec"},
  +	Name = {"name", "VoIPUsageSpec"},
  +	Desc = {"description", ""},
  +	Start = {"startDateTime", "2018-03-12T00:00:00Z"},
  +	End = {"endDateTime", "2018-12-31T23:59:59Z"},
  +	Valid = {"validFor", {struct, [Start, End]}},
  +	Chars = lists:reverse(spec_voip1([])),
  +	Char = {"usageSpecCharacteristic", {array, Chars}},
  +	{struct, [ID, Href, Name, Desc, Valid, Char]}.
  +%% @hidden
  +spec_voip1(Acc) ->
  +	Name = {"name", "callCompletionCode"},
  +	Desc = {"description", "Final call completion code for billing use"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "Number"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	spec_voip2(NewAcc).
  +%% @hidden
  +spec_voip2(Acc) ->
  +	Name = {"name", "hostName"},
  +	Desc = {"description", "Name of call management server controlling call processing"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "String"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	spec_voip3(NewAcc).
  +%% @hidden
  +spec_voip3(Acc) ->
  +	Name = {"name", "subscriberId"},
  +	Desc = {"description", "Unique within a service provider network. Tied to a SC or a SE requesting a service"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "String"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	spec_voip4(NewAcc).
  +%% @hidden
  +spec_voip4(Acc) ->
  +	Name = {"name", "uniqueCallID"},
  +	Desc = {"description", "Unique Call ID to identify that different IPDRs generated by different elements are for the same call"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "String"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	spec_voip5(NewAcc).
  +%% @hidden
  +spec_voip5(Acc) ->
  +	Name = {"name", "disconnectReason"},
  +	Desc = {"description", "Reason that call was disconnected based on Call CompletionCode"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "String"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	spec_voip6(NewAcc).
  +spec_voip6(Acc) ->
  +	Name = {"name", "destinationID"},
  +	Desc = {"description", "ID of called party"},
  +	Conf = {"configurable", false},
  +	Typ = {"valueType", "String"},
  +	Value1 = {struct, [Typ]},
  +	Value = {"usageSpecCharacteristicValue", {array, [Value1]}},
  +	NewAcc = [{struct, [Name, Desc, Conf, Value]} | Acc],
  +	lists:reverse(NewAcc).
   
   %% @hidden
   spec_public_wlan() ->
  
positive.code: 						{"usageSpecification", UsageSpecification},
  						{"usageCharacteristic", UsageCharacteristic}]}],
  						{N + 1, [RespObj | Acc]};
  			(#ipdrDocEnd{}, {N, Acc}) ->
  				{N, Acc}
  	end,
  	lists:foldl(F, {Count, []}, Records).
  
  %% @hidden
  ipdr_wlan_characteristics(#ipdr_wlan{} = Ipdr) ->
  
negative.code: 	Chars = ipdr_wlan_characteristics(Event),
  	Object = {struct, [{"id", ID}, {"href", Href}, {"date", Date}, {"type", Type},
  			{"status", Status}, {"usageSpecification", UsageSpec},
  			{"usageCharacteristic", {array, Chars}}]},
  	case Filters of
  		[] ->
  			Object;
  		_ ->
  			ocs_rest:fields("id,href," ++ Filters, Object)
  	end;
  usage_aaa_ipdr(Event, Filters) when is_record(Event, ipdr_voip) ->
  	UsageSpec = {struct, [{"id", "VoIPUsageSpec"},
  			{"href", ?usageSpecPath ++ "VoIPUsageSpec"},
  			{"name", "VoIPUsageSpec"}]},
  	Type = "VoIPUsageSpec",
  	Status = "rated",
  	Chars = ipdr_voip_characteristics(Event),
  	Object = {struct, [{"type", Type}, {"status", Status},
  			{"usageSpecification", UsageSpec},
  			{"usageCharacteristic", {array, Chars}}]},
  	case Filters of
  		[] ->
  