@RequestMapping(value = "/transcript/full", method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_PERSON_READ)
  public @ResponseBody ExternalStudentRecordsTO loadFullStudentRecords(final @PathVariable UUID id)
      throws ObjectNotFoundException {
    String schoolId = getStudentId(id);

    final ExternalStudentRecords record = new ExternalStudentRecords();

    record.setPrograms(
        externalStudentAcademicProgramService.getAcademicProgramsBySchoolId(schoolId));
    record.setGPA(externalStudentTranscriptService.getRecordsBySchoolId(schoolId));
    record.setFinancialAid(
        externalStudentFinancialAidService.getStudentFinancialAidBySchoolId(schoolId));
    record.setTerms(externalStudentTranscriptCourseService.getTranscriptsBySchoolId(schoolId));
    record.setFinancialAidAcceptedTerms(
        externalStudentFinancialAidAwardTermService.getStudentFinancialAidAwardsBySchoolId(
            schoolId));
    record.setFinancialAidFiles(
        externalStudentFinancialAidFileService.getStudentFinancialAidFilesBySchoolId(schoolId));
    record.setNonCourseEntities(
        externalStudentTranscriptNonCourseEntityService.getNonCourseTranscriptsBySchoolId(
            schoolId));
    ExternalStudentRecordsTO recordTO =
        new ExternalStudentRecordsTO(record, getBalancedOwed(id, schoolId));

    // update the course faculty names
    updateFactultyNames(recordTO);

    return recordTO;
  }
  @RequestMapping(value = "/financialaid/summary", method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_PERSON_READ)
  public @ResponseBody ExternalStudentFinancialAidTO loadFinancialAidSummary(
      final @PathVariable UUID id) throws ObjectNotFoundException {
    String schoolId = getStudentId(id);

    ExternalStudentFinancialAid record =
        externalStudentFinancialAidService.getStudentFinancialAidBySchoolId(schoolId);

    if (record != null) {
      return externalStudentFinancialAidTOFactory.from(record);
    } else {
      return new ExternalStudentFinancialAidTO();
    }
  }
  /**
   * Using the Student UUID passed, return the ExternalStudentRecordsLiteTO in its current state,
   * creating it if necessary.
   *
   * @param id Student identifier Any errors will throw this generic exception.
   * @return Service response with success value, in the JSON format.
   * @throws ObjectNotFoundException If any reference data could not be loaded.
   */
  @RequestMapping(value = "/transcript/summary", method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_PERSON_READ)
  public @ResponseBody ExternalStudentRecordsLiteTO loadSummaryStudentRecords(
      final @PathVariable UUID id) throws ObjectNotFoundException {
    String schoolId = getStudentId(id);
    final ExternalStudentRecordsLite record = new ExternalStudentRecordsLite();

    record.setPrograms(
        externalStudentAcademicProgramService.getAcademicProgramsBySchoolId(schoolId));
    record.setGPA(externalStudentTranscriptService.getRecordsBySchoolId(schoolId));
    record.setFinancialAid(
        externalStudentFinancialAidService.getStudentFinancialAidBySchoolId(schoolId));
    record.setFinancialAidAcceptedTerms(
        externalStudentFinancialAidAwardTermService.getStudentFinancialAidAwardsBySchoolId(
            schoolId));
    record.setFinancialAidFiles(
        externalStudentFinancialAidFileService.getStudentFinancialAidFilesBySchoolId(schoolId));
    ExternalStudentRecordsLiteTO recordTO =
        new ExternalStudentRecordsLiteTO(record, getBalancedOwed(id, schoolId));

    return recordTO;
  }