anchor.diff:  get_usagespec([] = _Query) ->
   	RespHeaders = [{content_type, "application/json"}],
   	Body = mochijson:encode({array, [spec_aaa_auth(),
  -			spec_aaa_acct(), spec_public_wlan()]}),
  +			spec_aaa_acct(), spec_public_wlan(),
  +			spec_voip()]}),
   	{ok, RespHeaders, Body};
   get_usagespec(Query) ->
   	RespHeaders = [{content_type, "application/json"}],
  
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 = [{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() ->
  