Já precisei resolver algo parecido, então vou dar uma ideia:
Uma solução que tu pode adotar é ter uma tabela de configurações de documento, sendo cada configuração associada com um ou mais documentos e vice versa (HABTM). Dessa forma tu não vai ter a chave estrangeira de configuração em documento e caso os documentos necessários mudem, tu cria outro registro de configuração e associa com os novos (ou antigos) documentos necessários.
Assim uma matrícula quando fosse criada poderia ser associada a uma configuração específica (a configuração ativa no momento por exemplo, se a tua regra for essa) e assim saber quais são os documentos necessários. Quando uma nova configuração fosse criada, as matrículas já existentes continuariam associadas com a configuração anterior que já havia sido escolhida e continua guardada.
Tu também pode criar um conceito de "documento entregue", que faz a associação com o documento. Assim teu modelo de documento teria os atributos fixos e o documento entregue os atributos específicos da matrícula e os que são de documento mas podem mudar, como o nome (ao criar um documento entregue, copia o nome do documento a que ele se refere, caso esse nome de documento mude no futuro, o documento entregue continua com o nome antigo).
```
class Enrolment
belongs_to :configuration
has_many :handed_documents
end
class HandedDocument
belongs_to :enrolment
belongs_to :document
end
class Configuration
has_and_belongs_to_many :documents
end
class Document
has_and_belongs_to_many :configurations
end
configuration = Configuration.active
required_documents = configuration.documents
# [<Document id: 1>, <Document id: 2>, <Document id: 3>]
old_enrolment = Enrolment.find(1)
old_configuration = old_enrolment.configuration
old_required_documents = old_configuration.documents
# [<Document id: 1>, <Document id: 2>]
```