You're definitely right about the loop. Now that I look at it I don't know why I did it that way. I will change.

As for CHARGE_FOR, I don't like the array approach because that requires that we know/rely on a value in the database when making comparisons in the application (e.g. `if policy.charge_for == 'usage'`). Also, you'd have to remember to convert between symbols and strings when doing comparisons against the constant array. With the Hash approach I'm letting the application shield us from being concerned about values in the DB. 

I can understand preferring to store strings instead of integers, and I'm OK with changing CHARGE_FOR to have string values. That makes viewing the data in the DB easier. I had considered doing so but went with ints because I figured you're going to look at the constant hash anyway before you query (an infrequent action) so it doesn't really matter. So I went with the faster/cheaper storage value (integer).

Whaddya say? Compromise on a Hash with String values?