private static PaymentSchedule parsePaymentSchedule(CsvRow row, String leg, Frequency accrualFrequency) {
PaymentSchedule.Builder builder = PaymentSchedule.builder();
builder.paymentFrequency(findValue(row, leg, PAYMENT_FREQUENCY_FIELD)
.map(s -> Frequency.parse(s))
.orElse(accrualFrequency));
Optional<DaysAdjustment> offsetOpt = parseDaysAdjustment(
row,
leg,
PAYMENT_OFFSET_DAYS_FIELD,
PAYMENT_OFFSET_CAL_FIELD,
PAYMENT_OFFSET_ADJ_CNV_FIELD,
PAYMENT_OFFSET_ADJ_CAL_FIELD);
builder.paymentDateOffset(offsetOpt.orElse(DaysAdjustment.NONE));
findValue(row, leg, PAYMENT_RELATIVE_TO_FIELD)
.map(s -> PaymentRelativeTo.of(s))
.ifPresent(v -> builder.paymentRelativeTo(v));
findValue(row, leg, COMPOUNDING_METHOD_FIELD)
.map(s -> CompoundingMethod.of(s))
.ifPresent(v -> builder.compoundingMethod(v));
findValue(row, leg, PAYMENT_FIRST_REGULAR_START_DATE_FIELD)
.map(s -> LoaderUtils.parseDate(s))
.ifPresent(v -> builder.firstRegularStartDate(v));
findValue(row, leg, PAYMENT_LAST_REGULAR_END_DATE_FIELD)
.map(s -> LoaderUtils.parseDate(s))
.ifPresent(v -> builder.lastRegularEndDate(v));
return builder.build();
}