diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index c0301c0d5162d064f9b89c3fc660f1d745562b3f..c2a2d99bdd590cafe9895440156803dcec6f3fb8 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-return-await */
 const uuid = require('uuid')
 const { pick, get, set, has, isEmpty, last } = require('lodash')
 const config = require('config')
@@ -42,7 +43,7 @@ module.exports = models => async (req, res) => {
 
   const { collectionId, fragmentId } = req.params
 
-  let collection, fragment
+  let collection, fragment, fragments
 
   try {
     collection = await models.Collection.find(collectionId)
@@ -58,6 +59,19 @@ module.exports = models => async (req, res) => {
     })
   }
 
+  try {
+    fragments = await Promise.all(
+      collection.fragments.map(
+        async fragment => await models.Fragment.find(fragment),
+      ),
+    )
+  } catch (e) {
+    const notFoundError = await services.handleNotFoundError(e, 'Item')
+    fragments = []
+    return res.status(notFoundError.status).json({
+      error: notFoundError.message,
+    })
+  }
   const authsome = authsomeHelper.getAuthsome(models)
   const target = {
     fragment,
@@ -87,6 +101,13 @@ module.exports = models => async (req, res) => {
       .json({ error: 'Cannot write a review on an older version.' })
   }
 
+  const lastRecommendationByHE = last(
+    get(fragments[fragments.length - 2], 'recommendations', []) ||
+      [].find(
+        recommendation =>
+          recommendation.recommendationType === 'editorRecommendation',
+      ),
+  )
   if (
     recommendation === recommendations.publish &&
     recommendationType === recommendations.type.editor &&
@@ -94,10 +115,21 @@ module.exports = models => async (req, res) => {
     collection.handlingEditor.id === req.user
   ) {
     const fragmentHelper = new Fragment({ fragment })
-    if (!fragmentHelper.hasReviewReport()) {
-      return res
-        .status(400)
-        .json({ error: 'Cannot publish without at least one reviewer report.' })
+    const canHeMakeRecommendationAfterMajor =
+      fragmentHelper.hasReviewReport() &&
+      lastRecommendationByHE.recommendation === 'major'
+
+    const collectionHasReview = fragments.find(fragment =>
+      new Fragment({ fragment }).hasReviewReport(),
+    )
+    const canHeMakeRecommendationAfterMinor =
+      collectionHasReview && lastRecommendationByHE.recommendation !== 'major'
+    if (
+      !(canHeMakeRecommendationAfterMajor || canHeMakeRecommendationAfterMinor)
+    ) {
+      return res.status(400).json({
+        error: 'Cannot publish without at least one reviewer report.',
+      })
     }
   }