# simple_policy.py from datetime import date from policy import Policy, Section # - For the rules, should one refer to fields by 'section.fields.x' # or by the section name eg. 'general_section.fields.x'? #### General #### Section 0 general_section = Section( title="General Info", html_description="", fields={ "destination": {"label": "Destination City", "type": "string"} } ) general_section.add_rule( title="Destination city check", rule=lambda report, section: section.field.destination == "Timbuktu", rule_break_text="What did the cowboy say about Tim, his wild horse?" ) Policy.add_section(general_section) #### Flight #### Section 1 flight_section = Section( title="Flight Info", html_description="

Enter flight details here.

", fields={ "international": {"label": "Is this an international flight?", "type": "boolean"}, "departure_date": {"label": "Departure date", "type": "date"}, "return_date": {"label": "Return date", "type": "date"}, "fare": {"label": "Fare", "type": "decimal"}, } ) flight_section.add_rule( title="Airline fare pre-approval check", rule=lambda report, section: section.fields.fare < 500, rule_break_text="Fares cannot be more than $500" ) Policy.add_section(flight_section) #### Lodging #### Section 2 lodging_section = Section( title="Hotel Info", html_description="

Enter hotel info here.\nPer diem rates can be found at

", fields={ "check-in_date": {"label": "Check-in date", "type": "date"}, "check-out_date": {"label": "Check-out date", "type": "date"}, "rate": {"label": "Per diem nightly rate", "type": "decimal"}, "cost": {"label": "Total Cost", "type": "decimal"} } ) def nightly_rate_check(report, section): checkin_date = date(section.fields.checkin_date) checkout_date = date(section.fields.checkout_date) duration = checkout_date - checkin_date return section.fields.cost <= duration * section.fields.rate section.add_rule( title="", rule=nightly_rate_check, rule_break_text="The average nightly rate cannot be more than the USGSA rate." ) Policy.add_section(lodging_section) #### Local Transportation #### Section 3 transport_section = Section( title="Local Transportation", html_description="

How much did you spend on local transportation, in total?

", fields={ "duration": {"label": "How many days was your trip?", "type": "decimal"}, "cost": {"label": "Total cost", "type": "decimal"} } ) transport_section.add_rule( title="Total cost check", rule=lambda report, section: section.fields.cost <= section.fields.duration * 10, rule_break_text="Local transportation costs must be less than $10 per day, on average." ) Policy.add_section(transport_section) #### Per Diem #### Section 4 per_diem_section = Section( title="Per Diem", html_description="

Enter info about meals and incidentals here.\nPer diem rates can be found at

", fields={ "duration": {"label": "How many days was your trip?", "type": "decimal"}, "rate": {"label": "What is the per diem rate for your destination?", "type": "decimal"}, "cost": {"label": "Total Cost for meals and incidentals", "type": "decimal"} } ) per_diem_section.add_rule( title="Per Diem Cost Check", rule=lambda report, section: section.fields.cost <= section.fields.duration * section.fields.rate, rule_break_text="The average cost per day for per diem expenses cannot be more than the rate specified by the USGSA." ) Policy.add_section(per_diem_section) ''' Section( title="", html_description="

", fields={ "": {"label": "", "type": ""} } ) section.add_rule( title="", rule=lambda report, section: boolean_statement, rule_break_text="" ) #// or, for a rule which doesn’t apply to a specific section... #// #// add_general_rule(...) '''