Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 12867)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 12868)
@@ -298,14 +298,55 @@
         1. An empty row is skipped.
 
-        2. Empty strings are replaced by ignore-markers.
-
-        3. The `BatchProcessor.checkConversion` method validates all 
-           values in the row. If the validation fails
-
-        4.
-
-        5.
-
-        6.
+        2. Empty strings in the row are replaced by ignore-markers.
+
+        3. The `BatchProcessor.checkConversion` method validates and converts 
+           all values in the row. Conversion means the transformation of strings
+           into Python objects. For instance, number expressions have to be
+           transformed into integers, dates into datetime objects, phone number
+           expressions into phone number objects, etc. The converter returns a
+           dictionary with converted values or, if the validation of one of the
+           elements fails, an appropriate warning message. If the conversion
+           fails a pending record is created and stored in the pending data file
+           together with a warning message the converter has raised.
+
+        4. In **create mode** only:
+
+           The parent object must be found and a child
+           object with same object id must not exist. Otherwise the row
+           is skipped, a corresponding warning message is raised and a
+           record is stored in the pending data file.
+
+           Now ``doImport`` tries to add the new object with the data 
+           from the conversion dictionary. In some cases this
+           may fail and a DuplicationError is raised. For example, a new
+           payment ticket is created but the same payment for same session
+           has already been made. In this case the object id is unique, no
+           other object with same id exists, but making the 'same' payment
+           twice does not make sense. The import is skipped and a
+           record is stored in the pending data file.
+
+        5. In **update mode** only:
+
+           If the object can't be found, the row is skipped,
+           a ``no such entry`` warning message is raised and a record is
+           stored in the pending data file.
+
+           The `BatchProcessor.checkUpdateRequirements` method checks additional
+           requirements the object must fulfill before being updated. These
+           requirements are not imposed by the data type but the context
+           of the object. For example, post-graduate students have a different
+           registration workflow. With this method we do forbid certain workflow
+           transitions or states. 
+
+           Finally, ``doImport`` updates the existing object with the data
+           from the conversion dictionary.
+
+        6. In **remove mode** only:
+
+           If the object can't be found, the row is skipped,
+           a ``no such entry`` warning message is raised and a record is
+           stored in the pending data file.
+
+           Finally, ``doImport`` removes the existing object.
 
         """
@@ -364,5 +405,5 @@
                     self.writeFailedRow(
                         failed_writer, string_row,
-                        "Not all parents do exist yet. Skipping")
+                        "Not all parents do exist yet.")
                     continue
                 if self.entryExists(row, site):
@@ -370,5 +411,5 @@
                     self.writeFailedRow(
                         failed_writer, string_row,
-                        "This object already exists. Skipping.")
+                        "This object already exists.")
                     continue
                 obj = self.callFactory()
@@ -382,12 +423,10 @@
                     num_warns += 1
                     self.writeFailedRow(
-                        failed_writer, string_row,
-                        "%s Skipping." % error.message)
+                        failed_writer, string_row, error.message)
                     continue
                 except DuplicationError, error:
                     num_warns += 1
                     self.writeFailedRow(
-                        failed_writer, string_row,
-                        "%s Skipping." % error.msg)
+                        failed_writer, string_row, error.msg)
                     continue
             elif mode == 'remove':
Index: main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt	(revision 12867)
+++ main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.txt	(revision 12868)
@@ -309,8 +309,8 @@
     >>> print open(result[3]).read()
     owner,name,taxpayer,dinoports,--ERRORS--
-    Barney,Barneys Home,1,2,This object already exists. Skipping.
-    Wilma,Wilmas Asylum,1,1,This object already exists. Skipping.
-    Fred,Freds Dinoburgers,0,10,This object already exists. Skipping.
-    Joey,Joeys Drive-in,0,110,This object already exists. Skipping.
+    Barney,Barneys Home,1,2,This object already exists.
+    Wilma,Wilmas Asylum,1,1,This object already exists.
+    Fred,Freds Dinoburgers,0,10,This object already exists.
+    Joey,Joeys Drive-in,0,110,This object already exists.
 
 This way we can correct the faulty entries and afterwards retry without
@@ -350,8 +350,8 @@
     >>> print open(result[3], 'rb').read()
     name,dinoports,--ERRORS--
-    Barneys Home,2,This object already exists. Skipping.
-    Wilmas Asylum,1,This object already exists. Skipping.
-    Freds Dinoburgers,10,This object already exists. Skipping.
-    Joeys Drive-in,110,This object already exists. Skipping.
+    Barneys Home,2,This object already exists.
+    Wilmas Asylum,1,This object already exists.
+    Freds Dinoburgers,10,This object already exists.
+    Joeys Drive-in,110,This object already exists.
 
 
