generic document model