我必须转换我的Django应用程序,使其符合“21 CFR Part 11”,即使电子记录与签名纸质记录具有相同的有效性。我应该看看是否有任何项目或应用程序?
一些问题:
我在网上找不到现成的解决方案......
答案 0 :(得分:5)
我在需要CFR 21 Part 11及类似环境的环境中工作。我还没有完全符合我们的应用程序,但我已经经历了一些试验和错误,所以我可以帮助你在几个地方开始。
1)我还建议Django回归;但是,您需要的不仅仅是它提供的内容,而是通过所采取的操作(除了由谁和何时)实现可变级别的审计跟踪。为此,我使用了一个返回信号将注释字段转换为可以评估的字典,然后调用该行中的任何变量以及对其执行的操作等。如下所示:
https://github.com/etianen/django-reversion
@receiver(reversion.pre_revision_commit)
def it_worked(sender, **kwargs):
currentVersion = kwargs.pop('versions')[0].field_dict
fieldList = currentVersion.keys()
fieldList.remove('id')
commentDict = {}
try:
pastVersion = reversion.get_for_object(kwargs.pop('instances')[0])[0].field_dict
except IndexError:
for field in fieldList:
commentDict[field] = "Created"
except TypeError:
for field in fieldList:
commentDict[field] = "Deleted"
else:
for field in fieldList:
try:
pastTest = pastVersion[field]
except KeyError:
commentDict[field] = "Created"
else:
if currentVersion[field] != pastTest:
commentDict[field] = "Changed"
else:
commentDict[field] = "Unchanged"
comment = commentDict
revision = kwargs.pop('revision')
revision.comment = comment
revision.save()
kwargs['revision'] = revision
sender.save_revision
2/3)您将需要使用对象级权限系统。我已经实施了django-guardian。您可以实现的复杂性的唯一限制是您可以自己保持多少事情。您需要实现的基本权限集是查看,编辑,删除和某种数据控制器/管理器角色;但是,你可能想要变得更复杂。我强烈建议使用基于类的视图和mixins进行权限检查,但基于函数也可以正常工作。这也可以用于提示某些操作的密码,因为您可以以任何您喜欢的方式控制字段的内容。
https://github.com/lukaszb/django-guardian
4)即使只是Django auth系统,也可以实现过期密码(如果需要)或任何用户帐户管理应用程序。您只需添加一个额外字段即可记录您希望开始到期倒计时的日期时间。然后在登录时只检查倒计时的时间并查看它们是否超出了窗口,如果需要,则要求他们通过内置视图指示密码更改或哪种机制适合您的应用来创建新密码。
我将告诉您实施CFR 21第11部分最困难的部分是让合适的人员准确地告诉您项目应该如何满足要求,并且检查合规性可能既费时又费钱。
希望这有助于您开始使用。
答案 1 :(得分:1)
Django Reversion可能会为您提供审计跟踪的开始,但您可能不需要其所有设施。
对于列表中的2,3和4,这些是您最有可能最终编码的内容。