anchor.diff:  rc_period(weekly) -> "weekly";
   rc_period(daily) -> "daily".
   
  --spec find_status(StringStatus) -> Status when
  -	StringStatus	:: string(),
  -	Status			:: product_status().
  -%% @doc return life cycle status of the product
  -%% @private
  -find_status("active") -> active;
  -find_status("created") -> created;
  -find_status("aborted") -> aborted;
  -find_status("cancelled") -> cancelled;
  -find_status("suspended") -> suspended;
  -find_status("terminate") -> terminate;
  -find_status("pending_active") -> pending_active;
  -find_status("pending_terminate") -> pending_terminate.
  +-spec product_offering_status(Status) -> Status
  +	when
  +		Status :: product_offering_status() | string().
  +%% @doc CODEC for life cycle status of Product instance.
  +%% @private
  +product_offering_status("In Study") -> in_study;
  +product_offering_status("In Design") -> in_design;
  +product_offering_status("In Test") -> in_test;
  +product_offering_status("Active") -> active;
  +product_offering_status("Rejected") -> rejected;
  +product_offering_status("Launched") -> launched;
  +product_offering_status("Retired") -> retired;
  +product_offering_status("Obsolete") -> obsolete;
  +product_offering_status(in_study) -> "In Study";
  +product_offering_status(in_design) -> "In Design";
  +product_offering_status(in_test) -> "In Test";
  +product_offering_status(active) -> "Active";
  +product_offering_status(rejected) -> "Rejected";
  +product_offering_status(launched) -> "Launched";
  +product_offering_status(retired) -> "Retired";
  +product_offering_status("Obsolete") -> obsolete.
  +
  +-spec product_status(Status) -> Status
  +	when
  +		Status :: product_status() | string().
  +%% @doc CODEC for life cycle status of Product Offering.
  +%% @private
  +product_status("Created") -> created;
  +product_status("Pending Active") -> pending_active;
  +product_status("Aborted") -> aborted;
  +product_status("Cancelled") -> cancelled;
  +product_status("Active") -> active;
  +product_status("Suspended") -> suspended;
  +product_status("Pending Terminate") -> pending_terminate.
  +product_status("Terminated") -> terminated;
  +product_status(created) -> "Created";
  +product_status(pending_active) -> "Pending Active";
  +product_status(aborted) -> "Aborted";
  +product_status(cancelled) -> "Cancelled";
  +product_status(active) -> "Active";
  +product_status(suspended) -> "Suspended";
  +product_status(pending_terminate) -> "Pending Terminate";
  +product_status(terminated) -> "Terminated".
   
   -spec price_type(StringPriceType) -> PriceType when
   	StringPriceType :: string() | atom(),
  
positive.code: patch_replace4(_, _) ->
  	{error, unprocessable}.
  
  target(#product{} = Product) ->
  	ID = prod_id(Product),
  	Href = prod_href(Product),
  	Name = prod_name(Product),
  	Description = prod_description(Product),
  	ValidFor = prod_vf(Product),
  	IsBundle = prod_isBundle(Product),
  	Status = prod_status(Product),
  	case product_offering_price(Product) of
  		{error, StatusCode} ->
  			{error, StatusCode};
  		OfferPrice ->
  			{struct, [ID, Href, Name, Description,
  					ValidFor, IsBundle, Status, OfferPrice]}
  	end;
  target({struct, ObjectMembers}) ->
  	try
  		Name = prod_name(ObjectMembers),
  		Description = prod_description(ObjectMembers),
  		IsBundle = prod_isBundle(ObjectMembers),
  		Status = prod_status(ObjectMembers),
  		{StartDate, EndDate} = prod_vf(ObjectMembers),
  		case product_offering_price(ObjectMembers) of
  			{error, StatusCode} ->
  				{error, StatusCode};
  			Price ->
  				#product{price = Price, name = Name,
  						description = Description,
  						start_date = StartDate, end_date = EndDate,
  						is_bundle = IsBundle, status = Status}
  		end
  	catch
  		_:_ ->
  			{error, 400}
  	end.
  
  %% @hidden
  query_start(Query, Filters, RangeStart, RangeEnd) ->
  
negative.code: 			Product1
  	end;
  patch_replace(["lifecycleStatus"], Value, Product) when is_list(Value) ->
  	S = product_status(Value),
  	Product#product{status = S};
  patch_replace(["productOfferingPrice" | T], Value, Product) ->
  	case patch_replace1(prod_price, T, Value, Product#product.price) of
  