Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/contracts.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/contracts.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/contracts.py	(revision 12168)
@@ -143,6 +143,6 @@
                 state = getattr(obj, 'state', None)
                 if state and state != VERIFIED:
-                    return False
-        return True
+                    return False, _("Attached documents must be verified first.")
+        return True, None
 
     @property
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/documents.py	(revision 12168)
@@ -141,4 +141,8 @@
         return files
 
+    @property
+    def is_verifiable(self):
+        return True, None
+
     def setMD5(self):
         """Set md5 checksum attribute for files connected to this document.
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/export.py	(revision 12168)
@@ -159,4 +159,5 @@
             omit=['is_editable_by_customer',
                   'is_editable_by_manager',
+                  'is_verifiable',
                   'translated_state',
                   'formatted_transition_date',
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/workflow.py	(revision 12168)
@@ -248,9 +248,9 @@
     """
     if event.transition.destination == APPROVED:
-        if not obj.is_approvable:
+        approvable, error = obj.is_approvable
+        if not approvable:
             # Undo transition and raise an exception.
             IWorkflowState(obj).setState(event.transition.source)
-            raise InvalidTransitionError(
-                _("Attached documents must be verified first."))
+            raise InvalidTransitionError(error)
     msg = event.transition.user_data['msg']
     history = IObjectHistory(obj)
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/document.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/document.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/document.py	(revision 12168)
@@ -87,4 +87,8 @@
         return
 
+    @property
+    def is_verifiable(self):
+        return True, None
+
     def setMD5(self):
         """Determine md5 checksum of all files and store checksums as
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/interfaces.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/interfaces.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/interfaces.py	(revision 12168)
@@ -53,4 +53,5 @@
     user_id = Attribute('Id of a user')
     connected_files = Attribute('Names of files connected to a document')
+    is_verifiable = Attribute('Contract verifiable by officer')
 
     title = schema.TextLine(
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/workflow.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/workflow.py	(revision 12167)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/documents/workflow.py	(revision 12168)
@@ -22,5 +22,6 @@
 from zope.component import getUtility
 from hurry.workflow.workflow import Transition, WorkflowState, NullCondition
-from hurry.workflow.interfaces import IWorkflowState, IWorkflowTransitionEvent
+from hurry.workflow.interfaces import (
+    IWorkflowState, IWorkflowTransitionEvent, InvalidTransitionError)
 from waeup.ikoba.interfaces import (
     IObjectHistory, IIkobaWorkflowInfo,
@@ -128,5 +129,14 @@
     """Append message to document history and log file and update
     last_transition_date when transition happened.
+
+    Undo the verification of document and raise an exception if document
+    does not meet the requirements for verification.
     """
+    if event.transition.destination == VERIFIED:
+        verifiable, error = obj.is_verifiable
+        if not verifiable:
+            # Undo transition and raise an exception.
+            IWorkflowState(obj).setState(event.transition.source)
+            raise InvalidTransitionError(error)
     if event.transition.transition_id == 'verify':
         obj.setMD5()
