在edc中管理标识符
edc-identifier的Python项目详细描述
EDC标识符
将研究对象标识符和其他有用的标识符添加到项目中
安装
添加到设置:
INSTALLED_APPS=[...'edc_identifier.apps.AppConfig',...]
研究对象的标识符
创建主题标识符。
fromedc_identifier.subject_identifierimportSubjectIdentifiersubject_identifier=SubjectIdentifier(subject_type_name='subject',model='edc_example.enrollment',protocol='000',device_id='99',study_site='40')>>>subject_identifier.identifier'000-40990001-6'
母婴识别码
参见,{TT1} $模型MIXIN ^ {TT2} $,^ {TT3}$。
例如:
fromedc_identifier.maternal_identifierimportMaternalIdentifiermaternal_identifier=MaternalIdentifier(subject_type_name='maternal',model='edc_example.enrollment',study_site='40',last_name='Carter')>>>maternal_identifier.identifier'000-40990001-6'
添加婴儿
>>>maternal_identifier.deliver(2,model='edc_example.maternallabdel')>>>[infant.identifierforinfantinmaternal_identifier.infants]['000-40990001-6-25','000-40990001-6-26']
maternal_identifier.infants是InfantIdentifier实例的列表
重新加载类:
>>>maternal_identifier=MaternalIdentifier(identifier='000-40990001-6')>>>maternal_identifier.identifier'000-40990001-6'>>>[infant.identifierforinfantinmaternal_identifier.infants]['000-40990001-6-25','000-40990001-6-26']
只为一个双胞胎婴儿分配一个标识符:
>>>maternal_identifier.deliver(2,model='edc_example.maternallabdel',birth_orders='2')>>>[infant.identifierforinfantinmaternal_identifier.infants][None,'000-40990001-6-26']
三胞胎中,仅为第2和第3个婴儿分配标识符:
>>>maternal_identifier.deliver(3,model='edc_example.maternallabdel',birth_orders='2,3')>>>[infant.identifierforinfantinmaternal_identifier.infants][None,'000-40990001-6-37','000-40990001-6-38']
研究主题标识符类可以创建注册的主题实例
另请参见edc_registration
SubjectIdentifier默认情况下不会创建RegisteredSubject实例,除非create_registration=True。
默认情况下,MaternalIdentifier和InfantIdentifier创建RegisteredSubject实例,这些实例可以在稍后使用传递和出生模型更新完整的详细信息。从上面继续:
maternal_identifier=MaternalIdentifier(identifier='000-40990001-6')maternal_identifier.deliver(1,model='edc_example.maternallabdel',create_registration=True)# mother>>>RegisteredSubject.objects.get(subject_identifier='000-40990001-6')<RegisteredSubject'000-40990001-6'># infant is linked to the mother>>>RegisteredSubject.objects.get(linked_identifier='000-40990001-6')<RegisteredSubject'000-40990001-6-10'># infant>>>obj=RegisteredSubject.objects.get(subject_identifier='000-40990001-6-10')>>>obj.first_name'Baby1Carter'## generates a temp name until Birth form is added with complete information.>>>obj.relative_identifier'000-40990001-6'
主题类型“caps”由研究主题标识符类强制执行
另请参见edc_protocol
在创建标识符时,将强制限制每个主题类型可以分配的标识符数量。edc_identifier从edc_protocol.apps.AppConfig读取“caps”,将主题类型(例如subject、或maternal或infant)链接到相关的cap,并且不允许分配的标识符数量超过cap。
(主题类型“caps”仍然有效?需要验证)
数字标识符
数字标识符使用校验位,如果指定,则可以有分隔符。
fromedc_identifierimportNumericIdentifierclassMyIdentifier(NumericIdentifier):pass>>>id=MyIdentifier(None)>>>idMyIdentifier('00000000018')>>>next(id)'00000000026'>>>next(id)'00000000034'# add a separatorclassMyIdentifier(NumericIdentifier):identifier_pattern=r'^[0-9]{4}\-[0-9]{4}\-[0-9]{4}$'checkdigit_pattern=r'^\-[0-9]{1}$'separator='-'seed=['3200-0000-0000']>>>id=MyIdentifier(None)>>>idMyIdentifier('3200-0000-0001-1')>>>next(id)'3200-0000-0002-9'>>>next(id)'3200-0000-0003-7'# start from the last identifier, increment is immediate and automatic>>>id=MyIdentifier('3200-0000-3222-0')>>>idMyIdentifier('3200-0000-3223-8')
字母数字标识符
fromedc_identifierimportAlphanumericIdentifierclassMyIdentifier(AlphanumericIdentifier):alpha_pattern=r'^[A-Z]{3}$'numeric_pattern=r'^[0-9]{4}$'seed=['AAA','0000']>>>id=MyIdentifier(None)>>>idMyIdentifier('AAA00015')
您的标识符将以“aaa0001”加上校验数字“5”开头。对下一个增量的后续调用如下:
>>>print(next(id))AAA00023>>>print(next(id))AAA00031>>>print(next(id))AAA00049
标识符在数字序列上递增,然后是字母:
>>>id=MyIdentifier('AAA99991)>>>idMyIdentifier('AAB00013')>>>next(id)'AAB00021'>>>next(id)'AAB00039'>>>next(id)'AAB00047'>>>id=MyIdentifier('AAB99999')>>>idMyIdentifier('AAC00010')...
有关使用settings和History模型的示例,请参见getresults-receive。
短标识符
创建一个几乎唯一的小标识符,例如,在社区中的25个EDC设备上。我们使用这些作为样本申请标识符,这些标识符是从家庭的edc屏幕手动转录到一个管道上的。一旦在本地实验室接收到样本,就会分配一个实验室范围内的唯一样本标识符。
fromedc_identifierimportShortIdentifier>>>ShortIdentifier()ShortIdentifier('46ZZ2')
添加静态前缀–prefix(2) + identifier(5):
fromedc_identifierimportShortIdentifierclassMyIdentifier(ShortIdentifier):prefix_pattern=r'^[0-9]{2}$'>>>options={'prefix':22}>>>id=MyIdentifier(options=options)>>>idMyIdentifier('22UYMBT')>>>next(id)'22KM84G'
添加校验位–prefix(2) + identifier(5) + checkdigit(1):
fromedc_identifierimportShortIdentifierclassMyIdentifier(ShortIdentifier):prefix_pattern=r'^[0-9]{2}$'checkdigit_pattern=r'^[0-9]{1}$'>>>options={'prefix':22}>>>id=MyIdentifier(options=options)>>>idMyIdentifier('223GF8A3')>>>next(id)'22DXVW23'
我们在EDC配额中使用此项获取确认代码:
fromedc_identifierimportShortIdentifierclassConfirmationCode(ShortIdentifier):identifier_type='confirmation'prefix_pattern=''>>>code=ConfirmationCode()>>>print(code)CAT33>>>next(code)3FU7D
添加更多前缀,如设备代码和社区代码。
fromedc_identifier.short_identifierimportShortIdentifierclassRequisitionIdentifier(ShortIdentifier):identifier_type='requisition'prefix_pattern=r'^[0-9]{4}$'template='{device_id}{community_id}{random_string}'@propertydefoptions(self):if'prefix'notinself._options:self._options.update({'prefix':str(self._options.get('device_id'))+str(self._options.get('community_id'))})returnself._options>>>options={'device_id':22,'community_id':'12'}>>>id=RequisitionIdentifier(options=options)>>>idRequisitionIdentifier('22126MZXD')>>>next(id)'2212Y899C'
…如果您不喜欢使用IdentifierHistory模型,例如,如果您正在save()上填写模型字段:
frommy_app.modelsimportRequisitionclassRequisitionIdentifier(ShortIdentifier):identifier_type='requisition'requisition_model=Requisitiondefis_duplicate(self,identifier):try:self.requisition_model.get(requisition_identifier=identifier)returnTrueexceptself.requisition_model.DoesNotExist:passreturnFalsedefupdate_history(self):pass
批次标识符
以当前日期戳作为前缀的标识符:
fromedc_identifier.batch_identifierimportBatchIdentifier>>>datetime.today().strftime('%Y%m%d)20150817>>>id=BatchIdentifier()>>>idBatchIdentifier('201508170001')>>>next(id)'201508170002'