anchor.diff:  -spec resource_exists(path_token(), path_token()) -> 'true'.
   resource_exists() -> 'true'.
   resource_exists(_) -> 'true'.
  -resource_exists(?GENERATE,_) -> 'true';
   resource_exists(_,?ATTACHMENT) -> 'true'.
   
   -spec content_types_provided(cb_context:context()) -> cb_context:context().
  +-spec content_types_provided(cb_context:context(), path_token()) -> cb_context:context().
   -spec content_types_provided(cb_context:context(), path_token(), path_token()) -> cb_context:context().
   content_types_provided(Context) ->
       Context.
  -content_types_provided(Context,?GENERATE,_) ->
  -    Context;
  +content_types_provided(Context,?GENERATE) ->
  +    Context.
   content_types_provided(Context,_,?ATTACHMENT) ->
       CTP = [{'to_binary', [{<<"application">>, <<"pdf">>}]}],
       cb_context:set_content_types_provided(Context, CTP).
  
positive.code: validate(Context, ?PERIOD_BALANCE) ->
      validate_period_balance(Context, cb_context:req_verb(Context));
  validate(Context, ?CURRENCY_SIGN) ->
      validate_currency_sign(Context, cb_context:req_verb(Context)).
  validate(Context, ?GENERATE, Id) ->
      validate_generate(Context, Id, cb_context:req_verb(Context));
  validate(Context, Id, ?ATTACHMENT) ->
      validate_onbill(Context, Id, ?ATTACHMENT, cb_context:req_verb(Context)).
  
  -spec validate_generate(cb_context:context(), ne_binary(), http_method()) -> cb_context:context().
  validate_generate(Context, AccountId, ?HTTP_PUT) ->
      PeriodTimestamp = kz_json:get_integer_value(<<"period_timestamp">>, cb_context:req_data(Context)),
      validate_generate_ts(Context, AccountId, PeriodTimestamp).
  
  
negative.code: -spec allowed_methods(path_token(),path_token()) -> http_methods().
  allowed_methods() ->
      [?HTTP_GET].
  allowed_methods(?GENERATE) ->
      [?HTTP_PUT];
  allowed_methods(_) ->
      [?HTTP_GET].
  allowed_methods(_,?ATTACHMENT) ->
      [?HTTP_GET].
  
  