Untitled

 avatar
unknown
plain_text
a year ago
66 kB
4
Indexable
package ru.tinkoff.util.sampledata

uses com.guidewire.pl.system.bundle.EntityBundleImpl
uses gw.api.builder.CancellationBuilder
uses gw.api.builder.CoverageBuilder
uses gw.api.builder.PolicyAddlNamedInsuredBuilder
uses gw.api.builder.PolicyChangeBuilder
uses gw.api.builder.ReinstatementBuilder
uses gw.api.builder.RenewalBuilder
uses gw.api.builder.SubmissionBuilder
uses gw.api.builder.UWRuleBuilder
uses gw.api.database.Query
uses gw.api.database.Relop
uses gw.api.productmodel.Product
uses gw.api.upgrade.PCCoercions
uses gw.api.util.MonetaryAmounts
uses gw.bizrules.databuilder.RuleConditionBuilder
uses gw.sampledata.AbstractSampleDataCollection
uses gw.sampledata.SampleDataConstants
uses ru.tinkoff.databuilder.AccountVehicle_ToiBuilder
uses ru.tinkoff.util.PolicyPeriodUtil
uses ru.tinkoff.util.sampledata.builder.CartSelectionBuilder
uses ru.tinkoff.util.sampledata.builder.CartToPeriodBuilder
uses ru.tinkoff.util.sampledata.builder.DealBuilder
uses ru.tinkoff.util.sampledata.scenario.ksk.builder.KSKLineBuilder
uses ru.tinkoff.util.sampledata.scenario.ksk.builder.KSKVehicleBuilder
uses ru.tinkoff.util.sampledata.scenario.ksk.builder.KSKVehicleOwnerBuilder
uses ru.tinkoff.util.sampledata.scenario.osg.builder.OSGDriverBuilder
uses ru.tinkoff.util.sampledata.scenario.osg.builder.OSGLineBuilder
uses ru.tinkoff.util.sampledata.scenario.osg.builder.OSGVehicleBuilder
uses ru.tinkoff.util.sampledata.scenario.osg.builder.OSGVehicleOwnerBuilder
uses ru.tinkoff.util.sampledata.scenario.tpproperty.builder.TPLineBuilder
uses ru.tinkoff.util.sampledata.scenario.travel.builder.TVLLineExtBuilder
uses ru.tinkoff.util.sampledata.scenario.travel.builder.TravellerExtBuilder
uses typekey.PolicyContactRole
uses ru.tinkoff.webservice.quote.bean.kasko.PatternCode

uses java.time.LocalDate
uses java.time.ZoneId

/**
 * Sample set of sample Jobs and Policies.
 *
 * @see gw.sampledata.large.LargeSamplePolicyData
 */
@Export
class SamplePolicyData extends AbstractSampleDataCollection {

  /**
   * The name of this sample data collection, for logging and debugging
   */
  public override property get CollectionName() : String {
    return "Sample Policies"
  }

  /**
   * Checks the database, returning true if this set is already loaded (and thus doesn't need reloading)
   */
  public override property get AlreadyLoaded() : boolean {
    return jobLoaded("456783759")
  }

  /**
   * Loads the contents of this sample data set into the DB
   */
  override function load() {
    setDefaultInstances()
    // SIMPLE SUBMISSIONS
    runBlockAsUser("su", "SamplePolicyData -- su", \-> {
      loadSubmission("456783759", "C000148456", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      loadSubmission("477788800", "C000123321", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      loadSubmission("446437866", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      loadSubmission("467394852", "B000666776", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          Date.from(LocalDate.of(2019, 2, 2).atStartOfDay(ZoneId.systemDefault()).toInstant()),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, true, "test:99756")
      loadSubmissionWithPopulator("467394853", "B000481821", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, true, "test:99757")
      loadSubmissionWithPopulator("467394854", "B000481822", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99758")
      loadSubmissionWithPopulator("467394855", "B000481823", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99759")
      loadSubmissionWithPopulator("467394856", "B000481824", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99760")
      // CreateActivityTest.testOk
      loadSubmissionWithPopulator("4543465645", "CAT01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "сreateActivityTest:001")

      var karemza5Submission = loadSubmissionWithPopulator("467394857", "B000481825", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99761",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
            pp.CalculateSystem_Toi = UpdateSystemType_Toi.TC_RAMI
          })
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        karemza5Submission = bundle.add(karemza5Submission)
        karemza5Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza5Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code
        karemza5Submission.PeriodBusinessStatus_Toi.Status = PolicyBusinessStatus_Toi.TC_QQ3

        var driver = karemza5Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })
      var karemza6Submission = loadSubmissionWithPopulator("467394858", "B000481826", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99762",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
            pp.PolicyNumber = "123456789"
            pp.TermNumber = 1
          })
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        karemza6Submission = bundle.add(karemza6Submission)
        karemza6Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza6Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code

        var driver = karemza6Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })
      var karemza7Submission = loadSubmissionWithPopulator("467394859", "B000481827", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99763",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
          })
      runTransactionAsUser(null, "UWIssue submission", \bundle -> {
        karemza7Submission = bundle.add(karemza7Submission)
        karemza7Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza7Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code

        var driver = karemza7Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        var uwIssueType = Query.make(UWIssueType)
            .compare(UWIssueType#Code, Relop.Equals, "IsTransition")
            .select().FirstResult
        var uwIssue = new UWIssue(karemza7Submission)
        uwIssue = bundle.add(uwIssue)
        uwIssue.Active = true
        uwIssue.CanEditApprovalBeforeBind = true
        uwIssue.HasApprovalOrRejection = false
        uwIssue.IssueKey = "issueKey"
        uwIssue.IssueType = uwIssueType

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })

      var karemza8Submission = loadSubmissionWithPopulator("467394860", "B000481828", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99764",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
          })
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        karemza8Submission = bundle.add(karemza8Submission)
        karemza8Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza8Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code

        var driver = karemza8Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })

      var karemza9Submission = loadSubmissionWithPopulator("467394861", "B000481829", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99765",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
          }
      )
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        karemza9Submission = bundle.add(karemza9Submission)
        karemza9Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza9Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code

        var driver = karemza9Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })

      var karemza10Submission = loadSubmissionWithPopulator("467394862", "B000481830", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "test:99766",
          :populator = \pp -> {
            pp.IsEPolicy = true
            pp.UpdateSystem_Toi = UpdateSystemType_Toi.TC_DEALER
          })
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        karemza10Submission = bundle.add(karemza10Submission)
        karemza10Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        karemza10Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code

        var driver = karemza10Submission.OSGLine.Drivers[0]
        var driverPerson = driver.AccountContactRole.AccountContact.Contact as Person
        var driverPersonPolicy = driver.ContactDenorm as Person

        var issueTypeCode = "code3"
        var uwIssueType = Query.make(UWIssueType)
            .compare(UWIssueType#Code, Relop.Equals, issueTypeCode)
            .select().FirstResult
        var uwIssue = new UWIssue(karemza10Submission)
        uwIssue = bundle.add(uwIssue)
        uwIssue.Active = true
        uwIssue.BlockingPoint_Toi = UWIssueBlockingPoint.TC_BLOCKSISSUANCE
        uwIssue.CheckingSet_Toi = UWIssueCheckingSet.TC_MANUAL
        uwIssue.CanEditApprovalBeforeBind = true
        uwIssue.HasApprovalOrRejection = false
        uwIssue.IssueKey = "issueKey"
        uwIssue.IssueType = uwIssueType

        // Чтобы задать uwIssue.IssueType.ActiveVersion
        new UWRuleBuilder()
            .withCode(issueTypeCode)
            .withIssueKeyParam(issueTypeCode)
            .withRuleContextDefinitionKey(TC_GENERICPOLICY)
            .withRuleCondition(new RuleConditionBuilder()
                .addRuleConditionLine("1", RuleOperator.TC_EQUALS, "1"))  // random
            .withDefaultApprovalBlockingPoint(TC_NONBLOCKING)
            .withTriggeringPointKey(TC_PREQUOTE)
            .create(bundle)

        driverPerson.Nationality_TOI = Country.TC_RU
        driverPersonPolicy.Nationality_TOI = Country.TC_RU
      })

      // invalid test case for testCheckTransitionProgramConditions

      var maxkoz3coverage = new CoverageBuilder(KSKVehicleCov_Toi)
          .withPatternByCodeIdentifier(PatternCode.KSK_Theft_TOI.Code)
          .withCurrency(Currency.TC_RUB)
          .withDirectTermByCodeIdentifier("KSK_TheftLimit_TOI", 1000L)

      var maxkoz3Submission = loadSubmissionWithPopulator("3004200113", "M30042001", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDatePlus(0, 0, 7),
          SampleDataConstants.ACCOUNT_COMPANY_NAMES, false, "m_test:00003", :coverages = {maxkoz3coverage}, :populator = \period -> {
        period.ProducerCodeOfRecord.MarketingChannel_Toi = MarketingChannelType_Toi.TC_OFFICIAL_DEALER
      })
      runTransactionAsUser(null, "Valid submission", \bundle -> {
        maxkoz3Submission = bundle.add(maxkoz3Submission)
        maxkoz3Submission.PaymentMethodOSAGO_TOI = TPPaymentMethodOSAGO_TOI.TC_CARDCURRENTLY
        maxkoz3Submission.Policy.MarkChannel_TOI = MarketingChannelType_Toi.TC_OFFICIAL_DEALER.Code
        maxkoz3Submission.KSKLine.DriversListType = KSKDriversListType_Toi.TC_MULTIDRIVE
        maxkoz3Submission.KSKLine.DriversMinAge = 18
        maxkoz3Submission.KSKLine.DriversMinExperience = 2
        maxkoz3Submission.KSKLine.IsTransition_Toi = false
        maxkoz3Submission.KSKLine.TransitionInsuranceCompany_Toi = new Company()
        maxkoz3Submission.KSKLine.TransitionPolicyExpDate_Toi = SampleDataConstants.getBaseDate()
        maxkoz3Submission.KSKLine.TransitionPolicyPremium_Toi = 1
        maxkoz3Submission.KSKLine.TransitionPolicyAmount_Toi = 1
      })

      // оплаченный Е-ОСАГО
      loadSubmissionWithPopulator("999983999", "C001456496", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
      })
      loadSubmissionWithPopulator("999983734", "C000148456", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
      })
      loadSubmissionWithPopulator("999983998", "C001456496", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
        p.OSGLine.addToSubperiods(new OSGSubperiod_Toi(p) {
          :StartDate = p.PeriodStart,
          :EndDate = p.PeriodStart.addDays(10)
        })
      })

      loadSubmissionWithPopulator("IssueByIDTest", "C001456496", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
      })

      // Е-ОСАГО с ожиданием оплаты
      loadSubmissionWithPopulator("999983777", "C000148456", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
      })

      // расторгнутый Е-ОСАГО
      loadSubmissionWithPopulator("777783777", "C000148456", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \p -> {
        p.IsEPolicy = true
      })
      runTransactionAsUser(null, "777783777 cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("777783777", bundle)
        new CancellationBuilder().withJobNumber("777783778")
            .withBasedOnPeriod(basedOnPeriod)
            .withEffectiveDate(basedOnPeriod.PeriodStart.addMonths(1))
            .canceledByCarrier()
            .canceledForNonpayment()
            .withProrataRefund()
            .create(bundle)
      })

      // will be cancelled in tests
      loadSubmission("446437999", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)

      loadSubmission("446447999", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "Business status 446447999", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("446447999", bundle)
        PolicyPeriodUtil.addNewPaymentStatus(basedOnPeriod, BCPaymentStatus.TC_PAID)
      })

      //policy with unbound renewall
      loadSubmission("446435555", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "Renewall", \bundle ->
          new RenewalBuilder()
              .withJobNumber("446435556")
              .withBasedOnPeriod(findPeriodByJobNumber("446435555", bundle))
              .isQuoted()
              .create(bundle)
      )

      // с другим PaymentStatus
      loadSubmission("463334852", "B000666777", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true, "test:93336")

      // С созданным PreRenewalDirection
      loadSubmission("634565543", "C000456353", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      runTransactionAsUser(null, "PreRenewalDirection", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("634565543", bundle)
        basedOnPeriod.PolicyTerm.PreRenewalDirection = PreRenewalDirection.TC_NONRENEW
      })

      // Невыпущенный полис
      loadSubmission("857465378", "C000456353", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], false)

      //PolicyContactRolesAPIGetContactInformationTest.testGetUserInformation()
      loadSubmission("Job:PCRAPI01", "PCRAPI01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], false)

      loadSubmission("452310124", "C-PCR-00001", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 4523101246", \bundle ->
          new PolicyChangeBuilder()
              .withJobNumber("4523101246")
              .withBasedOnPeriod(findPeriodByJobNumber("452310124", bundle))
              .create(bundle)
      )

      // Полис с IsEPolicy = false
      loadSubmissionWithPopulator("857465301", "C000456353", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true, :populator = \pp -> {
        pp.IsEPolicy = false
      })

      // Еще один полис с невыпущенным изменением
      loadSubmission("857465311", "C000456353", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      runTransactionAsUser(null, "PolicyChange 526345361", \bundle ->
          new PolicyChangeBuilder().withJobNumber("526345361")
              .withBasedOnPeriod(findPeriodByJobNumber("857465311", bundle))
              .isQuoted().create(bundle))

      // policyChange
      loadSubmission("56676455555", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 999998467", \bundle ->
          new PolicyChangeBuilder()
              .withJobNumber("999998467")
              .withBasedOnPeriod(findPeriodByJobNumber("56676455555", bundle))
              .create(bundle)
      )

      loadSubmission("56676455551", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 130), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 999998411", \bundle -> {
        var prevPeriod = findPeriodByJobNumber("56676455551", bundle)
        new PolicyChangeBuilder()
            .withJobNumber("999998411")
            .withBasedOnPeriod(prevPeriod)
            .withPeriodStart(prevPeriod.PeriodStart)
            .withPeriodEnd(prevPeriod.PeriodStart.addMonths(1).addDays(12))
            .withPolicyTerm(TermType.TC_OTHER)
            .withSelectedTermType(TermType.TC_OTHER)
            .create(bundle)
      })

      loadSubmission("56676455552", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 130), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 999998412", \bundle -> {
        var prevPeriod = findPeriodByJobNumber("56676455552", bundle)
        new PolicyChangeBuilder()
            .withJobNumber("999998412")
            .withBasedOnPeriod(prevPeriod)
            .withPeriodStart(prevPeriod.PeriodStart)
            .withPeriodEnd(prevPeriod.PeriodStart.addMonths(1).addDays(9))
            .withPolicyTerm(TermType.TC_MONTHLY)
            .withSelectedTermType(TermType.TC_MONTHLY)
            .create(bundle)
      })

      loadSubmission("100100100", "C00010000", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 101101101", \bundle -> {
        (bundle as EntityBundleImpl).CommitOptions.setIgnorePreUpdateRules(true)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
        new PolicyChangeBuilder()
            .withJobNumber("101101101")
            .withBasedOnPeriod(findPeriodByJobNumber("100100100", bundle))
            .withPolicyLine(new KSKLineBuilder().withVehicle(new KSKVehicleBuilder()
                .withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
                    .withPatternByCodeIdentifier(PatternCode.KSK_Theft_TOI.Code))))
            .create(bundle)
      })

      loadSubmission("200200200", "C00010000", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 201201201", \bundle -> {
        (bundle as EntityBundleImpl).CommitOptions.setIgnorePreUpdateRules(true)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
        new PolicyChangeBuilder()
            .withJobNumber("201201201")
            .withBasedOnPeriod(findPeriodByJobNumber("200200200", bundle))
            .withPolicyLine(new KSKLineBuilder().withVehicle(new KSKVehicleBuilder()
                .withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
                    .withPatternByCodeIdentifier(PatternCode.KSK_MiniKASKO_TOI.Code))))
            .create(bundle)
      })

      loadSubmission("300300300", "C00010000", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 301301301", \bundle -> {
        (bundle as EntityBundleImpl).CommitOptions.setIgnorePreUpdateRules(true)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
        new PolicyChangeBuilder()
            .withJobNumber("301301301")
            .withBasedOnPeriod(findPeriodByJobNumber("300300300", bundle))
            .withPolicyLine(new KSKLineBuilder().withVehicle(new KSKVehicleBuilder()
                .withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
                    .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code))))
            .create(bundle)

      })

      var coverage = new CoverageBuilder(KSKVehicleCov_Toi)
          .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code)
          .withCurrency(Currency.TC_RUB)
          .withBooleanCovTermByCodeIdentifier("KSK_DamageTotal_TOI", true)
          .withDirectTermByCodeIdentifier("KSK_DamageLimit_TOI", 1000L)
      SamplePolicyData.loadSubmissionWithPopulator("DamageOrTheftFromOfficialDealerAndLessThenLimit", "C00010000",
          PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true,
          :coverages = {coverage}, :populator = \period -> {
        period.ProducerCodeOfRecord.MarketingChannel_Toi = MarketingChannelType_Toi.TC_OFFICIAL_DEALER
      })

      var coverage1 = new CoverageBuilder(KSKVehicleCov_Toi)
          .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code)
          .withCurrency(Currency.TC_RUB)
          .withBooleanCovTermByCodeIdentifier("KSK_DamageTotal_TOI", true)
          .withDirectTermByCodeIdentifier("KSK_DamageLimit_TOI", 1000L)
      SamplePolicyData.loadSubmissionWithPopulator("DamageOrTheftWithBusinessTestAndLessThenLimit", "C00010000",
          PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true,
          :coverages = {coverage1}, :populator = \period -> {
        period.BusinessTests_Toi = {new () {:PolicyPeriod = period, :Code = "psi_removal", :Value = "true"}}
      })

      SamplePolicyData.loadSubmissionWithPopulator("SubmissionBoundAfterAppointment", "C00010000",
          PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true,
          :coverages = {new CoverageBuilder(KSKVehicleCov_Toi)
              .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code)}, :populator = \period -> {
        period.KSKLine.IsBoundAfterAppointment_Toi = true
      })

      loadSubmission("123421212", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDatePlus(0, 12, 1), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 123421000", \bundle -> {
        (bundle as EntityBundleImpl).CommitOptions.setIgnorePreUpdateRules(true)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
        new PolicyChangeBuilder()
            .withJobNumber("123421000")
            .withPeriodEnd(Date.CurrentDate.addYears(1).addDays(2))
            .withPeriodStart(Date.CurrentDate.addDays(1))
            .withBasedOnPeriod(AbstractSampleDataCollection.findPeriodByJobNumber("123421212", bundle))
            .withPolicyLine(new KSKLineBuilder().withVehicle(new KSKVehicleBuilder()
                .withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
                    .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code))))
            .isQuoted().create(bundle)
      })

      loadSubmission("343434343", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDatePlus(0, 12, 1), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 343434343", \bundle -> {
        (bundle as EntityBundleImpl).CommitOptions.setIgnorePreUpdateRules(true)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
        new PolicyChangeBuilder()
            .withJobNumber("876456213")
            .withPeriodEnd(Date.CurrentDate.addYears(1).addDays(2))
            .withPeriodStart(Date.CurrentDate.addDays(1))
            .withBasedOnPeriod(AbstractSampleDataCollection.findPeriodByJobNumber("343434343", bundle))
            .withPolicyLine(new KSKLineBuilder().withVehicle(new KSKVehicleBuilder()
                .withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
                    .withPatternByCodeIdentifier(PatternCode.KSK_Damage_TOI.Code))))
            .isQuoted().create(bundle)
      })


      // cancellation
      loadSubmission("56676476578", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 967868467", \bundle ->
          new PolicyChangeBuilder()
              .withJobNumber("967868467")
              .withBasedOnPeriod(findPeriodByJobNumber("56676476578", bundle))
              .create(bundle)
      )
      runTransactionAsUser(null, "Cancellation 5456456763", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("967868467", bundle)
        new CancellationBuilder().withJobNumber("5456456763")
            .withBasedOnPeriod(basedOnPeriod)
            .withEffectiveDate(basedOnPeriod.PeriodStart.addMonths(1))
            .canceledByCarrier()
            .canceledForNonpayment()
            .withProrataRefund()
            .create(bundle)
      })

      loadSubmission("64129035698", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 12, 1), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "PolicyChange 64129035698", \bundle -> {
        new PolicyChangeBuilder()
            .withJobNumber("64129035603")
            .withPeriodEnd(Date.CurrentDate.addYears(1).addDays(2))
            .withPeriodStart(Date.CurrentDate.addDays(1))
            .withBasedOnPeriod(findPeriodByJobNumber("64129035698", bundle))
            .isQuoted().create(bundle)
        var basedOnPeriod = findPeriodByJobNumber("64129035698", bundle)
        basedOnPeriod.PeriodAdditional_Toi.CommissionAccountingDate = Date.CurrentDate
        basedOnPeriod.ProducerCodeOfRecord.Code = "TCS-Test"

        var document = new Document(bundle)
        document.DocUID = "document_for_job_64129035603"
        document.PolicyPeriod = basedOnPeriod
        document.Type = DocumentType.TC_EOSAGO_POLICY

      })

      loadSubmission("64129035697", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDatePlus(0, 12, 1), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)

      loadSubmission("64129035699", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDatePlus(0, 12, 1), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)

      // business status
      loadSubmission("44444455555", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "Business status 44444455555", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("44444455555", bundle)
        basedOnPeriod.PeriodBusinessStatus_Toi.Status = PolicyBusinessStatus_Toi.TC_POLICY
      })

      loadSubmission("44444455556", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "Business status 44444455556", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("44444455556", bundle)
        PolicyPeriodUtil.addNewPaymentStatus(basedOnPeriod, BCPaymentStatus.TC_PAID)
      })

      // producer code
      loadSubmission("33333355555", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), SampleDataConstants.ACCOUNT_COMPANY_NAMES, true)
      runTransactionAsUser(null, "Business status 33333355555", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("33333355555", bundle)
        basedOnPeriod.ProducerCodeOfRecord.Code = "TCS-VIP"
      })

      //SiebelServiceTOIAPICloseAppointmentTest.testSuccessOnValidParams()
      loadSubmission("0914100001", "C000456353", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), {}, true)

      //TinkoffPolicyStatusUpdateEventMessageTransportTest.testSuccessEvent()
      loadSubmission("Job:TPSUEM01", "TPSUEM01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), {}, true)

      // SiebelService.getAppointmentPolicyInfo
      // полис, связанный со встречей
      loadSubmission("siebel:001", "C000212105", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, false)
      runTransactionAsUser(null, "SiebelService.getAppointmentPolicyInfo", \bundle -> {
        var pp = findPeriodByJobNumber("siebel:001", bundle)
        pp.TotalCostRPT = MonetaryAmounts.zeroOfDefaultCurrency()
      })

      // SiebelService.setAppointmentBookTimeSlotV2
      // полис, связанный с назначенной встречей
      loadSubmission("siebel:002", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      // полис, не связанный со встречей
      loadSubmission("siebel:003", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)

      // TinkoffEmailMessageTransport (https://wiki.tcsbank.ru/display/TOIIT/TinkoffEmailMessageTransport)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 contact email", \bundle -> {
        var contact = Account.finder.findAccountByAccountNumber("B000457766").AccountHolderContact
        bundle.add(contact).EmailAddress1 = "email@test.org"
      })
      // ISSUE_POLICY_EVENT_NAME Other (KASKO Submission)
      loadSubmission("email:001", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, false)
      // ISSUE_POLICY_EVENT_NAME EOSAGOPolicy; п. 6 вариант 2 (оплаченный Е-ОСАГО)
      loadSubmissionWithPopulator("email:002", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp -> {
            pp.IsEPolicy = true
          })
      // TRAVEL_SUBMISSION_PACK_CREATED
      loadSubmissionWithPopulator("email:003", "B000457766", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp ->
              pp.TVLLine.addToTVLAreas_Toi(new TVLArea_Toi(pp.Bundle) {
                :Area = GeographicalRegion.TC_SHENGEN
              })
      )
      // TRAVEL_SUBMISSION_PACK_CREATED (Travel VIP с род. пролонгацией)
      loadSubmissionWithPopulator("email:003_vip_base", "B000457766",
          PCCoercions.makeProductModel<Product>("TVLTravel"), SampleDataConstants.getBaseDateMinus(10), {}, true,
          :populator = \pp ->
              pp.TVLLine.addToTVLAreas_Toi(new TVLArea_Toi(pp.Bundle) {
                :Area = GeographicalRegion.TC_SHENGEN
              }))
      loadSubmissionWithPopulator("email:003_vip", "B000457766", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp -> {
            pp.ProducerCodeOfRecord.Code = "TCS-VIP"
            pp.PeriodAdditional_Toi.ParentRenewal = Job.finder.findJobByJobNumber("email:003_vip_base").LatestPeriod
          }
      )
      // ISSUE_POLICY_EVENT_NAME (KASKO Change)
      loadSubmission("email:004_base", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 kasko change", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:004_base", bundle)
        new PolicyChangeBuilder()
            .withJobNumber("email:004")
            .withBasedOnPeriod(basedOnPeriod)
            .create(bundle)
      })
      // п. 2 (КАСКО, переход в бизнес-статус Полис)
      loadSubmissionWithPopulator("email:005", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp -> {
            pp.PeriodBusinessStatus_Toi.Status = PolicyBusinessStatus_Toi.TC_POLICY
            pp.PeriodAdditional_Toi.NeedToSendPolicy = true
          })
      // п. 3 (email_toi); п. 9 (FOIVCheckFailed)
      loadSubmission("email:006_base", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 osago change", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:006_base", bundle)
        var changePeriod = new PolicyChangeBuilder()
            .withJobNumber("email:006")
            .withBasedOnPeriod(basedOnPeriod)
            .isQuoted()
            .create(bundle)
        changePeriod.IsEPolicy = true
      })
      // п. 4 вариант 1 (расторжение ВЗР)
      loadSubmission("email:007_base", "B000457766", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 travel cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:007_base", bundle)
        var cancellationPeriod = new CancellationBuilder()
            .withJobNumber("email:007")
            .withBasedOnPeriod(basedOnPeriod)
            .withCancellationSource(CancellationSource.TC_INSURED)
            .withCancelReasonCode(ReasonCode.TC_TECHINCALERROR_TOI)
            .isQuoted()
            .create(bundle)
        cancellationPeriod.SendEmailByCancellation_TOI = true
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      // п. 4 вариант 2 (расторжение КАСКО)
      loadSubmission("email:008_base", "TEMT01", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 kasko cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:008_base", bundle)
        var cancellationPeriod = new CancellationBuilder()
            .withJobNumber("email:008")
            .withBasedOnPeriod(basedOnPeriod)
            .isQuoted()
            .create(bundle)
        cancellationPeriod.SendEmailByCancellation_TOI = true
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      // п. 4 вариант 3 (расторжение ОСАГО)
      loadSubmissionWithPopulator("email:009_base", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true,
          :populator = \pp -> {
            pp.PeriodAdditional_Toi.NeedToSendPolicy = true
          })
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 osago cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:009_base", bundle)
        var cancellationPeriod = new CancellationBuilder()
            .withJobNumber("email:009")
            .withBasedOnPeriod(basedOnPeriod)
            .isQuoted()
            .create(bundle)
        cancellationPeriod.SendEmailByCancellation_TOI = true
        cancellationPeriod.Vehicle.VIN = null
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      // п. 6 вариант 1 (изменение КАСКО с положительным изменением премии)
      loadSubmission("email:010_base", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 kasko change with positive premium change",
          \bundle -> {
            var basedOnPeriod = findPeriodByJobNumber("email:010_base", bundle)
            var changePeriod = new PolicyChangeBuilder()
                .withJobNumber("email:010")
                .withBasedOnPeriod(basedOnPeriod)
                .create(bundle)
            changePeriod.TransactionCostRPT = MonetaryAmounts.ofDefaultCurrency(100)
          })
      // п. 7 вариант 1
      loadSubmissionWithPopulator("email:011", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp -> {
            pp.PolicyNumber = "email:011"
            pp.TermNumber = 1
            pp.IsPSIRequired_TOI = true
          })
      // п. 8
      loadSubmissionWithPopulator("email:012", "B000457766", PCCoercions.makeProductModel<Product>("TPTinkoffProperty"),
          SampleDataConstants.getBaseDateMinus(10), {}, false,
          :populator = \pp -> {
            pp.TPLine.CalculationType = HCCalcType_Toi.TC_PROPERTY1
            pp.TermType = TermType.TC_ANNUAL
          })

      loadSubmission("email:0013", "B000457766", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(10), {}, true)
      runTransactionAsUser(null, "TinkoffEmailMessageTransport - B000457766 travel cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("email:007_base", bundle)
        var changePeriod = new PolicyChangeBuilder()
            .withJobNumber("email:0014")
            .withBasedOnPeriod(basedOnPeriod)
            .isQuoted()
            .create(bundle)
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      // Полисы для тестирования AccountVehicleAPI
      // 1. Полис не выпущен
      loadSubmission("100000000", "A-AVAPI-000", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], false)

      loadSubmission("100000018", "A-AVAPI-006", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], false)
      // 2. Полис выпущен, нет оплаты
      loadSubmission("100000002", "A-AVAPI-001", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)
      // 3. Полис выпущен, есть оплата
      loadSubmission("100000003", "A-AVAPI-002", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      // 4. Полис выпущен, есть полата, выпущена отмена
      loadSubmission("100000004", "A-AVAPI-003", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)
      runTransactionAsUser(null, "Cancellation 100000004", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("100000004", bundle)
        new CancellationBuilder().withJobNumber("100000005")
            .withBasedOnPeriod(basedOnPeriod)
            .withEffectiveDate(basedOnPeriod.PeriodStart.addMonths(1))
            .canceledByCarrier()
            .canceledForNonpayment()
            .withProrataRefund()
            .create(bundle)
      })

      // Полисы для тестирования AccountVehicleService
      // 1. Полис не выпущен
      loadSubmission("100000010", "A-AVAPI-000", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], false)
      // 2. Полис выпущен, нет оплаты
      loadSubmission("100000012", "A-AVAPI-001", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)
      // 3. Полис выпущен, есть оплата
      loadSubmission("100000013", "A-AVAPI-002", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      // 4. Полис выпущен, есть полата, выпущена отмена
      loadSubmission("100000014", "A-AVAPI-003", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)
      runTransactionAsUser(null, "Cancellation 100000004", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("100000004", bundle)
        new CancellationBuilder().withJobNumber("100000005")
            .withBasedOnPeriod(basedOnPeriod)
            .withEffectiveDate(basedOnPeriod.PeriodStart.addMonths(1))
            .canceledByCarrier()
            .canceledForNonpayment()
            .withProrataRefund()
            .create(bundle)
      })

      //ImplByParamsForPolicyPeriodV2Test.testSuccessOnValidVehicleOwnerBlock()
      loadSubmission("Job:IBPFPP01", "IBPFPP01", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 20), new String[0], true, "Policy:IBPFPP01")

      //FindProlongationHistoryTest.testSuccessOnValidParams()
      loadSubmission("FindProlongationHistoryTest01", "FPH01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)

      //ContactServicePoliciesVehiclesTest.testSuccess()
      loadSubmission("PoliciesVehiclesTest01", "CSPV01", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)

      //GetSilverDatInformationTest.testSuccess()
      loadSubmission("Job:GSDI01", "GSDI01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      loadSubmission("SmevTest01", "GSDI01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      loadSubmission("SmevTest02", "GPDBAV01", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      // TinkoffSubmissionAPITest
      loadSubmissionWithPopulator("createandbindpolicy", "B000457766", PCCoercions.makeProductModel<Product>("TPTinkoffProperty"),
          SampleDataConstants.getBaseDateMinus(10), {}, true,
          :populator = \pp -> {
            pp.TPLine.CalculationType = HCCalcType_Toi.TC_PROPERTY1
            pp.TermType = TermType.TC_ANNUAL
            pp.PolicyTerm.BankAgreementNumber_Toi = "BankAgreement1"
          })

      //полис для тестирования TinkoffRenewalAPI
      loadSubmission("APIRenewalTest00", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      runTransactionAsUser(null,
          "APIRenewalTest - B000457766 OSG with Owner", \bundle -> {
        var period = findPeriodByJobNumber("APIRenewalTest00", bundle)
        period.PolicyNumber = "APIRenewalTest00"
        period.TermNumber = 1
        period.addNewPolicyContactRoleForContact(period.Policy.Account.AccountHolderContact,
            PolicyContactRole.TC_OSGVEHICLEOWNER_TOI)
        period.TermType = TermType.TC_ANNUAL
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      runTransactionAsUser(null, "APIRenewalTest01", \bundle -> {
        var ren = new RenewalBuilder()
            .withJobNumber("APIRenewalTest01")
            .withBasedOnPeriod(findPeriodByJobNumber("APIRenewalTest00", bundle))
            .isWithdrawn()
            .create(bundle)
        var cart = new CartSelectionBuilder()
            .withCartNumber("5326891123")
            .withCartStatus(SharedCartStatus_Toi.TC_DRAFT_SELECTION)
            .create(bundle)
        var deal = new DealBuilder()
            .create(bundle)
        var cartToPeriod = new CartToPeriodBuilder()
            .withCart(cart)
            .withPolicyPeriod(ren)
            .withStartDate(Date.CurrentDate)
            .create(bundle)
        cart.Deal = deal
        ren.addToLinkedCarts(cartToPeriod)
      }
      )
      runTransactionAsUser(null, "APIRenewalTest02", \bundle -> {
        var ren = new RenewalBuilder()
            .withJobNumber("APIRenewalTest02")
            .withBasedOnPeriod(findPeriodByJobNumber("APIRenewalTest00", bundle))
            .isDraft()
            .create(bundle)
        var cart = new CartSelectionBuilder()
            .withCartNumber("5326891124")
            .withCartStatus(SharedCartStatus_Toi.TC_DRAFT_SELECTION)
            .create(bundle)
        var deal = new DealBuilder()
            .create(bundle)
        var cartToPeriod = new CartToPeriodBuilder()
            .withCart(cart)
            .withPolicyPeriod(ren)
            .withStartDate(Date.CurrentDate)
            .create(bundle)
        cart.Deal = deal
        ren.addToLinkedCarts(cartToPeriod)
      })

      //полис для тестирования RenewalServiceToiAPI
      loadSubmission("RenewalTest01", "B000457766", PCCoercions.makeProductModel<Product>("TinkoffOSAGO"),
          SampleDataConstants.getBaseDateMinus(2, 0, 90), new String[0], true)
      runTransactionAsUser(null,
          "RenewalServiceToiAPI - B000457766 OSG with Owner", \bundle -> {
        var period = findPeriodByJobNumber("RenewalTest01", bundle)
        period.PolicyNumber = "RenewalTest01"
        period.TermNumber = 1
        period.addNewPolicyContactRoleForContact(period.Policy.Account.AccountHolderContact,
            PolicyContactRole.TC_OSGVEHICLEOWNER_TOI)
        period.TermType = TermType.TC_ANNUAL
        (bundle as EntityBundleImpl).CommitOptions.setIgnoreBeanChangeEvents(true)
      })
      runTransactionAsUser(null, "Renewal02", \bundle ->
          new RenewalBuilder()
              .withJobNumber("RenewalTest02")
              .withBasedOnPeriod(findPeriodByJobNumber("RenewalTest01", bundle))
              .isWithdrawn()
              .create(bundle))

      loadSubmissionWithPopulator("TVLS7001", "B000457766", PCCoercions.makeProductModel<Product>("TVLTravel"),
          SampleDataConstants.getBaseDateMinus(10), {}, true, :populator = \period -> {
        period.ProducerCodeOfRecord.Code = "S7ProdCode"
        period.ProducerCodeOfRecord.Agreement = new Agreement_Toi(period)
      })

      loadSubmissionWithPopulator("TPHPU01", "B000481818", PCCoercions.makeProductModel<Product>("TPTinkoffProperty"),
          SampleDataConstants.getBaseDateMinus(10), {}, true,
          :populator = \pp -> {
            pp.Offering = gw.api.productmodel.OfferingLookup.getByCodeIdentifier("TPHPU1")
            pp.TermType = TermType.TC_MONTHLY
          })


      //Полис для тестирования testKaskoPolicyReistatment
      loadSubmission("100000015", "A-AVAPI-005", PCCoercions.makeProductModel<Product>("TinkoffKASKO"),
          SampleDataConstants.getBaseDateMinus(0, 0, 30), new String[0], true)

      runTransactionAsUser(null, "100000015 cancellation", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("100000015", bundle)
        PolicyPeriodUtil.addNewPaymentStatus(basedOnPeriod, BCPaymentStatus.TC_PAID)
        new CancellationBuilder().withJobNumber("100000016")
            .withBasedOnPeriod(basedOnPeriod)
            .canceledByCarrier()
            .withProrataRefund()
            .create(bundle)
      })

      runTransactionAsUser(null, "100000016 reistatment", \bundle -> {
        var basedOnPeriod = findPeriodByJobNumber("100000016", bundle)
        new ReinstatementBuilder().withJobNumber("100000017")
            .withBasedOnPeriod(basedOnPeriod)
            .withEffectiveDate(basedOnPeriod.PeriodStart.addMonths(1))
            .create(bundle)
      })

    })
  }

  /**
   * @see AbstractSampleDataCollection#loadSubmission
   */
  public static function loadSubmission(jobNumber : String, accountNumber : String, product : Product,
                                        effDate : Date, insuredNames : String[], bound : Boolean,
                                        publicID : String = null) : PolicyPeriod {
    return loadSubmissionWithPopulator(jobNumber, accountNumber, product, effDate, insuredNames, bound, publicID)
  }

  public static function loadSubmissionWithPopulator(jobNumber : String, accountNumber : String, product : Product,
                                                     effDate : Date, insuredNames : String[], bound : Boolean,
                                                     publicID : String = null,
                                                     vehicleCategory : VehicleCategory_Toi = null,
                                                     vehicleUsage : VehicleUsage_Toi = null,
                                                     populator : block(PolicyPeriod) = null,
                                                     covPatternCodes : String[] = null,
                                                     coverages : CoverageBuilder[] = null,
                                                     offering : String = null) : PolicyPeriod {
    var account = findAccount(accountNumber)
    if (account == null) {
      throw "Cannot find account #" + accountNumber + " for generating Submission " + jobNumber
    }

    var policyPeriod : PolicyPeriod
    runTransactionAsUser("su", "Submission " + jobNumber, \b -> {
      account = b.loadBean(account?.ID) as Account

//      var offeringoffering = gw.api.productmodel.OfferingLookup.getByCodeIdentifier("TPHPU1")


      var builder = new SubmissionBuilder()
          .withAccount(account)
          .withProduct(product)
          .withEffectiveDate(effDate)
          .withJobNumber(jobNumber)
          .withTotalCostRPT(10000)
          .withTotalPremiumRPT(10000)
          .withProducerSelection(new SubmissionBuilder().makeProducerSelection(b))
//          .withOffering(gw.api.productmodel.OfferingLookup.getByCodeIdentifier("TPHPU1"))

      builder.addPopulator(\pp -> {
        (pp.Job as Submission).addToGroup()
      })

      if (publicID != null) {
        builder.withPublicId(publicID)
      }

      if (!bound) {
        builder = builder.isQuoted()
      }

      var accountContacts = new ArrayList<AccountContact>()
      for (insuredName in insuredNames) {
        var accountContact = findAccountContact(account, typekey.AccountContactRole.TC_NAMEDINSURED, insuredName)
        accountContacts.add(accountContact)
      }

      if (product == PCCoercions.makeProductModel<Product>("TinkoffOSAGO")) {
        configureBuilderForOsago(builder, account, vehicleCategory, vehicleUsage)
      } else if (product == PCCoercions.makeProductModel<Product>("TinkoffKASKO")) {
        configureBuilderForKasko(builder, account, accountContacts, vehicleCategory, covPatternCodes, coverages)
      } else if (product == PCCoercions.makeProductModel<Product>("TVLTravel")) {
        configureBuilderForTvlTravel(builder, account)
      } else if (product == PCCoercions.makeProductModel("TPTinkoffProperty")) {
        configureForTpTinkoffProperty(builder, accountContacts)
      } else {
        configureBuilderDefault(builder, accountContacts)
      }

      if (offering != null) {
        builder.withOffering(offering)
      }

      if (populator != null) {
        builder.addPopulator(populator)
      }

      policyPeriod = builder.create(b)
    })

    try {
      validatePeriod(policyPeriod)
    } catch (e) {
      LOGGER.warn("PolicyPeriod validation failed", e)
    }
    return policyPeriod
  }

  private static function configureBuilderForOsago(builder : SubmissionBuilder,
                                                   account : Account,
                                                   vehicleCategory : VehicleCategory_Toi,
                                                   vehicleUsage : VehicleUsage_Toi) {
    var accountDriver = findAccountContact(account, typekey.AccountContactRole.TC_DRIVER)
    var personDriver = account.Bundle.add(accountDriver.Contact as Person)
    personDriver.General_DrvLicDate = Date.CurrentDate.addYears(-1).formatDate(SHORT)
    var accountVehicle = account.Vehicles?.first() ?: new AccountVehicle_ToiBuilder()
        .withAccount(account).withVIN("XXX111XXX222XXX333XX")
        .withRegistrationNumber("А001СС99")
        .createAndCommitInNewBundle()
    var vehicle = new OSGVehicleBuilder()
        .withAccountVehicle(accountVehicle)
        .withCategory(vehicleCategory ?: VehicleCategory_Toi.TC_B)
        .withVehicleUsage(vehicleUsage ?: TC_PERSONAL)
    var driver = new OSGDriverBuilder().withAccountContactRole(accountDriver.getRole(TC_DRIVER))

    if (account.AccountContacts*.Roles?.hasMatch(\role -> role.Subtype == TC_VEHICLEOWNER_TOI)) {
      var accountVehicleOwnerRole = findAccountContact(account, typekey.AccountContactRole.TC_VEHICLEOWNER_TOI)
          .getRole(TC_VEHICLEOWNER_TOI)
      var vehicleOwner = new OSGVehicleOwnerBuilder()
          .withOSGLine(new OSGLineBuilder())
          .withAccountContactRole(accountVehicleOwnerRole)
      vehicleOwner.syncFields(accountVehicleOwnerRole)
      builder.withPolicyContactRole(vehicleOwner)
    }

    builder.withPolicyLine(new OSGLineBuilder()
        .withVehicle(vehicle)
        .withPolicyDriver(driver))
        .withPolicyContactRole(driver)
    builder.addPopulator(\pp -> {
      pp.IsEPolicy = true
      pp.Job.addToEramies_Toi(new ERAMI_Toi() {:BSONumber = '1234'})
    })
    builder.addPopulator(\pp -> {
      pp.BusinessTests_Toi = {
          new BusinessTest_Toi() {
            :PolicyPeriod = pp,
            :Code = "Test Code 1",
            :Value = "Test Value 1"
          }}
    })
    builder.addPopulator(\pp -> {
      pp.Policy.MarkChannel_TOI = "MarkChannel_GW"
      pp.Policy.MarketingSrc_TOI = "MarketingSrc_GW"
    })
  }

  private static function configureBuilderForKasko(builder : SubmissionBuilder,
                                                   account : Account,
                                                   accountContacts : List<AccountContact>,
                                                   vehicleCategory : VehicleCategory_Toi,
                                                   covPatternCodes : String[],
                                                   coverages : CoverageBuilder[]) {

    var accountVehicle = account.Vehicles?.first() ?: new AccountVehicle_ToiBuilder()
        .withAccount(account).withVIN("XXX111XXX222XXX333X9")
        .withRegistrationNumber("А001СС97")
        .withToiID(202836)
        .withYear("2019")
        .createAndCommitInNewBundle()

    var kskVehicleBuilder = new KSKVehicleBuilder(accountVehicle)
        .withCategory(vehicleCategory).withInsuranceTerritory(KSKTerritory_Toi.TC_RUSSIA)

    for (code in covPatternCodes) {
      kskVehicleBuilder.withCoverage(new CoverageBuilder(KSKVehicleCov_Toi)
          .withPatternByCodeIdentifier(code))
    }

    for (coverage in coverages) {
      kskVehicleBuilder.withCoverage(coverage)
    }

    builder
        .withPolicyLine(new KSKLineBuilder()
            .withVehicle(kskVehicleBuilder))

    if (account.AccountContacts*.Roles?.hasMatch(\role -> role.Subtype == TC_VEHICLEOWNER_TOI)) {
      var accountVehicleOwnerRole = findAccountContact(account, typekey.AccountContactRole.TC_VEHICLEOWNER_TOI)
          .getRole(TC_VEHICLEOWNER_TOI)
      var vehicleOwner = new KSKVehicleOwnerBuilder()
          .withAccountContactRole(accountVehicleOwnerRole)
      vehicleOwner.syncFields(accountVehicleOwnerRole)
      builder.withPolicyContactRole(vehicleOwner)
    }

    for (accountContact in accountContacts) {
      //every other line, we add additional name insured
      builder.withPolicyContactRole(new PolicyAddlNamedInsuredBuilder()
          .withAccountContactRole(accountContact.getRole(TC_NAMEDINSURED)))
    }
    builder.addPopulator(\p -> {
      p.NonDiscountedPrem_TOI = MonetaryAmounts.ofDefaultCurrency(10000)
    })

    builder.addPopulator(11, \pp -> {
      if (pp.KSKVehicleOwner != null) {
        pp.KSKVehicleOwner.KSKVehicle = pp.Vehicle as KSKVehicle_Toi
      }
    })
  }

  private static function configureBuilderForTvlTravel(builder : SubmissionBuilder, account : Account) {

    var person = findAccountContact(account, typekey.AccountContactRole.TC_ACCOUNTHOLDER).Contact as Person

    var tvlLineBuilder = new TVLLineExtBuilder()
        .withDayCount(7)
        .withTripEnd(Date.CurrentDate.addDays(15))
        .withCountry(new TPCountry_TOI() {:Country_TOI = TC_RU})
        .withAssistanceCompany(findCompany("Wright Construction", "818-446-1206"))  // todo удалить скрипт параметр хелпер в SMSTest
        .withBookingCode("test")
        .withTraveller(new TravellerExtBuilder()
            .withCoveredPerson(person))

    builder
        .withPolicyLine(tvlLineBuilder)
        .withPeriodStart(Date.CurrentDate.addDays(10))
        .withPeriodEnd(Date.CurrentDate.addDays(10).addYears(1).addDays(-1))

    builder.addPopulator(\period -> {
      period.addToDeliveryMethod_TOI(new TPDeliveryMethod_TOI(period) {:DeliveryMethod = TC_EMAIL})
    })
  }

  private static function configureForTpTinkoffProperty(builder : SubmissionBuilder,
                                                        accountContacts : List<AccountContact>) {

    var tpLineBuilder = new TPLineBuilder()
        .withPolicyType(SharedPolicyType_TOI.TC_BUILDING)

    builder.withPolicyLine(tpLineBuilder)

    builder.addPopulator(\period -> {
      period.addToDeliveryMethod_TOI(new TPDeliveryMethod_TOI(period) {:DeliveryMethod = TC_EMAIL})
      period.TPLine.addToDwellings(new DwellingTOI(period) {:Recipient = "SamplePolicyData Test Recipient"})
    })

    for (accountContact in accountContacts) {
      //every other line, we add additional name insured
      builder.withPolicyContactRole(new PolicyAddlNamedInsuredBuilder()
          .withAccountContactRole(accountContact.getRole(TC_NAMEDINSURED)))
    }
  }

  private static function configureBuilderDefault(builder : SubmissionBuilder, accountContacts : List<AccountContact>) {
    for (accountContact in accountContacts) {
      //every other line, we add additional name insured
      builder.withPolicyContactRole(new PolicyAddlNamedInsuredBuilder()
          .withAccountContactRole(accountContact.getRole(TC_NAMEDINSURED)))
    }
  }
}
Editor is loading...
Leave a Comment