docs: private KeyPersons getKeyPersons(BudgetPeriodDto periodInfo) {
          KeyPersons keyPersons = KeyPersons.Factory.newInstance();
          if (periodInfo != null) {
              if (periodInfo.getKeyPersons() != null) {
                  List<KeyPersonDataType> keyPersonList = new ArrayList<>();
                  int keyPersonCount = 0;
                  for (KeyPersonDto keyPerson : periodInfo.getKeyPersons()) {
                    if(keyPerson.getRole().equals(NID_PD_PI) || hasPersonnelBudget(keyPerson,periodInfo.getBudgetPeriod())){
                      KeyPersonDataType keyPersonDataType = KeyPersonDataType.Factory.newInstance();
                      keyPersonDataType.setName(globLibV20Generator.getHumanNameDataType(keyPerson));
                      if(keyPerson.getKeyPersonRole()!=null){
                          keyPersonDataType.setProjectRole(keyPerson.getKeyPersonRole());
                      }
                      else {
                          keyPersonDataType.setProjectRole(keyPerson.getRole());
                      }
                      keyPersonDataType.setCompensation(getCompensation(keyPerson, periodInfo.getBudgetPeriod()));
                      keyPersonList.add(keyPersonDataType);
                      keyPersonCount++;
                      LOG.info("keyPersonCount:" + keyPersonCount);
                  }
                  }
                  keyPersons.setKeyPersonArray(keyPersonList.toArray(new KeyPersonDataType[0]));
              }
              SummaryDataType summary = SummaryDataType.Factory.newInstance();
              if (periodInfo.getTotalFundsKeyPersons() != null) {
                  summary.setFederalSummary(periodInfo.getTotalFundsKeyPersons().bigDecimalValue());
              }
              if (periodInfo.getTotalNonFundsKeyPersons() != null) {
                  summary.setNonFederalSummary(periodInfo.getTotalNonFundsKeyPersons().bigDecimalValue());
                  if (periodInfo.getTotalFundsKeyPersons() != null) {
                      summary.setTotalFedNonFedSummary(periodInfo.getTotalFundsKeyPersons().add(
                              periodInfo.getTotalNonFundsKeyPersons()).bigDecimalValue());
                  }
                  else {
                      summary.setTotalFedNonFedSummary(periodInfo.getTotalNonFundsKeyPersons().bigDecimalValue());
                  }
              }
              keyPersons.setTotalFundForKeyPersons(summary);
              SummaryDataType summaryAttachedKey = SummaryDataType.Factory.newInstance();
  
              BigDecimal totalFederalSummary = BigDecimal.ZERO;
              BigDecimal totalNonFederalSummary = BigDecimal.ZERO;
              for(KeyPersonDto keyPersonInfo : periodInfo.getExtraKeyPersons()){
                  totalFederalSummary = totalFederalSummary.add(keyPersonInfo.getFundsRequested().bigDecimalValue());
                  totalNonFederalSummary = totalNonFederalSummary.add(keyPersonInfo.getNonFundsRequested().bigDecimalValue());
              }
              summaryAttachedKey.setFederalSummary(totalFederalSummary);
              summaryAttachedKey.setNonFederalSummary(totalNonFederalSummary);
              summaryAttachedKey.setTotalFedNonFedSummary(totalFederalSummary.add(totalNonFederalSummary));
              keyPersons.setTotalFundForAttachedKeyPersons(summaryAttachedKey);
          }
          NarrativeContract extraKeyPersonNarr = saveExtraKeyPersons(periodInfo);
          AttachedFileDataType attachedFileDataType = null;
          if(extraKeyPersonNarr!=null){
              attachedFileDataType = getAttachedFileType(extraKeyPersonNarr);
              if(attachedFileDataType != null){
                  keyPersons.setAttachedKeyPersons(attachedFileDataType);
              }
          }
          return keyPersons;
      }