Wesley,
Thank you for this message. There have been many registration-related efforts over the years (e.g., amrsregistration, registration, remoteregistration, and rwandaprimarycare modules represent some of these). Most of these share some fundamental traits, but were created as separate projects because of varying requirements, for lack of resources for the extra effort needed to collaborate, or simply for lack of coordinated efforts). It would be wonderful to start converging on the basic registration functions needed and get these into a registration module that can be shared. Since most of the modules have different requirements/dependencies at the UI layer, one approach might be to try to create a registration module that focuses on providing the registration service (API functions) needed across most/all registration applications (finding a unique patient, tools to find/avoid creating duplicate patients, registration-specific events like providing a hook for other modules to listen for registration events and/or sending out an HL7 ADT message upon registration, etc.). While there might be a single registration application (UI) that would meet most needs, it may be more effective to start by tackling the smaller task of creating the fundamental services/pieces needed across registration applications and thereby creating a module all other registration modules could use as a foundation from which they could focus solely on implementation-specific UI needs.
My assumption would be that some of these services would need to provide hooks for implementations to insert their special sauce. For example, provide default algorithms for searching for a patient and for searching for potential duplicate patients, but expose hooks that implementations (or other modules) could easily adjust or replace these algorithms to meet their local needs.
So, you may consider splitting your module in two: focusing the collaborative effort on creating a foundational registration module upon which multiple implementation could share the load, and then creating the rest of the functionality you need in a module that depends on this first module and implements the features for which you may have a harder time finding collaboration opportunities.
This sounds like a potential topic for an upcoming forum. Maybe a message to the implementers list to locate people with existing solutions, interest, ideas that could be consolidated within an
OpenMRS Forum. Then adding this to an agenda or two of future design forums.
Cheers,