Consider revision to way Programs/Services work
Why?
In most communities, clients enroll in a
Program
and they receive
Services
as part of the Program. A Program therefore is an umbrella that contains Services. 
In HIFIS, clients receive Services, and Programs are attached to the Service. A Service therefore is an umbrella that contains Program.
Fields attached to Services make more sense attached to program (i.e. reason for service, referred from), and would save time if client receives lots of services under the same program. Also, on program exit we want to know things like reason for exit and destination.
How?
Create a new screen to enroll a client in a Program. This screen would ask for some generic service fields (like Reason for Service), along with Program Enrollment Date.
On add service screens (i.e. Shelter Book-in, add Goods & Services), take out a number of fields that are going to be consistent for the client across multiple services: Reason for Service shouldn't change much from one day to the next for a specific client, nor would Referred from, and so on.
When a user adds a service, the Programs drop-down menu is populated by programs the client is currently enrolled in. If enrolled in none, have a button next to Program field that says “Enroll in program.” This would create a popup with fields as above (enrolling a client in a Program).
When a service ends, give popup notification “Would you like to exit [client] from [program]?” If they say yes, go to a screen to exit the program, which asks for things like Reason for Exit and Destination at Exit.
Future add-ons
This concept (enroll in a Program) is VERY similar to the process to Add Goods & Services Transaction. Almost everything on the initial screen is basically covered under this concept of enrolling in a Program. If we added the ability to enroll clients in Programs, it would allow the Goods & Services module to be streamlined significantly!