rainyDayHandlerStatus.setWorkStep(ASTERISK);
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", "7000", "*", "errorMessage");
+                "st1", "vnft1", "7000", "*", "errorMessage", "*");
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
         rainyDayHandlerStatus.setWorkStep(ASTERISK);
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", ASTERISK, ASTERISK, "errorMessage");
+                "st1", "vnft1", ASTERISK, ASTERISK, "errorMessage", "*");
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
         assertEquals(5, delegateExecution.getVariable("maxRetries"));
         vnf.setVnfType("vnft1");
         delegateExecution.setVariable("aLaCarte", true);
         doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class), isA(String.class),
-                isA(String.class), isA(String.class), isA(String.class), isA(String.class));
+                isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
         delegateExecution.setVariable("suppressRollback", false);
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
     @Test
     public void queryRainyDayTableExceptionTest() {
         doThrow(RuntimeException.class).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class),
-                isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
+                isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class),
+                isA(String.class));
         delegateExecution.setVariable("aLaCarte", true);
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
         delegateExecution.setVariable("suppressRollback", false);
         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", "7000", "*", "errorMessage");
+                "st1", "vnft1", "7000", "*", "errorMessage", "*");
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
 
         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", "7000", "*", "errorMessage");
+                "st1", "vnft1", "7000", "*", "errorMessage", "*");
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
 
         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", "7000", "*", "errorMessage");
+                "st1", "vnft1", "7000", "*", "errorMessage", "*");
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
 
         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
 
         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
-                "st1", "vnft1", "7000", "*", "errorMessage");
+                "st1", "vnft1", "7000", "*", "errorMessage", "*");
 
         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
 
         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
     }
 
+    @Test
+    public void queryRainyDayTableServiceRoleNotDefined() throws Exception {
+        customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+        serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
+        serviceInstance.getModelInfoServiceInstance().setServiceRole("sr1");
+        vnf.setVnfType("vnft1");
+        delegateExecution.setVariable("aLaCarte", true);
+        delegateExecution.setVariable("suppressRollback", false);
+        delegateExecution.setVariable("WorkflowExceptionCode", "7000");
+        RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
+        rainyDayHandlerStatus.setErrorCode("7000");
+        rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
+        rainyDayHandlerStatus.setServiceType("st1");
+        rainyDayHandlerStatus.setVnfType("vnft1");
+        rainyDayHandlerStatus.setPolicy("Rollback");
+        rainyDayHandlerStatus.setWorkStep(ASTERISK);
+
+        doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
+                "st1", "vnft1", "7000", "*", "errorMessage", "sr1");
+
+        executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
+        assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
+    }
+
+    @Test
+    public void queryRainyDayTableServiceRoleNC() throws Exception {
+        customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+        serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
+        serviceInstance.getModelInfoServiceInstance().setServiceRole("NETWORK-COLLECTION");
+        vnf.setVnfType("vnft1");
+        delegateExecution.setVariable("aLaCarte", true);
+        delegateExecution.setVariable("suppressRollback", false);
+        delegateExecution.setVariable("WorkflowExceptionCode", "7000");
+        RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
+        rainyDayHandlerStatus.setErrorCode("7000");
+        rainyDayHandlerStatus.setFlowName("ActivateServiceInstanceBB");
+        rainyDayHandlerStatus.setServiceType("st1");
+        rainyDayHandlerStatus.setVnfType("vnft1");
+        rainyDayHandlerStatus.setPolicy("Abort");
+        rainyDayHandlerStatus.setWorkStep(ASTERISK);
+
+        doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
+                "st1", "vnft1", "7000", "*", "errorMessage", "NETWORK-COLLECTION");
+
+        executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
+        assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
+    }
+
 }
 
     @Column(name = "SECONDARY_POLICY")
     private String secondaryPolicy;
 
+    @BusinessKey
+    @Column(name = "SERVICE_ROLE")
+    private String serviceRole;
+
     @Override
     public String toString() {
         return new ToStringBuilder(this).append("id", id).append("flowName", flowName)
                 .append("serviceType", serviceType).append("vnfType", vnfType).append("errorCode", errorCode)
                 .append("errorMessage", errorMessage).append("workStep", workStep).append("policy", policy)
-                .append("secondaryPolicy", secondaryPolicy).toString();
+                .append("secondaryPolicy", secondaryPolicy).append("serviceRole", serviceRole).toString();
     }
 
     @Override
         RainyDayHandlerStatus castOther = (RainyDayHandlerStatus) other;
         return new EqualsBuilder().append(flowName, castOther.flowName).append(serviceType, castOther.serviceType)
                 .append(vnfType, castOther.vnfType).append(errorCode, castOther.errorCode)
-                .append(workStep, castOther.workStep).append(policy, castOther.policy).isEquals();
+                .append(workStep, castOther.workStep).append(policy, castOther.policy)
+                .append(serviceRole, castOther.serviceRole).isEquals();
     }
 
     @Override
     public int hashCode() {
         return new HashCodeBuilder().append(flowName).append(serviceType).append(vnfType).append(errorCode)
-                .append(workStep).append(policy).toHashCode();
+                .append(workStep).append(policy).append(serviceRole).toHashCode();
     }
 
     public Integer getId() {
         this.errorMessage = errorMessage;
     }
 
+    public String getServiceRole() {
+        return serviceRole;
+    }
+
+    public void setServiceRole(String serviceRole) {
+        this.serviceRole = serviceRole;
+    }
 
 }
 
     private static final String CLOUD_OWNER = "cloudOwner";
     private static final String FLOW_NAME = "flowName";
     private static final String ERROR_MESSAGE = "errorMessage";
+    private static final String SERVICE_ROLE = "serviceRole";
     private static final String SERVICE_TYPE = "serviceType";
     private static final String VNF_TYPE = "vnfType";
     private static final String ERROR_CODE = "errorCode";
     }
 
     public RainyDayHandlerStatus getRainyDayHandlerStatus(String flowName, String serviceType, String vnfType,
-            String errorCode, String workStep, String errorMessage) {
+            String errorCode, String workStep, String errorMessage, String serviceRole) {
         logger.debug(
                 "Get Rainy Day Status - Flow Name {}, Service Type: {} , vnfType {} , errorCode {}, workStep {}, errorMessage {}",
                 flowName, serviceType, vnfType, errorCode, workStep, errorMessage);
                 UriComponentsBuilder.fromUriString(endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH + findRainyDayHandler)
                         .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
                         .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
-                        .queryParam(ERROR_MESSAGE, errorMessage).build().encode().toUri());
+                        .queryParam(ERROR_MESSAGE, errorMessage).queryParam(SERVICE_ROLE, serviceRole).build().encode()
+                        .toUri());
     }
 
     public ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action) {