diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyResponse.cs b/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyResponse.cs
index 55997ac70f..3bda8c07c4 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyResponse.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyResponse.cs
@@ -60,8 +60,6 @@ public void Then_The_Fields_Are_Mapped(GetVacancyQueryResult source, int ukprn)
actual.Wage.WageType.Should().Be((WageType)source.Vacancy.WageType);
actual.Wage.WageUnit.Should().Be((WageUnit)source.Vacancy.WageUnit);
actual.Wage.WageAdditionalInformation.Should().Be(source.Vacancy.WageText);
- actual.Wage.WageAmountLowerBound.Should().Be(source.Vacancy.WageAmountLowerBound);
- actual.Wage.WageAmountUpperBound.Should().Be(source.Vacancy.WageAmountUpperBound);
actual.Ukprn.Should().Be(ukprn);
actual.VacancyReference.Should().Be(source.Vacancy.VacancyReference.Replace("VAC", ""));
actual.ClosingDate.Should().Be(source.Vacancy.ClosingDate.AddDays(1).Subtract(TimeSpan.FromSeconds(1)));
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyWageItem.cs b/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyWageItem.cs
index 1ba29c3a2e..b6abb94e1c 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyWageItem.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api.UnitTests/Models/WhenMappingFromMediatorResponseToGetVacancyWageItem.cs
@@ -16,8 +16,6 @@ public void Then_The_Values_Are_Mapped(GetVacanciesListItem source)
actual.WageAmount.Should().Be(source.WageAmount);
actual.WageType.Should().Be((WageType)source.WageType);
actual.WageAdditionalInformation.Should().Be(source.WageText);
- actual.WageAmountUpperBound.Should().Be(source.WageAmountUpperBound);
- actual.WageAmountLowerBound.Should().Be(source.WageAmountLowerBound);
actual.WorkingWeekDescription.Should().Be(source.WorkingWeek);
}
}
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacanciesListResponse.cs b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacanciesListResponse.cs
index a5bb32734d..720391f202 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacanciesListResponse.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacanciesListResponse.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using SFA.DAS.Vacancies.Application.Vacancies.Queries;
using SFA.DAS.Vacancies.InnerApi.Responses;
@@ -27,77 +28,158 @@ public static implicit operator GetVacanciesListResponse(GetVacanciesQueryResult
}
public class GetVacanciesListResponseItem
{
- public DateTime ClosingDate { get; set; }
- public string Description { get; set; }
- public string EmployerName { get; set; }
- public decimal HoursPerWeek { get; set; }
- public bool IsDisabilityConfident { get; set; }
- public bool IsNationalVacancy { get; set; }
- public long NumberOfPositions { get; set; }
- public DateTime PostedDate { get; set; }
- public string ProviderName { get; set; }
- public DateTime StartDate { get; set; }
- public string Title { get; set; }
- public int Ukprn { get; set; }
- public string VacancyReference { get; set; }
- public string VacancyUrl { get; set; }
+ ///
+ /// The title for the apprenticeship vacancy. Will be less than or equal to 100 characters.
+ ///
+ [MaxLength(100)]
+ public string Title { get; set; }
+ ///
+ /// A short summary of the overall apprenticeship. Will be less than or equal to 350 characters.
+ ///
+ [MaxLength(350)]
+ public string Description { get; set; }
+ ///
+ /// The number of apprentices being recruited for the apprenticeship. Will be 1 or higher.
+ ///
+ public long NumberOfPositions { get; set; }
+ ///
+ /// The date the apprenticeship was added to Find an apprenticeship.
+ ///
+ /// 2019-08-24T:14:15:22Z
+ public DateTime PostedDate { get; set; }
+ ///
+ /// The last date people can apply for the apprenticeship. Will always be more than 2 weeks after the posted date.
+ ///
+ /// 2019-08-24T:14:15:22Z
+ public DateTime ClosingDate { get; set; }
+ ///
+ /// The date the company plans for the apprenticeship to start.
+ ///
+ /// 2019-08-24T:14:15:22Z
+ public DateTime StartDate { get; set; }
+ public GetVacancyWageItem Wage { get; set; }
+ ///
+ /// The total number of hours per week. This includes both work and training.
+ ///
+ public decimal HoursPerWeek { get; set; }
+ ///
+ /// How long the apprenticeship will be. Will be in months, written as a string of text.
+ ///
+ /// 21 months
+ public string ExpectedDuration { get ; set ; }
+ public GetVacancyAddressItem Address { get; set; }
+ public VacancyLocation Location { get; set; }
+ ///
+ /// If you provide a `lat` and `lon` for a location when using `GET list of vacancies` or `GET vacancy by reference number`, this will be the distance between the apprenticeship and your defined location. Will be in miles.
+ ///
+ public decimal? Distance { get ; set ; }
+ ///
+ /// The name of the company the apprentice will work at.
+ ///
+ public string EmployerName { get; set; }
+ ///
+ /// The web address for the company the apprentice will work at.
+ ///
+ public string EmployerWebsiteUrl { get ; set ; }
+ ///
+ /// A named contact a person can use to ask questions about the apprenticeship before applying. This contact can be from either the employer or training provider.
+ ///
+ public string EmployerContactName { get ; set ; }
+ ///
+ /// A phone number a person can use to ask questions about the apprenticeship before applying. This contact can be from either the employer or training provider.
+ ///
+ public string EmployerContactPhone { get ; set ; }
+ ///
+ /// An email address a person can use to ask questions about the apprenticeship before applying. This contact can be from either the employer or training provider.
+ ///
+ public string EmployerContactEmail { get ; set ; }
+ public GetVacancyCourseItem Course { get; set; }
+ ///
+ /// Whether an apprenticeship is ‘intermediate’ (level 2), ‘advanced’ (level 3), ‘higher’ (level 4 to 5) or ‘degree’ (level 6 or 7).
+ ///
+ public string ApprenticeshipLevel { get ; set ; }
+ ///
+ /// The name of the apprenticeship’s training provider.
+ ///
+ public string ProviderName { get; set; }
+ ///
+ /// The UK provider reference number (UKRPN) for the apprenticeship’s training provider.
+ ///
+ public int Ukprn { get; set; }
+ ///
+ /// Says whether the employer is part of the Department for Work and Pension’s Disability Confident scheme.
+ ///
+ public bool IsDisabilityConfident { get; set; }
+ ///
+ /// The address for the apprenticeship’s vacancy on Find an apprenticeship.
+ ///
+ public string VacancyUrl { get; set; }
+ ///
+ /// The unique reference code for the vacancy on Find an apprenticeship.
+ ///
+ public string VacancyReference { get; set; }
+ public bool IsNationalVacancy { get; set; }
- public GetVacancyCourseItem Course { get; set; }
- public GetVacancyWageItem Wage { get; set; }
- public VacancyLocation Location { get; set; }
- public GetVacancyAddressItem Address { get; set; }
- public decimal? Distance { get ; set ; }
-
- public string EmployerContactPhone { get ; set ; }
- public string EmployerContactName { get ; set ; }
- public string EmployerContactEmail { get ; set ; }
- public string EmployerWebsiteUrl { get ; set ; }
- public string ApprenticeshipLevel { get ; set ; }
- public string ExpectedDuration { get ; set ; }
-
- public static implicit operator GetVacanciesListResponseItem(GetVacanciesListItem source)
- {
- return new GetVacanciesListResponseItem
- {
- ClosingDate = source.ClosingDate.AddDays(1).Subtract(TimeSpan.FromSeconds(1)),
- Description = source.Description,
- EmployerName = source.IsEmployerAnonymous ? source.AnonymousEmployerName : source.EmployerName,
- HoursPerWeek = source.HoursPerWeek,
- IsDisabilityConfident = source.IsDisabilityConfident,
- IsNationalVacancy = source.VacancyLocationType != null && source.VacancyLocationType.Equals("National", StringComparison.CurrentCultureIgnoreCase),
- NumberOfPositions = source.NumberOfPositions,
- PostedDate = source.PostedDate,
- ProviderName = source.ProviderName,
- StartDate = source.StartDate,
- Title = source.Title,
- Ukprn = int.Parse(source.Ukprn),
- VacancyReference = source.VacancyReference.Replace("VAC",""),
- VacancyUrl = source.VacancyUrl,
- Course = source,
- Wage = source,
- Distance = source.Distance,
- Address = source,
- EmployerWebsiteUrl = source.EmployerWebsiteUrl,
- EmployerContactEmail = source.EmployerContactEmail,
- EmployerContactName = source.EmployerContactName,
- EmployerContactPhone = source.EmployerContactPhone,
- ApprenticeshipLevel = source.ApprenticeshipLevel,
- ExpectedDuration = source.ExpectedDuration,
- Location = new VacancyLocation
- {
- Lat = source.Location.Lat,
- Lon = source.Location.Lon
- }
- };
- }
+
+
+ public static implicit operator GetVacanciesListResponseItem(GetVacanciesListItem source)
+ {
+ return new GetVacanciesListResponseItem
+ {
+ ClosingDate = source.ClosingDate.AddDays(1).Subtract(TimeSpan.FromSeconds(1)),
+ Description = source.Description,
+ EmployerName = source.IsEmployerAnonymous ? source.AnonymousEmployerName : source.EmployerName,
+ HoursPerWeek = source.HoursPerWeek,
+ IsDisabilityConfident = source.IsDisabilityConfident,
+ IsNationalVacancy = source.VacancyLocationType != null && source.VacancyLocationType.Equals("National", StringComparison.CurrentCultureIgnoreCase),
+ NumberOfPositions = source.NumberOfPositions,
+ PostedDate = source.PostedDate,
+ ProviderName = source.ProviderName,
+ StartDate = source.StartDate,
+ Title = source.Title,
+ Ukprn = int.Parse(source.Ukprn),
+ VacancyReference = source.VacancyReference.Replace("VAC",""),
+ VacancyUrl = source.VacancyUrl,
+ Course = source,
+ Wage = source,
+ Distance = source.Distance,
+ Address = source,
+ EmployerWebsiteUrl = source.EmployerWebsiteUrl,
+ EmployerContactEmail = source.EmployerContactEmail,
+ EmployerContactName = source.EmployerContactName,
+ EmployerContactPhone = source.EmployerContactPhone,
+ ApprenticeshipLevel = source.ApprenticeshipLevel,
+ ExpectedDuration = source.ExpectedDuration,
+ Location = new VacancyLocation
+ {
+ Lat = source.Location.Lat,
+ Lon = source.Location.Lon
+ }
+ };
+ }
}
public class VacancyLocation
{
+ ///
+ /// The latitude of the address where the apprentice will work.
+ ///
+ /// 51.500729
public double? Lat { get; set; }
+ ///
+ /// The longitude of the address where the apprentice will work.
+ ///
+ /// -0.124625
public double? Lon { get; set; }
}
+ ///
+ /// Will be either:
+ /// - ApprenticeshipMinimum which is the National Minimum Wage for apprentices.
+ /// - NationalMinimum which is the National Minimum Wage.
+ /// - Custom which is a set salary set by the company.
+ /// - CompetitiveSalary does not set an exact wage and shows the word ‘Competitive’.
+ ///
public enum WageType
{
ApprenticeshipMinimum = 2,
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyAddressItem.cs b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyAddressItem.cs
index 43c243143a..4d565c0804 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyAddressItem.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyAddressItem.cs
@@ -4,10 +4,25 @@ namespace SFA.DAS.Vacancies.Api.Models
{
public class GetVacancyAddressItem
{
+ ///
+ /// First line of the address where the apprentice will work.
+ ///
public string AddressLine1 { get; set; }
+ ///
+ /// Second line of the address where the apprentice will work.
+ ///
public string AddressLine2 { get; set; }
+ ///
+ /// Third line of the address where the apprentice will work.
+ ///
public string AddressLine3 { get; set; }
+ ///
+ /// Fourth line of the address where the apprentice will work.
+ ///
public string AddressLine4 { get; set; }
+ ///
+ /// Postcode of the address where the apprentice will work.
+ ///
public string Postcode { get; set; }
public static implicit operator GetVacancyAddressItem(GetVacanciesListItem source)
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyCourseItem.cs b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyCourseItem.cs
index 2b13eb07fe..0f11cc9a0e 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyCourseItem.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyCourseItem.cs
@@ -4,9 +4,24 @@ namespace SFA.DAS.Vacancies.Api.Models
{
public class GetVacancyCourseItem
{
+ ///
+ /// The code from the learning aim reference service (LARS) for the apprenticeship’s training course (almost known as a ‘standard’). Use `GET list of courses` to see all courses and their LARS codes.
+ ///
public int LarsCode { get; set; }
+ ///
+ /// The title of the apprenticeship training course and its level.
+ ///
+ /// Furniture restorer (level 3)
public string Title { get; set; }
+ ///
+ /// What level the apprenticeship training course is.
+ ///
+ /// 3
public int Level { get; set; }
+ ///
+ /// Which route the apprenticeship training course is part of, using the routes from the Institute for Apprenticeships and Technical Education (IfATE). On Find an apprenticeship, we call these categories.
+ ///
+ /// Creative and design
public string Route { get; set; }
public static implicit operator GetVacancyCourseItem (GetVacanciesListItem source)
{
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyResponse.cs b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyResponse.cs
index c13944bc5d..40ac366dda 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyResponse.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyResponse.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using SFA.DAS.Vacancies.Application.Vacancies.Queries;
@@ -7,15 +8,28 @@ namespace SFA.DAS.Vacancies.Api.Models
{
public class GetVacancyResponse : GetVacanciesListResponseItem
{
+ ///
+ /// A description of the company the apprentice will work at. Will be less than or equal to 4000 characters.
+ ///
+ [MaxLength(4000)]
+ public string EmployerDescription { get; set; }
+ ///
+ /// The apprenticeship’s training plan, including where and when training will take place.
+ ///
public string TrainingDescription { get ; set ; }
- public string FullDescription { get ; set ; }
+ ///
+ /// Additional information about the training, such as details about the provider.
+ ///
+ public string AdditionalTrainingDescription { get; set; }
+ ///
+ /// What progress or outcome the apprentice can expect at the end of the apprenticeship.
+ ///
public string OutcomeDescription { get ; set ; }
- public string EmployerDescription { get; set; }
+ public string FullDescription { get ; set ; }
public List Skills { get ; set ; }
public List Qualifications { get ; set ; }
public string ThingsToConsider { get; set; }
public string CompanyBenefitsInformation { get; set; }
- public string AdditionalTrainingDescription { get; set; }
public static implicit operator GetVacancyResponse(GetVacancyQueryResult source)
{
diff --git a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyWageItem.cs b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyWageItem.cs
index 73ea5615f7..d43a114b2e 100644
--- a/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyWageItem.cs
+++ b/src/Vacancies/SFA.DAS.Vacancies.Api/Models/GetVacancyWageItem.cs
@@ -1,16 +1,26 @@
using SFA.DAS.Vacancies.InnerApi.Responses;
+using System.ComponentModel.DataAnnotations;
namespace SFA.DAS.Vacancies.Api.Models
{
public class GetVacancyWageItem
{
+ public WageType WageType { get; set; }
+ ///
+ /// If `wageType` is `Custom`, this will be the set annual wage for the apprenticeship.
+ ///
public decimal? WageAmount { get; set; }
- public decimal? WageAmountLowerBound { get; set; }
- public decimal? WageAmountUpperBound { get; set; }
+ public WageUnit WageUnit { get; set; }
+ ///
+ /// Additional information about pay, such as when the apprentice might get a pay rise. Will be less than or equal to 250 characters.
+ ///
+ [MaxLength(250)]
public string WageAdditionalInformation { get; set; }
- public WageType WageType { get; set; }
+ ///
+ /// Information about the working schedule, such as daily working hours. Will be less than or equal to 250 characters.
+ ///
+ [MaxLength(250)]
public string WorkingWeekDescription { get; set; }
- public WageUnit WageUnit { get; set; }
public static implicit operator GetVacancyWageItem(GetVacanciesListItem source)
{
@@ -20,8 +30,6 @@ public static implicit operator GetVacancyWageItem(GetVacanciesListItem source)
WageType = source.WageType == 0 ? WageType.Custom : (WageType)source.WageType,
WageAdditionalInformation = source.WageText,
WorkingWeekDescription = source.WorkingWeek,
- WageAmountLowerBound = source.WageAmountLowerBound,
- WageAmountUpperBound = source.WageAmountUpperBound,
WageUnit = (WageUnit)source.WageUnit
};
}
diff --git a/src/VacanciesManage/SFA.DAS.VacanciesManage.Api/Models/CreateVacancyRequest.cs b/src/VacanciesManage/SFA.DAS.VacanciesManage.Api/Models/CreateVacancyRequest.cs
index e1c10089e8..75d4c8caef 100644
--- a/src/VacanciesManage/SFA.DAS.VacanciesManage.Api/Models/CreateVacancyRequest.cs
+++ b/src/VacanciesManage/SFA.DAS.VacanciesManage.Api/Models/CreateVacancyRequest.cs
@@ -52,133 +52,159 @@ public static implicit operator PostVacancyRequestData(CreateVacancyRequest sour
}
///
- /// Contact details to be used if the ESFA needs to get in touch about your advert.
+ /// The title for the apprenticeship vacancy on Find an apprenticeship. Must include: apprentice or apprenticeship.
///
- [JsonPropertyName("submitterContactDetails")]
+ /// Library assistant apprenticeship
+ [JsonPropertyName("title")]
[Required]
- public SubmitterContactDetails SubmitterContactDetails { get ; set ; }
+ [MaxLength(100)]
+ public string Title { get ; set ; }
///
- /// The Training Provider and Account Legal Entity where the vacancy is. If creating as a training provider the UKPRN will not be editable.
+ /// The number of apprentices being recruited for the apprenticeship.
///
- [JsonPropertyName("contractingParties")]
+ [JsonPropertyName("numberOfPositions")]
[Required]
- public ContractingParties ContractingParties { get ; set ; }
+ public int NumberOfPositions { get; set; }
///
- /// The name of the vacancy or job role being advertised. Must contain the word apprentice or apprenticeship and be less than 100 characters.
+ /// The last date people can apply for the apprenticeship. Must be at least 2 weeks in the future.
///
- /// Apprenticeship in Advanced Baking
- [JsonPropertyName("title")]
+ /// 2019-08-24T:14:15:22Z
+ [JsonPropertyName("closingDate")]
[Required]
- public string Title { get ; set ; }
+ public DateTime ClosingDate { get; set; }
///
- /// What activities and duties will the apprentice be undertaking during the apprenticeship. Must not exceed 4000 characters
+ /// The planned date for the apprenticeship’s start. We suggest using a date 2 weeks after the closing date.
///
- [JsonPropertyName("description")]
+ /// 2019-08-24T:14:15:22Z
+ [JsonPropertyName("startDate")]
[Required]
- public string Description { get ; set ; }
+ public DateTime StartDate { get; set; }
///
- /// The LARS code associated with the Standard you wish to create the advert for. This can be found from `GET referencedata/courses`
+ /// The Training Provider and Account Legal Entity where the vacancy is. If creating as a training provider the UKPRN will not be editable.
///
- /// 119
- [JsonPropertyName("standardLarsCode")]
+ [JsonPropertyName("contractingParties")]
[Required]
- public string ProgrammeId { get ; set ; }
+ public ContractingParties ContractingParties { get ; set ; }
+
+ [JsonPropertyName("wage")]
+ [Required]
+ public CreateVacancyWage Wage { get; set; }
///
- /// If `EmployerNameOption` is set to `TradingName` then will be used and Trading name in the application updated. If it is set to `Anonymous` then will be used for the anonymous employer name. If it is set to `RegisteredName` then the Account Legal Entity name will be used. Must not exceed 100 characters
+ /// Where the apprenticeship will be based, this could be a different location to the organisation address. Use the place the apprentice will spend most of their time.
///
- [JsonPropertyName("alternativeEmployerName")]
- public string EmployerName { get ; set ; }
+ [JsonPropertyName("address")]
+ public CreateVacancyAddress Address { get; set; }
///
- /// A short description of the apprenticeship. Must not exceed 350 characters
+ /// A short summary of the overall apprenticeship. This appears at the top of the vacancy on Find an apprenticeship.
///
[JsonPropertyName("shortDescription")]
+ [MaxLength(350)]
[Required]
public string ShortDescription { get ; set ; }
///
- /// The number of apprentices that will be recruited into the role. Add as a numerical value, must be at least 1.
+ /// What the apprentice will do at work. We suggest including day-to-day duties. Must include at least 3 bullet points (written in HTML).
///
- [JsonPropertyName("numberOfPositions")]
+ /// Your daily tasks could include: - working within a team to deliver a menu of high-quality food each service
- prepare food in a way that meets food hygiene standards
- storing food correctly
+ [JsonPropertyName("description")]
+ [MaxLength(4000)]
[Required]
- public int NumberOfPositions { get ; set ; }
+ public string Description { get ; set ; }
///
- /// What an apprentice can expect in terms of career progression after the apprenticeship ends. You may want to mention specific routes they could take once qualified. Must not exceed 4000 characters
+ /// What progression or outcome the apprentice can expect at the end of the apprenticeship.
///
[JsonPropertyName("outcomeDescription")]
+ [MaxLength(4000)]
[Required]
public string OutcomeDescription { get ; set ; }
///
- /// The last date for receiving new applications. This must be before the start date of the apprenticeship. Must be a valid date. Closing date for applications cannot be today or earlier.
+ /// Where and when an apprentice’s training will take place. Don’t include any other information about the training here.
+ /// If you submit an advert without providing this field, we’ll display a message on Find an apprenticeship saying that the training schedule hasn’t been agreed yet.
///
- [JsonPropertyName("closingDate")]
+ /// One day per week, in-person at college
+ [JsonPropertyName("trainingDescription")]
+ [MaxLength(4000)]
[Required]
- public DateTime ClosingDate { get ; set ; }
+ public string TrainingDescription { get ; set ; }
///
- /// The planned start date of the apprenticeship. This must be after the closing date. Must be a valid date. Possible apprenticeship start date can't be today or earlier. We advise using a date more than two weeks from now.
+ /// Further information about an apprentice’s training, such as details about the training provider or how the course will be structured.
///
- [JsonPropertyName("startDate")]
+ /// You’ll have an apprenticeship advisor who will support you through your apprenticeship.
+ [JsonPropertyName("additionalTrainingDescription")]
+ [MaxLength(4000)]
+ public string AdditionalTrainingDescription { get; set; }
+ ///
+ /// The code from the learning aim reference service (LARS) for the apprenticeship’s training course (also known as a ‘standard’). See all codes using `GET referencedata/courses`.
+ ///
+ /// 119
+ [JsonPropertyName("standardLarsCode")]
[Required]
- public DateTime StartDate { get ; set ; }
+ public string ProgrammeId { get ; set ; }
+ ///
+ /// Select if you do not wish your company name to be listed on the advert. This could mean fewer people view your advert.
+ ///
+ [JsonPropertyName("employerNameOption")]
+ public EmployerNameOption EmployerNameOption { get ; set ; }
///
- /// A brief description about the employer. Must not exceed 4000 characters
+ /// When `employerNameOption` is set to `tradingName`, use this field to set the company’s name yourself with the correct formatting.
///
+ [JsonPropertyName("alternativeEmployerName")]
+ [MaxLength(100)]
+ public string EmployerName { get ; set ; }
+ ///
+ /// When `employerNameOption` is set to `anonymousName`, give a brief description of the company to help people understand what they do.
+ ///
+ /// Car manufacturer or clothes retailer
[JsonPropertyName("employerDescription")]
+ [MaxLength (100)]
[Required]
public string EmployerDescription { get ; set ; }
///
- /// The training the apprentice will undertake and the qualification they will get at the end of the apprenticeship. Add any certifications and levels of qualifications. Must not exceed 4000 characters.
+ /// When `employerNameOption` is set to `anonymousName`, tell us why you need to hide the company's name.
+ /// This will not appear on Find an apprenticeship but is needed for our quality assurance team to approve your vacancy.
///
- [JsonPropertyName("trainingDescription")]
- [Required]
- public string TrainingDescription { get ; set ; }
+ [JsonPropertyName("anonymousReason")]
+ [MaxLength(200)]
+ public string AnonymousReason { get ; set ; }
///
- /// Further information about an apprentice’s training, such as details about the training provider or how the course will be structured. Must not exceed 4000 characters.
+ /// The web address for the employer’s website.
///
- [JsonPropertyName("additionalTrainingDescription")]
- public string AdditionalTrainingDescription { get; set; }
+ [JsonPropertyName("employerWebsiteUrl")]
+ public string EmployerWebsiteUrl { get; set; }
///
- /// Where the apprenticeship will be based, this could be a different location to the organisation address. Use the place the apprentice will spend most of their time.
+ /// Are you registered as a Disability Confident employer?
///
- [JsonPropertyName("address")]
- public CreateVacancyAddress Address { get; set; }
- [JsonPropertyName("wage")]
+ [JsonPropertyName("disabilityConfident")]
[Required]
- public CreateVacancyWage Wage { get; set; }
+ public CreateVacancyDisabilityConfident DisabilityConfident { get ; set ; }
+
+ [JsonPropertyName("submitterContactDetails")]
+ [Required]
+ public SubmitterContactDetails SubmitterContactDetails { get ; set ; }
+
///
- /// Add the desired skills and personal qualities you’d like the applicant to have in order for you to consider them. There is a selection available from `GET referencedata/skills` or you can add your own. You must include at least one desired skill
+ /// Skills and qualities an apprentice should have for this apprenticeship. We’ll show this on the vacancy.
+ /// If `applicationMethod` is `ThroughFindAnApprenticeship`, we’ll also ask applicants for examples of when they’ve used these skills.
+ /// Use `GET referencedata/skills` to see our default selection of skills or add your own.
///
[JsonPropertyName("skills")]
[Required]
public List Skills { get ; set ; }
///
- /// Select if you do not wish your company name to be listed on the advert. This could mean fewer people view your advert.
- ///
- [JsonPropertyName("employerNameOption")]
- public EmployerNameOption EmployerNameOption { get ; set ; }
- ///
- /// Provide the reason why the organisation would like to remain anonymous if chosen for . The reason must not be more than 4000 characters
- ///
- [JsonPropertyName("anonymousReason")]
- public string AnonymousReason { get ; set ; }
- ///
/// Qualifications obtained from `GET referendata/qualifications`. You must supply at least one qualification required.
///
[JsonPropertyName("qualifications")]
[Required]
public List Qualifications { get; set; }
///
- /// Information for applicants about how their applications will be managed externally.
+ /// Other requirements for the applicant, such as needing a Disclosure and Barring Service (DBS) check.
///
- [JsonPropertyName("applicationInstructions")]
- public string ApplicationInstructions { get ; set ; }
- ///
- /// If they are being managed externally, add the web address of the employer/agency managing the applications.
- ///
- [JsonPropertyName("applicationUrl")]
- public string ApplicationUrl { get ; set ; }
+ [JsonPropertyName("thingsToConsider")]
+ [MaxLength(4000)]
+ public string ThingsToConsider { get ; set ; }
///
/// Select how the applications will be managed. This is either through Find an apprenticeship or an external site. If external `ApplicationUrl` must be set
///
@@ -186,36 +212,34 @@ public static implicit operator PostVacancyRequestData(CreateVacancyRequest sour
[Required]
public CreateVacancyApplicationMethod ApplicationMethod { get ; set ; }
///
- /// Are you registered as a Disability Confident employer?
+ /// If `applicationMethod` is `throughExternalSite`, you can give some information about the application process.
///
- [JsonPropertyName("disabilityConfident")]
- [Required]
- public CreateVacancyDisabilityConfident DisabilityConfident { get ; set ; }
- ///
- /// Any other information the applicant should be aware of. Must not exceed 4000 characters
- ///
- [JsonPropertyName("thingsToConsider")]
- public string ThingsToConsider { get ; set ; }
+ [JsonPropertyName("applicationInstructions")]
+ public string ApplicationInstructions { get ; set ; }
///
- /// You can choose to display website for your organisation. Website address must be a valid URL.
+ /// If `applicationMethod` is `throughExternalSite`, provide the web address for your application website.
///
- [JsonPropertyName("employerWebsiteUrl")]
- public string EmployerWebsiteUrl { get; set; }
-
+ [JsonPropertyName("applicationUrl")]
+ public string ApplicationUrl { get ; set ; }
///
- /// Add an extra question to the advert’s application form on Find an apprenticeship. Must include a question mark. Must not exceed 250 characters.
+ /// If `applicationMethod` is `throughFindAnApprenticeship`, you can add questions for us to add to the application form.
+ /// Note that we automatically ask all applicants ‘What are your skills and strengths?’ and ‘What interests you about this apprenticeship?’
///
/// Do you have a driving licence?
[JsonPropertyName("additionalQuestion1")]
+ [MaxLength(250)]
+ [RegularExpression(@"^\w(.*)\w\?(\s\w(.*)\w[\.\?])*$", ErrorMessage = "Must include '?'")]
public string AdditionalQuestion1 { get; set; }
-
///
- /// Adds another extra question to the advert’s application form on Find an apprenticeship. Must include a question mark. Must not exceed 250 characters.
+ /// If `applicationMethod` is `throughFindAnApprenticeship`, add another question to the application form.
///
- /// What interests you about this industry?
+ /// What is your interest in this industry?
[JsonPropertyName("additionalQuestion2")]
+ [MaxLength(250)]
+ [RegularExpression(@"^\w(.*)\w\?(\s\w(.*)\w[\.\?])*$", ErrorMessage = "Must include '?'")]
public string AdditionalQuestion2 { get; set; }
+
public static PostVacancyUserData Map(SubmitterContactDetails submitterContactDetails, ContractingParties contractingParties)
{
return new PostVacancyUserData
@@ -245,28 +269,28 @@ public static implicit operator PostVacancyAddressData(CreateVacancyAddress sour
};
}
///
- /// Address line 1
+ /// First line of the address where the apprentice will work.
///
[JsonPropertyName("addressLine1")]
[Required]
public string AddressLine1 { get; set; }
///
- /// Address line 2
+ /// Second line of the address where the apprentice will work.
///
[JsonPropertyName("addressLine2")]
public string AddressLine2 { get; set; }
///
- /// Address line 3
+ /// Third line of the address where the apprentice will work.
///
[JsonPropertyName("addressLine3")]
public string AddressLine3 { get; set; }
///
- /// Address line 4
+ /// Fourth line of the address where the apprentice will work.
///
[JsonPropertyName("addressLine4")]
public string AddressLine4 { get; set; }
///
- /// Postcode
+ /// Postcode of the address where the apprentice will work.
///
[JsonPropertyName("postcode")]
[Required]
@@ -293,50 +317,57 @@ public static implicit operator PostCreateVacancyWageData(CreateVacancyWage sour
CompanyBenefitsInformation = source.CompanyBenefitsInformation,
};
}
+
+ [JsonPropertyName("wageType")]
+ [Required]
+ public WageType WageType { get; set; }
+
///
- /// Extra information about pay. 250 character limit
+ /// If `WageType` is `FixedWage`, enter the yearly amount the apprentice will earn.
+ ///
+ /// 25000
+ [JsonPropertyName("fixedWageYearlyAmount")]
+ public decimal? FixedWageYearlyAmount { get ; set ; }
+ ///
+ /// Additional information about pay, such as when the apprentice might get a pay rise.
///
[JsonPropertyName("wageAdditionalInformation")]
+ [MaxLength(250)]
public string WageAdditionalInformation { get ; set ; }
///
- /// If `WageType.FixedWage` then enter the yearly amount.
+ /// Describe benefits the company offers.
///
- [JsonPropertyName("fixedWageYearlyAmount")]
- public decimal? FixedWageYearlyAmount { get ; set ; }
+ [JsonPropertyName("CompanyBenefitsInformation")]
+ [MaxLength(250)]
+ public string CompanyBenefitsInformation { get; set; }
///
- /// The total number of hours per week. This must include the 20% of time the apprentice will spend training, which could be offsite. Needs to be greater than 16 and less than 48.
+ /// The total number of hours per week. This includes both work and training.
///
[JsonPropertyName("weeklyHours")]
+ [Length(16, 48, ErrorMessage = "Needs to be between 16 and 48 hours.")]
[Required]
public decimal WeeklyHours { get ; set ; }
///
- /// Expected duration must be at least 12 months. The minimum duration of each apprenticeship is based on the apprentice working at least 30 hours a week, including any off-the-job training they undertake.
- /// Extend the minimum duration when the working week is fewer than 30 hours using the following formula:
- /// 12 x 30/average weekly hours = new minimum duration in months; or 52 x 30/average weekly hours = new minimum duration in weeks
- ///
- [JsonPropertyName("duration")]
- [Required]
- public int Duration { get ; set ; }
- ///
- /// A short description of the pattern of working hours over the week. Start time, end time and working days. You have up to 250 characters
+ /// Information about the working schedule, such as daily working hours.
///
[JsonPropertyName("workingWeekDescription")]
+ [MaxLength(250)]
[Required]
public string WorkingWeekDescription { get ; set ; }
- [JsonPropertyName("wageType")]
+ ///
+ /// How long the apprenticeship will be. Use duration to set a number, and then `durationUnit` to say whether it’s months or years. Apprenticeships must be longer than a year.
+ ///
+ /// 18
+ [JsonPropertyName("duration")]
[Required]
- public WageType WageType { get; set; }
+ public int Duration { get ; set ; }
+
///
/// Used with for duration in months or years
///
[JsonPropertyName("durationUnit")]
[Required]
public DurationUnit DurationUnit { get; set; }
- ///
- /// Describe benefits your company offers. Must not exceed 250 characters.
- ///
- [JsonPropertyName("CompanyBenefitsInformation")]
- public string CompanyBenefitsInformation { get; set; }
}
public class CreateVacancyQualification
@@ -355,18 +386,27 @@ public static implicit operator PostCreateVacancyQualificationData(CreateVacancy
};
}
///
- /// Qualification Type can be obtained from `GET referencedata/qualifications`
+ /// The type of qualification you want. Use `GET referencedata/qualifications` to see what qualification types you can use.
///
[JsonPropertyName("qualificationType")]
public string QualificationType { get; set; }
///
- /// Add a subject you would like the applicant to have.
+ /// If `qualificationType` is `BTEC`, you must tell us what level of BTEC you’re looking for.
+ ///
+ /// 7
+ [JsonPropertyName("level")]
+ [AllowedValues(1,2,3,4,5,6,7)]
+ [Required]
+ public int Level { get; set; }
+ ///
+ /// The name of the subject for the qualification.
///
[JsonPropertyName("subject")]
public string Subject { get; set; }
///
- /// Enter the grade. GCSEs must be in number format 1-9
+ /// The grade for the qualification. GCSEs must include the 1 to 9 grading system.
///
+ /// C or 4
[JsonPropertyName("grade")]
public string Grade { get; set; }
///
@@ -374,48 +414,57 @@ public static implicit operator PostCreateVacancyQualificationData(CreateVacancy
///
[JsonPropertyName("weighting")]
public QualificationWeighting Weighting { get; set; }
- ///
- /// If qualificationType is BTEC, you must tell us what level of BTEC you’re looking for.
- ///
- [JsonPropertyName("level")]
- public int? Level { get; set; }
}
public class SubmitterContactDetails
{
///
- /// The name of the person creating the advert
+ /// The name of a contact who applicants can contact to discuss the apprenticeship.
///
+ [JsonPropertyName("name")]
+ [Required]
public string Name { get; set; }
///
- /// The email address of the person creating the advert
+ /// The contact's email address.
///
+ [JsonPropertyName("email")]
+ [Required]
public string Email { get; set; }
///
- /// The phone number of the person creating the advert
+ /// The contact's phone number.
///
+ [JsonPropertyName("phone")]
+ [Required]
public string Phone { get; set; }
}
public class ContractingParties
{
///
- /// The UKPRN of the training provider you will be working with for this apprenticeship.
- ///
- [JsonPropertyName("ukprn")]
- public int Ukprn { get; set; }
- ///
- /// The Account Legal Entity public hashed Id of the organisation that you wish to create the vacancy for. This can be obtained from `GET accountlegalentites`
+ /// The unique identification number for the apprentice’s employer. Use `GET accountlegalentites` to obtain the hashed ID for the employer.
///
[Required]
public string AccountLegalEntityPublicHashedId { get; set; }
+ ///
+ /// The UK provider reference number (UKPRN) for the apprenticeship’s training provider.
+ ///
+ [JsonPropertyName("ukprn")]
+ public int Ukprn { get; set; }
}
-
+
+ ///
+ /// How much you want an application to have the qualification.
+ ///
public enum QualificationWeighting
{
Essential,
Desired
}
+ ///
+ /// Choose from:
+ /// - `throughFindAnApprenticeship` lets applicants apply through Find an apprenticeship.
+ /// - `throughExternalApplicationSite` means you’ll use your own website to accept applications.
+ ///
public enum CreateVacancyApplicationMethod
{
ThroughFindAnApprenticeship,
@@ -424,33 +473,46 @@ public enum CreateVacancyApplicationMethod
///
/// Choose from:
- /// `WageType.FixedWage` Allows you to set a wage, but wage must be more than the [National Minimum Wage for apprentices](https://www.gov.uk/national-minimum-wage-rates) for your advert’s closing date.
- /// `WageType.NationalMinimumWageForApprentices` Sets the wage to the correct [National Minimum Wage for apprentices](https://www.gov.uk/national-minimum-wage-rates) for your advert’s closing date.
- /// `WageType.NationalMinimumWage` Sets the wage to the correct [National Minimum Wage](https://www.gov.uk/national-minimum-wage-rates) for your advert’s closing date.
- /// Note that the National Minimum Wage and National Minimum Wage for apprentices change every 1 April.
+ /// `WageType.NationalMinimumWageForApprentices` sets the wage to the National Minimum Wage for apprentices
+ /// `WageType.NationalMinimumWage` sets the wage to the National Minimum Wage
+ /// `WageType.FixedWage` lets you set a fixed wage for the apprenticeship
+ /// `WageType.CompetitiveSalary` does not set an exact wage and shows the word ‘Competitive’
+ /// National Minimum Wages will change every year on 1 April. We automatically update adverts to the correct National Minimum Wages.
///
+ /// fixedWage
public enum WageType
{
FixedWage,
NationalMinimumWageForApprentices,
- NationalMinimumWage
+ NationalMinimumWage,
+ CompetitiveSalary
}
///
- /// Used in combination with `Wage.Duration` to specify the length of the apprenticeship.
+ /// Set the unit of time for `duration`.
///
public enum DurationUnit
{
Month,
Year
}
-
+ ///
+ /// Choose how the employer’s company name appears on Find an apprenticeship. Choose from:
+ /// `registeredName` uses company’s name from the Companies House database (normally in all caps).
+ /// `tradingName` lets you set the company’s name yourself, using `alternativeEmployerName` to correctly format the name.
+ /// `anonymous` hides the company’s name on the vacancy. Note you’ll need to provide `employerDescription` and `anonymousReason`
+ ///
public enum EmployerNameOption
{
RegisteredName,
TradingName,
Anonymous
}
+ ///
+ /// Say whether the employer is part of the Department for Work and Pension’s Disability Confident scheme. If Yes:
+ /// - we’ll show a Disability Confident logo on the vacancy
+ /// - If `applicationMethod` is `throughFindAnApprenticeship`, we'll ask applicants whether they want to apply through the Disability Confident scheme.
+ ///
public enum CreateVacancyDisabilityConfident
{
No = 0,