2012-11-19 43 views
3

我必須改變我的Django應用程序,使其符合「21 CFR Part 11」,即使電子記錄與簽名紙質記錄具有相同的有效性。有什麼項目或應用我應該看看?Django和CFR 21第11部分

的一些問題:

  1. 審計線索:在選擇車型的每一個變化必須跟蹤(誰,什麼時候,什麼)
  2. 檢測未經授權的紀錄編輯:如果記錄已被更改/添加/刪除的外正常的程序,應用程序應該檢測到它
  3. 的特定操作,用戶必須輸入密碼再次
  4. 密碼必須定期更改,必須滿足一定的標準 等...

我發現在網絡上沒有現成的解決方案......

+1

我認爲你應該尋找更一般的東西。用[tag:python]標記您的問題,並將您的搜索集中在python庫上。我們喜歡Django是因爲Python,而不是其他。 –

+1

有些應用程序可供Django執行您可以使用的審計跟蹤,但您應該列出問題中「21 CFR Part 11」的所有特定要求,以便人們更容易回答。點2的 – maulik13

回答

5

我在需要CFR 21第11部分及類似環境下工作。我還沒有完全符合我們的應用程序,但我經歷了一些試驗和錯誤,所以很有幫助,我可以讓你在幾個地方開始。

1)我也會建議Django reversion;但是,您將需要比提供的更多一點的東西來實現對已採取的操作(除了人員和時間以外)的可變級審計跟蹤。爲此,我使用了反轉信號之一打開註釋字段爲可以評估,然後呼籲行中的任何變量,這是採取它等這動作的字典低於:

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。對於你可以實現的複雜性來說,唯一的限制就是你可以自己保留多少東西。您需要實現的基本權限集包括查看,編輯,刪除以及某種數據控制器/管理員角色;然而,你可能會想要更復雜。我強烈建議使用基於類的視圖和mixin進行權限檢查,但基於功能的工作也可以。這也可用於提示某些操作的密碼,因爲您可以用任何方式控制字段發生的情況。

https://github.com/lukaszb/django-guardian

4)到期的口令,可以使用甚至只是Django的身份驗證系統,如果你想或實施任何用戶帳戶管理應用程序。你只需要添加一個額外的字段來記錄你想要開始到期倒計時的任何日期時間。然後在登錄時只需檢查倒計時的時間,看看它們是否超出了窗口,如果是這樣,則要求它們通過引導它們通過內置視圖進行密碼更改或適用於您的應用程序的機制來創建新密碼。

我會告訴你實施CFR 21第11部分中最困難的部分是讓合適的人員準確地告訴你項目應該如何滿足要求,並且檢查合規是否耗費時間和成本。

希望這可以幫助你開始。

+0

我的意思是應用程序應檢測應用程序本身之外的記錄是否已更改(例如,使用其他工具訪問數據庫)。你有這個建議嗎? – Don

1

Django Reversion可能給你的審計線索開始,雖然你可能不需要它的所有設施。

對於列表中的2,3和4,這些都是最有可能最終編碼的東西。