diff --git a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj
index f20fc316..a9d7713a 100644
--- a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj
+++ b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj
@@ -22,4 +22,9 @@
         <ProjectReference Include="..\AsbCloudWebApi\AsbCloudWebApi.csproj" />
     </ItemGroup>
 
+    <ItemGroup>
+      <EmbeddedResource Include="Controllers\ProcessMapPlan\Files\ProcessMapPlanDrillingInvalid.xlsx" />
+      <EmbeddedResource Include="Controllers\ProcessMapPlan\Files\ProcessMapPlanDrillingValid.xlsx" />
+    </ItemGroup>
+
 </Project>
diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
index 7c8c65e3..e60f5e90 100644
--- a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
+++ b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs
@@ -1,6 +1,6 @@
-using AsbCloudApp.Data.ProcessMapPlan;
+using AsbCloudApp.Data;
+using AsbCloudApp.Data.ProcessMapPlan;
 using AsbCloudApp.Requests;
-using Microsoft.AspNetCore.Mvc;
 using Refit;
 
 namespace AsbCloudWebApi.IntegrationTests.Clients;
@@ -32,4 +32,8 @@ public interface IProcessMapPlanDrillingClient
 
     [Put(BaseRoute)]
     Task<IApiResponse<int>> UpdateOrInsertRange(int idWell, IEnumerable<ProcessMapPlanDrillingDto> dtos);
+
+    [Multipart]
+    [Post(BaseRoute + "/parse")]
+    Task<IApiResponse<ParserResultDto<ProcessMapPlanDrillingDto>>> Parse(int idWell, [AliasAs("files")] IEnumerable<StreamPart> streams);
 }
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx
new file mode 100644
index 00000000..09865489
Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx differ
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx
new file mode 100644
index 00000000..b2bdd446
Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx differ
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
similarity index 89%
rename from AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs
rename to AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
index c0ba7093..67844201 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs
@@ -1,31 +1,35 @@
 using AsbCloudApp.Data.ProcessMapPlan;
 using AsbCloudApp.Requests;
 using AsbCloudDb.Model.ProcessMapPlan;
-using AsbCloudDb.Model.ProcessMaps;
 using AsbCloudWebApi.IntegrationTests.Clients;
 using Mapster;
 using Microsoft.EntityFrameworkCore;
 using System.Net;
+using System.Reflection;
+using AsbCloudDb.Model.ProcessMaps;
+using AsbCloudWebApi.IntegrationTests.Data;
+using Refit;
 using Xunit;
 
-namespace AsbCloudWebApi.IntegrationTests.Controllers;
+namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan;
 
 public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
 {
-    private IProcessMapPlanDrillingClient client;
     private readonly ProcessMapPlanDrillingDto dto = new (){
         Id = 0,
         Creation = new(),
         Obsolete = null,
         IdState = 0,
         IdPrevious = null,
-
+        
         IdWell = 1,
-        IdWellSectionType = 1,
+        Section = "Кондуктор",
+        IdWellSectionType = 3,
         DepthStart = 0.5,
         DepthEnd = 1.5,
 
         IdMode = 1,
+        Mode = "ротор",
         AxialLoadPlan = 2.718281,
         AxialLoadLimitMax = 3.1415926,
         DeltaPressurePlan = 4,
@@ -73,6 +77,8 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
         Comment = "это тестовая запись",
     };
 
+    private IProcessMapPlanDrillingClient client;
+    
     public ProcessMapPlanDrillingControllerTest(WebAppFactoryFixture factory) : base(factory)
     {
         dbContext.CleanupDbSet<ProcessMapPlanDrilling>();
@@ -109,6 +115,8 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
             nameof(ProcessMapPlanDrillingDto.IdState),
             nameof(ProcessMapPlanDrillingDto.Author),
             nameof(ProcessMapPlanDrillingDto.Creation),
+            nameof(ProcessMapPlanDrillingDto.Mode),
+            nameof(ProcessMapPlanDrillingDto.Section)
         };
         MatchHelper.Match(expected, actual, excludeProps);
     }
@@ -556,4 +564,59 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest
         };
         MatchHelper.Match(expected, actual, excludeProps);
     }
+
+    [Fact]
+    public async Task Parse_returns_success()
+    {
+        //arrange
+        const string fileName = "ProcessMapPlanDrillingValid.xlsx";
+        var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName);
+
+        //act
+        var streamPart = new StreamPart(stream, fileName, "application/octet-stream");
+        var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart });
+        
+        //assert
+        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+
+        var parserResult = response.Content;
+        
+        Assert.NotNull(parserResult);
+        Assert.Single(parserResult.Item);
+        Assert.True(parserResult.IsValid);
+        
+        var row = parserResult.Item.First();
+        var dtoActual = row.Item;
+
+        Assert.True(row.IsValid);
+
+        var excludeProps = new[] { nameof(ProcessMapPlanDrillingDto.IdWell) };
+        MatchHelper.Match(dto, dtoActual, excludeProps);
+    }
+
+    [Fact]
+    public async Task Parse_returns_success_for_result_with_warnings()
+    {
+        //arrange
+        const string fileName = "ProcessMapPlanDrillingInvalid.xlsx";
+        var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName);
+        
+        //act
+        var streamPart = new StreamPart(stream, fileName, "application/octet-stream");
+        var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart });
+        
+        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+        
+        var parserResult = response.Content;
+        
+        Assert.NotNull(parserResult);
+        Assert.False(parserResult.IsValid);
+        Assert.Single(parserResult.Warnings);
+        Assert.Single(parserResult.Item);
+        
+        var row = parserResult.Item.First();
+        
+        Assert.False(row.IsValid);
+        Assert.Equal(2, row.Warnings.Count());
+    }
 }