diff --git a/app/models/communication/extranet/document.rb b/app/models/communication/extranet/document.rb
index 081f39cbb290caf496bc1cac72d3051b878208c4..30a353f9f0e1bc72338072f57042b31978c816b4 100644
--- a/app/models/communication/extranet/document.rb
+++ b/app/models/communication/extranet/document.rb
@@ -8,18 +8,24 @@
 #  published_at  :datetime
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
+#  category_id   :uuid             indexed
 #  extranet_id   :uuid             not null, indexed
+#  kind_id       :uuid             indexed
 #  university_id :uuid             not null, indexed
 #
 # Indexes
 #
+#  extranet_document_categories                             (category_id)
 #  index_communication_extranet_documents_on_extranet_id    (extranet_id)
 #  index_communication_extranet_documents_on_university_id  (university_id)
+#  index_extranet_document_kinds                            (kind_id)
 #
 # Foreign Keys
 #
 #  fk_rails_1272fd263c  (extranet_id => communication_extranets.id)
+#  fk_rails_51f7db2f66  (kind_id => communication_extranet_document_kinds.id)
 #  fk_rails_af877a8c0c  (university_id => universities.id)
+#  fk_rails_eb351dc444  (category_id => communication_extranet_document_categories.id)
 #
 class Communication::Extranet::Document < ApplicationRecord
   include Sanitizable
diff --git a/app/models/communication/extranet/document/category.rb b/app/models/communication/extranet/document/category.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d153fb4012e04d3289fcfa2ab583393184bbd5b1
--- /dev/null
+++ b/app/models/communication/extranet/document/category.rb
@@ -0,0 +1,25 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_categories
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_categories_universities                        (university_id)
+#  index_communication_extranet_document_categories_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_6f2232d9f8  (university_id => universities.id)
+#  fk_rails_76e327b90f  (extranet_id => communication_extranets.id)
+#
+class Communication::Extranet::Document::Category < ApplicationRecord
+  belongs_to :extranet
+  belongs_to :university
+end
diff --git a/app/models/communication/extranet/document/kind.rb b/app/models/communication/extranet/document/kind.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d13f6fcbfd91fc07ac924904a8f374ff9369af94
--- /dev/null
+++ b/app/models/communication/extranet/document/kind.rb
@@ -0,0 +1,25 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_kinds
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_kinds_universities                        (university_id)
+#  index_communication_extranet_document_kinds_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_27a9b91ed8  (extranet_id => communication_extranets.id)
+#  fk_rails_2a55cf899a  (university_id => universities.id)
+#
+class Communication::Extranet::Document::Kind < ApplicationRecord
+  belongs_to :extranet
+  belongs_to :university
+end
diff --git a/db/migrate/20230310081519_create_communication_extranet_document_kinds.rb b/db/migrate/20230310081519_create_communication_extranet_document_kinds.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2471fc11fc72188fc3adf11e476589a8ea838643
--- /dev/null
+++ b/db/migrate/20230310081519_create_communication_extranet_document_kinds.rb
@@ -0,0 +1,13 @@
+class CreateCommunicationExtranetDocumentKinds < ActiveRecord::Migration[7.0]
+  def change
+    create_table :communication_extranet_document_kinds, id: :uuid do |t|
+      t.references :extranet, null: false, foreign_key: {to_table: :communication_extranets}, type: :uuid
+      t.references :university, null: false, foreign_key: true, type: :uuid, index: { name: 'extranet_document_kinds_universities' }
+      t.string :name
+
+      t.timestamps
+    end
+
+    add_reference :communication_extranet_documents, :kind, foreign_key: {to_table: :communication_extranet_document_kinds}, type: :uuid, index: { name: 'index_extranet_document_kinds' }
+  end
+end
diff --git a/db/migrate/20230310081530_create_communication_extranet_document_categories.rb b/db/migrate/20230310081530_create_communication_extranet_document_categories.rb
new file mode 100644
index 0000000000000000000000000000000000000000..83446e18c5c6283348d80fd9246f3344fca364db
--- /dev/null
+++ b/db/migrate/20230310081530_create_communication_extranet_document_categories.rb
@@ -0,0 +1,13 @@
+class CreateCommunicationExtranetDocumentCategories < ActiveRecord::Migration[7.0]
+  def change
+    create_table :communication_extranet_document_categories, id: :uuid do |t|
+      t.references :extranet, null: false, foreign_key: {to_table: :communication_extranets}, type: :uuid
+      t.references :university, null: false, foreign_key: true, type: :uuid, index: { name: 'extranet_document_categories_universities' }
+      t.string :name
+
+      t.timestamps
+    end
+
+    add_reference :communication_extranet_documents, :category, foreign_key: {to_table: :communication_extranet_document_categories}, type: :uuid, index: { name: 'extranet_document_categories' }
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b33eb378e2f9292532f2d0c40f29124ed0acf236..139e940000b7367c7c1aebf156baea743f74cc9e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema[7.0].define(version: 2023_03_09_131421) do
+ActiveRecord::Schema[7.0].define(version: 2023_03_10_081530) do
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
   enable_extension "plpgsql"
@@ -105,6 +105,26 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_09_131421) do
     t.index ["university_id"], name: "index_communication_extranet_connections_on_university_id"
   end
 
+  create_table "communication_extranet_document_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+    t.uuid "extranet_id", null: false
+    t.uuid "university_id", null: false
+    t.string "name"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["extranet_id"], name: "index_communication_extranet_document_categories_on_extranet_id"
+    t.index ["university_id"], name: "extranet_document_categories_universities"
+  end
+
+  create_table "communication_extranet_document_kinds", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+    t.uuid "extranet_id", null: false
+    t.uuid "university_id", null: false
+    t.string "name"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["extranet_id"], name: "index_communication_extranet_document_kinds_on_extranet_id"
+    t.index ["university_id"], name: "extranet_document_kinds_universities"
+  end
+
   create_table "communication_extranet_documents", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.string "name"
     t.uuid "university_id", null: false
@@ -113,7 +133,11 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_09_131421) do
     t.datetime "published_at"
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
+    t.uuid "kind_id"
+    t.uuid "category_id"
+    t.index ["category_id"], name: "extranet_document_categories"
     t.index ["extranet_id"], name: "index_communication_extranet_documents_on_extranet_id"
+    t.index ["kind_id"], name: "index_extranet_document_kinds"
     t.index ["university_id"], name: "index_communication_extranet_documents_on_university_id"
   end
 
@@ -1011,6 +1035,12 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_09_131421) do
   add_foreign_key "communication_blocks", "universities"
   add_foreign_key "communication_extranet_connections", "communication_extranets", column: "extranet_id"
   add_foreign_key "communication_extranet_connections", "universities"
+  add_foreign_key "communication_extranet_document_categories", "communication_extranets", column: "extranet_id"
+  add_foreign_key "communication_extranet_document_categories", "universities"
+  add_foreign_key "communication_extranet_document_kinds", "communication_extranets", column: "extranet_id"
+  add_foreign_key "communication_extranet_document_kinds", "universities"
+  add_foreign_key "communication_extranet_documents", "communication_extranet_document_categories", column: "category_id"
+  add_foreign_key "communication_extranet_documents", "communication_extranet_document_kinds", column: "kind_id"
   add_foreign_key "communication_extranet_documents", "communication_extranets", column: "extranet_id"
   add_foreign_key "communication_extranet_documents", "universities"
   add_foreign_key "communication_extranet_post_categories", "communication_extranets", column: "extranet_id"
diff --git a/test/fixtures/communication/extranet/document/categories.yml b/test/fixtures/communication/extranet/document/categories.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5d73fea1434e3c756c7a79a47f8c49586568f3b8
--- /dev/null
+++ b/test/fixtures/communication/extranet/document/categories.yml
@@ -0,0 +1,32 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_categories
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_categories_universities                        (university_id)
+#  index_communication_extranet_document_categories_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_6f2232d9f8  (university_id => universities.id)
+#  fk_rails_76e327b90f  (extranet_id => communication_extranets.id)
+#
+# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  extranet: one
+  university: one
+  name: MyString
+
+two:
+  extranet: two
+  university: two
+  name: MyString
diff --git a/test/fixtures/communication/extranet/document/kinds.yml b/test/fixtures/communication/extranet/document/kinds.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bae066a93b07f05cc2c4ddf888e28bbe0ac47812
--- /dev/null
+++ b/test/fixtures/communication/extranet/document/kinds.yml
@@ -0,0 +1,32 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_kinds
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_kinds_universities                        (university_id)
+#  index_communication_extranet_document_kinds_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_27a9b91ed8  (extranet_id => communication_extranets.id)
+#  fk_rails_2a55cf899a  (university_id => universities.id)
+#
+# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  extranet: one
+  university: one
+  name: MyString
+
+two:
+  extranet: two
+  university: two
+  name: MyString
diff --git a/test/fixtures/communication/extranet/documents.yml b/test/fixtures/communication/extranet/documents.yml
index be1d0d6ab57326b590356596a4609a335ddd6e69..fb4fa23733ee89bef580ed42a2418d63d9d1b4cd 100644
--- a/test/fixtures/communication/extranet/documents.yml
+++ b/test/fixtures/communication/extranet/documents.yml
@@ -8,18 +8,24 @@
 #  published_at  :datetime
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
+#  category_id   :uuid             indexed
 #  extranet_id   :uuid             not null, indexed
+#  kind_id       :uuid             indexed
 #  university_id :uuid             not null, indexed
 #
 # Indexes
 #
+#  extranet_document_categories                             (category_id)
 #  index_communication_extranet_documents_on_extranet_id    (extranet_id)
 #  index_communication_extranet_documents_on_university_id  (university_id)
+#  index_extranet_document_kinds                            (kind_id)
 #
 # Foreign Keys
 #
 #  fk_rails_1272fd263c  (extranet_id => communication_extranets.id)
+#  fk_rails_51f7db2f66  (kind_id => communication_extranet_document_kinds.id)
 #  fk_rails_af877a8c0c  (university_id => universities.id)
+#  fk_rails_eb351dc444  (category_id => communication_extranet_document_categories.id)
 #
 
 one:
diff --git a/test/fixtures/communication/extranet/post/categories.yml b/test/fixtures/communication/extranet/post/categories.yml
index 57dfca8c4e88ad04a255f565215fc80d38df9686..b2e20214f6f93f7c730f185ab1748b72468bc882 100644
--- a/test/fixtures/communication/extranet/post/categories.yml
+++ b/test/fixtures/communication/extranet/post/categories.yml
@@ -20,7 +20,6 @@
 #  fk_rails_aad7b8db63  (university_id => universities.id)
 #  fk_rails_e53c2a25fc  (extranet_id => communication_extranets.id)
 #
-# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
 
 one:
   name: MyString
diff --git a/test/models/communication/extranet/document/category_test.rb b/test/models/communication/extranet/document/category_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ef2a3270727a9033b4e31f66716bd61f45644a77
--- /dev/null
+++ b/test/models/communication/extranet/document/category_test.rb
@@ -0,0 +1,28 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_categories
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_categories_universities                        (university_id)
+#  index_communication_extranet_document_categories_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_6f2232d9f8  (university_id => universities.id)
+#  fk_rails_76e327b90f  (extranet_id => communication_extranets.id)
+#
+require "test_helper"
+
+class Communication::Extranet::Document::CategoryTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/communication/extranet/document/kind_test.rb b/test/models/communication/extranet/document/kind_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7c37fe74c3ece2cb3724e6a0fe1e82dd6a6c94b8
--- /dev/null
+++ b/test/models/communication/extranet/document/kind_test.rb
@@ -0,0 +1,28 @@
+# == Schema Information
+#
+# Table name: communication_extranet_document_kinds
+#
+#  id            :uuid             not null, primary key
+#  name          :string
+#  created_at    :datetime         not null
+#  updated_at    :datetime         not null
+#  extranet_id   :uuid             not null, indexed
+#  university_id :uuid             not null, indexed
+#
+# Indexes
+#
+#  extranet_document_kinds_universities                        (university_id)
+#  index_communication_extranet_document_kinds_on_extranet_id  (extranet_id)
+#
+# Foreign Keys
+#
+#  fk_rails_27a9b91ed8  (extranet_id => communication_extranets.id)
+#  fk_rails_2a55cf899a  (university_id => universities.id)
+#
+require "test_helper"
+
+class Communication::Extranet::Document::KindTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end