Skip to main content

Patient registration module.

Project description

pypi travis coverage

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.

RegisteredSubjectModelMixin

Declare RegisteredSubject in your app using the RegisteredSubjectModelMixin, for example:

class RegisteredSubject(RegisteredSubjectModelMixin, BaseUuidModel):
    class Meta:
        app_label = 'my_app'

then in edc_registration AppConfig specify the app_label = 'my_app' so that other modules in the Edc can find the model class. (Note: The model_name is assumed to always be RegisteredSubject).

Other modules can find the model class by accessing the AppConfig:

>>> from django.apps import apps as django_apps
>>> RegisteredSubject = django_apps.get_app_config('edc_registration').model
>>> RegisteredSubject.objects.get(subject_identifier='12345678-9')
<RegisteredSubject: 12345678-9>

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 a 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:

    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.

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

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

However, since RegisteredSubject is not a model in edc_registration, you should subclass AppConfig instead, for example:

from django.apps import AppConfig as DjangoAppConfig
from edc_registration.apps import AppConfig as EdcRegistrationAppConfigParent

class AppConfig(DjangoAppConfig):
    name = 'my_app'

class EdcRegistrationAppConfig(EdcRegistrationAppConfigParent):
    app_label = 'my_app'

and update settings accordingly:

INSTALLED_APPS = (
    ....
    'my_app.apps.EdcRegistrationAppConfig',
    'my_app.apps.AppConfig',
    ....
    )

RegisteredSubjectMixin

Since the app_label of the model class RegisteredSubject is not known when the models classes are loaded, it is difficult to include the class as a foreign key. As a work around, use the RegisteredSubjectMixin. When this mixin is declared on your model, the subject_identifier field is added to the model and verified against RegisteredSubject on each save.

The subject_identifier field is added with editable=False. You must provide the correct subject identifier programmatically or the model will raise an RegisteredSubject.DoesNotExist exception on save.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

edc_registration-0.2.14-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file edc-registration-0.2.14.macosx-10.13-x86_64.tar.gz.

File metadata

  • Download URL: edc-registration-0.2.14.macosx-10.13-x86_64.tar.gz
  • Upload date:
  • Size: 29.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.7.0

File hashes

Hashes for edc-registration-0.2.14.macosx-10.13-x86_64.tar.gz
Algorithm Hash digest
SHA256 9fbaf67b1e8d651ec535848a8d6377eb3f21cb1100c40c9b4a6b9e5ce3a9965c
MD5 124dfb13483786bbd4897cd60ce1ae1e
BLAKE2b-256 b1ef7cf3a533b0165316b5768c0cb000dd4b76d017a1f27469fd3f128859ebdd

See more details on using hashes here.

File details

Details for the file edc_registration-0.2.14-py3-none-any.whl.

File metadata

  • Download URL: edc_registration-0.2.14-py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/3.7.0

File hashes

Hashes for edc_registration-0.2.14-py3-none-any.whl
Algorithm Hash digest
SHA256 95d8256f74714ca652794497700a3cfbd46a90bd1cf8bdd99e916fd22a7331a7
MD5 7f4607f1baf657ffa6fd0a6a2f5500da
BLAKE2b-256 6307c7883c9f6fb2f74305ad1dd7daeeb52994d6471dd637427e3e7e68ffd78f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page