IHE Profile Design Principles and Conventions
IHE has evolved a number of concepts, principles, mechanisms and conventions for designing, structuring and documenting solutions to user problems.
If you find yourself wanting to go against one of these guidelines you should REALLY bring it to the Domain Coordination Committee for discussion so either you can be talked out of it or this page can be updated to make room for your situation.
- A profile is the fundamental concept of IHE. If a user simply gets the same profile on all their systems, the main features of the profile should work.
- A profile should solve a describable user need/problem.
- A profile should use flexible mechanisms that can be adapted to site differences.
- A profile should avoid having two different mechanisms to do the same thing.
- A profile should generally have standalone value (i.e. it adds value when deployed alone, even if it's full benefits might not be realized until it is deployed together with other profiles).
- A profile is something a vendor can claim, a Connectathon can test, and a user can request. It allows a short profile name to "include by reference" the many pages of detailed specification behind it. "Brief AND Effective".
- A profile is a "unit of marketing". It should generally address problems users can relate to and be named for users. Where transactions talk to engineers, profiles should talk to users.
- Profile granularity is a tradeoff:
- Large profiles require less decision making and coordination on the part of the user.
- Small profiles give users more flexibility to select features a la carte and design their own solutions.
- In general, err on the side of making larger profiles.
- Profiles go through several Phases of Development
- A dependency is a requirement that when a system implements one profile/actor, it must also implement another profile/actor.
- Dependencies should be limited to situations where the dependent profile will not function or provide value if the other profile is not present. E.g. PGP depends on CPI and SWF to function.
- Dependencies should not be used for "useful synergies". Selection of profiles should be left to the user/market. If they want both they can ask for both.
- Options are evil and should have been called extensions. :-)
- An option is a (minor) extension of capability in a profile.
- If a user is completely unaware of the options and ignores them, the primary features of the profile should function.
- Actors are assigned to profiles when they have a role to fill.
- An actor is what a user (or another system) interacts with (in a sense).
- An actor represents a "bundle of responsibility".
- Focus on what an actor is responsible for in a larger sense. Don't name them based on a single transaction they are at the end of. It's OK to have various actors at the other end of a transaction.
- Using the same Actor in multiple profiles is acceptable and encouraged when the role/responsibility is essentially the same.
- If a certain function could logically belong in more than one place, it should probably be a separate actor.
- If a function could reasonably be a standalone product, it should probably be a separate actor.
- Actor granularity is a tradeoff:
- A transaction should complete a specific task (see granularity discussion below).
- A transaction should usually select a single standard.
- A transaction may involve bi-directional communication (e.g., query and response).
- Transaction names should usually be Verb-Noun, describing what is accomplished from the point of view of the initiator (e.g. Store Image, Register Document Set)
- Avoid making a transaction name the same as a profile name
- Transactions can be used in multiple profiles. Transaction design should keep this type of reuse in mind.
- Transactions can be assigned to multiple actors.
- Transaction granularity is a tradeoff:
- Transactions might be split if parts of it could logically be used separately
- Transactions should not be split gratuitously. They should complete some collection of work.
- Grouped Actors are actors which are implemented together on a single system.
- Vendors commonly group actors to bring together useful collections of functionality.
- Some profiles require that an implementation group certain actors together.
- Grouped Actors are permitted to use equivalent non-IHE protocols when performing transaction functions between themselves. E.g. A Display that is grouped with an Image Manager may use an internal protocol to retrieve images rather than the DICOM protocol required in the IHE Retrieve Images transaction.
- Grouped Actors are still required to support all the required IHE transactions in order to integrate with Actors on other systems. E.g. The Image Manager in the previous example must be able to use DICOM as specified in the IHE Retrieve Images transaction to provide images to an external Display actor.