diff --git a/core/Test/DoctypeControllerTest.php b/core/Test/DoctypeControllerTest.php
index 40a735530b6cae07d7b276374238ecadca55d75a..c35fc13b2eee9ef72a0aeaedc9e3daeee36dfd9c 100755
--- a/core/Test/DoctypeControllerTest.php
+++ b/core/Test/DoctypeControllerTest.php
@@ -10,6 +10,7 @@
 */
 
 use PHPUnit\Framework\TestCase;
+use SrcCore\models\DatabaseModel;
 
 class FirstLevelControllerTest extends TestCase
 {
@@ -26,10 +27,6 @@ class FirstLevelControllerTest extends TestCase
         $response          = $firstLevelController->getTree($request, new \Slim\Http\Response());
         $responseBody      = json_decode((string)$response->getBody());
 
-        self::$firstLevelId  = $responseBody->structure[0]->doctypes_first_level_id;
-        self::$secondLevelId = $responseBody->structure[0]->secondeLevels[0]->doctypes_second_level_id;
-        self::$doctypeId     = $responseBody->structure[0]->secondeLevels[0]->doctypes[0]->type_id;
-
         $this->assertNotNull($responseBody->structure); 
         $this->assertNotNull($responseBody->structure[0]->doctypes_first_level_id);
         $this->assertInternalType('int', $responseBody->structure[0]->doctypes_first_level_id); 
@@ -63,7 +60,7 @@ class FirstLevelControllerTest extends TestCase
         $this->assertNotNull($responseBody->firstLevel[0]->doctypes_first_level_label);          
     }
 
-    public function testCreate()
+    public function testCreateFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -105,7 +102,50 @@ class FirstLevelControllerTest extends TestCase
         $this->assertSame('Invalid foldertype_id', $responseBody->errors[1]);
     }
 
-    public function testUpdate()
+    public function testCreateSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  CREATE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [
+            'doctypes_second_level_label' => 'testTUsecondlevel',
+            'doctypes_first_level_id'     => self::$firstLevelId,
+            'css_style'                   => '#99999',
+            'enabled'                     => 'Y',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->create($fullRequest, new \Slim\Http\Response());
+        $responseBody = json_decode((string)$response->getBody());
+
+        self::$secondLevelId = $responseBody->secondLevel->doctypes_second_level_id;
+
+        $this->assertInternalType('int', self::$secondLevelId);
+        $this->assertSame('testTUsecondlevel', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('#99999', $responseBody->secondLevel->css_style);
+        $this->assertSame('Y', $responseBody->secondLevel->enabled);  
+
+        // CREATE FAIL
+        $aArgs = [
+            'doctypes_second_level_label' => '',
+            'doctypes_first_level_id'     => '',
+            'css_style'                  => '#7777',
+            'enabled'                    => 'gaz',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->create($fullRequest, new \Slim\Http\Response());
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Invalid doctypes_second_level_label', $responseBody->errors[0]);
+        $this->assertSame('Invalid doctypes_first_level_id', $responseBody->errors[1]);
+    }
+
+    public function testUpdateFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -148,6 +188,50 @@ class FirstLevelControllerTest extends TestCase
 
     }
 
+    public function testUpdateSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  UPDATE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [
+            'doctypes_second_level_label' => 'testTUsecondlevelUPDATE',
+            'doctypes_first_level_id'     => self::$firstLevelId,
+            'css_style'                   => '#7777',
+            'enabled'                     => 'Y',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->update($fullRequest, new \Slim\Http\Response(), ["id" => self::$secondLevelId]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('#7777', $responseBody->secondLevel->css_style);
+        $this->assertSame('Y', $responseBody->secondLevel->enabled);  
+
+        // UPDATE FAIL
+        $aArgs = [
+            'doctypes_second_level_label' => '',
+            'doctypes_first_level_id'     => '',
+            'css_style'                  => '#7777',
+            'enabled'                    => 'gaz',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->update($fullRequest, new \Slim\Http\Response(), ["id" => 'gaz']);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Id is not a numeric', $responseBody->errors[0]);
+        $this->assertSame('Id gaz does not exists', $responseBody->errors[1]);
+        $this->assertSame('Invalid doctypes_second_level_label', $responseBody->errors[2]);
+        $this->assertSame('Invalid doctypes_first_level_id', $responseBody->errors[3]);
+
+    }
+
     public function testRead(){
         //  READ FIRST LEVEL
         $environment  = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
@@ -176,14 +260,52 @@ class FirstLevelControllerTest extends TestCase
         $responseBody = json_decode((string)$response->getBody());  
 
         $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
-        $this->assertNotNull($responseBody->secondLevel->doctypes_second_level_label); 
-        $this->assertNotNull($responseBody->secondLevel->doctypes_first_level_id); 
-        $this->assertNotNull($responseBody->secondLevel->enabled); 
-        $this->assertNotNull($responseBody->firstLevel); 
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame(true, $responseBody->secondLevel->enabled); 
+
+        // READ SECOND LEVEL FAIL
+        $response          = $secondLevelController->getById($request, new \Slim\Http\Response(), ["id" => 'GAZ']);
+        $responseBody      = json_decode((string)$response->getBody());  
+ 
+        $this->assertSame('wrong format for id', $responseBody->errors);
+    }
+
+    public function testDeleteSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  DELETE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->delete($fullRequest, new \Slim\Http\Response(), ["id" => self::$secondLevelId]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame('#7777', $responseBody->secondLevel->css_style);
+        $this->assertSame('N', $responseBody->secondLevel->enabled);
+
+        //  DELETE FAIL
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->delete($fullRequest, new \Slim\Http\Response(), ["id" => 'gaz']);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Id is not a numeric', $responseBody->errors); 
 
     }
 
-    public function testDelete()
+    public function testDeleteFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -216,4 +338,18 @@ class FirstLevelControllerTest extends TestCase
 
     }
 
+    public function testDeleteSQL()
+    {
+        DatabaseModel::delete([
+            'table' => 'doctypes_first_level',
+            'where' => ['doctypes_first_level_id = ?'],
+            'data'  => [self::$firstLevelId]
+        ]);
+        DatabaseModel::delete([
+            'table' => 'doctypes_second_level',
+            'where' => ['doctypes_second_level_id = ?'],
+            'data'  => [self::$secondLevelId]
+        ]);
+    }
+
 }
diff --git a/phpunit.xml b/phpunit.xml
index 2354743bb2abbcfa3016b2ec600f1acde706e44b..f8c399f26ef2956c9105a01e4ef420883bf25c18 100755
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -5,6 +5,7 @@
             <!--directory>core/Test</directory-->
             <file>core/Test/ActionControllerTest.php</file>
             <file>core/Test/BasketControllerTest.php</file>
+            <file>core/Test/DoctypeControllerTest.php</file>
             <file>core/Test/NotificationControllerTest.php</file>
             <file>core/Test/NotificationScheduleControllerTest.php</file>
             <file>core/Test/ParameterControllerTest.php</file>
@@ -21,11 +22,10 @@
     </testsuites>
     <filter>
       <whitelist>
-          <directory suffix="Test.php">core/Test</directory>
+          <!-- <directory suffix="Test.php">core/Test</directory> -->
           <directory suffix=".php">src</directory>
           <directory suffix=".php">core/Controllers</directory>
-          <directory suffix=".php">core/Models</directory>
-          <directory suffix=".php">apps/maarch_entreprise/Models</directory>         
+          <directory suffix=".php">core/Models</directory>        
           <directory suffix=".php">modules/visa/Controllers</directory>
           <directory suffix=".php">modules/visa/Models</directory>          
           <directory suffix=".php">modules/attachments/Controllers</directory>
diff --git a/src/app/doctype/models/SecondLevelModelAbstract.php b/src/app/doctype/models/SecondLevelModelAbstract.php
index 9e3ceb6d80a24135060be95829bc912e0e5eabe1..81c39c5573448f816cc3cf2e7883e09b0d2ab3a7 100644
--- a/src/app/doctype/models/SecondLevelModelAbstract.php
+++ b/src/app/doctype/models/SecondLevelModelAbstract.php
@@ -55,7 +55,7 @@ class SecondLevelModelAbstract
 
     public static function create(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['label', 'doctypes_first_level_id']);
+        ValidatorModel::notEmpty($aArgs, ['doctypes_second_level_label', 'doctypes_first_level_id']);
         ValidatorModel::intVal($aArgs, ['doctypes_first_level_id']);
 
         $aArgs['doctypes_second_level_id'] = DatabaseModel::getNextSequenceValue(['sequenceId' => 'doctypes_second_level_id_seq']);
@@ -79,7 +79,7 @@ class SecondLevelModelAbstract
             'data'      => [$aArgs['doctypes_second_level_id']]
         ]);
 
-        return true;
+        return $aArgs;
     }
 
     public static function disabledFirstLevel(array $aArgs)
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 77e11f7e0a68cd54ab2b8713530ba6cb78868b63..867d17a95bbb7c080aa36d8d63a055b9c21c3848 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -28,6 +28,9 @@ define('_DELETE_NOTIFICATIONS', 'Notification deleted');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Doctype first level added');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Doctype first level deleted');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Doctype first level edited');
+define('_DOCTYPE_SECONDLEVEL_ADDED', 'Doctype second level added');
+define('_DOCTYPE_SECONDLEVEL_DELETED', 'Doctype second level deleted');
+define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Doctype second level edited');
 define('_ENTITY_CREATION', 'Entity creation');
 define('_ENTITY_MODIFICATION', 'Entity modification');
 define('_ENTITY_SUPPRESSION', 'Entity suppression');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index fcee1ff28ca530053f11adf45165b22d0245a3e7..049749f60e6cd0e450681c0888a3e4c29e60bce6 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -28,6 +28,9 @@ define('_DELETE_NOTIFICATIONS', 'Notification supprimée');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Chemise ajoutée');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Chemise supprimée');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Chemise modifiée');
+define('_DOCTYPE_SECONDLEVEL_ADDED', 'Sous-chemise ajoutée');
+define('_DOCTYPE_SECONDLEVEL_DELETED', 'Sous-chemise supprimée');
+define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Sous-chemise modifiée');
 define('_ENTITY_CREATION', 'Création entité');
 define('_ENTITY_MODIFICATION', 'Modification entité');
 define('_ENTITY_SUPPRESSION', 'Suppression entité');