Отвечай на вопросы, используя следующий контекст:
diff --git a/sources/App/Directory.Build.props b/sources/App/Directory.Build.props
index 647d0ad72a..4c913046c7 100644
--- a/sources/App/Directory.Build.props
+++ b/sources/App/Directory.Build.props
@@ -1,7 +1,7 @@
 <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
   <PropertyGroup>
-    <iRISInsuranceCoreVersion>2.0.6460-33d43bb</iRISInsuranceCoreVersion>
+    <iRISInsuranceCoreVersion>2.0.6476-merge-requests-1555-142e8de</iRISInsuranceCoreVersion>
     <iRISFrameworkVersion>0.114.37</iRISFrameworkVersion>
     <SiebelClientVersion>1.0.34</SiebelClientVersion>
     <AutoDictionaryClientVersion>1.0.8</AutoDictionaryClientVersion>
diff --git a/sources/App/src/Modules/iRIS.KaskoCore.OSS/Code/Mappers/KaskoOssMapper.cs b/sources/App/src/Modules/iRIS.KaskoCore.OSS/Code/Mappers/KaskoOssMapper.cs
index aa5a53e3f5..3d7fe8b8ef 100644
--- a/sources/App/src/Modules/iRIS.KaskoCore.OSS/Code/Mappers/KaskoOssMapper.cs
+++ b/sources/App/src/Modules/iRIS.KaskoCore.OSS/Code/Mappers/KaskoOssMapper.cs
@@ -436,8 +436,14 @@ namespace iRIS.KaskoCore.OSS.Code.Mappers
             kasko.StoaInsurer = MapHelper.ConvertBoolToYesNo(dealOptions.Contains(OptionCodes.TECHCENTER) || HasMatch(compensationOptions, OptionCodes.TECHCENTER, OptionCodes.RepairStoaNotChoise));
             kasko.StoaInsurant = MapHelper.ConvertBoolToYesNo(HasMatch(compensationOptions, OptionCodes.INSURANTTECHCENTER, OptionCodes.RepairStoaChoise));
             kasko.StoaCalculate = MapHelper.ConvertBoolToYesNo(dealRisks.Contains(RiskCodes.CARJACKING) || dealRisks.Contains(RiskCodes.TOTAL));
-            kasko.StaffDriverStaj = "0";
-            kasko.StaffDriverAge = "18";
+
+            kasko.StaffDriverAge = deal.AutoDeal.DriverMinAge.HasValue
+                            ? deal.AutoDeal.DriverMinAge.ToString()
+                            : AutoDealConstants.DriverMinAge.ToString();
+            kasko.StaffDriverStaj = deal.AutoDeal.DriverMinExperience.HasValue
+                ? deal.AutoDeal.DriverMinExperience.ToString()
+                : AutoDealConstants.DriverMinExperience.ToString();
+
             kasko.Evacuation = MapHelper.ConvertBoolToYesNo(dealOptions.Contains(OptionCodes.EVACUATION));
             kasko.BrokenGlass = brokenGlass;
             kasko.AvarkomCall = avarkomCall;
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesCaptions.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesCaptions.cs
index 6772577de7..3fb3d103a2 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesCaptions.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesCaptions.cs
@@ -10,5 +10,18 @@
 
         public const string InsurantRegistrationAddress = "Адрес регистрации страхователя";
         public const string InsurantFactAddress = "Фактический адрес страхователя";
+
+        public const string TheftOfKeys = "Кража ключей";
+        public const string KeysCountChangeToTwoOrMore = "Количество ключей меняется на 2 или более";
+        public const string KeysCountChangeFromTwoToOne = "Количество ключей меняется с 2 - х на 1";
+
+        public const string InsurantChangeNonOwner = "Смена Страхователя, не являющегося Собственником";
+        public const string InsurantChangeOwner = "Смена Страхователя, являющегося Собственником";
+        public const string OwnerAndBeneficiaryChange = "Смена Собственника и Выгодоприобретателя";
+
+        public const string MinAgeIncrease = "Увеличение минимального возраста";
+        public const string MinAgeDecrease = "Уменьшение минимального возраста";
+        public const string MinExperienceIncrease = "Увеличение минимального стажа";
+        public const string MinExperienceDecrease = "Уменьшение минимального стажа";
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesPaths.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesPaths.cs
index 950ff8501d..25d391781a 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesPaths.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ChangesPaths.cs
@@ -2,6 +2,9 @@
 {
     public class ChangesPaths
     {
+        public const string DateStart = "Period.DateStart";
+        public const string DateEnd = "Period.DateEnd";
+
         public const string DriverLastName = "Driver.Subject.IndividualEntity.Person.LastName";
         public const string DriverName = "Driver.Subject.IndividualEntity.Person.Name";
         public const string DriverMiddleName = "Driver.Subject.IndividualEntity.Person.MiddleName";
@@ -31,6 +34,12 @@
         public const string AutoYearOfIssueCode = "Auto.AutoYearOfIssueCode";
         public const string AutoYearOfIssueValue = "Auto.AutoYearOfIssueValue";
         public const string AutoTransmissionTypeCode = "Auto.AutoTransmissionTypeCode";
+        public const string HasAntiTheftSystem = "Auto.HasAntiTheftSystem";
+        public const string AutoCost = "Auto.AutoCost";
+        public const string AutoBrandName = "Auto.AutoBrandName";
+        public const string AutoModelName = "Auto.AutoModelName";
+        public const string IsCreditAuto = "Auto.IsCreditAuto";
+        public const string ReplacingLocks = "Auto.ReplacingLocks";
 
         public const string OwnerEnteredAddress0 = "Owner.Subject.IndividualEntity.Person.Addresses[0].EnteredAddress";
         public const string OwnerEnteredAddress1 = "Owner.Subject.IndividualEntity.Person.Addresses[1].EnteredAddress";
@@ -46,6 +55,7 @@
         public const string OwnerMiddleName = "Owner.Subject.IndividualEntity.Person.MiddleName";
         public const string OwnerLastName = "Owner.Subject.IndividualEntity.Person.LastName";
         public const string OwnerDateOfBirth = "Owner.Subject.IndividualEntity.Person.DateOfBirth";
+        public const string OwnerInnNumber = "Owner.Subject.IndividualEntity.Person.InnNumber";
 
         public const string InsurantIdentityDocumentSeries = "Insurant.IdentityDocument.Series";
         public const string InsurantIdentityDocumentNumber = "Insurant.IdentityDocument.Number";
@@ -61,6 +71,7 @@
         public const string InsurantEnteredAddress0 = "Insurant.Subject.IndividualEntity.Person.Addresses[0].EnteredAddress";
         public const string InsurantEnteredAddress1 = "Insurant.Subject.IndividualEntity.Person.Addresses[1].EnteredAddress";
         public const string InsurantEnteredAddress2 = "Insurant.Subject.IndividualEntity.Person.Addresses[2].EnteredAddress";
+        public const string InsurantInnNumber = "Insurant.Subject.IndividualEntity.Person.InnNumber";
 
         public const string AutoDealInsurancePeriodType = "AutoDeal.InsurancePeriodType.Code";
         public const string AutoDealInsurancePeriodTypeName = "AutoDeal.InsurancePeriodType.Name";
@@ -69,5 +80,7 @@
         public const string AutoDealIsMultidrive = "AutoDeal.IsMultidrive";
         public const string AutoDealTsIdentityCardType = "AutoDeal.TsIdentityCard.TsIdentityCardTypeCode";
         public const string AutoDealDrivers = "AutoDeal.Drivers";
+        public const string DriverMinAge = "AutoDeal.DriverMinAge";
+        public const string DriverMinExperience = "AutoDeal.DriverMinExperience";
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ModificationCodes.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ModificationCodes.cs
index f66571d0ea..093717f73b 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ModificationCodes.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Constants/ModificationCodes.cs
@@ -311,25 +311,33 @@ namespace iRIS.KaskoLink2.Modification.Code.Constants
         /// <returns>Код изменения.</returns>
         public static int? GetByChangePath(string changePath, string caption = null) => changePath switch
         {
+            ChangesPaths.DateStart => PolicyPeriodChange,
+            ChangesPaths.DateEnd => PolicyPeriodChange,
+
             ChangesPaths.InsurantLastName => PersonNameOrBirthDateChange,
             ChangesPaths.InsurantName => PersonNameOrBirthDateChange,
             ChangesPaths.InsurantMiddleName => PersonNameOrBirthDateChange,
-            ChangesPaths.InsurantDateOfBirth => PersonNameOrBirthDateChange,
             ChangesPaths.InsurantIdentityDocumentType => InsurantOwnerIdentityDocumentChange,
+            ChangesPaths.InsurantDateOfBirth when caption == ChangesCaptions.InsurantChangeNonOwner => InsurantNotBeingOwnerChange,
+            ChangesPaths.InsurantDateOfBirth when caption == ChangesCaptions.InsurantChangeOwner => InsurantBeingOwnerChange,
+            ChangesPaths.InsurantDateOfBirth => PersonNameOrBirthDateChange,
             ChangesPaths.InsurantEnteredAddress0 when caption == ChangesCaptions.InsurantRegistrationAddress => InsurantOwnerRegistrationAddressChange,
             ChangesPaths.InsurantEnteredAddress0 when caption == ChangesCaptions.InsurantFactAddress => InsurantOwnerFactAddressChange,
             ChangesPaths.InsurantEnteredAddress1 when caption == ChangesCaptions.InsurantRegistrationAddress => InsurantOwnerRegistrationAddressChange,
             ChangesPaths.InsurantEnteredAddress1 when caption == ChangesCaptions.InsurantFactAddress => InsurantOwnerFactAddressChange,
+            ChangesPaths.InsurantInnNumber => TaxIdentificationNumberChange,
 
             ChangesPaths.OwnerLastName => PersonNameOrBirthDateChange,
             ChangesPaths.OwnerName => PersonNameOrBirthDateChange,
             ChangesPaths.OwnerMiddleName => PersonNameOrBirthDateChange,
+            ChangesPaths.OwnerDateOfBirth when caption == ChangesCaptions.OwnerAndBeneficiaryChange => OwnerAndBeneficiaryChange,
             ChangesPaths.OwnerDateOfBirth => PersonNameOrBirthDateChange,
             ChangesPaths.OwnerIdentityDocumentType => InsurantOwnerIdentityDocumentChange,
             ChangesPaths.OwnerEnteredAddress0 when caption == ChangesCaptions.OwnerRegistrationAddress => InsurantOwnerRegistrationAddressChange,
             ChangesPaths.OwnerEnteredAddress0 when caption == ChangesCaptions.OwnerFactAddress => InsurantOwnerFactAddressChange,
             ChangesPaths.OwnerEnteredAddress1 when caption == ChangesCaptions.OwnerRegistrationAddress => InsurantOwnerRegistrationAddressChange,
             ChangesPaths.OwnerEnteredAddress1 when caption == ChangesCaptions.OwnerFactAddress => InsurantOwnerFactAddressChange,
+            ChangesPaths.OwnerInnNumber => TaxIdentificationNumberChange,
 
             ChangesPaths.DriverLastName => PersonNameOrBirthDateChange,
             ChangesPaths.DriverName => PersonNameOrBirthDateChange,
@@ -344,7 +352,20 @@ namespace iRIS.KaskoLink2.Modification.Code.Constants
             ChangesPaths.AutoEngineTypeCode => AutoEngineTypeOrPowerChange,
             ChangesPaths.AutoRegistrationNumber => AutoRegistrationChange,
             ChangesPaths.AutoDealTsIdentityCardType => AutoTsIdentityCardChange,
-
+            ChangesPaths.HasAntiTheftSystem => AntiTheftSystemDismantling,
+            ChangesPaths.AutoPurposeOfUsingCode => AutoPurposeOfUsingChange,
+            ChangesPaths.AutoCost => DamageAndTheftCoverageIncrease,
+            ChangesPaths.AutoBrandName => AutoBrandOrModelChange,
+            ChangesPaths.AutoModelName => AutoBrandOrModelChange,
+            ChangesPaths.AutoOriginalKeysAmount when caption == ChangesCaptions.TheftOfKeys => KeysTheft,
+            ChangesPaths.AutoOriginalKeysAmount when caption == ChangesCaptions.KeysCountChangeToTwoOrMore => NumberOfKeysChange,
+            ChangesPaths.AutoOriginalKeysAmount when caption == ChangesCaptions.KeysCountChangeFromTwoToOne => KeysNumberReductionToOne,
+            ChangesPaths.DriverMinAge when caption == ChangesCaptions.MinAgeDecrease => AgeExperienceReduction,
+            ChangesPaths.DriverMinAge when caption == ChangesCaptions.MinAgeIncrease => AgeExperienceIncrease,
+            ChangesPaths.DriverMinExperience when caption == ChangesCaptions.MinExperienceDecrease => AgeExperienceReduction,
+            ChangesPaths.DriverMinExperience when caption == ChangesCaptions.MinExperienceIncrease => AgeExperienceIncrease,
+            ChangesPaths.IsCreditAuto => BeneficiaryChange,
+            ChangesPaths.ReplacingLocks => LockCylindersReplacementOrImmobilizerReprogramming,
             _ => null
         };
 
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/GetChangesCustomProcess.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/GetChangesCustomProcess.cs
index 723ec59b30..72670565e9 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/GetChangesCustomProcess.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/GetChangesCustomProcess.cs
@@ -91,7 +91,7 @@ namespace iRIS.KaskoLink2.Modification.Code.CustomProcesses
                 var changes = dealComparer.GetChanges(expectedDeal, actualDeal);
 
                 var displayedChangesFormatter =
-                    new KaskoDisplayedChangesFormatter(processContext.ServiceProvider.GetService<IPathManager>());
+                    new KaskoDisplayedChangesFormatter(processContext.ServiceProvider.GetService<IPathManager>(), changes, expectedBasket);
                 var displayedChanges = displayedChangesFormatter.ToDisplayedChanges(changes);
 
                 var modifications = GetModifications(displayedChanges, basketModifications, actualBasket.Number, actualDeal.Id);
@@ -168,6 +168,11 @@ namespace iRIS.KaskoLink2.Modification.Code.CustomProcesses
                 agreementNames.Add(ModificationAgreementNames.RiskDegreeChangeAgreement);
             }
 
+            if (modifications.Any(x => x.ModificationListForKaskoCode == ModificationCodes.AntiTheftSystemDismantling))
+            {
+                agreementNames.Add(ModificationAgreementNames.RiskDegreeChangeAgreement);
+            }
+
             if (modifications.Any(x => x.ModificationListForKaskoCode == ModificationCodes.DriversListChange))
             { 
                 agreementNames.Add(ModificationAgreementNames.DriversListChangeAgreement);
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/MapOssDataProcess.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/MapOssDataProcess.cs
index 830961bcfc..98a905ea09 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/MapOssDataProcess.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/CustomProcesses/MapOssDataProcess.cs
@@ -84,6 +84,11 @@ namespace iRIS.KaskoLink2.Modification.Code.CustomProcesses
                     deal.EntityContext.Add("prevSpecialProgram", uni.Policy.Kasko.SpecialProgram);
                 }
 
+                if (uni.Policy.PolicyStatus != null)
+                {
+                    deal.EntityContext.Add("ossPolicyStatus", uni.Policy.PolicyStatus);
+                }
+
                 deal.EntityContext.Add("signDate", uni.Policy.Date);
 
                 var processor = processContext.ServiceProvider.GetRequiredService<IOssKaskoOptionsProcessor>();
@@ -94,10 +99,17 @@ namespace iRIS.KaskoLink2.Modification.Code.CustomProcesses
                 deal.AutoDeal.PreviousOssOptions.AddRange(ossKaskoOptionsExcept);
 
                 processor.SetOssKaskoOptions(basket);
-                
+
                 await mapper.MapToDealAsync(uni, basket);
 
                 deal.IsEPolicy = true;
+                var existingPeriod = deal.ConditionBlock.DealPeriods.FirstOrDefault();
+                if (existingPeriod != null)
+                {
+                    existingPeriod.DateStart = deal.DateStart;
+                    existingPeriod.DateEnd = deal.DateEnd;
+                }
+
                 basket.Number = number;
             }
             catch (Exception ex)
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/ChangeValidations/KaskoModificationChangesLink2Validator.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/ChangeValidations/KaskoModificationChangesLink2Validator.cs
index 0b002c036f..477a619ad4 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/ChangeValidations/KaskoModificationChangesLink2Validator.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/ChangeValidations/KaskoModificationChangesLink2Validator.cs
@@ -67,6 +67,18 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
                 return ChangeValidationResult.Empty();
             }
 
+            if (HasInsurantChangedCompletely(insurantChanges))
+            {
+                return ChangeValidationResult.Empty();
+            }
+
+            if (!CheckLevenshteinDistanceForInsurantInnChanges(insurantChanges))
+            {
+                var errorMessage = "Не допускается изменение более " + AllowedLevenshteinDistance + " символов в поле Инн страхователя.";
+
+                resultErrors.Add(errorMessage);
+            }          
+
             if (!CheckLevenshteinDistanceForInsurantFullNameChanges(insurantChanges, isInsurantGettingMarried))
             {
                 var errorMessage = isInsurantGettingMarried == true
@@ -78,6 +90,53 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
             return new ChangeValidationResult(resultErrors);
         }
 
+        private bool CheckLevenshteinDistanceForInsurantInnChanges(List<ObjectCompareResult> insurantChanges)
+        {
+            var allowedInsurantChanges = insurantChanges
+            .Where(dr => dr.ChangedFields.Any(f => f == ChangesPaths.InsurantInnNumber)).ToList();
+
+            var fieldsValues = new Dictionary<string, Func<Insurant, string>>
+            {
+                [ChangesPaths.InsurantInnNumber] = i => i.Subject.IndividualEntity.Person.InnNumber
+            };
+
+            var checkLevenshtein = CheckLevenshteinDistanceFor(
+                allowedInsurantChanges,
+                fieldsValues);
+
+            return checkLevenshtein;
+        }
+
+        /// <summary>
+        /// Проверяем полное изменение страхователя или частичное.
+        /// </summary>
+        /// <param name="insurantChanges"></param>
+        /// <returns></returns>
+        private bool HasInsurantChangedCompletely(List<ObjectCompareResult> insurantChanges)
+        {
+            var fullNameChanges = insurantChanges.Any(change =>
+                change.ChangedFields.Any(field => field == ChangesPaths.InsurantLastName || field == ChangesPaths.InsurantName || field == ChangesPaths.InsurantMiddleName));
+            var dateOfBirthChange = insurantChanges.Any(change => change.ChangedFields.Any(field => field == ChangesPaths.InsurantDateOfBirth));
+
+            var identityDocumentChanges = insurantChanges.Any(change => change.ChangedFields.Any(field => field == ChangesPaths.InsurantIdentityDocumentSeries || field == ChangesPaths.InsurantIdentityDocumentNumber));
+            return fullNameChanges && dateOfBirthChange && identityDocumentChanges;
+        }
+
+        /// <summary>
+        /// Проверяем полное изменение собственника или частичное.
+        /// </summary>
+        /// <param name="insurantChanges"></param>
+        /// <returns></returns>
+        private bool HasOwnerChangedCompletely(List<ObjectCompareResult> ownerChanges)
+        {
+            var fullNameChanges = ownerChanges.Any(change =>
+                change.ChangedFields.Any(field => field == ChangesPaths.OwnerLastName || field == ChangesPaths.OwnerName || field == ChangesPaths.OwnerMiddleName));
+            var dateOfBirthChange = ownerChanges.Any(change => change.ChangedFields.Any(field => field == ChangesPaths.OwnerDateOfBirth));
+
+            var identityDocumentChanges = ownerChanges.Any(change => change.ChangedFields.Any(field => field == ChangesPaths.OwnerIdentityDocumentSeries || field == ChangesPaths.OwnerIdentityDocumentNumber));
+            return fullNameChanges && dateOfBirthChange && identityDocumentChanges;
+        }
+
         /// <summary>
         /// Выполняет проверку допустимости изменений данных собственника.
         /// </summary>
@@ -92,6 +151,18 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
                 return ChangeValidationResult.Empty();
             }
 
+            if (HasOwnerChangedCompletely(ownerChanges))
+            {
+                return ChangeValidationResult.Empty();
+            }
+
+            if (!CheckLevenshteinDistanceForOwnerInnChanges(ownerChanges))
+            {
+                var errorMessage = "Не допускается изменение более " + AllowedLevenshteinDistance + " символов в поле Инн собственника.";
+
+                resultErrors.Add(errorMessage);
+            }
+
             if (!CheckLevenshteinDistanceForOwnerFullNameChanges(ownerChanges, isOwnerGettingMerried))
             {
                 var errorMessage = isOwnerGettingMerried == true
@@ -103,6 +174,23 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
             return new ChangeValidationResult(resultErrors);
         }
 
+        private bool CheckLevenshteinDistanceForOwnerInnChanges(List<ObjectCompareResult> ownerChanges)
+        {
+            var allowedOwnerChanges = ownerChanges
+                .Where(dr => dr.ChangedFields.Any(f => f == ChangesPaths.OwnerInnNumber)).ToList();
+
+            var fieldsValues = new Dictionary<string, Func<Insurant, string>>
+            {
+                [ChangesPaths.OwnerInnNumber] = i => i.Subject.IndividualEntity.Person.InnNumber
+            };
+
+            var checkLevenshtein = CheckLevenshteinDistanceFor(
+                allowedOwnerChanges,
+                fieldsValues);
+
+            return checkLevenshtein;
+        }
+
         /// <summary>
         /// Выполняет проверку допустимости изменений данных водителей.
         /// </summary>
@@ -150,9 +238,9 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
             }
 
             var autoDealChanges = GetChangedItems(DealPathConstants.AutoDeal);
-            var isAutoNumberChanged = autoChanges.Any(a => a.ChangedFields.Any(f => _autoNumberFields.Contains(f)));            
+            var isAutoNumberChanged = autoChanges.Any(a => a.ChangedFields.Any(f => _autoNumberFields.Contains(f)));
             var isAutoDocumentChanged = autoDealChanges.Any(a => a.ChangedFields.Any(f => _autoDocumentFields.Contains(f)));
-            
+
             if (isAutoDocumentChanged && isAutoNumberChanged)
             {
                 resultErrors.Add("Не допускается одновременное изменение VIN  и ПТС.");
@@ -173,12 +261,37 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.ChangeValidations
                 resultErrors.Add($"Не допускается изменение признака автозапуска и количества ключей.");
             }
 
+            if (!CheckAntiTheftSystemChanges(autoChanges))
+            {
+                resultErrors.Add($"Возможно только изменение признака демонтажа ПСС и / или ПУУ.");
+            }
+
             return new ChangeValidationResult(resultErrors);
         }
 
+        private bool CheckAntiTheftSystemChanges(List<ObjectCompareResult> autoChanges)
+        {
+            var fieldValues = new Dictionary<string, Func<Auto, bool>>
+            {
+                [ChangesPaths.HasAntiTheftSystem] = i => i.HasAntiTheftSystem ?? false,
+            };
+
+            return !autoChanges.Any(change =>
+            {
+                var exp = (Auto)change.ExpectedObject;
+                var act = (Auto)change.ActualObject;
+
+                return fieldValues.Any(
+                    fieldValue =>
+                        change.ChangedFields.Contains(fieldValue.Key)
+                        && !fieldValue.Value(exp)
+                        && fieldValue.Value(act));
+            });
+        }
+
         private bool CheckHasAutostartChangesAndKeysAmount(List<ObjectCompareResult> autoChanges)
         {
-            return !autoChanges.Any(dr => dr.ChangedFields.Any(f => f == ChangesPaths.AutoHasAutostart) 
+            return !autoChanges.Any(dr => dr.ChangedFields.Any(f => f == ChangesPaths.AutoHasAutostart)
                 && dr.ChangedFields.Any(f => f == ChangesPaths.AutoOriginalKeysAmount));
         }
 
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/KaskoDisplayedChangesFormatter.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/KaskoDisplayedChangesFormatter.cs
index 314040c193..9fc5322673 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/KaskoDisplayedChangesFormatter.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/KaskoDisplayedChangesFormatter.cs
@@ -16,16 +16,21 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
 {
     public class KaskoDisplayedChangesFormatter : DisplayedChangesFormatter
     {
-        public KaskoDisplayedChangesFormatter(IPathManager pathManager)
+        public KaskoDisplayedChangesFormatter(IPathManager pathManager, Dictionary<string, List<ObjectCompareResult>> changes, Basket expectedBasket)
             : base(pathManager, 30)
         {
             // Periods
             AddRule(
+                "Изменение срока действия договора страхования",
                 period => FormatPeriod(period as Period),
                 "Period.DateStart",
                 "Period.DateEnd");
 
             // Insurant
+            changes.TryGetValue("Insurant", out var insurantChanges);
+            var actualInsurant = insurantChanges?.FirstOrDefault()?.ActualObject as Insurant;
+            var expectedInsurant = insurantChanges?.FirstOrDefault()?.ExpectedObject as Insurant;
+
             AddRuleWithInfo(
                 "ФИО страхователя",
                 "Данные были изменены в профиле личного кабинета",
@@ -71,8 +76,23 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
             AddRule(
                 "СНИЛС страхователя",
                 "Insurant.Subject.IndividualEntity.Person.SnilsNumber");
+            AddRule(
+                "Инн страхователя",
+                "Insurant.Subject.IndividualEntity.Person.InnNumber");
+            AddRuleWithCustomCaption(              
+                insurant => IsInsurantChangedCompletely(actualInsurant, expectedInsurant) && !IsOwnerAndInsurantTheSamePerson(actualInsurant, expectedBasket.GetKaskoDeal().GetOwner())
+                    ? "Смена Страхователя, не являющегося Собственником"
+                    : "Смена Страхователя, являющегося Собственником",
+                insurant => FormatPersonName((insurant as Insurant)?.Subject),
+                "Insurant.Subject.IndividualEntity.Person.LastName",
+                "Insurant.Subject.IndividualEntity.Person.Name",
+                "Insurant.Subject.IndividualEntity.Person.MiddleName");
 
             // Owner
+            changes.TryGetValue("InsuranceObjects[0].Owners[0]", out var ownerChanges);
+            var actualOwner = ownerChanges?.FirstOrDefault()?.ActualObject as Owner;
+            var expectedOwner = ownerChanges?.FirstOrDefault()?.ExpectedObject as Owner;
+
             AddRule(
                 "ФИО собственника",
                 owner => FormatPersonName((owner as Owner)?.Subject),
@@ -108,11 +128,27 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
             AddRule(
                 "СНИЛС собственника",
                 "Owner.Subject.IndividualEntity.Person.SnilsNumber");
+            AddRule(
+                "Инн собственника",
+                "Owner.Subject.IndividualEntity.Person.InnNumber");
             AddRule(
                 "Email собственника",
                 "Owner.Subject.IndividualEntity.Person.Email1");
+            if (IsOwnerChangedCompletely(actualOwner, expectedOwner))
+            {
+                AddRule(
+                    "Смена Собственника и Выгодоприобретателя",
+                    owner => FormatPersonName((owner as Owner)?.Subject),
+                    "Owner.Subject.IndividualEntity.Person.LastName",
+                    "Owner.Subject.IndividualEntity.Person.Name",
+                    "Owner.Subject.IndividualEntity.Person.MiddleName");
+            }
 
             // Auto
+            changes.TryGetValue("InsuranceObjects[0].Auto", out var autoChanges);
+            var actualAuto = autoChanges?.FirstOrDefault()?.ActualObject as Auto;
+            var expectedAuto = autoChanges?.FirstOrDefault()?.ExpectedObject as Auto;
+
             AddRule("Год выпуска ТС", "Auto.AutoYearOfIssueCode");
             AddRule("VIN", "Auto.Vin");
             AddRule("Шасси (рама)", "Auto.ChassisNumber");
@@ -134,6 +170,37 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                 "Auto.TsIdentityCards[0].DateOfIssued");
             AddRule("Номер диагностической карты", "Auto.DiagnosticCard.Number");
             AddRule("Дата окончания диагностической карты", "Auto.DiagnosticCard.DateEnd");
+            AddRule("Увеличение страховой суммы по рискам «Ущерб» и «Угон / Хищение»", "Auto.AutoCost");
+            AddRule("Демонтаж ПСС и / или ПУУ", "Auto.HasAntiTheftSystem");
+            AddRule("Марка и / или Модель", "Auto.AutoBrandName");
+            AddRule("Марка и / или Модель", "Auto.AutoModelName");
+            AddRule("Смена Выгодоприобретателя", "Auto.IsCreditAuto");           
+
+            if (actualAuto?.ReplacingLocks == true)
+            {
+                AddRule("Замена личинок замков, либо перепрограммирование штатного иммобилайзера", "Auto.ReplacingLocks");
+            }
+
+            if (actualAuto?.OriginalKeysAmount == 0 &&
+                (expectedAuto?.OriginalKeysAmount > 0 ||
+                expectedAuto?.OriginalKeysAmount == null))
+            {
+                AddRule("Кража ключей", "Auto.OriginalKeysAmount");
+            }
+
+            if (actualAuto?.OriginalKeysAmount >= 2 &&
+                (expectedAuto?.OriginalKeysAmount < 2 ||
+                expectedAuto?.OriginalKeysAmount == null))
+            {
+                AddRule("Количество ключей меняется на 2 или более", "Auto.OriginalKeysAmount");
+            }
+
+            if (actualAuto?.OriginalKeysAmount == 1 &&
+                (expectedAuto?.OriginalKeysAmount == 2 ||
+                expectedAuto?.OriginalKeysAmount == null))
+            {
+                AddRule("Количество ключей меняется с 2 - х на 1", "Auto.OriginalKeysAmount");
+            }
 
             // Drivers
             AddRule(
@@ -161,6 +228,10 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                 "Driver.DrivingExperiences[0].DrivingExperienceDateStart");
 
             // AutoDeal
+            changes.TryGetValue("AutoDeal", out var autoDealChanges);
+            var actualAutodeal = autoDealChanges?.FirstOrDefault()?.ActualObject as AutoDeal;
+            var expectedAutodeal = autoDealChanges?.FirstOrDefault()?.ExpectedObject as AutoDeal;
+
             AddRule(
                 "Изменен тип использования",
                 autoDeal => FormatPeriodType(autoDeal as AutoDeal),
@@ -178,6 +249,8 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                 "AutoDeal.TsIdentityCard.Number",
                 "AutoDeal.TsIdentityCard.DateOfIssued");
 
+            AddRuleForMinAgeExperience(actualAutodeal, expectedAutodeal);
+
             // TransformRules
             AddTransformRule(new DisplayedChangesFormatterTransformRule
             {
@@ -197,6 +270,76 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
             });
         }
 
+        private void AddRuleForMinAgeExperience(AutoDeal actualAutodeal, AutoDeal expectedAutodeal)
+        {
+            var driverMinAge = expectedAutodeal?.DriverMinAge ?? 18;
+            var driverMinExperience = expectedAutodeal?.DriverMinExperience ?? 0;
+
+            if (actualAutodeal?.DriverMinAge > driverMinAge)
+            {
+                AddRule("Увеличение минимального возраста", "AutoDeal.DriverMinAge");
+            }
+            else if (actualAutodeal?.DriverMinAge < driverMinAge)
+            {
+                AddRule("Уменьшение минимального возраста", "AutoDeal.DriverMinAge");
+            }
+
+            if (actualAutodeal?.DriverMinExperience > driverMinExperience)
+            {
+                AddRule("Увеличение минимального стажа", "AutoDeal.DriverMinExperience");
+            }
+            else if (actualAutodeal?.DriverMinExperience < driverMinExperience)
+            {
+                AddRule("Уменьшение минимального стажа", "AutoDeal.DriverMinExperience");
+            }
+        }
+
+        private bool IsInsurantChangedCompletely(Insurant actualInsurant, Insurant expectedInsurant)
+        {
+            if (actualInsurant == null || expectedInsurant == null)
+            {
+                return false;
+            }
+
+            var fullNameChanges = InsuranceApp.Infrastructure.Procedures.LevenshteinDistance(FormatPersonName(actualInsurant.Subject), FormatPersonName(expectedInsurant.Subject)) > 2;
+            var dateOfBirthChange = actualInsurant.Subject.IndividualEntity.Person.DateOfBirth != expectedInsurant.Subject.IndividualEntity.Person.DateOfBirth;
+            var identityDocumentChanges = actualInsurant.IdentityDocument.Series != expectedInsurant.IdentityDocument.Series;
+
+            return fullNameChanges && dateOfBirthChange && identityDocumentChanges;
+        }
+
+        private bool IsOwnerChangedCompletely(Owner actualOwner, Owner expectedOwner)
+        {
+            if (actualOwner == null || expectedOwner == null)
+            {
+                return false;
+            }
+
+            var fullNameChanges = InsuranceApp.Infrastructure.Procedures.LevenshteinDistance(FormatPersonName(actualOwner.Subject), FormatPersonName(expectedOwner.Subject)) > 2;
+            var dateOfBirthChange = actualOwner.Subject.IndividualEntity.Person.DateOfBirth != expectedOwner.Subject.IndividualEntity.Person.DateOfBirth;
+            var identityDocumentChanges = actualOwner.IdentityDocument.Series != expectedOwner.IdentityDocument.Series || actualOwner.IdentityDocument.Number != expectedOwner.IdentityDocument.Number;
+
+            return fullNameChanges && dateOfBirthChange && identityDocumentChanges;
+        }
+
+        private bool IsOwnerAndInsurantTheSamePerson(Insurant actualInsurant, Owner expectedOwner)
+        {
+            if (actualInsurant == null || expectedOwner == null)
+            {
+                return false;
+            }
+
+            var actualInsurantPerson = actualInsurant.Subject.IndividualEntity.Person;
+            var expectedOwnerPerson = expectedOwner.Subject.IndividualEntity.Person;
+
+            return actualInsurantPerson.LastName == expectedOwnerPerson.LastName &&
+                   actualInsurantPerson.Name == expectedOwnerPerson.Name &&
+                   actualInsurantPerson.MiddleName == expectedOwnerPerson.MiddleName &&
+                   actualInsurantPerson.DateOfBirth == expectedOwnerPerson.DateOfBirth &&
+                   actualInsurant.IdentityDocument.Series == expectedOwner.IdentityDocument.Series &&
+                   actualInsurant.IdentityDocument.Number == expectedOwner.IdentityDocument.Number;
+        }
+
         private string GetAddressCaption(Address address, string typeName) =>
             address.AddressTypeCode switch
             {
@@ -236,7 +379,7 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
             switch (path)
             {
                 case DealPathConstants.DealPeriods:
-                    return "Периоды использования";
+                    return "Срок страхования";
 
                 case DealPathConstants.Insurant:
                     return "Страхователь";
@@ -261,11 +404,6 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                 return "водитель";
             }
 
-            if (path == DealPathConstants.DealPeriods)
-            {
-                return "период";
-            }
-
             return null;
         }
 
@@ -283,6 +421,11 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                     return FormatPeriod(compareResult.ExpectedObject as Period);
                 }
 
+                if (compareResult.IsChanged)
+                {
+                    return "Изменение срока действия договора страхования";
+                }
+
                 return null;
             }
 
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/ObjectComparerBuilder.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/ObjectComparerBuilder.cs
index 69ae7adf75..22d3fbf42d 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/ObjectComparerBuilder.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Implementations/Comparison/ObjectComparerBuilder.cs
@@ -146,7 +146,13 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                     && expected?.HasAutostart == actual?.HasAutostart
                     && expected?.OriginalKeysAmount == actual?.OriginalKeysAmount
                     && StringCompare(expected?.AutoTransmissionTypeCode, actual?.AutoTransmissionTypeCode)
-                    && expected?.HasTrailer == actual?.HasTrailer;
+                    && expected?.HasTrailer == actual?.HasTrailer
+                    && expected?.AutoCost >= actual?.AutoCost
+                    && expected?.HasAntiTheftSystem == actual?.HasAntiTheftSystem
+                    && StringCompare(expected?.AutoBrandName, actual?.AutoBrandName)
+                    && StringCompare(expected?.AutoModelName, actual?.AutoModelName)
+                    && expected?.IsCreditAuto == actual?.IsCreditAuto
+                    && expected?.ReplacingLocks == actual?.ReplacingLocks;
             }
         }
 
@@ -164,7 +170,9 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                     && StringCompare(expectedTsIdentityCard?.Series, actualTsIdentityCard?.Series)
                     && StringCompare(expectedTsIdentityCard?.Number, actualTsIdentityCard?.Number)
                     && expectedTsIdentityCard?.DateOfIssued == actualTsIdentityCard?.DateOfIssued
-                    && StringCompare(expectedTsIdentityCard?.TsIdentityCardTypeCode, actualTsIdentityCard?.TsIdentityCardTypeCode);
+                    && StringCompare(expectedTsIdentityCard?.TsIdentityCardTypeCode, actualTsIdentityCard?.TsIdentityCardTypeCode)
+                    && expected?.DriverMinAge == actual.DriverMinAge
+                    && expected?.DriverMinExperience == actual.DriverMinExperience;
             }
         }
 
@@ -198,7 +206,8 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                         expectedPerson?.Addresses?.FirstOrDefault(a => a.AddressTypeCode == AddressTypeCodes.Fact)?.EnteredAddress,
                         actualPerson?.Addresses?.FirstOrDefault(a => a.AddressTypeCode == AddressTypeCodes.Fact)?.EnteredAddress)
                     && StringCompare(expectedPerson?.Phone1, actualPerson?.Phone1)
-                    && StringCompare(expectedPerson.Email1, actualPerson?.Email1);
+                    && StringCompare(expectedPerson.Email1, actualPerson?.Email1)
+                    && StringCompare(expectedPerson.InnNumber, actualPerson?.InnNumber);
             }
         }
 
@@ -231,7 +240,8 @@ namespace iRIS.KaskoLink2.Modification.Code.Implementations.Comparison
                     && StringCompare(
                         expectedPerson?.Addresses?.FirstOrDefault(a => a.AddressTypeCode == AddressTypeCodes.Fact)?.EnteredAddress,
                         actualPerson?.Addresses?.FirstOrDefault(a => a.AddressTypeCode == AddressTypeCodes.Fact)?.EnteredAddress)
-                    && StringCompare(expectedPerson?.RegistrationRegionCode, actualPerson?.RegistrationRegionCode);
+                    && StringCompare(expectedPerson?.RegistrationRegionCode, actualPerson?.RegistrationRegionCode)
+                    && StringCompare(expectedPerson.InnNumber, actualPerson?.InnNumber);
             }
         }
         #endregion
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationAutoModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationAutoModel.cs
index 9a1d003578..72e9d48901 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationAutoModel.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationAutoModel.cs
@@ -22,6 +22,20 @@
 
         public string YearOfIssueCode { get; set; }
 
+        public int? AutoCost { get; set; }
+
+        public string PurposeOfUsingCode { get; set; }
+
+        public bool? InCredit { get; set; }
+
+        public string BankOfCredit { get; set; }
+
+        public string BankOfCreditBik { get; set; }
+
+        public bool? ReplacingLocks { get; set; }
+
+        public bool? HasAntiTheftSystem { get; set; }
+
         public KaskoModificationTsIdentityCardModel TsIdentityCard { get; set; }
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationBasketModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationBasketModel.cs
index d3f13e1709..15fde5e012 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationBasketModel.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationBasketModel.cs
@@ -1,9 +1,13 @@
-﻿namespace iRIS.KaskoLink2.Modification.Code.Models
+﻿using System.Collections.Generic;
+
+namespace iRIS.KaskoLink2.Modification.Code.Models
 {
     public class KaskoModificationBasketModel
     {
         public string ParentPolicyNumber { get; set; }
 
         public KaskoModificationDealModel Deal { get; set; }
-    } 
+
+        public List<KaskoModificationPaymentScheduleModel> PaymentSchedule { get; set; }
+    }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationDealModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationDealModel.cs
index 31ee4fdd52..3a169eafb9 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationDealModel.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationDealModel.cs
@@ -9,6 +9,10 @@ namespace iRIS.KaskoLink2.Modification.Code.Models
 
         public DateTime ChangeDate { get; set; }
 
+        public DateTime DateStart { get; set; }
+
+        public DateTime DateEnd { get; set; }
+
         public KaskoModificationAutoModel Auto { get; set; }
 
         public List<KaskoModificationDriverModel> Drivers { get; set; } = new List<KaskoModificationDriverModel>();
@@ -16,5 +20,11 @@ namespace iRIS.KaskoLink2.Modification.Code.Models
         public KaskoModificationInsurantModel Insurant { get; set; }
 
         public KaskoModificationOwnerModel Owner { get; set; }
+
+        public int? MinimalAge { get; set; }
+
+        public int? MinimalDrivingExperience { get; set; }
+
+        public KaskoModificationPacketModel Packet { get; set; }
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketField.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketField.cs
new file mode 100644
index 0000000000..e0a6337ca8
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketField.cs
@@ -0,0 +1,13 @@
+﻿namespace iRIS.KaskoLink2.Modification.Code.Models
+{
+    public class KaskoModificationPacketField
+    {
+        public string Name { get; set; }
+
+        public string Code { get; set; }
+
+        public int? StructId { get; set; }
+
+        public string AvailableValue { get; set; }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketFranchise.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketFranchise.cs
new file mode 100644
index 0000000000..efe0980ae0
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketFranchise.cs
@@ -0,0 +1,13 @@
+﻿namespace iRIS.KaskoLink2.Modification.Code.Models
+{
+    public class KaskoModificationPacketFranchise
+    {
+        public string Name { get; set; }
+
+        public string Code { get; set; }
+
+        public int? StructId { get; set; }
+
+        public string SelectedSum { get; set; }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketModel.cs
new file mode 100644
index 0000000000..0f2342e501
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPacketModel.cs
@@ -0,0 +1,15 @@
+﻿using System.Collections.Generic;
+
+namespace iRIS.KaskoLink2.Modification.Code.Models
+{
+    public class KaskoModificationPacketModel
+    {
+        public List<KaskoModificationPacketField> Risks { get; set; }
+
+        public List<KaskoModificationPacketField> Options { get; set; }
+
+        public List<KaskoModificationPacketFranchise> Franchises { get; set; }
+
+        public List<KaskoModificationPacketField> Coverages { get; set; }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPaymentScheduleModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPaymentScheduleModel.cs
new file mode 100644
index 0000000000..4e43bd6029
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPaymentScheduleModel.cs
@@ -0,0 +1,13 @@
+﻿using System;
+
+namespace iRIS.KaskoLink2.Modification.Code.Models
+{
+    public class KaskoModificationPaymentScheduleModel
+    {
+        public string Number { get; set; }
+
+        public decimal? Sum { get; set; }
+
+        public DateTime? RepaymentDate { get; set; }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPersonModel.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPersonModel.cs
index 92191d3ca9..4f2f789cac 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPersonModel.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/KaskoModificationPersonModel.cs
@@ -17,6 +17,8 @@ namespace iRIS.KaskoLink2.Modification.Code.Models
 
         public DateTime? DateOfBirth { get; set; }
 
+        public string Inn { get; set; }
+
         public KaskoModificationIdentityDocumentModel IdentityDocument { get; set; }
 
         public List<KaskoModificationAddressModel> Addresses { get; set; } = new List<KaskoModificationAddressModel>();
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationDealModelValidator.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationDealModelValidator.cs
index daf0c04f27..f5cd522dea 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationDealModelValidator.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationDealModelValidator.cs
@@ -30,6 +30,14 @@ namespace iRIS.KaskoLink2.Modification.Code.Models.Validators
                 .NotEqual(false)
                     .When(x => x.Drivers.Count == 0, ApplyConditionTo.CurrentValidator)
                         .WithMessage("Не допускается удаление всех водителей");
+
+            RuleFor(x => x.MinimalAge)
+                .InclusiveBetween(18, 99)
+                    .WithMessage("Значение поля MinimalAge должно быть указано в диапазоне от 18 до 99");
+
+            RuleFor(x => x.MinimalDrivingExperience)
+                .GreaterThanOrEqualTo(0)
+                    .WithMessage("Значение поля MinimalDrivingExperience не может быть меньше 0");
         }
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationInsurantModelValidator.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationInsurantModelValidator.cs
index ab4eb203aa..01899145cf 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationInsurantModelValidator.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationInsurantModelValidator.cs
@@ -13,6 +13,10 @@ namespace iRIS.KaskoLink2.Modification.Code.Models.Validators
             RuleFor(x => x.Person.DateOfBirth)
                 .LessThan(DT.Now.AddYears(-18))
                     .WithMessage("Страхователь должен быть старше 18 лет");
+            
+            RuleFor(x => x.Person.Inn)
+                .Length(0, 14)
+                    .WithMessage("Длина поля ИНН страхователя не должна превышать 14 символов");
         }
     }
 }
\ No newline at end of file
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationOwnerModelValidator.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationOwnerModelValidator.cs
index b339cc9baa..919c6cd9da 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationOwnerModelValidator.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Models/Validators/KaskoModificationOwnerModelValidator.cs
@@ -13,6 +13,10 @@ namespace iRIS.KaskoLink2.Modification.Code.Models.Validators
             RuleFor(x => x.Person.DateOfBirth)
                 .LessThan(DT.Now.AddYears(-18))
                     .WithMessage("Владелец должен быть старше 18 лет");
+
+            RuleFor(x => x.Person.Inn)
+                .Length(0, 14)
+                    .WithMessage("Длина поля ИНН собственника не должна превышать 14 символов");
         }
     }
 }
\ No newline at end of file
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/PipelineExtensions/KaskoPolicyModificationSetRootModelExtension.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/PipelineExtensions/KaskoPolicyModificationSetRootModelExtension.cs
index e8824d81ca..c160af1dac 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/PipelineExtensions/KaskoPolicyModificationSetRootModelExtension.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/PipelineExtensions/KaskoPolicyModificationSetRootModelExtension.cs
@@ -4,6 +4,7 @@ using iRIS.Framework.RequestPipeline.Abstractions;
 using iRIS.Framework.RequestPipeline.Extensions;
 using iRIS.Framework.RequestPipeline.Pipelines;
 using iRIS.Framework.UI.PresentationModel;
+using iRIS.InsuranceCore.Entities;
 using iRIS.KaskoCore.Code.Extensions;
 using iRIS.KaskoLink2.Code.Link2;
 using iRIS.KaskoLink2.Modification.Code.Models;
@@ -47,6 +48,7 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
 
             vmDict.TryGetValue(nameof(KaskoModificationBasketModel.ParentPolicyNumber), out var policyNumber);
             vmDict.TryGetValue(nameof(KaskoModificationBasketModel.Deal), out var deal);
+            vmDict.TryGetValue(nameof(KaskoModificationBasketModel.PaymentSchedule), out var paymentSchedule);
 
             model.ParentPolicyNumber = policyNumber?.ToString();
             if (deal is KaskoModificationViewModel_Deal dealObject)
@@ -54,6 +56,39 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
                 model.Deal = new KaskoModificationDealModel();
                 FillKaskoModificationDealModel(dealObject, model);
             }
+
+            if (paymentSchedule is List<KaskoModificationViewModel_PaymentSchedule> paymentScheduleList)
+            {
+                model.PaymentSchedule = new List<KaskoModificationPaymentScheduleModel>();
+
+                foreach (var paymentScheduleItem in paymentScheduleList)
+                {
+                    var paymentScheduleModel = new KaskoModificationPaymentScheduleModel();
+                    FillKaskoModificationPaymentScheduleModel(paymentScheduleItem, paymentScheduleModel);
+                    model.PaymentSchedule.Add(paymentScheduleModel);
+                }
+            }
+        }
+
+        private void FillKaskoModificationPaymentScheduleModel(KaskoModificationViewModel_PaymentSchedule paymentScheduleObject, KaskoModificationPaymentScheduleModel model)
+        {
+            var dealDict = paymentScheduleObject.GetDictionary();
+
+            dealDict.TryGetValue(nameof(KaskoModificationPaymentScheduleModel.Number), out var numberVM);
+            dealDict.TryGetValue(nameof(KaskoModificationPaymentScheduleModel.Sum), out var sumVM);
+            dealDict.TryGetValue(nameof(KaskoModificationPaymentScheduleModel.RepaymentDate), out var repaymentDateVM);
+
+            model.Number = numberVM?.ToString();
+
+            if (sumVM is decimal sum)
+            {
+                model.Sum = sum;
+            }
+
+            if (repaymentDateVM is DateTime repaymentDate)
+            {
+                model.RepaymentDate = repaymentDate;
+            }
         }
 
         private void FillKaskoModificationDealModel(KaskoModificationViewModel_Deal dealObject, KaskoModificationBasketModel model)
@@ -62,10 +97,15 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
 
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.IsMultidrive), out var isMultidriveVM);
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.ChangeDate), out var changeDateVM);
+            dealDict.TryGetValue(nameof(KaskoModificationDealModel.DateStart), out var dateStartVM);
+            dealDict.TryGetValue(nameof(KaskoModificationDealModel.DateEnd), out var dateEndVM);
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.Auto), out var autoVM);
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.Drivers), out var driverVM);
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.Insurant), out var insurantVM);
             dealDict.TryGetValue(nameof(KaskoModificationDealModel.Owner), out var ownerVM);
+            dealDict.TryGetValue(nameof(KaskoModificationDealModel.MinimalAge), out var minimalAgeVM);
+            dealDict.TryGetValue(nameof(KaskoModificationDealModel.MinimalDrivingExperience), out var minimalDrivingExperienceVM);
+            dealDict.TryGetValue(nameof(KaskoModificationDealModel.Packet), out var packetVM);
 
             if (isMultidriveVM is bool isMultidrive)
             {
@@ -77,6 +117,26 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
                 model.Deal.ChangeDate = changeDate;
             }
 
+            if (dateStartVM is DateTime dateStart)
+            {
+                model.Deal.DateStart = dateStart;
+            }
+
+            if (dateEndVM is DateTime dateEnd)
+            {
+                model.Deal.DateEnd = dateEnd;
+            }
+
+            if (minimalAgeVM is int minimalAge)
+            {
+                model.Deal.MinimalAge = minimalAge;
+            }
+
+            if (minimalDrivingExperienceVM is int minimalDrivingExperience)
+            {
+                model.Deal.MinimalDrivingExperience = minimalDrivingExperience;
+            }
+
             if (autoVM is KaskoModificationViewModel_Auto auto)
             {
                 model.Deal.Auto = new KaskoModificationAutoModel();
@@ -100,6 +160,46 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
                 model.Deal.Owner = new KaskoModificationOwnerModel();
                 FillKaskoModificationOwnerModel(owner, model);
             }
+
+            if (packetVM is KaskoModificationViewModel_Packet packet)
+            {
+                model.Deal.Packet = new KaskoModificationPacketModel();
+                FillKaskoModificationPacketModel(packet, model);
+            }
+        }
+
+        private void FillKaskoModificationPacketModel(KaskoModificationViewModel_Packet packet, KaskoModificationBasketModel model)
+        {
+            packet.GetDictionary().TryGetValue(nameof(KaskoModificationPacketModel.Risks), out var packetRisksVM);
+            if (packetRisksVM is List<KaskoModificationViewModel_PacketField> risks)
+            {
+                model.Deal.Packet.Risks = new List<KaskoModificationPacketField>();
+                FillKaskoModificationPacketFieldModel(risks, model.Deal.Packet.Risks);
+            }
+        }
+
+        private void FillKaskoModificationPacketFieldModel(List<KaskoModificationViewModel_PacketField> vmRisks, List<KaskoModificationPacketField> risks)
+        {
+            foreach (var vmRisk in vmRisks)
+            {
+                if (!vmRisk.GetDictionary().TryGetValue(nameof(KaskoModificationPacketField.Name), out var name) ||
+                    !vmRisk.GetDictionary().TryGetValue(nameof(KaskoModificationPacketField.Code), out var code) ||
+                    !vmRisk.GetDictionary().TryGetValue(nameof(KaskoModificationPacketField.StructId), out var structId) ||
+                    !vmRisk.GetDictionary().TryGetValue(nameof(KaskoModificationPacketField.AvailableValue), out var availableValue))
+                {
+                    continue;
+                }
+
+                var risk = new KaskoModificationPacketField
+                {
+                    Name = name as string,
+                    Code = code as string,
+                    StructId = structId as int?,
+                    AvailableValue = availableValue as string
+                };
+
+                risks.Add(risk);
+            }
         }
 
         private void FillKaskoModificationOwnerModel(KaskoModificationViewModel_Owner owner, KaskoModificationBasketModel model)
@@ -124,11 +224,13 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
             personDict.TryGetValue(nameof(KaskoModificationPersonModel.DateOfBirth), out var dateOfBirthVM);
             personDict.TryGetValue(nameof(KaskoModificationPersonModel.Addresses), out var addressesVM);
             personDict.TryGetValue(nameof(KaskoModificationPersonModel.IdentityDocument), out var identityDocVM);
+            personDict.TryGetValue(nameof(KaskoModificationPersonModel.Inn), out var innVM);
 
             model.Name = nameVM?.ToString().Capitalize();
             model.LastName = lastNameVM?.ToString().Capitalize();
             model.MiddleName = middleNameVM?.ToString().Capitalize();
             model.Email = emailVM?.ToString();
+            model.Inn = innVM?.ToString();
             
             if (dateOfBirthVM is DateTime dateOfBirth)
             {
@@ -296,6 +398,13 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
             autoDict.TryGetValue(nameof(KaskoModificationAutoModel.TransmissionTypeCode), out var transmissionVM);
             autoDict.TryGetValue(nameof(KaskoModificationAutoModel.HasAutostart), out bool? autostartVM);
             autoDict.TryGetValue(nameof(KaskoModificationAutoModel.OriginalKeysAmount), out int? keysAmountVm);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.AutoCost), out var autoCostVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.PurposeOfUsingCode), out var purposeOfUsingCodeVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.InCredit), out var inCreditVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.BankOfCredit), out var bankOfCreditVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.BankOfCreditBik), out var bankOfCreditBikVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.ReplacingLocks), out var replacingLocksVM);
+            autoDict.TryGetValue(nameof(KaskoModificationAutoModel.HasAntiTheftSystem), out var hasAntiTheftSystemVM);
 
             model.Brand = brandVM?.ToString();
             model.Model = modelVM?.ToString();
@@ -307,6 +416,29 @@ namespace iRIS.KaskoLink2.Modification.Code.PipelineExtensions
             model.TransmissionTypeCode = transmissionVM?.ToString();
             model.HasAutostart = autostartVM;
             model.OriginalKeysAmount = keysAmountVm;
+            model.PurposeOfUsingCode = purposeOfUsingCodeVM?.ToString();
+            model.BankOfCredit = bankOfCreditVM?.ToString();
+            model.BankOfCreditBik = bankOfCreditBikVM?.ToString();
+
+            if (inCreditVM is bool inCredit)
+            {
+                model.InCredit = inCredit;
+            }
+
+            if (replacingLocksVM is bool replacingLocks)
+            {
+                model.ReplacingLocks = replacingLocks;
+            }
+
+            if (hasAntiTheftSystemVM is bool hasAntiTheftSystem)
+            {
+                model.HasAntiTheftSystem = hasAntiTheftSystem;
+            }
+
+            if (autoCostVM is int autoCost)
+            {
+                model.AutoCost = autoCost;
+            }
 
             if (tsIdentityCardVM is KaskoModificationViewModel_TsIdentityCard tsIdentityCard)
             {
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Procedures/KaskoModificationProcedures.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Procedures/KaskoModificationProcedures.cs
index 648735a1cd..9aa6d30b60 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Procedures/KaskoModificationProcedures.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Code/Procedures/KaskoModificationProcedures.cs
@@ -8,6 +8,7 @@ using iRIS.Framework.Cqrs.Interfaces;
 using iRIS.Framework.Data;
 using iRIS.Framework.Entity.Dictionary.DictionaryVersionProcessor;
 using iRIS.Framework.Entity.Dictionary.EntitySettings;
+using iRIS.Framework.Entity.Dictionary.LocalDictionaryCache;
 using iRIS.Framework.Entity.Metadata;
 using iRIS.Framework.Entity.Metadata.Manager.Interfaces;
 using iRIS.Framework.FileManagement;
@@ -23,10 +24,12 @@ using iRIS.InsuranceCore.Entities.Custom;
 using iRIS.InsuranceCore.Entities.EntityExtensions;
 using iRIS.InsuranceCore.Entities.Enums;
 using iRIS.InsuranceCore.Infrastructure.Helpers;
+using iRIS.InsuranceCore.OSS.Code.Dto.Uni;
 using iRIS.KaskoCore.Code.Extensions;
 using iRIS.KaskoCore.Code.Helpers;
 using iRIS.KaskoCore.Printing.Code;
 using iRIS.KaskoLink2.Code.CreateOn.DealInitialization;
+using iRIS.KaskoLink2.Code.Subscription.Implementations;
 using iRIS.KaskoLink2.Code.TypeExtensions;
 using iRIS.KaskoLink2.Implementations.Code.Implementations.AutoDictionary.Interfaces;
 using iRIS.KaskoLink2.Modification.Code.Constants;
@@ -94,6 +97,8 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
 
                 deal.AutoDeal.IsMultidrive = updateDeal.IsMultidrive ?? deal.AutoDeal.IsMultidrive;
                 deal.ChangesStartDate = updateDeal.ChangeDate;
+                deal.AutoDeal.DriverMinAge = updateDeal.MinimalAge ?? deal.AutoDeal.DriverMinAge;
+                deal.AutoDeal.DriverMinExperience = updateDeal.MinimalDrivingExperience ?? deal.AutoDeal.DriverMinExperience;
 
                 var insurant = deal.Insurant;
                 var owner = deal.GetOwner();
@@ -101,17 +106,100 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
                 var auto = deal.GetAuto();
                 var tsIdentityCard = deal.AutoDeal?.TsIdentityCard;
 
+                UpdateDealPeriod(updateDeal, deal);
                 UpdateOwner(updateOwner, owner);
                 UpdateInsurant(updateInsurant, insurant);
                 UpdateDrivers(updateDrivers, drivers);
                 UpdateAuto(updateAuto, auto);
                 UpdateTsIdentityCard(updateTsIdentityCard, tsIdentityCard);
+                UpdateSuggestedBank(updateDeal.Auto, deal);
 
                 var autoDictionaryBasketUpdater = ServiceProvider.GetRequiredService<IAutoDictionaryBasketUpdater>();
                 autoDictionaryBasketUpdater.UpdateAutoDictionaryValues(basket);
             }
         }
 
+        private void UpdateDealPeriod(KaskoModificationDealModel updateDeal, Deal deal)
+        {
+            if (updateDeal.DateStart == DateTime.MinValue || updateDeal.DateEnd == DateTime.MinValue)
+            {
+                return;
+            }
+
+            deal.EntityContext.TryGetValue("ossPolicyStatus", out var ossPolicyStatus);
+
+            if ((string)ossPolicyStatus == SubscriptionConstants.OssCheckPolicyActualityValid)
+            {
+                AddCustomError("Недопустимые изменения: невозможно изменение сроков действия договора. Полис находится в статусе “Действует”", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            if (updateDeal?.DateStart < deal?.DateStart || updateDeal?.DateStart > deal.DateStart?.AddMonths(1).AddDays(1))
+            {
+                AddCustomError("Недопустимые изменения: невозможно изменение сроков действия договора более, чем на 1 месяц", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            if (updateDeal.DateEnd < updateDeal.DateStart.AddYears(1).AddDays(-1) 
+                || updateDeal.DateEnd > updateDeal.DateStart.AddYears(1).AddDays(1))
+            {
+                AddCustomError("Недопустимые изменения: доступно изменение даты окончания договора только на +/ -1 день", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            deal.DateStart = updateDeal?.DateStart;
+            deal.DateEnd = updateDeal.DateEnd;
+
+            var existingPeriod = deal.ConditionBlock.DealPeriods.FirstOrDefault();
+            if (existingPeriod != null)
+            {
+                existingPeriod.DateStart = updateDeal.DateStart;
+                existingPeriod.DateEnd = updateDeal.DateEnd;
+            }
+        }
+
+        private void UpdateSuggestedBank(KaskoModificationAutoModel auto, Deal deal)
+        {
+            if (auto == null)
+            {
+                return;
+            }
+
+            var queryBank = ServiceProvider.GetRequiredService<IQueryBank>();
+            var dealAuto = deal.InsuranceObjects[0].Auto;
+
+            var bank = queryBank.GetBankByBIK(auto.BankOfCreditBik) ?? queryBank.GetBankByName(auto.BankOfCredit);
+            if (bank == null)
+            {
+                AddCustomError("Ошибка валидации: название банка или БИК не соответствует справочнику", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            if (auto.InCredit == null)
+            {
+                return;
+            }
+
+            if (auto.InCredit == true && dealAuto.IsCreditAuto == false)
+            {
+                var suggestedBank = new SuggestedBank
+                {
+                    Name = bank.Subject.LegalEntity.Name,
+                    ShortName = bank.Subject.LegalEntity.ShortName,
+                    BIK = bank.BIK,
+                    Bank_Id = bank.Id > 0 ? bank.Id : null
+                };
+
+                deal.SetBank(suggestedBank);
+                dealAuto.IsCreditAuto = true;
+            }
+            else if (auto.InCredit == false && dealAuto.IsCreditAuto == true)
+            {
+                dealAuto.IsCreditAuto = false;
+                deal.SetBank(null);
+            }
+        }
+
         public void CapitalizeNames(Basket basket)
         {
             var deal = basket.GetKaskoDeal();
@@ -279,9 +367,60 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
                 auto.Vin = updateAuto.Vin ?? auto.Vin;
                 auto.OriginalKeysAmount = updateAuto.OriginalKeysAmount ?? auto.OriginalKeysAmount;
                 auto.HasAutostart = updateAuto.HasAutostart == true ? updateAuto.HasAutostart : auto.HasAutostart;
+                auto.AutoCost = updateAuto.AutoCost ?? auto.AutoCost;
+                auto.HasAntiTheftSystem = updateAuto.HasAntiTheftSystem ?? auto.HasAntiTheftSystem;
+                auto.ReplacingLocks = updateAuto.ReplacingLocks ?? auto.ReplacingLocks;
+                UpdateAutoPurposeOfUsing(auto, updateAuto);
+                UpdateAutoBrandModel(auto, updateAuto);
             }
         }
 
+        private void UpdateAutoBrandModel(Auto auto, KaskoModificationAutoModel updateAuto)
+        {
+            if (updateAuto.Brand == null || updateAuto.Model == null)
+            {
+                return;
+            }
+
+            var autoDictionaryClient = ServiceProvider.GetRequiredService<IKaskoAutoDictionaryClientV1>();
+
+            var modifications = autoDictionaryClient.GetAutoBrandModelByBrandAndModelNames(
+                updateAuto.Brand, 
+                updateAuto.Model, 
+                auto.MdmDictionariesVersionId,
+                DT.Now);
+
+            if (modifications.Count == 0)
+            {
+                AddCustomError("Недопустимые изменения: не найдена марка/модель авто по справочнику", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            auto.AutoBrandName = modifications[0].AutoBrand.Name;
+            auto.AutoBrandCode = modifications[0].AutoBrand.Code;
+            auto.AutoModelName = modifications[0].AutoModel.Name;
+            auto.AutoModelCode = modifications[0].AutoModel.Code;
+        }
+
+        private void UpdateAutoPurposeOfUsing(Auto auto, KaskoModificationAutoModel updateAuto)
+        {
+            if (updateAuto.PurposeOfUsingCode == null)
+            {
+                return;
+            }
+
+            var dictionariesCacheManager = ServiceProvider.GetRequiredService<IDictionariesCacheManager>();
+            var item = dictionariesCacheManager.GetItems<PurposeOfUsing>(auto.PurposeOfUsing.VersionId).SingleOrDefault(x => x.Code == updateAuto.PurposeOfUsingCode);
+            if (item == null)
+            {
+                AddCustomError("Недопустимые изменения: допускается передача только кода по справочнику для purposeOfUsing", ModificationErrorCodes.UnacceptableChanges);
+                return;
+            }
+
+            auto.PurposeOfUsing = item;
+            auto.PurposeOfUsingCode = item.Code;
+        }
+
         private void UpdateDrivers(List<KaskoModificationDriverModel> updateDrivers, ObservableList<Driver> drivers)
         {
             if (updateDrivers != null)
@@ -387,6 +526,7 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
                 person.Email1 = updatePerson.Email ?? person.Email1;
                 person.DateOfBirth = updatePerson.DateOfBirth ?? person.DateOfBirth;
                 person.Age = updatePerson.DateOfBirth != null ? DurationHelper.CalculateAge(updatePerson.DateOfBirth) : person.Age;
+                person.InnNumber = updatePerson.Inn ?? person.InnNumber;
 
                 if (updatePerson.Addresses != null)
                 {
@@ -574,10 +714,10 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
 
         private void CheckAndSetMinFilesCountForInsurantDocuments(Basket basket, List<string> changes)
         {
-            if (changes.Contains(ChangesPaths.InsurantEnteredAddress0) || changes.Contains(ChangesPaths.InsurantEnteredAddress1) || changes.Contains(ChangesPaths.InsurantEnteredAddress2) 
+            if (changes.Contains(ChangesPaths.InsurantEnteredAddress0) || changes.Contains(ChangesPaths.InsurantEnteredAddress1) || changes.Contains(ChangesPaths.InsurantEnteredAddress2)
                 || changes.Contains(ChangesPaths.InsurantName) || changes.Contains(ChangesPaths.InsurantMiddleName) || changes.Contains(ChangesPaths.InsurantLastName)
-                || changes.Contains(ChangesPaths.InsurantDateOfBirth) || changes.Contains(ChangesPaths.InsurantIdentityDocumentSeries) 
-                || changes.Contains(ChangesPaths.InsurantIdentityDocumentNumber) || changes.Contains(ChangesPaths.InsurantIdentityDocumentType) || changes.Contains(ChangesPaths.InsurantIdentityDocumentUnitCode) 
+                || changes.Contains(ChangesPaths.InsurantDateOfBirth) || changes.Contains(ChangesPaths.InsurantIdentityDocumentSeries)
+                || changes.Contains(ChangesPaths.InsurantIdentityDocumentNumber) || changes.Contains(ChangesPaths.InsurantIdentityDocumentType) || changes.Contains(ChangesPaths.InsurantIdentityDocumentUnitCode)
                 || changes.Contains(ChangesPaths.InsurantIdentityDocumentDateIssue) || changes.Contains(ChangesPaths.InsurantIdentityDocumentIssuedBy))
             {
                 SetMinFilesCountForInsurantDocuments(basket);
@@ -586,11 +726,11 @@ namespace iRIS.KaskoLink2.Modification.Code.Procedures
 
         private void CheckAndSetMinFilesCountForOwnerDocuments(Basket basket, List<string> changes)
         {
-            if (changes.Contains(ChangesPaths.OwnerEnteredAddress0) || changes.Contains(ChangesPaths.OwnerEnteredAddress1) || changes.Contains(ChangesPaths.OwnerEnteredAddress2) 
-                || changes.Contains(ChangesPaths.OwnerName) || changes.Contains(ChangesPaths.OwnerMiddleName) || changes.Contains(ChangesPaths.OwnerLastName) 
-                || changes.Contains(ChangesPaths.OwnerDateOfBirth) || changes.Contains(ChangesPaths.OwnerIdentityDocumentSeries) 
-                || changes.Contains(ChangesPaths.OwnerIdentityDocumentNumber) || changes.Contains(ChangesPaths.OwnerIdentityDocumentType) 
-                || changes.Contains(ChangesPaths.OwnerIdentityDocumentUnitCode) || changes.Contains(ChangesPaths.OwnerIdentityDocumentDateIssue) 
+            if (changes.Contains(ChangesPaths.OwnerEnteredAddress0) || changes.Contains(ChangesPaths.OwnerEnteredAddress1) || changes.Contains(ChangesPaths.OwnerEnteredAddress2)
+                || changes.Contains(ChangesPaths.OwnerName) || changes.Contains(ChangesPaths.OwnerMiddleName) || changes.Contains(ChangesPaths.OwnerLastName)
+                || changes.Contains(ChangesPaths.OwnerDateOfBirth) || changes.Contains(ChangesPaths.OwnerIdentityDocumentSeries)
+                || changes.Contains(ChangesPaths.OwnerIdentityDocumentNumber) || changes.Contains(ChangesPaths.OwnerIdentityDocumentType)
+                || changes.Contains(ChangesPaths.OwnerIdentityDocumentUnitCode) || changes.Contains(ChangesPaths.OwnerIdentityDocumentDateIssue)
                 || changes.Contains(ChangesPaths.OwnerIdentityDocumentIssuedBy))
             {
                 SetMinFilesCountForOwnerDocuments(basket);
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel.Configuration.cs
index d8394e6064..ff3d4c414d 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel.Configuration.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel.Configuration.cs
@@ -22,6 +22,9 @@ namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
 
             HasProp<KaskoModificationViewModel_Deal>("Deal")
                 .WithCaption("Сделка");
+
+            HasProp<List<KaskoModificationViewModel_PaymentSchedule>>("PaymentSchedule")
+                .WithCaption("Данные по платежам");
         }
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Auto.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Auto.Configuration.cs
index ad384f12d9..ed0c59ed0c 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Auto.Configuration.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Auto.Configuration.cs
@@ -53,6 +53,27 @@ namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
             HasProp<bool>("HasAutostart")
             .WithCaption("Автозапуск");
 
+            HasProp<int>("AutoCost")
+            .WithCaption("Стоимость авто");
+
+            HasProp<string>("PurposeOfUsingCode")
+            .WithCaption("Автозапуск");
+
+            HasProp<bool>("InCredit")
+            .WithCaption("В кредите");
+
+            HasProp<string>("BankOfCredit")
+            .WithCaption("Банк кредитор");
+
+            HasProp<string>("BankOfCreditBik")
+            .WithCaption("БИК банка кредитора");
+
+            HasProp<bool>("ReplacingLocks")
+            .WithCaption("Замена личинок замков");
+
+            HasProp<bool>("HasAntiTheftSystem")
+            .WithCaption("Противоугонная система");
+
             HasProp<KaskoModificationViewModel_TsIdentityCard>("TsIdentityCard");
         }
     }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Deal.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Deal.Configuration.cs
index 60681386f5..97d99f3e30 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Deal.Configuration.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Deal.Configuration.cs
@@ -24,6 +24,12 @@ namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
             HasProp<DateTime>("ChangeDate")
                 .WithCaption("Дата изменения");
 
+            HasProp<DateTime>("DateStart")
+                .WithCaption("Дата начала договора");
+
+            HasProp<DateTime>("DateEnd")
+                .WithCaption("Дата окончания договора");
+
             HasProp<bool>("IsTheftDocuments")
                 .WithCaption("Кража документов");
 
@@ -38,6 +44,15 @@ namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
 
             HasProp<KaskoModificationViewModel_Owner>("Owner")
                 .WithCaption("Владелец");
+
+            HasProp<int>("MinimalAge")
+                .WithCaption("Минимальный возраст");
+
+            HasProp<int>("MinimalDrivingExperience")
+                .WithCaption("Минимальный стаж");
+
+            HasProp<KaskoModificationViewModel_Packet>("Packet")
+                .WithCaption("Данные по выбранному пакету");
         }
     }
 }
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.Configuration.cs
new file mode 100644
index 0000000000..d3817796e9
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.Configuration.cs
@@ -0,0 +1,23 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using System.Collections.Generic;
+using iRIS.Framework.ViewModels.Configuration;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    /// <summary>
+    /// ViewModel implementation KaskoModificationViewModel_Packet.
+    /// </summary>
+    public class KaskoModificationPacketViewModelConfiguration : IntegrationViewmodelConfiguration<KaskoModificationViewModel_Packet>
+    {
+        protected override void Configure()
+        {
+            HasProp<List<KaskoModificationViewModel_PacketField>>("Risks")
+                .WithCaption("Риски");
+
+        }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.cs
new file mode 100644
index 0000000000..42d6ac9ba1
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Packet.cs
@@ -0,0 +1,14 @@
+﻿using iRIS.Framework.UI.PresentationModel;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    public class KaskoModificationViewModel_Packet : IntegrationViewModel
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="KaskoModificationViewModel_Packet"/> class.
+        /// </summary>
+        public KaskoModificationViewModel_Packet()
+        {
+        }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.Configuration.cs
new file mode 100644
index 0000000000..ba155d003c
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.Configuration.cs
@@ -0,0 +1,27 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using iRIS.Framework.ViewModels.Configuration;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    public class KaskoModificationPacketFieldViewModelConfiguration : IntegrationViewmodelConfiguration<KaskoModificationViewModel_PacketField>
+    {
+        protected override void Configure()
+        {
+            HasProp<string>("Name")
+                .WithCaption("Наименование");
+
+            HasProp<string>("Code")
+                .WithCaption("Код");
+
+            HasProp<int>("StructId")
+                .WithCaption("structId");
+
+            HasProp<string>("AvailableValue")
+                .WithCaption("Стоимость");
+        }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.cs
new file mode 100644
index 0000000000..33236a5d3d
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PacketField.cs
@@ -0,0 +1,14 @@
+﻿using iRIS.Framework.UI.PresentationModel;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    public class KaskoModificationViewModel_PacketField : IntegrationViewModel
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="KaskoModificationViewModel_PacketField"/> class.
+        /// </summary>
+        public KaskoModificationViewModel_PacketField()
+        {
+        }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.Configuration.cs
new file mode 100644
index 0000000000..b573c914f6
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.Configuration.cs
@@ -0,0 +1,28 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using System;
+using iRIS.Framework.ViewModels.Configuration;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    /// <summary>
+    /// ViewModel implementation KaskoModificationViewModel_PaymentSchedule.
+    /// </summary>
+    public class KaskoModificationPaymentScheduleViewModelConfiguration : IntegrationViewmodelConfiguration<KaskoModificationViewModel_PaymentSchedule>
+    {
+        protected override void Configure()
+        {
+            HasProp<string>("Number")
+                .WithCaption("Номер платежа");
+
+            HasProp<decimal>("Sum")
+                .WithCaption("Сумма платежа");
+
+            HasProp<DateTime>("RepaymentDate")
+                .WithCaption("Дата, до которой необходимо совершить платёж");
+        }
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.cs
new file mode 100644
index 0000000000..da5f57ab5e
--- /dev/null
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_PaymentSchedule.cs
@@ -0,0 +1,11 @@
+﻿using iRIS.Framework.UI.PresentationModel;
+
+namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
+{
+    /// <summary>
+    /// Initializes a new instance of the <see cref="KaskoModificationViewModel_PaymentSchedule"/> class.
+    /// </summary>
+    public class KaskoModificationViewModel_PaymentSchedule : IntegrationViewModel
+    {
+    }
+}
diff --git a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Person.Configuration.cs b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Person.Configuration.cs
index 35fd7ece6c..1aeb2cbe79 100644
--- a/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Person.Configuration.cs
+++ b/sources/App/src/Modules/iRIS.KaskoLink2.Modification/Generated/ViewModels/KaskoModificationViewModel_Person.Configuration.cs
@@ -33,6 +33,9 @@ namespace iRIS.KaskoLink2.Modification.Generated.ViewModels
             HasProp<string>("Email")
                 .WithCaption("Почта");
 
+            HasProp<string>("Inn")
+                .WithCaption("ИНН");
+
             HasProp<bool>("IsGettingMarried")
                 .WithCaption("Вступление в брак");
 
diff --git a/sources/App/src/iRIS.KaskoApiApp.Link2/Json/Link2Schemes/KaskoModification.modify.Input.json b/sources/App/src/iRIS.KaskoApiApp.Link2/Json/Link2Schemes/KaskoModification.modify.Input.json
index e05ae6f130..721e499de3 100644
--- a/sources/App/src/iRIS.KaskoApiApp.Link2/Json/Link2Schemes/KaskoModification.modify.Input.json
+++ b/sources/App/src/iRIS.KaskoApiApp.Link2/Json/Link2Schemes/KaskoModification.modify.Input.json
@@ -19,6 +19,20 @@
       "x-nullable": true,
       "$ref": "#/definitions/KaskoModificationViewModel_Deal",
       "description": "Сделка"
+    },
+    "paymentSchedule": {
+      "title": "PaymentSchedule",
+      "type": [
+        "array",
+        "null"
+      ],
+      "items": {
+        "x-nullable": true,
+        "additionalItems": false,
+        "additionalProperties": false,
+        "$ref": "#/definitions/KaskoModificationViewModel_PaymentSchedule"
+      },
+      "description": "Данные по платежам"
     }
   },
   "required": [ "deal" ],
@@ -39,12 +53,40 @@
           "pattern": "^\\d{2}\\.\\d{2}\\.\\d{4}$",
           "format": "dd.MM.yyyy"
         },
+        "dateStart": {
+          "title": "DateStart",
+          "type": "string",
+          "description": "Дата начала договора",
+          "typeDetails": "DateTime",
+          "pattern": "^\\d{2}\\.\\d{2}\\.\\d{4}$",
+          "format": "dd.MM.yyyy"
+        },
+        "dateEnd": {
+          "title": "DateEnd",
+          "type": "string",
+          "description": "Дата окончания договора",
+          "typeDetails": "DateTime",
+          "pattern": "^\\d{2}\\.\\d{2}\\.\\d{4}$",
+          "format": "dd.MM.yyyy"
+        },
         "isMultidrive": {
           "title": "IsMultidrive",
           "type": "boolean",
           "x-nullable": true,
           "description": "Более одного водителя"
         },
+        "minimalAge": {
+          "type": "number",
+          "x-nullable": true,
+          "title": "MinimalAge",
+          "description": "Минимальный возраст"
+        },
+        "minimalDrivingExperience": {
+          "type": "number",
+          "x-nullable": true,
+          "title": "MinimalDrivingExperience",
+          "description": "Минимальный стаж"
+        },
         "drivers": {
           "title": "Drivers",
           "type": [
@@ -418,6 +460,12 @@
           "x-nullable": true,
           "description": "Вступление в брак"
         },
+        "inn": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "Inn",
+          "description": "ИНН"
+        },
         "addresses": {
           "title": "Addresses",
           "type": [
@@ -773,6 +821,48 @@
           "type": "boolean",
           "description": "Автозапуск"
         },
+        "autoCost": {
+          "type": "number",
+          "x-nullable": true,
+          "title": "AutoCost",
+          "description": "Стоимость авто"
+        },
+        "purposeOfUsingCode": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "PurposeOfUsingCode",
+          "description": "Цель использования ТС"
+        },
+        "inCredit": {
+          "type": "boolean",
+          "x-nullable": true,
+          "title": "InCredit",
+          "description": "В кредите"
+        },
+        "bankOfCredit": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "BankOfCredit",
+          "description": "Банк кредитор"
+        },
+        "bankOfCreditBik": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "BankOfCreditBik",
+          "description": "БИК банка кредитора"
+        },
+        "replacingLocks": {
+          "type": "boolean",
+          "x-nullable": true,
+          "title": "ReplacingLocks",
+          "description": "Замена личинок замков"
+        },
+        "hasAntiTheftSystem": {
+          "type": "boolean",
+          "x-nullable": true,
+          "title": "HasAntiTheftSystem",
+          "description": "Противоугонная система"
+        },
         "tsIdentityCard": {
           "title": "TsIdentityCard",
           "type": [
@@ -816,6 +906,35 @@
           "description": "Кража документов"
         }
       }
+    },
+    "KaskoModificationViewModel_PaymentSchedule": {
+      "title": "KaskoModificationViewModel_PaymentSchedule",
+      "additionalItems": false,
+      "additionalProperties": false,
+      "properties": {
+        "number": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "Number",
+          "description": "Номер платежа"
+        },
+        "sum": {
+          "type": "number",
+          "format": "double",
+          "x-nullable": true,
+          "title": "Sum",
+          "description": "Сумма платежа"
+        },
+        "repaymentDate": {
+          "type": "string",
+          "x-nullable": true,
+          "title": "RepaymentDate",
+          "description": "Дата, до которой необходимо совершить платёж",
+          "typeDetails": "DateTime",
+          "pattern": "^\\d{2}.\\d{2}.\\d{4}$",
+          "format": "dd.MM.yyyy"
+        }
+      }
     }
   },
   "examples": {
diff --git a/sources/Tests/Link2/src/models/Link2/Examples/Link2KaskoModifyExample.ts b/sources/Tests/Link2/src/models/Link2/Examples/Link2KaskoModifyExample.ts
index 30ee27c18e..bf1be0cdcb 100644
--- a/sources/Tests/Link2/src/models/Link2/Examples/Link2KaskoModifyExample.ts
+++ b/sources/Tests/Link2/src/models/Link2/Examples/Link2KaskoModifyExample.ts
@@ -300,4 +300,127 @@ export default class Link2KaskoModifyExample {
       },
     };
   }
+
+  static ModifyMultdriveValidExample2(parentPolicyNumber: string = 'MOD_multidrive_kasko'): any {
+    return {
+      model: {
+        parentPolicyNumber: parentPolicyNumber,
+        deal: {
+          changeDate: DateGenerator.FromNowDays(1),
+          isMultidrive: true,
+          insurant: {
+            person: {
+              lastName: 'Якимчук',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1972',
+              isGettingMarried: true,
+            },
+          },
+          owner: {
+            person: {
+              lastName: 'Якимчук',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1972',
+            },
+          },
+          auto: {
+            autoCost: 9970000,
+            purposeOfUsingCode: 'TAXI',
+            originalKeysAmount: 0,
+          },
+          minimalAge: 19,
+          minimalDrivingExperience: 3,
+        },
+      },
+    };
+  }
+
+  static ModifyMultdriveInvalidExample2(
+    parentPolicyNumber: string = 'MOD_multidrive_kasko',
+    minimalAge,
+    purposeOfUsingCode,
+    bankOfCreditBik,
+  ): any {
+    return {
+      model: {
+        parentPolicyNumber: parentPolicyNumber,
+        deal: {
+          changeDate: DateGenerator.FromNowDays(1),
+          dateStart: '20.08.2024',
+          dateEnd: '20.08.2025',
+          isMultidrive: true,
+          insurant: {
+            person: {
+              lastName: 'Якимчук',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1972',
+              isGettingMarried: true,
+            },
+          },
+          owner: {
+            person: {
+              lastName: 'Якимчук',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1972',
+            },
+          },
+          auto: {
+            purposeOfUsingCode: purposeOfUsingCode,
+            inCredit: true,
+            bankOfCreditBik: bankOfCreditBik,
+          },
+          minimalAge: minimalAge,
+        },
+      },
+    };
+  }
+
+  static ModifyMultdriveValidExample3(parentPolicyNumber: string = 'MOD_multidrive_kasko'): any {
+    return {
+      model: {
+        parentPolicyNumber: parentPolicyNumber,
+        deal: {
+          changeDate: DateGenerator.FromNowDays(1),
+          dateStart: '20.07.2024',
+          dateEnd: '21.07.2025',
+          isMultidrive: true,
+          insurant: {
+            person: {
+              lastName: 'Якимчукппп',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1979',
+              isGettingMarried: true,
+              identityDocument: {
+                series: '1111',
+                number: '111111',
+              },
+            },
+          },
+          owner: {
+            person: {
+              lastName: 'Якимчукеке',
+              name: 'Максим',
+              middleName: 'Викторович',
+              dateOfBirth: '19.01.1971',
+              identityDocument: {
+                series: '1111',
+                number: '111111',
+              },
+            },
+          },
+          auto: {
+            brand: 'VAZ',
+            model: 'Granta',
+            replacingLocks: true,
+            inCredit: true,
+          },
+        },
+      },
+    };
+  }
 }
diff --git "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/01 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\262 \320\277\320\276\320\273\320\270\321\201.spec.ts" "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/01 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\262 \320\277\320\276\320\273\320\270\321\201.spec.ts"
index 7ae32881f3..12d0def246 100644
--- "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/01 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\262 \320\277\320\276\320\273\320\270\321\201.spec.ts"	
+++ "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/01 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \321\203\321\201\320\277\320\265\321\210\320\275\320\276 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\262 \320\277\320\276\320\273\320\270\321\201.spec.ts"	
@@ -93,8 +93,90 @@ feature('Создание ВИ', () => {
           .filter((item) => item.isDeleted === true)
           .map((item) => item.isDeleted);
 
-        expect(deletedDrivers.length).toEqual(2);
-      })
-      .run();
-  });
-});
+          expect(deletedDrivers.length).toEqual(2);
+        })
+        .run();
+    });
+
+    scenario(
+      'Увеличение страховой суммы для ущерба, смена цели использования, изменение минимального возраста/стажа, кража ключей.',
+      async () => {
+        System.Reporter.owner(Owner.DmitryEvdokimov);
+
+        const expectedFieldNames = [
+          'Увеличение страховой суммы по рискам «Ущерб» и «Угон / Хищение»',
+          'Цель использования',
+          'Увеличение минимального возраста',
+          'Увеличение минимального стажа',
+          'Кража ключей',
+        ];
+
+        const client = await Link2WebClient.ModifyKasko.Modify(
+          Link2Partners.Client,
+          Link2KaskoModifyExample.ModifyMultdriveValidExample2(),
+        )
+          .check((response) => {
+            expect(response.isSuccess).toBeTruthy();
+
+            // Получаем список измененных полей из ответа
+            const responseChanges = (response.model as Link2ModificationResponseModel).changes;
+
+            // Извлекаем значения имя из каждого изменения
+            const actualFieldNames = responseChanges
+              .map((change) => change.changedItems)
+              .flat()
+              .map((item) => item.changedFields)
+              .flat()
+              .map((field) => field.name);
+
+            // Проверяем, что каждый элемент из expectedFieldNames присутствует в actualFieldNames
+            expectedFieldNames.forEach((expectedName) => {
+              expect(actualFieldNames).toContain(expectedName);
+            });
+          })
+          .run();
+      },
+    );
+
+    scenario(
+      'Смена страхователя/собственника/выгодоприобретателя, изменение марки/модели, замена личинок замков, изменение срока действия.',
+      async () => {
+        System.Reporter.owner(Owner.DmitryEvdokimov);
+
+        const expectedFieldNames = [
+          'Смена Страхователя, не являющегося Собственником',
+          'Смена Собственника и Выгодоприобретателя',
+          'Марка и / или Модель',
+          'Замена личинок замков, либо перепрограммирование штатного иммобилайзера',
+          'Изменение срока действия договора страхования',
+          'Смена Выгодоприобретателя',
+        ];
+
+        const client = await Link2WebClient.ModifyKasko.Modify(
+          Link2Partners.Client,
+          Link2KaskoModifyExample.ModifyMultdriveValidExample3(),
+        )
+          .check((response) => {
+            expect(response.isSuccess).toBeTruthy();
+
+            // Получаем список измененных полей из ответа
+            const responseChanges = (response.model as Link2ModificationResponseModel).changes;
+
+            // Извлекаем значения имя из каждого изменения
+            const actualFieldNames = responseChanges
+              .map((change) => change.changedItems)
+              .flat()
+              .map((item) => item.changedFields)
+              .flat()
+              .map((field) => field.name);
+
+            // Проверяем, что каждый элемент из expectedFieldNames присутствует в actualFieldNames
+            expectedFieldNames.forEach((expectedName) => {
+              expect(actualFieldNames).toContain(expectedName);
+            });
+          })
+          .run();
+      },
+    );
+  }
+);
diff --git "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/02 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \321\201 \320\275\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\213\320\274\320\270 \320\264\320\260\320\275\320\275\321\213\320\274\320\270.spec.ts" "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/02 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \321\201 \320\275\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\213\320\274\320\270 \320\264\320\260\320\275\320\275\321\213\320\274\320\270.spec.ts"
index d2cc1e598c..2c88083fa6 100644
--- "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/02 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \321\201 \320\275\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\213\320\274\320\270 \320\264\320\260\320\275\320\275\321\213\320\274\320\270.spec.ts"	
+++ "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/02 - \320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214 \320\262\320\275\320\276\321\201\320\270\321\202 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \321\201 \320\275\320\265\320\272\320\276\321\200\321\200\320\265\320\272\321\202\320\275\321\213\320\274\320\270 \320\264\320\260\320\275\320\275\321\213\320\274\320\270.spec.ts"	
@@ -177,16 +177,81 @@ feature('Некорректный расчет ВИ', () => {
   scenario('Попытка внести изменения в полис с неподходящим статусом.', async () => {
     System.Reporter.owner(Owner.DmitryEvdokimov);
 
-    const client = await Link2WebClient.ModifyKasko.Modify(
-      Link2Partners.Client,
-      Link2KaskoModifyExample.ModifyMultdriveInvalidExample('MOD_kasko_terminated'),
-    )
-      .check((response) => {
-        expect(response.isSuccess).toBeFalsy();
-        expect(
-          response.messages.find((x) => x.text == 'Полис в некорректном статусе. ВИ невозможно.').level == 'Error',
-        );
-      })
-      .run();
-  });
-});
+      const client = await Link2WebClient.ModifyKasko.Modify(
+        Link2Partners.Client,
+        Link2KaskoModifyExample.ModifyMultdriveInvalidExample('MOD_kasko_terminated'),
+      )
+        .check((response) => {
+          expect(response.isSuccess).toBeFalsy();
+          expect(
+            response.messages.find((x) => x.text == 'Полис в некорректном статусе. ВИ невозможно.').level == 'Error',
+          );
+        })
+        .run();
+    });
+
+    scenario('Пользователь вводит некорректное значение минимального возраста.', async () => {
+      System.Reporter.owner(Owner.DmitryEvdokimov);
+
+      const client = await Link2WebClient.ModifyKasko.Modify(
+        Link2Partners.Client,
+        Link2KaskoModifyExample.ModifyMultdriveInvalidExample2('MOD_multidrive_kasko', 17, 'TAXI', '043469743'),
+      )
+        .check((response) => {
+          expect(response.isSuccess).toBeFalsy();
+          expect(
+            response.messages.find(
+              (x) =>
+                x.text ==
+                'Недопустимые изменения: Значение поля MinimalAge должно быть указано в диапазоне от 18 до 99.',
+            ).level == 'Error',
+          );
+        })
+        .run();
+    });
+
+    scenario('Пользователь указывает некорректную дату начала срока действия.', async () => {
+      System.Reporter.owner(Owner.DmitryEvdokimov);
+
+      const client = await Link2WebClient.ModifyKasko.Modify(
+        Link2Partners.Client,
+        Link2KaskoModifyExample.ModifyMultdriveInvalidExample2('MOD_multidrive_kasko', 19, 'TAXI', '043469743'),
+      )
+        .check((response) => {
+          expect(response.isSuccess).toBeFalsy();
+          expect(
+            response.messages.find(
+              (x) =>
+                x.text ==
+                'Недопустимые изменения: невозможно изменение сроков действия договора более, чем на 1 месяц.',
+            ).level == 'Error',
+          );
+        })
+        .run();
+    });
+
+    scenario('Пользователь передает некорректное значение purposeOfUsing и БИК банка.', async () => {
+      System.Reporter.owner(Owner.DmitryEvdokimov);
+
+      const client = await Link2WebClient.ModifyKasko.Modify(
+        Link2Partners.Client,
+        Link2KaskoModifyExample.ModifyMultdriveInvalidExample2('MOD_multidrive_kasko', 19, 'TAXI1', '111111111'),
+      )
+        .check((response) => {
+          expect(response.isSuccess).toBeFalsy();
+          expect(
+            response.messages.find(
+              (x) =>
+                x.text == 'Недопустимые изменения: допускается передача только кода по справочнику для purposeOfUsing.',
+            ).level == 'Error',
+          );
+          expect(
+            response.messages.find(
+              (x) => x.text == 'Ошибка валидации: название банка или БИК не соответствует справочнику.',
+            ).level == 'Error',
+          );
+        })
+        .run();
+    });
+  }
+);
diff --git "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/FeatureWrapper.ts" "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/FeatureWrapper.ts"
index 7f91f6a6da..6bab4d1614 100644
--- "a/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/FeatureWrapper.ts"	
+++ "b/sources/Tests/Link2/tests/Link2/\320\232\320\220\320\241\320\232\320\236 \320\222\320\275\320\265\321\201\320\265\320\275\320\270\320\265 \320\270\320\267\320\274\320\265\320\275\320\265\320\275\320\270\320\271/FeatureWrapper.ts"	
@@ -1,4 +1,4 @@
 import { featureBuilder } from 'sl-tests-core';
 
-const feature = featureBuilder(['Link2', 'Каско ККП']);
+const feature = featureBuilder(['Link2', 'Каско']);
 export default feature;

На основе изменений гит напиши как реализовано определение изменений Ф.И.О. или дата рождения Страхователя, Собственника, ЛДУ 
На основе изменений гит напиши как реализовано определение изменений Ф.И.О. или дата рождения Страхователя, Собственника, ЛДУ