docs: private KeyPersons getKeyPersons(BudgetPeriodDto periodInfo) {
  
  		KeyPersons keyPersons = KeyPersons.Factory.newInstance();
  		ScaleTwoDecimal extraFunds = ScaleTwoDecimal.ZERO;
  		if (periodInfo != null) {
  			KeyPersonDataType[] keyPersonDataTypeArray = null;
  			if (periodInfo.getKeyPersons() != null) {
  				keyPersonDataTypeArray = new KeyPersonDataType[periodInfo
  						.getKeyPersons().size()];
  			}
  			if (keyPersonDataTypeArray != null) {
  				int keyPersonCount = 0;
  				for (KeyPersonDto keyPerson : periodInfo.getKeyPersons()) {
  					KeyPersonDataType keyPersonDataType = KeyPersonDataType.Factory
  							.newInstance();
  					keyPersonDataType.setName(globLibV10Generator
  							.getHumanNameDataType(keyPerson));
  					if (isSponsorNIH(pdDoc) && KEYPERSON_CO_PD_PI.equals(keyPerson.getRole())) {
  						keyPersonDataType.setProjectRole(NID_PD_PI);
  					} else {
  						keyPersonDataType.setProjectRole(keyPerson.getRole());
  					}
  					keyPersonDataType
  							.setCompensation(getCompensation(keyPerson, periodInfo.getBudgetPeriod()));
  					keyPersonDataTypeArray[keyPersonCount] = keyPersonDataType;
  					keyPersonCount++;
  					LOG.info("keyPersonCount:" + keyPersonCount);
  				}
  				keyPersons.setKeyPersonArray(keyPersonDataTypeArray);
  			}
  			if (periodInfo.getTotalFundsKeyPersons() != null) {
  				keyPersons.setTotalFundForKeyPersons(periodInfo
  						.getTotalFundsKeyPersons().bigDecimalValue());
  			}
  			for (KeyPersonDto keyPerson : periodInfo.getExtraKeyPersons()) {
  				extraFunds = extraFunds.add(keyPerson.getFundsRequested());
  			}
  
  			TotalFundForAttachedKeyPersons totalFundForAttachedKeyPersons = TotalFundForAttachedKeyPersons.Factory
  					.newInstance();
  			totalFundForAttachedKeyPersons
  					.setTotalFundForAttachedKeyPersonsExist(YesNoDataType.YES);
  			totalFundForAttachedKeyPersons.setBigDecimalValue(extraFunds
  					.bigDecimalValue());
  			keyPersons
  					.setTotalFundForAttachedKeyPersons(totalFundForAttachedKeyPersons);
  			NarrativeContract narrative = saveExtraKeyPersons(periodInfo);
  			if(narrative!=null){
  				AttachedKeyPersons attachedKeyPersons = AttachedKeyPersons.Factory
  						.newInstance();
  				FileLocation fileLocation = FileLocation.Factory
  						.newInstance();
  				attachedKeyPersons.setFileLocation(fileLocation);
  				String contentId = createContentId(narrative);
  				fileLocation.setHref(contentId);
  				attachedKeyPersons.setFileLocation(fileLocation);
  				attachedKeyPersons.setFileName(narrative.getNarrativeAttachment().getName());
  				attachedKeyPersons
  						.setMimeType(InfastructureConstants.CONTENT_TYPE_OCTET_STREAM);
  				if (narrative.getNarrativeAttachment() != null) {
  					attachedKeyPersons.setHashValue(getHashValue(narrative
  							.getNarrativeAttachment()
  							.getData()));
  				}
  				AttachmentData attachmentData = new AttachmentData();
  				if (narrative.getNarrativeAttachment() != null) {
  					attachmentData.setContent(narrative
  							.getNarrativeAttachment()
  							.getData());
  				}
  				attachmentData.setContentId(contentId);
  				attachmentData
  						.setContentType(InfastructureConstants.CONTENT_TYPE_OCTET_STREAM);
  				attachmentData.setFileName(narrative.getNarrativeAttachment().getName());
  				addAttachment(attachmentData);
  				attachedKeyPersons
  						.setTotalFundForAttachedKeyPersonsExist(YesNoDataType.YES);
  				keyPersons.setAttachedKeyPersons(attachedKeyPersons);
  			}
  		}
  		return keyPersons;
  	}