Metadata-Version: 2.1
Name: edc-registration
Version: 0.3.1
Summary: Patient registration module.
Home-page: https://github.com/clinicedc/edc-registration
Author: Erik van Widenfelt
Author-email: ew2789@gmail.com
License: GPL license, see LICENSE
Keywords: django edc registration
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Requires-Python: >=3.7

|pypi| |travis| |codecov| |downloads|

edc-registration
----------------

The model ``RegisteredSubject`` is used by the Edc as the master subject registration table. Only one record may exist per individual. The table has space for PII so typically a ``RegisteredSubject`` instance is created or updated on completion of the informed consent. As always, PII in the Edc is encrypted at rest using ``django-crypto-field``.


For the model and signal to be registered you need to add the AppConfig to your INSTALLED_APPS:

.. code-block:: python

    INSTALLED_APPS = (
        ....
        'edc_registration.apps.AppConfig',
        ....
    )


**UpdatesOrCreatesRegistrationModelMixin**

``RegisteredSubject`` is never edited directly by the user. Instead some other model with the needed attributes is used as a proxy. To have a model perform the task of creating or updating  ``RegisteredSubject``, declare it with the ``UpdatesOrCreatesRegistrationModelMixin``.

For example, a model, ``SubjectEligibility`` or a screening model creates or updates ``RegisteredSubject`` without a subject identifier then a model such as the ``SubjectConsent`` in ``tests.models``, also creates or updates a subject's ``RegisteredSubject`` instance on save. For this to happen, both models are declared with the ``UpdatesOrCreatesRegistrationModelMixin``:

.. code-block:: python

    class SubjectEligibility(UniqueSubjectIdentifierModelMixin,
                             UpdatesOrCreatesRegistrationModelMixin, BaseUuidModel):

        screening_identifier = models.CharField(
            max_length=36,
            null=True,
            unique=True)

    	@property
        def registration_unique_field(self):
            return 'screening_identifier'

        def update_subject_identifier_on_save(self):
            """Overridden to not set the subject identifier on save.
            """
            if not self.subject_identifier:
                self.subject_identifier = self.subject_identifier_as_pk.hex
                self.subject_identifier_aka = self.subject_identifier_as_pk.hex
            return self.subject_identifier

    class SubjectConsent(
        ConsentModelMixin, UpdatesOrCreatesRegistrationModelMixin,
        CreateAppointmentsMixin, IdentityFieldsMixin, ReviewFieldsMixin,
        PersonalFieldsMixin, CitizenFieldsMixin, VulnerabilityFieldsMixin,
        BaseUuidModel):

		@property
	    def registration_unique_field(self):
	        return 'screening_identifier'

	    class Meta:
	        app_label = 'my_app'


The property ``registration_unique_field`` returns a model attribute that is used to set a registration identifier on ``RegisteredSubject``.

A subject's ``RegisteredSubject`` instance is created and updated in a ``post_save`` signal. As mentioned, it is never edited directly by the user.


.. |pypi| image:: https://img.shields.io/pypi/v/edc-registration.svg
    :target: https://pypi.python.org/pypi/edc-registration

.. |travis| image:: https://travis-ci.com/clinicedc/edc-registration.svg?branch=develop
    :target: https://travis-ci.com/clinicedc/edc-registration

.. |codecov| image:: https://codecov.io/gh/clinicedc/edc-registration/branch/develop/graph/badge.svg
  :target: https://codecov.io/gh/clinicedc/edc-registration

.. |downloads| image:: https://pepy.tech/badge/edc-registration
   :target: https://pepy.tech/project/edc-registration


