在edc中管理标识符

edc-identifier的Python项目详细描述


pypitraviscoverage

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.infantsInfantIdentifier实例的列表

重新加载类:

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

默认情况下,MaternalIdentifierInfantIdentifier创建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_identifieredc_protocol.apps.AppConfig读取“caps”,将主题类型(例如subject、或maternalinfant)链接到相关的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')...

有关使用settingsHistory模型的示例,请参见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'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Spring 4升级后未加载java应用程序上下文   java Android 2.3.3 internet可以在我的Galaxy S上运行,但不能在我的Galaxy选项卡上运行?(许可?)   java通过不改变其原始位置对大小写字母进行排序   java Spring Boot一直在破坏我的电脑。。。sts的最佳配置是什么。Windows 10上的ini文件?   css Java Spring+引导问题   java Jackson将GeoJsonPoint序列化为纬度/经度   xml Java Transformer:如何将其结果生成OutputStream?   java如何更改字体、文本大小和设置文本位置?   在JavaSpringHibernate3.6.3中,如何告诉一个方法等待,直到获得锁,以及如何重试失败的事务?   java安卓服务代替线程   Java Swing使用鼠标移动JFrame