From 3128b2a1181bae7f3ae9b3e163a776d6107e928d Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Tue, 13 Oct 2026 11:19:38 +0100 Subject: [PATCH 01/11] Feat: Airbyte review deployment Feat: Airbyte review deployment Feat: Airbyte review deployment --- .github/workflows/build-and-deploy.yml | 7 ++++ .github/workflows/delete-review-app.yml | 7 ++++ terraform/application/airbyte.tf | 51 +++++++++++++++++++++++++ terraform/application/database.tf | 2 +- terraform/application/dfe_analytics.tf | 8 ++-- terraform/application/terraform.tf | 13 ++++++- terraform/application/variables.tf | 23 ++++++++++- 7 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 terraform/application/airbyte.tf diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 60e2a6a7f..478ae87ff 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -245,6 +245,13 @@ jobs: pull-requests: write steps: + - name: Set Airbyte + if: (contains(github.event.pull_request.labels.*.name, 'airbyte')) + run: | + echo "TF_VAR_pg_airbyte_enabled=true" >> $GITHUB_ENV + echo "TF_VAR_airbyte_enabled=true" >> $GITHUB_ENV + echo "TF_VAR_connection_status=active" >> $GITHUB_ENV + - name: Deploy App to Review id: deploy_review uses: DFE-Digital/github-actions/deploy-to-aks@master diff --git a/.github/workflows/delete-review-app.yml b/.github/workflows/delete-review-app.yml index 350b2a321..678a49495 100644 --- a/.github/workflows/delete-review-app.yml +++ b/.github/workflows/delete-review-app.yml @@ -45,6 +45,13 @@ jobs: echo "AZURE_RESOURCE_PREFIX=${AZURE_RESOURCE_PREFIX}" >> $GITHUB_ENV echo "CONFIG_SHORT=${CONFIG_SHORT}" >> $GITHUB_ENV + - name: Set Airbyte + if: (contains(github.event.pull_request.labels.*.name, 'airbyte')) + run: | + echo "TF_VAR_pg_airbyte_enabled=true" >> $GITHUB_ENV + echo "TF_VAR_airbyte_enabled=true" >> $GITHUB_ENV + echo "TF_VAR_connection_status=active" >> $GITHUB_ENV + - name: Delete Review App id: delete-review-app uses: DFE-Digital/github-actions/delete-review-app@master diff --git a/terraform/application/airbyte.tf b/terraform/application/airbyte.tf new file mode 100644 index 000000000..247f79fb9 --- /dev/null +++ b/terraform/application/airbyte.tf @@ -0,0 +1,51 @@ +module "airbyte" { + source = "./vendor/modules/aks//aks/airbyte" + + count = var.airbyte_enabled ? 1 : 0 + + environment = var.environment + azure_resource_prefix = var.azure_resource_prefix + service_short = var.service_short + service_name = var.service_name + docker_image = var.docker_image + postgres_version = var.server_version + postgres_url = module.postgres.url + + host_name = module.postgres.host + database_name = module.postgres.name + workspace_id = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-WORKSPACE-ID : null + client_id = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-CLIENT-ID : null + client_secret = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-CLIENT-SECRET : null + repl_password = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-REPLICATION-PASSWORD : null + server_url = "https://airbyte-${var.namespace}.${module.cluster_data.ingress_domain}" + connection_status = var.connection_status + + cluster = var.cluster + namespace = var.namespace + gcp_taxonomy_id = local.gcp_taxonomy_id + gcp_policy_tag_id = local.gcp_policy_tag_id + gcp_keyring = local.gcp_keyring + gcp_key = local.gcp_key + + + config_map_ref = module.application_configuration.kubernetes_config_map_name + secret_ref = module.application_configuration.kubernetes_secret_name + cpu = module.cluster_data.configuration_map.cpu_min + + use_azure = var.deploy_azure_backing_services + gcp_bq_sa = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-BQ-SA : null +} + +## Airbyte module variables + +variable "airbyte_enabled" { default = false } + +variable "connection_status" { + type = string + default = "inactive" + description = "Connection status, either active or inactive" +} + +locals { + gcp_dataset_name = replace("${var.service_short}_airbyte_${var.environment}", "-", "_") +} diff --git a/terraform/application/database.tf b/terraform/application/database.tf index aafd938ac..f309c9dbb 100644 --- a/terraform/application/database.tf +++ b/terraform/application/database.tf @@ -14,6 +14,6 @@ module "postgres" { azure_maintenance_window = var.azure_maintenance_window azure_enable_high_availability = var.enable_postgres_high_availability azure_sku_name = var.postgres_flexible_server_sku - server_version = "17" + server_version = var.server_version use_airbyte = var.pg_airbyte_enabled } diff --git a/terraform/application/dfe_analytics.tf b/terraform/application/dfe_analytics.tf index 505c97f30..a80b05172 100644 --- a/terraform/application/dfe_analytics.tf +++ b/terraform/application/dfe_analytics.tf @@ -11,10 +11,10 @@ module "dfe_analytics" { namespace = var.namespace service_short = var.service_short environment = var.environment - gcp_keyring = "cypd-key-ring" - gcp_key = "cypd-key" - gcp_taxonomy_id = "7450003253557751837" - gcp_policy_tag_id = "7087412595261736586" + gcp_taxonomy_id = local.gcp_taxonomy_id + gcp_policy_tag_id = local.gcp_policy_tag_id + gcp_keyring = local.gcp_keyring + gcp_key = local.gcp_key gcp_table_deletion_protection = var.gcp_table_deletion_protection } diff --git a/terraform/application/terraform.tf b/terraform/application/terraform.tf index 27169a0e6..d2dd84234 100644 --- a/terraform/application/terraform.tf +++ b/terraform/application/terraform.tf @@ -13,6 +13,10 @@ terraform { source = "StatusCakeDev/statuscake" version = "2.2.2" } + airbyte = { + source = "airbytehq/airbyte" + version = "0.10.0" + } } backend "azurerm" { container_name = "terraform-state" @@ -38,4 +42,11 @@ provider "kubernetes" { provider "statuscake" { api_token = module.infrastructure_secrets.map.STATUSCAKE-API-TOKEN -} \ No newline at end of file +} + +provider "airbyte" { + # Configuration options + server_url = var.airbyte_enabled ? "https://airbyte-${var.namespace}.${module.cluster_data.ingress_domain}/api/public/v1" : "" + client_id = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-CLIENT-ID : "" + client_secret = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-CLIENT-SECRET : "" +} diff --git a/terraform/application/variables.tf b/terraform/application/variables.tf index 8e5157eab..08b83b20f 100644 --- a/terraform/application/variables.tf +++ b/terraform/application/variables.tf @@ -88,8 +88,8 @@ variable "replicas" { } variable "max_memory" { - type = string - default = "4Gi" + type = string + default = "4Gi" } variable "worker_docker_image" { @@ -170,6 +170,12 @@ variable "pg_airbyte_enabled" { description = "Enable Write ahead logging for Postgres replication for Airbyte." default = false } + +variable "server_version" { + description = "Postgres server version" + default = "17" +} + locals { azure_storage_account_name = module.storage_private.name azure_storage_access_key = module.storage_private.primary_access_key @@ -184,4 +190,17 @@ locals { federated_auth_secrets = var.enable_dfe_analytics_federated_auth ? { DfeAnalytics__CredentialsJson = module.dfe_analytics[0].google_cloud_credentials } : {} + + secret_variables = { + AIRBYTE_CONFIGURATION = var.airbyte_enabled ? jsonencode({ + SOURCE_ID = module.airbyte[0].airbyte_source_id + DESTINATION_ID = module.airbyte[0].airbyte_destination_id + CONNECTION_ID = module.airbyte[0].airbyte_connection_id + }) : null + } + + gcp_keyring = "cypd-key-ring" + gcp_key = "cypd-key" + gcp_taxonomy_id = "7450003253557751837" + gcp_policy_tag_id = "7087412595261736586" } From d6bec476f1a91867f9dbd3d634dda243dcad730d Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Wed, 14 Oct 2026 15:12:06 +0100 Subject: [PATCH 02/11] fix: rails application --- terraform/application/airbyte.tf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/terraform/application/airbyte.tf b/terraform/application/airbyte.tf index 247f79fb9..725ef610a 100644 --- a/terraform/application/airbyte.tf +++ b/terraform/application/airbyte.tf @@ -34,6 +34,11 @@ module "airbyte" { use_azure = var.deploy_azure_backing_services gcp_bq_sa = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-BQ-SA : null + + is_rails_application = false + is_dotnet_application = true + dotnet_application_directory = "/src/DfE.CheckPerformanceData.Web" + airbyte_sync_mode = "incremental_deduped_history" } ## Airbyte module variables From 33d78b87ff4333582b5c4f38551e8b1d886658a3 Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Mon, 19 Oct 2026 11:27:52 +0100 Subject: [PATCH 03/11] using updated module --- global_config/review.sh | 2 +- terraform/application/airbyte.tf | 9 +++++---- terraform/application/config/review.tfvars.json | 5 ++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/global_config/review.sh b/global_config/review.sh index 832b23bb7..7ce2729ca 100644 --- a/global_config/review.sh +++ b/global_config/review.sh @@ -3,4 +3,4 @@ CONFIG_SHORT=rv AZURE_SUBSCRIPTION=s189-teacher-services-cloud-test AZURE_RESOURCE_PREFIX=s189t01 KV_PURGE_PROTECTION=false -TERRAFORM_MODULES_TAG=main +TERRAFORM_MODULES_TAG=dotnet-shellless-airbyte-job diff --git a/terraform/application/airbyte.tf b/terraform/application/airbyte.tf index 725ef610a..d9ec7fb09 100644 --- a/terraform/application/airbyte.tf +++ b/terraform/application/airbyte.tf @@ -35,10 +35,11 @@ module "airbyte" { use_azure = var.deploy_azure_backing_services gcp_bq_sa = var.airbyte_enabled ? module.infrastructure_secrets.map.AIRBYTE-BQ-SA : null - is_rails_application = false - is_dotnet_application = true - dotnet_application_directory = "/src/DfE.CheckPerformanceData.Web" - airbyte_sync_mode = "incremental_deduped_history" + is_rails_application = false + is_dotnet_application = true + use_legacy_dotnet_shim = false + #dotnet_application_directory = "/src/DfE.CheckPerformanceData.Web" + airbyte_sync_mode = "incremental_deduped_history" } ## Airbyte module variables diff --git a/terraform/application/config/review.tfvars.json b/terraform/application/config/review.tfvars.json index f56df07e0..ecee0d8bc 100644 --- a/terraform/application/config/review.tfvars.json +++ b/terraform/application/config/review.tfvars.json @@ -6,5 +6,8 @@ "enable_postgres_ssl": false, "blob_delete_retention_days": 60, "worker_replicas": 1, - "max_memory": "4Gi" + "max_memory": "4Gi", + "pg_airbyte_enabled": true, + "airbyte_enabled": true, + "connection_status": "active" } From 85a0c7667ae3d0f4a50a807dd254a091ecaec1aa Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Mon, 19 Oct 2026 11:42:04 +0100 Subject: [PATCH 04/11] using updated module --- global_config/review.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global_config/review.sh b/global_config/review.sh index 7ce2729ca..a9cd20a03 100644 --- a/global_config/review.sh +++ b/global_config/review.sh @@ -3,4 +3,4 @@ CONFIG_SHORT=rv AZURE_SUBSCRIPTION=s189-teacher-services-cloud-test AZURE_RESOURCE_PREFIX=s189t01 KV_PURGE_PROTECTION=false -TERRAFORM_MODULES_TAG=dotnet-shellless-airbyte-job +TERRAFORM_MODULES_TAG=refs/heads/dotnet-shellless-airbyte-job From e7304ff1b6443eddfc4757662213279977141773 Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Mon, 19 Oct 2026 11:45:25 +0100 Subject: [PATCH 05/11] using updated module --- global_config/review.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global_config/review.sh b/global_config/review.sh index a9cd20a03..deb1dfbd1 100644 --- a/global_config/review.sh +++ b/global_config/review.sh @@ -3,4 +3,4 @@ CONFIG_SHORT=rv AZURE_SUBSCRIPTION=s189-teacher-services-cloud-test AZURE_RESOURCE_PREFIX=s189t01 KV_PURGE_PROTECTION=false -TERRAFORM_MODULES_TAG=refs/heads/dotnet-shellless-airbyte-job +TERRAFORM_MODULES_TAG=main \ No newline at end of file From de2f40185869e3106293cef4df38febb460414cb Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Wed, 21 Oct 2026 17:46:17 +0100 Subject: [PATCH 06/11] review vars --- terraform/application/application.tf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/terraform/application/application.tf b/terraform/application/application.tf index afecb37b2..c094846cd 100644 --- a/terraform/application/application.tf +++ b/terraform/application/application.tf @@ -24,7 +24,15 @@ module "application_configuration" { AZURE_STORAGE_ACCOUNT_NAME = local.azure_storage_account_name AZURE_STORAGE_ACCESS_KEY = local.azure_storage_access_key AZURE_STORAGE_CONTAINER = local.azure_storage_container - }, local.federated_auth_secrets, local.egress_storage_secrets) + }, + { + AIRBYTE_CONFIGURATION = var.airbyte_enabled ? jsonencode({ + SOURCE_ID = module.airbyte[0].airbyte_source_id + DESTINATION_ID = module.airbyte[0].airbyte_destination_id + CONNECTION_ID = module.airbyte[0].airbyte_connection_id + }) : null + } + , local.federated_auth_secrets, local.egress_storage_secrets) } # AB#294553: the LDS egress needs an account to transfer into (ConnectionStrings__EgressStorage); From 304f41aaf84c97a24de41bb204603ea84961c7b9 Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Wed, 21 Oct 2026 17:47:09 +0100 Subject: [PATCH 07/11] review vars --- terraform/application/variables.tf | 8 -------- 1 file changed, 8 deletions(-) diff --git a/terraform/application/variables.tf b/terraform/application/variables.tf index 08b83b20f..58206f601 100644 --- a/terraform/application/variables.tf +++ b/terraform/application/variables.tf @@ -191,14 +191,6 @@ locals { DfeAnalytics__CredentialsJson = module.dfe_analytics[0].google_cloud_credentials } : {} - secret_variables = { - AIRBYTE_CONFIGURATION = var.airbyte_enabled ? jsonencode({ - SOURCE_ID = module.airbyte[0].airbyte_source_id - DESTINATION_ID = module.airbyte[0].airbyte_destination_id - CONNECTION_ID = module.airbyte[0].airbyte_connection_id - }) : null - } - gcp_keyring = "cypd-key-ring" gcp_key = "cypd-key" gcp_taxonomy_id = "7450003253557751837" From 8108faa58f85131b82da0708ad20ae7ba16557ca Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Tue, 27 Oct 2026 12:06:05 +0000 Subject: [PATCH 08/11] Feat:airbyte config --- .../AdminRequests/AdminRequestsService.cs | 3 + .../AmendmentRequestsService.cs | 7 +- .../CheckYourPupilData/ExerciseDisplay.cs | 55 + .../ExerciseDisplayService.cs | 168 ++ .../CheckYourPupilData/ExerciseTabBuilder.cs | 107 + .../IExerciseDisplayService.cs | 30 + .../CheckYourPupilData/PupilCsvGenerator.cs | 2 +- .../DependencyManager.cs | 2 + .../WindowManagement/CheckingDataCatalogue.cs | 36 + .../CheckingExerciseBlobPaths.cs | 61 + .../CheckingExerciseStorageResolver.cs | 45 + .../WindowManagement/ICheckingDataReader.cs | 7 + .../ICheckingExerciseDefinitionRepository.cs | 16 + .../ICheckingExerciseService.cs | 28 +- .../WindowManagement/IWindowService.cs | 35 +- .../Enums/CheckingDataType.cs | 15 + .../BlobStorage/CheckingDataReader.cs | 26 + .../BlobStorage/PupilDataBlobClient.cs | 35 +- .../BlobStorage/StudentResultsBlobClient.cs | 41 +- .../DependencyManager.cs | 10 + .../Ingress/CheckingExerciseIngress.cs | 39 + .../Ingress/CsvSchemaFileProcessor.cs | 66 +- .../Ingress/ICsvSchemaFileProcessor.cs | 5 +- .../DependencyManager.cs | 3 + .../Entities/CheckingExercise.cs | 65 +- .../Entities/CheckingWindowDataset.cs | 8 +- ...1_AddCheckingExerciseFramework.Designer.cs | 1908 +++++++++++++ ...0923113411_AddCheckingExerciseFramework.cs | 194 ++ .../PortalDbContextModelSnapshot.cs | 45 +- .../CheckYourPupilDataRepository.cs | 36 +- .../Repositories/CheckingDataCatalogue.cs | 27 + .../CheckingExerciseDefinitionRepository.cs | 30 + .../Repositories/WindowRepository.cs | 80 +- .../Seeding/DevDataSeeder.cs | 4 + .../Seeding/SeedCheckingWindows.cs | 110 +- .../CheckYourPupilDataController.cs | 96 +- .../CheckYourPupilDataViewModel.cs | 9 + .../IngressFolderBrowseViewModel.cs | 13 +- .../WindowAdmin/AddExerciseDataItem.cs | 25 + .../WindowAdmin/CreateCheckingExerciseItem.cs | 71 + .../WindowAdmin/ValidationViewModel.cs | 7 + .../Controllers/ViewModels/WindowViewModel.cs | 54 +- .../CreateCheckingExerciseController.cs | 77 + .../EditCheckingExerciseController.cs | 133 + .../WindowAdmin/ExerciseDataController.cs | 65 + .../Controllers/WindowAdmin/ExerciseLabels.cs | 7 + .../WindowAdmin/ExercisesController.cs | 13 +- .../WindowAdmin/IngressFileController.cs | 83 +- .../WindowAdmin/SchemaController.cs | 62 +- .../WindowAdmin/SummaryController.cs | 13 +- .../WindowAdmin/ValidateWindowController.cs | 85 +- .../Data/Ingress/ingress/16to19_LR1.csv | 24 + .../Data/Ingress/ingress/16to19_MAIN.csv | 146 + .../Data/Ingress/ingress/included.csv | 748 ----- .../Data/Ingress/ingress/nonincluded.csv | 35 - .../Data/Ingress/ingress/summary-autumn.csv | 6 + .../Ingress/ingress/summary-november-va.csv | 6 + .../Ingress/ingress/summary-retention.csv | 6 + .../Data/Ingress/schema/post16/README.md | 32 + .../Ingress/schema/post16/post16-ingress.json | 58 + .../schema/post16/results-included.json | 626 +++++ .../schema/post16/results-non-included.json | 607 ++++ .../Ingress/schema/post16/students-aims.json | 290 ++ .../schema/post16/students-included.json | 1486 ++++++++++ .../schema/post16/students-non-included.json | 249 ++ .../post16/students-previously-published.json | 227 ++ .../schema/post16/students-value-added.json | 303 ++ .../Ingress/schema/post16/summary-autumn.json | 1141 ++++++++ .../schema/post16/summary-november-va.json | 1861 +++++++++++++ .../schema/post16/summary-retention.json | 2455 +++++++++++++++++ .../DfE.CheckPerformanceData.Web.csproj | 6 +- .../Seeding/DevDataSeedingOrchestrator.cs | 4 +- .../Seeding/SeedPost16Ingress.cs | 85 +- .../Startup/BlobStorageExtensions.cs | 8 + .../Views/CheckYourPupilData/Index.cshtml | 110 +- .../CheckYourPupilData/_Post16Students.cshtml | 117 + .../_RawExerciseTable.cshtml | 47 + .../_VerticalSummary.cshtml | 34 + .../Views/WindowAdmin/AddExerciseData.cshtml | 59 + .../WindowAdmin/CreateCheckingExercise.cshtml | 263 ++ .../Views/WindowAdmin/Summary.cshtml | 94 +- .../Views/WindowAdmin/Validate.cshtml | 18 + .../wwwroot/css/site.css | 16 + .../wwwroot/js/validate-progress.js | 9 +- .../Ingress/CsvSchemaFileProcessorTests.cs | 98 + .../Persistence/CheckingDataCatalogueTests.cs | 105 + .../CheckingWindowExerciseProjectionTests.cs | 59 + .../SeededCheckingExerciseTests.cs | 212 +- .../WindowRepositoryExerciseIdentityTests.cs | 193 ++ .../CreateCheckingExerciseControllerTests.cs | 271 ++ .../EditCheckingExerciseControllerTests.cs | 270 ++ .../ExerciseDataControllerTests.cs | 133 + .../WindowAdmin/SchemaControllerTests.cs | 52 + .../WindowAdmin/SummaryControllerTests.cs | 197 +- .../ValidateWindowControllerTests.cs | 199 ++ .../ExerciseDisplayServiceTests.cs | 228 ++ .../ExerciseTabBuilderTests.cs | 189 ++ .../PupilCsvGeneratorTests.cs | 2 +- ...pilDataBlobClientStorageResolutionTests.cs | 115 + .../Ingress/CheckingExerciseIngressTests.cs | 101 + .../CheckingExerciseConfigurationTests.cs | 53 + .../CheckingExerciseMappingTests.cs | 8 +- ...ResultsBlobClientStorageResolutionTests.cs | 107 + .../Web/AccessibilityAuditViewTests.cs | 136 +- ...ckYourPupilDataControllerAnalyticsTests.cs | 11 +- .../CheckYourPupilDataControllerTabsTests.cs | 191 ++ ...kYourPupilDataResultsEnquiryOptionTests.cs | 11 +- .../Web/CheckYourPupilDataResultsTabTests.cs | 11 +- .../CheckingDataExerciseTests.cs | 50 + .../CheckingExerciseBlobPathsTests.cs | 61 + .../CheckingExerciseServiceTests.cs | 62 + .../CheckingExerciseStorageResolverTests.cs | 105 + .../WindowManagement/WindowDatasetsTests.cs | 36 + 113 files changed, 17458 insertions(+), 1146 deletions(-) create mode 100644 src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplay.cs create mode 100644 src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplayService.cs create mode 100644 src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseTabBuilder.cs create mode 100644 src/DfE.CheckPerformanceData.Application/CheckYourPupilData/IExerciseDisplayService.cs rename src/{DfE.CheckPerformanceData.Web/Controllers => DfE.CheckPerformanceData.Application}/CheckYourPupilData/PupilCsvGenerator.cs (93%) create mode 100644 src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingDataCatalogue.cs create mode 100644 src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseStorageResolver.cs create mode 100644 src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingDataReader.cs create mode 100644 src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseDefinitionRepository.cs create mode 100644 src/DfE.CheckPerformanceData.Domain/Enums/CheckingDataType.cs create mode 100644 src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/CheckingDataReader.cs create mode 100644 src/DfE.CheckPerformanceData.Infrastructure/Ingress/CheckingExerciseIngress.cs create mode 100644 src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.Designer.cs create mode 100644 src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.cs create mode 100644 src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingDataCatalogue.cs create mode 100644 src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingExerciseDefinitionRepository.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/AddExerciseDataItem.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/CreateCheckingExerciseItem.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/CreateCheckingExerciseController.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/EditCheckingExerciseController.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseDataController.cs create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_LR1.csv create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_MAIN.csv create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-autumn.csv create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-november-va.csv create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-retention.csv create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/README.md create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/post16-ingress.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-included.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-non-included.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-aims.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-included.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-non-included.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-previously-published.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-value-added.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-autumn.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-november-va.json create mode 100644 src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-retention.json create mode 100644 src/DfE.CheckPerformanceData.Web/Views/CheckYourPupilData/_Post16Students.cshtml create mode 100644 src/DfE.CheckPerformanceData.Web/Views/CheckYourPupilData/_RawExerciseTable.cshtml create mode 100644 src/DfE.CheckPerformanceData.Web/Views/CheckYourPupilData/_VerticalSummary.cshtml create mode 100644 src/DfE.CheckPerformanceData.Web/Views/WindowAdmin/AddExerciseData.cshtml create mode 100644 src/DfE.CheckPerformanceData.Web/Views/WindowAdmin/CreateCheckingExercise.cshtml create mode 100644 tests/DfE.CheckPerformanceData.IntegrationTests/Persistence/CheckingDataCatalogueTests.cs create mode 100644 tests/DfE.CheckPerformanceData.IntegrationTests/Persistence/WindowRepositoryExerciseIdentityTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Admin/WindowAdmin/CreateCheckingExerciseControllerTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Admin/WindowAdmin/EditCheckingExerciseControllerTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Admin/WindowAdmin/ExerciseDataControllerTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Admin/WindowAdmin/ValidateWindowControllerTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/CheckYourPupilData/ExerciseDisplayServiceTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/CheckYourPupilData/ExerciseTabBuilderTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/CheckYourPupilData/PupilDataBlobClientStorageResolutionTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Ingress/CheckingExerciseIngressTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Persistence/CheckingExerciseConfigurationTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/ResultsEnquiry/StudentResultsBlobClientStorageResolutionTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/Web/CheckYourPupilDataControllerTabsTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/WindowManagement/CheckingDataExerciseTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/WindowManagement/CheckingExerciseStorageResolverTests.cs create mode 100644 tests/DfE.CheckPerformanceData.UnitTests/WindowManagement/WindowDatasetsTests.cs diff --git a/src/DfE.CheckPerformanceData.Application/AdminRequests/AdminRequestsService.cs b/src/DfE.CheckPerformanceData.Application/AdminRequests/AdminRequestsService.cs index 330751b93..4dda526ad 100644 --- a/src/DfE.CheckPerformanceData.Application/AdminRequests/AdminRequestsService.cs +++ b/src/DfE.CheckPerformanceData.Application/AdminRequests/AdminRequestsService.cs @@ -14,9 +14,12 @@ public sealed class AdminRequestsService( if (window is null) return null; + // A display-only exercise has no kind to filter by, so it is not offered as a filter option + // (it has no ChangeRequest rows stamped with a kind either). var exercises = window.Exercises .OrderBy(e => e.SortOrder) .Select(e => e.ExerciseType) + .OfType() .ToList(); // A filter naming an exercise this window does not run is dropped rather than honoured. diff --git a/src/DfE.CheckPerformanceData.Application/AmendmentRequests/AmendmentRequestsService.cs b/src/DfE.CheckPerformanceData.Application/AmendmentRequests/AmendmentRequestsService.cs index 994ba2eaa..33a733fe3 100644 --- a/src/DfE.CheckPerformanceData.Application/AmendmentRequests/AmendmentRequestsService.cs +++ b/src/DfE.CheckPerformanceData.Application/AmendmentRequests/AmendmentRequestsService.cs @@ -69,14 +69,17 @@ public async Task GetAmendmentRequestsAsync(Guid window // #320: a deadline per exercise the window runs, not the outer window's end date. The // grid lists both populations, and on a 16-19 window pupil data checking shuts months // before results enquiry does — one date could only ever be right for one of them. + // A display-only exercise has no kind, and this deadline row is keyed and labelled by + // kind (ExerciseLabels.For), so it is left out here — same as every other kind lookup. Deadlines = window.Exercises .OrderBy(e => e.SortOrder) + .Where(e => e.ExerciseType is not null) .Select(e => new ExerciseDeadlineDto { - Exercise = e.ExerciseType, + Exercise = e.ExerciseType.Value, EndDate = e.EndDate, // The clock lives in one place, so "has this closed" is asked, never computed. - IsOpen = checkingExercises.IsOpen(window.Exercises, e.ExerciseType) + IsOpen = checkingExercises.IsOpen(window.Exercises, e.ExerciseType.Value) }) .ToList(), Rows = requests.Select(r => new AmendmentRequestDto diff --git a/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplay.cs b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplay.cs new file mode 100644 index 000000000..a0c395a92 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplay.cs @@ -0,0 +1,55 @@ +namespace DfE.CheckPerformanceData.Application.CheckYourPupilData; + +/// A column as the schema asks for it to be shown. +public sealed record DisplayColumn(string Field, string Label, int Order, bool Searchable); + +/// A column as the schema asks for it to be exported, in the workbook's own order. +public sealed record CsvColumn(string Field, string Heading, int Order); + +/// +/// How a dataset's schema asks to be shown, from the root x-display.layout. Anything the +/// schema does not say, or says wrongly, is . +/// +public enum ExerciseLayout +{ + /// Many records: dataset selector, search, paged table. + Table, + /// One record per school, pivoted to label/value rows. No search, no paging. + Vertical +} + +/// One schema's worth of a school's data: how to show it, how to export it, and its rows. +public sealed record ExerciseDataset(string Key, string Label, string FileName, + IReadOnlyList Columns, IReadOnlyList CsvColumns, + IReadOnlyList> Rows, bool? Included, IReadOnlySet Fields, + ExerciseLayout Layout = ExerciseLayout.Table); + +public sealed record VerticalField(string Label, string Value); + +/// The one-record view. The dataset carries the rows, so the CSV download serves the same +/// definition the page rendered. +public sealed record VerticalExerciseView(ExerciseDataset Dataset, IReadOnlyList Fields) +{ + public string Key => Dataset.Key; + public string Label => Dataset.Label; + public string FileName => Dataset.FileName; +} + +/// The many-record view: every dataset for the selector, the selected one, and its page. +public sealed record ExerciseTableView(IReadOnlyList Datasets, ExerciseDataset Selected, + IReadOnlyList> Rows, string? Search, int Page, int TotalPages); + +/// One tab on Check Your Pupil Data. +public sealed record ExerciseTab(WindowManagement.CheckingDataExercise Exercise, + IReadOnlyList> Rows, bool HasData) +{ + /// Set when a dataset's schema could not be read. The tab says so rather than + /// showing a table the schema was meant to shape. + public bool SchemaUnavailable { get; init; } + + public ExerciseTableView? Table { get; init; } + public VerticalExerciseView? Vertical { get; init; } + + /// The raw columns, for an exercise with no schemas at all. + public IReadOnlyList Columns => Rows.SelectMany(r => r.Keys).Distinct().ToList(); +} diff --git a/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplayService.cs b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplayService.cs new file mode 100644 index 000000000..345b80d92 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseDisplayService.cs @@ -0,0 +1,168 @@ +using System.Text.Json; +using DfE.CheckPerformanceData.Application.CheckYourPupilData.Columns; + +namespace DfE.CheckPerformanceData.Application.CheckYourPupilData; + +/// Builds table and download definitions from the schemas uploaded for this exercise. +/// Source rows can be a flat ingress array or a grouped envelope. +public sealed class ExerciseDisplayService : IExerciseDisplayService +{ + public IReadOnlyList Define(IReadOnlyList> rows, + IReadOnlyList definitions) + { + // Several slots may share one schema — a results enquiry has a slot per supplier file + // (main, late, revised...) and every file has the same shape and lands in the same + // per-school blob. They present as one dataset, keyed by the schema's collection. + definitions = definitions.DistinctBy(d => d.Key).ToList(); + var grouped = definitions.ToDictionary(d => d.Key, + d => new List>()); + foreach (var row in rows) + { + var key = DatasetFor(row, definitions); + if (key is not null && grouped.TryGetValue(key, out var list)) list.Add(row); + } + return definitions.Select(d => d with { Rows = grouped[d.Key] }).ToList(); + } + + public ExerciseTableView BuildTable(IReadOnlyList> rows, + IReadOnlyList definitions, string? dataset, string? search, int page, int pageSize) + { + var datasets = Define(rows, definitions); + var selected = datasets.FirstOrDefault(d => d.Key == dataset) ?? datasets[0]; + var searchable = selected.Columns.Where(c => c.Searchable).Select(c => c.Field).ToArray(); + var filtered = string.IsNullOrWhiteSpace(search) ? selected.Rows : selected.Rows + .Where(row => searchable.Any(field => row.GetValueOrDefault(field, "") + .Contains(search, StringComparison.OrdinalIgnoreCase))).ToList(); + var totalPages = (int)Math.Ceiling(filtered.Count / (double)pageSize); + page = Math.Clamp(page, 0, Math.Max(0, totalPages - 1)); + return new ExerciseTableView(datasets, selected, + filtered.Skip(page * pageSize).Take(pageSize).ToList(), search, page, totalPages); + } + + /// Pivots a school's single record into label/value rows. A file with more than one + /// record is a data fault; the first is shown so the caller can log it rather than lose the tab. + public VerticalExerciseView BuildVertical(IReadOnlyList> rows, + ExerciseDataset definition) + { + var record = rows.Count > 0 ? rows[0] : null; + var fields = record is null ? [] : definition.Columns + .Select(c => new VerticalField(c.Label, Value(record, c.Field))).ToList(); + return new VerticalExerciseView(definition with { Rows = rows }, fields); + } + + private static string Value(Dictionary row, string field) + { + var value = row.GetValueOrDefault(field, ""); + return field is "DOB" or "DOB_0" ? PupilDateFormatter.ToDisplayDate(value) : value; + } + + public byte[] Csv(ExerciseDataset dataset) + { + var table = new PupilTable( + dataset.CsvColumns.Select(c => c.Heading).ToList(), + dataset.Rows.Select(row => (IReadOnlyList)dataset.CsvColumns + .Select(c => row.GetValueOrDefault(c.Field, "")).ToList()).ToList()); + return PupilCsvGenerator.Generate(table); + } + + public IReadOnlyList> ReadRows(JsonElement root) + { + var rows = new List>(); + if (root.ValueKind == JsonValueKind.Array) + Add(root, null); + else if (root.ValueKind == JsonValueKind.Object) + foreach (var collection in root.EnumerateObject()) + if (collection.Value.ValueKind == JsonValueKind.Array) Add(collection.Value, collection.Name); + return rows; + + void Add(JsonElement array, string? dataset) + { + foreach (var element in array.EnumerateArray()) + { + if (element.ValueKind != JsonValueKind.Object) continue; + var row = element.EnumerateObject().ToDictionary(p => p.Name, p => p.Value.ToString(), + StringComparer.OrdinalIgnoreCase); + if (dataset is not null) row["DATASET"] = dataset; + rows.Add(row); + } + } + } + + private static string? DatasetFor(Dictionary row, IReadOnlyList definitions) + { + if (row.TryGetValue("DATASET", out var dataset)) + return definitions.FirstOrDefault(d => d.Key.Equals(dataset, StringComparison.OrdinalIgnoreCase))?.Key; + if (row.ContainsKey("SURNAME_0")) + return definitions.FirstOrDefault(d => d.Key.Contains("previously-published", StringComparison.OrdinalIgnoreCase))?.Key; + if (row.TryGetValue("INCLUDED", out var included)) + { + var matching = definitions.FirstOrDefault(d => d.Included == + included.Equals("True", StringComparison.OrdinalIgnoreCase)); + if (matching is not null) return matching.Key; + } + if (definitions.Count == 1) return definitions[0].Key; + // Legacy flat records may lack a dataset marker. Prefer the schema with the most + // populated fields, but never guess if two definitions score equally. + var scored = definitions.Select(d => new + { d.Key, Count = d.Fields.Count(field => row.TryGetValue(field, out var value) && value.Length > 0) }) + .OrderByDescending(d => d.Count).ToList(); + return scored.Count > 0 && scored[0].Count > 0 && + (scored.Count == 1 || scored[0].Count > scored[1].Count) ? scored[0].Key : null; + } + + public ExerciseDataset ParseDefinition(string datasetName, bool? included, JsonElement root) + { + var properties = root.GetProperty("properties").EnumerateObject().ToList(); + var key = Text(root, "x-ingress", "collection") ?? datasetName; + var label = Text(root, "x-display", "section") ?? Text(root, "x-download", "label") ?? datasetName; + var fileName = Path.GetFileName(Text(root, "x-download", "fileName") ?? $"{key}.csv"); + var columns = properties.Select((property, index) => + { + var display = property.Value.TryGetProperty("x-display", out var value) ? value : default; + if (display.ValueKind == JsonValueKind.Object && display.TryGetProperty("visible", out var visible) && + visible.ValueKind == JsonValueKind.False) return null; + var order = display.ValueKind == JsonValueKind.Object && display.TryGetProperty("order", out var position) + ? position.GetInt32() : index; + var searchable = display.ValueKind == JsonValueKind.Object && + display.TryGetProperty("searchable", out var search) && search.GetBoolean(); + return new DisplayColumn(property.Name, + Text(display, "label") ?? property.Name, order, searchable); + }).Where(c => c is not null).Select(c => c!).OrderBy(c => c.Order).ToList(); + var csvColumns = properties.Select((property, index) => + { + if (!property.Value.TryGetProperty("x-csv", out var csv)) + return new CsvColumn(property.Name, property.Name, index); + if (!csv.TryGetProperty("columns", out var positions)) return null; + // Variant keys are the workbook's, and differ by sheet ("provisional-revised" on the + // students sheets, "autumn" on the summary). Prefer the named ones, then whatever the + // property has; an empty map means the field is not exported. + var variant = positions.TryGetProperty("default", out var standard) ? standard : + positions.TryGetProperty("provisional-revised", out var provisional) ? provisional : + positions.ValueKind == JsonValueKind.Object + ? positions.EnumerateObject().Select(v => v.Value).FirstOrDefault() : default; + return variant.ValueKind == JsonValueKind.String + ? new CsvColumn(property.Name, Text(csv, "heading") ?? property.Name, + ExcelOrder(variant.GetString()!)) : null; + }).Where(c => c is not null).Select(c => c!).OrderBy(c => c.Order).ToList(); + var layout = string.Equals(Text(root, "x-display", "layout"), "vertical", StringComparison.OrdinalIgnoreCase) + ? ExerciseLayout.Vertical : ExerciseLayout.Table; + return new ExerciseDataset(key, label, fileName, columns, csvColumns, [], included, + new HashSet(properties.Select(p => p.Name), StringComparer.OrdinalIgnoreCase), layout); + } + + private static string? Text(JsonElement element, params string[] path) + { + foreach (var part in path) + { + if (element.ValueKind != JsonValueKind.Object || !element.TryGetProperty(part, out element)) return null; + } + return element.ValueKind == JsonValueKind.String ? element.GetString() : null; + } + + private static int ExcelOrder(string column) + { + var order = 0; + foreach (var letter in column) order = order * 26 + letter - 'A' + 1; + return order; + } +} diff --git a/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseTabBuilder.cs b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseTabBuilder.cs new file mode 100644 index 000000000..f3bcc6ec7 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/ExerciseTabBuilder.cs @@ -0,0 +1,107 @@ +using System.Text.Json; +using DfE.CheckPerformanceData.Application.WindowManagement; +using Microsoft.Extensions.Logging; + +namespace DfE.CheckPerformanceData.Application.CheckYourPupilData; + +public interface IExerciseTabBuilder +{ + Task> BuildAsync(CheckingWindowDto window, string? laestab, + string? selectedDataset, string? search, int page, int pageSize, CancellationToken cancellationToken); +} + +/// +/// Builds the Check Your Pupil Data tabs for one window and one school: which exercises are +/// visible, what each holds for this school, and how its schemas ask to be shown. +/// +/// +/// An empty result means this window's exercises draw no tabs, which is every window configured +/// before #466. The page falls back to its inclusion tabs, so a window that has not been given +/// exercises keeps working exactly as it did. +/// +public sealed class ExerciseTabBuilder(ICheckingDataReader reader, IExerciseDisplayService display, + TimeProvider clock, ILogger logger) : IExerciseTabBuilder +{ + public async Task> BuildAsync(CheckingWindowDto window, string? laestab, + string? selectedDataset, string? search, int page, int pageSize, CancellationToken cancellationToken) + { + var now = clock.GetLocalNow().DateTime; + + // A row with no tab name draws no tab. That is what keeps the fallback reachable. + var visible = window.Exercises + .Where(e => !string.IsNullOrWhiteSpace(e.TabName)) + .Select(e => new CheckingDataExercise(e.Id, window.Id, + e.Name ?? e.TabName!, e.TabName!, e.TabOrder, e.ExerciseType, window.KeyStage, + e.IsEnabled, e.VisibleFrom, e.VisibleUntil, window.StartDate, window.EndDate, + e.StartDate, e.EndDate, e.ReplacesCheckingExerciseId, e.UsesExerciseStorage, e.DisplayOnly)) + .Where(e => e.IsVisible(now)) + .OrderBy(e => e.TabOrder).ThenBy(e => e.Id) + .ToList(); + + var tabs = new List(); + foreach (var exercise in visible) + { + if (string.IsNullOrWhiteSpace(laestab)) + { + tabs.Add(new ExerciseTab(exercise, [], false)); + continue; + } + + var bytes = await reader.ReadAsync(exercise, laestab, cancellationToken); + if (bytes is null || bytes.Length == 0) + { + // The tab stays. A school seeing an empty tab knows the exercise exists and holds + // nothing for them yet; a missing tab tells them nothing at all. + tabs.Add(new ExerciseTab(exercise, [], false)); + continue; + } + + using var json = JsonDocument.Parse(bytes); + var rows = display.ReadRows(json.RootElement); + + var source = window.Exercises.Single(e => e.Id == exercise.Id); + var definitions = new List(); + var schemaUnavailable = false; + foreach (var dataset in source.DatasetsToIngest) + { + var schemaBytes = await reader.ReadSchemaAsync(window.Id, dataset.SchemaFile, cancellationToken); + if (schemaBytes is null || schemaBytes.Length == 0) + { + schemaUnavailable = true; + break; + } + using var schema = JsonDocument.Parse(schemaBytes); + definitions.Add(display.ParseDefinition(dataset.Name, dataset.Included, schema.RootElement)); + } + + // The schema decides the layout, not the tab name and not the exercise type. An + // exercise with no schemas falls back to a raw column-per-key table. + var hasSchemas = source.DatasetsToIngest.Count > 0 && !schemaUnavailable; + var vertical = hasSchemas && definitions.All(d => d.Layout == ExerciseLayout.Vertical); + + if (hasSchemas && !vertical && definitions.Any(d => d.Layout == ExerciseLayout.Vertical)) + { + // One layout per exercise. A mix is a schema-authoring fault; the table renderer + // can show every dataset, so it wins, and the odd one out is logged not hidden. + logger.LogWarning("Exercise {ExerciseId} mixes vertical and table schemas; rendering as a table", + exercise.Id); + } + if (vertical && rows.Count > 1) + { + logger.LogWarning("Exercise {ExerciseId} holds {Count} records for {Laestab}; a vertical layout shows the first", + exercise.Id, rows.Count, laestab); + } + + tabs.Add(new ExerciseTab(exercise, rows, true) + { + SchemaUnavailable = schemaUnavailable, + Table = hasSchemas && !vertical + ? display.BuildTable(rows, definitions, selectedDataset, search, page, pageSize) + : null, + Vertical = vertical ? display.BuildVertical(rows, definitions[0]) : null + }); + } + + return tabs; + } +} diff --git a/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/IExerciseDisplayService.cs b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/IExerciseDisplayService.cs new file mode 100644 index 000000000..fe0b024b3 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/IExerciseDisplayService.cs @@ -0,0 +1,30 @@ +using System.Text.Json; + +namespace DfE.CheckPerformanceData.Application.CheckYourPupilData; + +/// +/// Turns a school's ingested JSON plus the schemas it was validated against into something a view +/// can render. All of it is pure: the caller supplies the bytes, this decides what they mean. +/// +public interface IExerciseDisplayService +{ + /// Read a dataset definition out of one uploaded schema. + ExerciseDataset ParseDefinition(string datasetName, bool? included, JsonElement schemaRoot); + + /// Read a school's rows from a flat array or a grouped envelope. + IReadOnlyList> ReadRows(JsonElement root); + + /// Split the rows across the definitions they belong to. + IReadOnlyList Define(IReadOnlyList> rows, + IReadOnlyList definitions); + + /// The searched, paged table view. + ExerciseTableView BuildTable(IReadOnlyList> rows, + IReadOnlyList definitions, string? dataset, string? search, int page, int pageSize); + + /// The one-record view, pivoted to label/value rows. + VerticalExerciseView BuildVertical(IReadOnlyList> rows, ExerciseDataset definition); + + /// The dataset as a CSV, in the schema's export order. + byte[] Csv(ExerciseDataset dataset); +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/PupilCsvGenerator.cs b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/PupilCsvGenerator.cs similarity index 93% rename from src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/PupilCsvGenerator.cs rename to src/DfE.CheckPerformanceData.Application/CheckYourPupilData/PupilCsvGenerator.cs index c81ce024f..e6ab06425 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/PupilCsvGenerator.cs +++ b/src/DfE.CheckPerformanceData.Application/CheckYourPupilData/PupilCsvGenerator.cs @@ -1,7 +1,7 @@ using System.Text; using DfE.CheckPerformanceData.Application.CheckYourPupilData.Columns; -namespace DfE.CheckPerformanceData.Web.Controllers.CheckYourPupilData; +namespace DfE.CheckPerformanceData.Application.CheckYourPupilData; /// /// Renders an already-projected as CSV. The column set — and therefore diff --git a/src/DfE.CheckPerformanceData.Application/DependencyManager.cs b/src/DfE.CheckPerformanceData.Application/DependencyManager.cs index 9df1af380..805a566f0 100644 --- a/src/DfE.CheckPerformanceData.Application/DependencyManager.cs +++ b/src/DfE.CheckPerformanceData.Application/DependencyManager.cs @@ -59,6 +59,8 @@ public static IServiceCollection AddApplicationDependencies(this IServiceCollect // #317: which next-step options the check-your-pupil-data page may offer, from the open // exercises. The exercise-to-options map is domain knowledge, so it is not in the controller. services.AddScoped(); + services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddSingleton(); diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingDataCatalogue.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingDataCatalogue.cs new file mode 100644 index 000000000..281d288bf --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingDataCatalogue.cs @@ -0,0 +1,36 @@ +using DfE.CheckPerformanceData.Domain.Enums; + +namespace DfE.CheckPerformanceData.Application.WindowManagement; + +/// +/// One exercise as the school-facing pages see it: a tab, its dates, and what may be done with it. +/// Flat rather than a window plus an exercise, because the pages ask about one tab at a time. +/// +public sealed record CheckingDataExercise( + Guid Id, Guid WindowId, string Name, string TabName, int TabOrder, + CheckingExerciseType? ExerciseType, KeyStages KeyStage, + bool IsEnabled, DateTime? VisibleFrom, DateTime? VisibleUntil, + DateTime WindowStart, DateTime WindowEnd, DateTime ActionStart, DateTime ActionEnd, + Guid? ReplacesCheckingExerciseId, bool UsesExerciseStorage = false, bool DisplayOnly = false) +{ + /// The tab is drawn. VisibleUntil is exclusive, so a share disappears at the instant + /// it ends rather than lingering for the rest of that day. + public bool IsVisible(DateTime now) => IsEnabled + && (!VisibleFrom.HasValue || VisibleFrom <= now) + && (!VisibleUntil.HasValue || VisibleUntil > now); + + /// + /// A school may start a journey from this tab. It needs a kind to route to, it must not be + /// display-only, and both the window and the exercise's own dates must be running. Fails + /// closed: anything unstated is "no". + /// + public bool CanAct(DateTime now) => ExerciseType is not null && !DisplayOnly && IsVisible(now) + && WindowStart <= now && WindowEnd >= now + && ActionStart <= now && ActionEnd >= now; +} + +/// Every visible exercise across every window, in tab order. +public interface ICheckingDataCatalogue +{ + Task> GetVisibleAsync(CancellationToken cancellationToken); +} diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseBlobPaths.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseBlobPaths.cs index 50b6aa404..e5b22c2d9 100644 --- a/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseBlobPaths.cs +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseBlobPaths.cs @@ -23,6 +23,67 @@ namespace DfE.CheckPerformanceData.Application.WindowManagement; /// public static class CheckingExerciseBlobPaths { + // ---- Exercise-id storage (#466) ------------------------------------------------- + // An exercise is identified by its own Id, not by its type, so one window can hold several + // releases of one activity and any number of display-only data shares. Everything below is + // addressed by that Id. The type-based methods further down are untouched and still serve + // every row with UsesExerciseStorage = false, which is why this ticket needs no blob migration. + + /// Where an uploaded ingress or schema file is stored for one dataset slot. + // Path.GetFileName only recognises '\' as a separator on Windows, so an upload's original path + // (which may be a Windows path even when this runs on Linux) is trimmed by hand rather than + // relying on it to strip the directory. + public static string DefinitionFile(Guid exerciseId, Guid definitionId, string filename) + => $"ingress/{exerciseId}/{definitionId}/{filename.Split('/', '\\')[^1]}"; + + // A dataset row stores a complete blob name once it has been uploaded through the new screens. + // Rows written before that store a path relative to the separate ingress/ and schema/ roots. + // Both are read without moving anything. + public static string IngressBlobName(string storedPath) + => storedPath.StartsWith("ingress/", StringComparison.Ordinal) ? storedPath : $"ingress/{storedPath}"; + + public static string SchemaBlobName(string storedPath) + => storedPath.StartsWith("ingress/", StringComparison.Ordinal) ? storedPath : $"schema/{storedPath}"; + + /// The exercise's per-school output files. + public static string DataPrefix(Guid exerciseId) => $"exercises/{exerciseId}/data/"; + + /// The exercise's run summaries and error log. + public static string LogPrefix(Guid exerciseId) => $"exercises/{exerciseId}/logs/"; + + /// + /// The data type an exercise holds when nothing says otherwise. + /// + /// + /// No default case, for the same reason as : a new exercise type + /// must fail loudly rather than quietly share another exercise's file names. + /// + public static CheckingDataType DefaultDataType(CheckingExerciseType? type) => type switch + { + CheckingExerciseType.PupilData => CheckingDataType.Pupil, + CheckingExerciseType.ResultsEnquiry => CheckingDataType.Results, + null => CheckingDataType.Other, + _ => throw new ArgumentOutOfRangeException(nameof(type), type, + "This checking exercise has no data type. Add one to CheckingExerciseBlobPaths before ingesting it.") + }; + + /// e.g. "933/4290" -> "exercises/{id}/data/9334290_pupils.json". + /// + /// The slash is stripped rather than the laestab being normalised, exactly as + /// does, because ingress writes the supplier's LAESTAB column + /// through verbatim and the two rules differ on any value that is not slash-separated digits. + /// + public static string DataBlobName(Guid exerciseId, CheckingDataType type, string laestab) + => $"{DataPrefix(exerciseId)}{laestab.Replace("/", string.Empty)}_{type switch + { + CheckingDataType.Pupil => "pupils", + CheckingDataType.Results => "results", + CheckingDataType.PreviouslyPublished => "previously-published", + CheckingDataType.ValueAdded => "value-added", + CheckingDataType.Other => "data", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, "This data type has no file name.") + }}.json"; + /// Everything an exercise writes sits under this prefix. Empty for pupil data. /// /// The exercise has no prefix mapping. There is no default case on purpose: a new exercise type diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseStorageResolver.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseStorageResolver.cs new file mode 100644 index 000000000..36b06d93e --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/CheckingExerciseStorageResolver.cs @@ -0,0 +1,45 @@ +using DfE.CheckPerformanceData.Domain.Enums; + +namespace DfE.CheckPerformanceData.Application.WindowManagement; + +/// Window + activity type -> the one exercise row whose storage that journey should use. +public interface ICheckingExerciseStorageResolver +{ + Task ResolveAsync(Guid windowId, CheckingExerciseType type, + CancellationToken cancellationToken = default); +} + +/// +/// The adapter for the journeys that still address a window and an activity type — pupil data and +/// results enquiry. Since #466 a window may hold several releases of one activity, so the pair no +/// longer identifies a row on its own. +/// +/// +/// It fails closed. An ambiguous window resolves to null and the journey finds no data, which is +/// visible and correctable. Taking the first match instead would serve one release's data under +/// another release's journey, which is neither. +/// +public sealed class CheckingExerciseStorageResolver(IWindowRepository windows, TimeProvider clock) + : ICheckingExerciseStorageResolver +{ + public async Task ResolveAsync(Guid windowId, CheckingExerciseType type, + CancellationToken cancellationToken = default) + { + var window = await windows.GetByIdAsync(windowId, cancellationToken); + var now = clock.GetLocalNow().DateTime; + + // A row with no tab name was configured before #466. It has no visibility dates to honour, + // so the visibility rules are not applied to it — only to rows that opted into them. + var candidates = window?.Exercises.Where(e => e.ExerciseType == type + && (e.TabName is null + || (e.IsEnabled + && (e.VisibleFrom is null || e.VisibleFrom <= now) + && (e.VisibleUntil is null || e.VisibleUntil > now)))).ToList(); + + // A display-only release never owns a journey's storage while an interactive one exists. + var interactive = candidates?.Where(e => !e.DisplayOnly).ToList(); + if (interactive is { Count: > 0 }) candidates = interactive; + + return candidates is { Count: 1 } ? candidates[0] : null; + } +} diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingDataReader.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingDataReader.cs new file mode 100644 index 000000000..fad4ac26a --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingDataReader.cs @@ -0,0 +1,7 @@ +namespace DfE.CheckPerformanceData.Application.WindowManagement; + +public interface ICheckingDataReader +{ + Task ReadAsync(CheckingDataExercise exercise, string laestab, CancellationToken cancellationToken); + Task ReadSchemaAsync(Guid windowId, string schemaFile, CancellationToken cancellationToken); +} diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseDefinitionRepository.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseDefinitionRepository.cs new file mode 100644 index 000000000..d259aab98 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseDefinitionRepository.cs @@ -0,0 +1,16 @@ +namespace DfE.CheckPerformanceData.Application.WindowManagement; + +/// One exercise and the window it belongs to, addressed by the exercise's own id. +public sealed record CheckingExerciseDefinition(Guid WindowId, CheckingExerciseDto Exercise); + +/// +/// Reads and stamps one exercise. Separate from because an ingress +/// run knows only the exercise it was asked to run, never which window holds it. +/// +public interface ICheckingExerciseDefinitionRepository +{ + Task GetAsync(Guid exerciseId, CancellationToken cancellationToken); + + Task StampAsync(Guid exerciseId, DateTime validatedAt, string ingressChecksum, + string schemaChecksum, CancellationToken cancellationToken); +} diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseService.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseService.cs index 3560a56e5..b80b1a2e0 100644 --- a/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseService.cs +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/ICheckingExerciseService.cs @@ -16,7 +16,10 @@ namespace DfE.CheckPerformanceData.Application.WindowManagement; /// public interface ICheckingExerciseService { - /// True when the exercise exists on the window and brackets now. + /// + /// True when the exercise exists on the window, brackets now, and is one a school may act on. + /// A display-only row is never open however its dates read (#466): it is there to be looked at. + /// bool IsOpen(IReadOnlyList exercises, CheckingExerciseType exercise); /// @@ -27,7 +30,10 @@ public interface ICheckingExerciseService /// bool HasClosed(IReadOnlyList exercises, CheckingExerciseType exercise); - /// Every exercise open right now, in SortOrder. Empty is a valid answer. + /// + /// Every exercise a school may act on right now, in SortOrder. Empty is a valid answer. + /// Display-only rows are left out for the same reason as in . + /// IReadOnlyList OpenCheckingExercises( IReadOnlyList exercises); @@ -66,7 +72,7 @@ public sealed class CheckingExerciseService(TimeProvider timeProvider) : IChecki public bool IsOpen(IReadOnlyList exercises, CheckingExerciseType exercise) { var now = Now(); - return exercises.Any(e => e.ExerciseType == exercise && Brackets(e, now)); + return exercises.Any(e => e.ExerciseType == exercise && Actionable(e, now)); } public bool HasClosed(IReadOnlyList exercises, CheckingExerciseType exercise) @@ -80,10 +86,14 @@ public IReadOnlyList OpenCheckingExercises( IReadOnlyList exercises) { var now = Now(); + // Two separate reasons a row contributes nothing here. A typeless row has no member to + // contribute at all, since this list is typed by CheckingExerciseType. A row that does + // have a kind but is display-only is dropped by Actionable: it is shown, never acted on. return exercises - .Where(e => Brackets(e, now)) + .Where(e => Actionable(e, now)) .OrderBy(e => e.SortOrder) .Select(e => e.ExerciseType) + .OfType() .ToList(); } @@ -100,7 +110,15 @@ public IReadOnlyList OpenCheckingExercises( private DateTime Now() => timeProvider.GetLocalNow().DateTime; - // Inclusive at both ends, matching how the outer window's own dates are compared. + // "Open" is two questions, not one: is it running, and is it a thing a school may act on. + // Keeping them apart is what lets an admin mark an exercise read-only — a pupil-data exercise + // reissued with refreshed data after its checking window shut — without having to falsify its + // dates to make the actions go away (#466). + private static bool Actionable(CheckingExerciseDto exercise, DateTime now) => + !exercise.DisplayOnly && Brackets(exercise, now); + + // Inclusive at both ends, matching how the outer window's own dates are compared. Dates only: + // HasClosed reports a lapsed end date, which is a fact about the dates whatever the row is. private static bool Brackets(CheckingExerciseDto exercise, DateTime now) => exercise.StartDate <= now && exercise.EndDate >= now; } diff --git a/src/DfE.CheckPerformanceData.Application/WindowManagement/IWindowService.cs b/src/DfE.CheckPerformanceData.Application/WindowManagement/IWindowService.cs index b170c0a6a..f648df551 100644 --- a/src/DfE.CheckPerformanceData.Application/WindowManagement/IWindowService.cs +++ b/src/DfE.CheckPerformanceData.Application/WindowManagement/IWindowService.cs @@ -51,9 +51,11 @@ public sealed class CheckingWindowDto // only ever right while a single exercise held them all — the admin wizard, the summary page // and the validate run are all per-exercise now, and each asks the exercise it means. - /// The exercise of this type, or null when the window does not run it. - public CheckingExerciseDto? FindExercise(CheckingExerciseType exercise) => - Exercises.SingleOrDefault(e => e.ExerciseType == exercise); + /// The exercise of this type, or null when the window does not run it. A null type + /// finds nothing: a window may hold several typeless shares, so "the typeless one" is not a + /// question with an answer. + public CheckingExerciseDto? FindExercise(CheckingExerciseType? exercise) => + exercise is null ? null : Exercises.SingleOrDefault(e => e.ExerciseType == exercise); /// /// The outer pair derived from the exercises: earliest start, latest end. The wizard never asks @@ -72,11 +74,31 @@ public void DeriveDatesFromExercises() public sealed class CheckingExerciseDto { public Guid Id { get; init; } - public required CheckingExerciseType ExerciseType { get; init; } + public required CheckingExerciseType? ExerciseType { get; init; } public required DateTime StartDate { get; set; } public required DateTime EndDate { get; set; } public int SortOrder { get; init; } + /// True for a row on the exercise-id blob layout (#466). + public bool UsesExerciseStorage { get; init; } = true; + + /// The admin's name for this exercise. + public string? Name { get; init; } + + /// Null means this exercise draws no tab, which is every window configured before #466. + public string? TabName { get; set; } + public int TabOrder { get; init; } + public bool IsEnabled { get; init; } + public bool DisplayOnly { get; init; } + public DateTime? VisibleFrom { get; init; } + public DateTime? VisibleUntil { get; init; } + public Guid? ReplacesCheckingExerciseId { get; init; } + + /// The outer window's dates, carried so a caller holding only an exercise can ask + /// whether its window is running without loading the window again. + public DateTime? WindowStart { get; init; } + public DateTime? WindowEnd { get; init; } + /// /// The CSV + schema pairs this exercise ingests, in sort order. Any number, including none. /// @@ -185,11 +207,14 @@ public static class WindowDatasets public const string Pupils = "pupils"; public static IReadOnlyList DefaultsFor( - CheckingWindowType type, CheckingExerciseType exercise) => + CheckingWindowType type, CheckingExerciseType? exercise) => exercise switch { CheckingExerciseType.PupilData => PupilDataDefaults(type), CheckingExerciseType.ResultsEnquiry => ResultsEnquiryDefaults(type), + // A named data share has no supplier feed behind it, so it gets one slot the admin + // uploads into rather than none, which would leave the exercise unable to hold a file. + null => [new CheckingWindowDatasetDto { Name = "data", SortOrder = 0 }], _ => [] }; diff --git a/src/DfE.CheckPerformanceData.Domain/Enums/CheckingDataType.cs b/src/DfE.CheckPerformanceData.Domain/Enums/CheckingDataType.cs new file mode 100644 index 000000000..6510ae92f --- /dev/null +++ b/src/DfE.CheckPerformanceData.Domain/Enums/CheckingDataType.cs @@ -0,0 +1,15 @@ +namespace DfE.CheckPerformanceData.Domain.Enums; + +/// +/// What kind of data an exercise holds. It names the per-school output file, so a window can hold +/// several exercises whose files never collide. Not the same axis as CheckingExerciseType, which +/// says what a school may *do*; a display-only exercise has a data type and no exercise type. +/// +public enum CheckingDataType +{ + Pupil, + Results, + PreviouslyPublished, + ValueAdded, + Other +} diff --git a/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/CheckingDataReader.cs b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/CheckingDataReader.cs new file mode 100644 index 000000000..aafefc182 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/CheckingDataReader.cs @@ -0,0 +1,26 @@ +using Azure.Storage.Blobs; +using DfE.CheckPerformanceData.Application.WindowManagement; + +namespace DfE.CheckPerformanceData.Infrastructure.BlobStorage; + +public sealed class CheckingDataReader(BlobServiceClient blobs) : ICheckingDataReader +{ + public async Task ReadAsync(CheckingDataExercise exercise, string laestab, CancellationToken cancellationToken) + { + // Window/type is unique in the database; separate release windows never share output. + var blob = blobs.GetBlobContainerClient(exercise.WindowId.ToString()) + .GetBlobClient(exercise.UsesExerciseStorage + ? CheckingExerciseBlobPaths.DataBlobName(exercise.Id, CheckingExerciseBlobPaths.DefaultDataType(exercise.ExerciseType), laestab) + : CheckingExerciseBlobPaths.DataBlobName(exercise.ExerciseType!.Value, laestab)); + if (!await blob.ExistsAsync(cancellationToken)) return null; + return (await blob.DownloadContentAsync(cancellationToken)).Value.Content.ToArray(); + } + + public async Task ReadSchemaAsync(Guid windowId, string schemaFile, CancellationToken cancellationToken) + { + var blob = blobs.GetBlobContainerClient(windowId.ToString()) + .GetBlobClient(CheckingExerciseBlobPaths.SchemaBlobName(schemaFile)); + if (!await blob.ExistsAsync(cancellationToken)) return null; + return (await blob.DownloadContentAsync(cancellationToken)).Value.Content.ToArray(); + } +} diff --git a/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/PupilDataBlobClient.cs b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/PupilDataBlobClient.cs index e989f5759..f9d0366eb 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/PupilDataBlobClient.cs +++ b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/PupilDataBlobClient.cs @@ -10,7 +10,7 @@ namespace DfE.CheckPerformanceData.Infrastructure.BlobStorage; -public sealed class PupilDataBlobClient(BlobServiceClient blobServiceClient) : IPupilDataBlobClient +public sealed class PupilDataBlobClient(BlobServiceClient blobServiceClient, ICheckingExerciseStorageResolver? resolver = null) : IPupilDataBlobClient { // Public so the pupil-schema deserialization tests bind supplier JSON exactly as production does. public static readonly JsonSerializerOptions JsonOptions = new() @@ -34,9 +34,9 @@ public static IReadOnlyList Deserialize(ReadOnlySpan utf8Jso public async Task?> GetPupilsAsync( Guid windowId, CheckingExerciseType exercise, string laestab, CheckingWindowType windowType) { - var blob = GetBlobClient(windowId, exercise, laestab); + var blob = await GetBlobClientAsync(windowId, exercise, laestab); - if (!await blob.ExistsAsync()) + if (blob is null || !await blob.ExistsAsync()) return null; var response = await blob.DownloadContentAsync(); @@ -45,7 +45,10 @@ public static IReadOnlyList Deserialize(ReadOnlySpan utf8Jso } public async Task HasPupilDataAsync(Guid windowId, CheckingExerciseType exercise, string laestab) - => await GetBlobClient(windowId, exercise, laestab).ExistsAsync(); + { + var blob = await GetBlobClientAsync(windowId, exercise, laestab); + return blob is not null && await blob.ExistsAsync(); + } public async Task> ListSchoolLaestabsAsync( Guid windowId, CheckingExerciseType exercise, CancellationToken cancellationToken = default) @@ -54,7 +57,10 @@ public async Task> ListSchoolLaestabsAsync( if (!await container.ExistsAsync(cancellationToken)) return []; - string prefix = CheckingExerciseBlobPaths.DataPrefix(exercise); + var target = resolver is null ? null : await resolver.ResolveAsync(windowId, exercise, cancellationToken); + if (resolver is not null && target is null) return []; + string prefix = target is { UsesExerciseStorage: true } + ? CheckingExerciseBlobPaths.DataPrefix(target.Id) : CheckingExerciseBlobPaths.DataPrefix(exercise); const string suffix = CheckingExerciseBlobPaths.PupilsSuffix; var laestabs = new HashSet(StringComparer.Ordinal); await foreach (var blob in container.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix, cancellationToken)) @@ -78,7 +84,8 @@ public async Task UploadPupilsAsync( var container = blobServiceClient.GetBlobContainerClient(windowId.ToString()); await container.CreateIfNotExistsAsync(); - var blob = container.GetBlobClient(CheckingExerciseBlobPaths.PupilsBlobName(exercise, laestab)); + var blob = await GetBlobClientAsync(windowId, exercise, laestab) + ?? throw new InvalidOperationException("No checking exercise owns this upload."); // Serialise against the runtime type so each record's own [JsonPropertyName] map is used. var json = JsonSerializer.Serialize>(pupils, JsonOptions); using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); @@ -86,8 +93,16 @@ public async Task UploadPupilsAsync( } // The layout lives in CheckingExerciseBlobPaths and nowhere else, so a prefix change cannot - // leave the reader and the ingress writer disagreeing about where a school's file is. - private BlobClient GetBlobClient(Guid windowId, CheckingExerciseType exercise, string laestab) - => blobServiceClient.GetBlobContainerClient(windowId.ToString()) - .GetBlobClient(CheckingExerciseBlobPaths.PupilsBlobName(exercise, laestab)); + // leave the reader and the ingress writer disagreeing about where a school's file is. A null + // resolver reproduces the legacy behaviour exactly: every window configured before #466, and + // every existing caller that builds this client with a blob service alone, depends on that. + private async Task GetBlobClientAsync(Guid windowId, CheckingExerciseType exercise, string laestab) + { + var target = resolver is null ? null : await resolver.ResolveAsync(windowId, exercise); + if (resolver is not null && target is null) return null; + var path = target is { UsesExerciseStorage: true } + ? CheckingExerciseBlobPaths.DataBlobName(target.Id, CheckingExerciseBlobPaths.DefaultDataType(exercise), laestab) + : CheckingExerciseBlobPaths.PupilsBlobName(exercise, laestab); + return blobServiceClient.GetBlobContainerClient(windowId.ToString()).GetBlobClient(path); + } } diff --git a/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/StudentResultsBlobClient.cs b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/StudentResultsBlobClient.cs index 52d1ba784..966eab643 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/StudentResultsBlobClient.cs +++ b/src/DfE.CheckPerformanceData.Infrastructure/BlobStorage/StudentResultsBlobClient.cs @@ -3,6 +3,8 @@ using Azure.Storage.Blobs; using DfE.CheckPerformanceData.Application.Dashboard; using DfE.CheckPerformanceData.Application.ResultsEnquiry; +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Domain.Enums; using Microsoft.Extensions.Caching.Memory; namespace DfE.CheckPerformanceData.Infrastructure.BlobStorage; @@ -13,7 +15,9 @@ namespace DfE.CheckPerformanceData.Infrastructure.BlobStorage; /// between this and its callers — the same 30-minute sliding window is used so a school's results /// and pupils go stale together. /// -public sealed class StudentResultsBlobClient(BlobServiceClient blobServiceClient, IMemoryCache cache) : IStudentResultsClient +public sealed class StudentResultsBlobClient( + BlobServiceClient blobServiceClient, IMemoryCache cache, ICheckingExerciseStorageResolver? resolver = null) + : IStudentResultsClient { private static readonly TimeSpan CacheSlidingExpiry = TimeSpan.FromMinutes(30); @@ -54,35 +58,40 @@ public async Task UploadResultsAsync( var container = blobServiceClient.GetBlobContainerClient(windowId.ToString()); await container.CreateIfNotExistsAsync(cancellationToken: ct); - var blob = container.GetBlobClient(ResultsEnquiryBlobPaths.ResultsBlobName(laestab)); + var path = await OutputPathAsync(windowId, laestab, ct) + ?? throw new InvalidOperationException("No checking exercise owns this upload."); + var blob = container.GetBlobClient(path); var json = JsonSerializer.Serialize(results, JsonOptions); using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); await blob.UploadAsync(stream, overwrite: true, cancellationToken: ct); // A seeding write must not leave the reader serving the pre-seed value for 30 minutes. - cache.Remove(CacheKey(windowId, laestab)); + cache.Remove(CacheKey(windowId, laestab, path)); } private async Task> GetSchoolResultsAsync( Guid windowId, string laestab, CancellationToken ct) { - var key = CacheKey(windowId, laestab); + var path = await OutputPathAsync(windowId, laestab, ct); + if (path is null) return []; + + var key = CacheKey(windowId, laestab, path); if (cache.TryGetValue(key, out IReadOnlyList? cached) && cached is not null) return cached; - var results = await DownloadAsync(windowId, laestab, ct); + var results = await DownloadAsync(windowId, path, ct); cache.Set(key, results, new MemoryCacheEntryOptions { SlidingExpiration = CacheSlidingExpiry }); return results; } private async Task> DownloadAsync( - Guid windowId, string laestab, CancellationToken ct) + Guid windowId, string path, CancellationToken ct) { var container = blobServiceClient.GetBlobContainerClient(windowId.ToString()); if (!await container.ExistsAsync(ct)) return []; - var blob = container.GetBlobClient(ResultsEnquiryBlobPaths.ResultsBlobName(laestab)); + var blob = container.GetBlobClient(path); if (!await blob.ExistsAsync(ct)) return []; @@ -92,7 +101,21 @@ private async Task> DownloadAsync( response.Value.Content.ToMemory().Span, JsonOptions) ?? []; } + // Resolves first, exactly like PupilDataBlobClient: a null resolver reproduces the legacy path + // exactly (every window configured before #466 depends on it), and a resolver that comes back + // ambiguous or unconfigured yields null rather than a guessed path. + private async Task OutputPathAsync(Guid windowId, string laestab, CancellationToken ct) + { + var target = resolver is null ? null : await resolver.ResolveAsync(windowId, CheckingExerciseType.ResultsEnquiry, ct); + if (resolver is not null && target is null) return null; + return target is { UsesExerciseStorage: true } + ? CheckingExerciseBlobPaths.DataBlobName(target.Id, CheckingDataType.Results, LaestabNormaliser.Normalise(laestab)) + : ResultsEnquiryBlobPaths.ResultsBlobName(laestab); + } + // The laestab is normalised so a claim value of "933/4070" and a blob name of "9334070" agree. - private static string CacheKey(Guid windowId, string laestab) - => $"results:{windowId}:{LaestabNormaliser.Normalise(laestab)}"; + // The path is folded in so a resolved exercise's cache entry never collides with another + // exercise's — or the legacy path's — entry for the same window and school. + private static string CacheKey(Guid windowId, string laestab, string path) + => $"results:{windowId}:{LaestabNormaliser.Normalise(laestab)}:{path}"; } diff --git a/src/DfE.CheckPerformanceData.Infrastructure/DependencyManager.cs b/src/DfE.CheckPerformanceData.Infrastructure/DependencyManager.cs index 4419011a4..bdb9df502 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/DependencyManager.cs +++ b/src/DfE.CheckPerformanceData.Infrastructure/DependencyManager.cs @@ -16,6 +16,7 @@ using DfE.CheckPerformanceData.Application.ResultsEnquiry; using DfE.CheckPerformanceData.Application.RulesConfig; using DfE.CheckPerformanceData.Application.RulesEngine; +using DfE.CheckPerformanceData.Application.WindowManagement; using DfE.CheckPerformanceData.Application.ZendeskClient; using DfE.CheckPerformanceData.Infrastructure.DfeSignInApiClient; using DfE.CheckPerformanceData.Infrastructure.Ingress; @@ -62,6 +63,15 @@ public static IServiceCollection AddInfrastructureDependencies(this IServiceColl // the Web host) because the Persistence repositories that consume it are pulled in // by every host that calls AddPersistenceDependencies — including the worker. services.AddScoped(); + // ICheckingDataReader takes only a BlobServiceClient, so it is safe to construct in every + // host that reaches this bundle (including the worker). ICheckingExerciseIngress is + // deliberately NOT registered here: it also needs ICheckingExerciseDefinitionRepository + // (Persistence, wired by AddPersistenceDependencies — which the worker opts out of, see + // the IStudentResultsClient note below) and ICsvSchemaFileProcessor (registered only in + // the Web host's AddCpdBlobStorage). Registering it here would pass validate-on-build for + // no host, because the web host never calls AddInfrastructureDependencies either — see + // BlobStorageExtensions.AddCpdBlobStorage, which is where it is registered instead. + services.AddScoped(); // IStudentResultsClient is deliberately NOT registered here. Its implementation takes an // IMemoryCache, which this bundle's only caller — the worker — does not have: AddMemoryCache diff --git a/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CheckingExerciseIngress.cs b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CheckingExerciseIngress.cs new file mode 100644 index 000000000..876bf52e8 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CheckingExerciseIngress.cs @@ -0,0 +1,39 @@ +using System.Runtime.CompilerServices; +using DfE.CheckPerformanceData.Application.WindowManagement; + +namespace DfE.CheckPerformanceData.Infrastructure.Ingress; + +public interface ICheckingExerciseIngress +{ + IAsyncEnumerable ProcessAsync(Guid exerciseId, bool clearExistingFiles = false, + CancellationToken cancellationToken = default); +} + +public sealed class CheckingExerciseIngress(ICheckingExerciseDefinitionRepository definitions, + ICsvSchemaFileProcessor processor, TimeProvider clock) : ICheckingExerciseIngress +{ + public async IAsyncEnumerable ProcessAsync(Guid exerciseId, bool clearExistingFiles = false, + [EnumeratorCancellation] CancellationToken cancellationToken = default) + { + var definition = await definitions.GetAsync(exerciseId, cancellationToken); + if (definition is null || !definition.Exercise.HasRequiredFiles) + { + yield return new("Incomplete", "Supply a file and schema for every required ingress definition before processing.", + 0, 0, 0, 1, true, true); + yield break; + } + var exercise = definition.Exercise; + var inputs = exercise.DatasetsToIngest.Select(d => new IngressDataset(d.Name, d.IngressFile, + d.IngressFileChecksum, d.SchemaFile, d.SchemaFileChecksum, d.Included, d.SourceFile)).ToList(); + var ingressChecksum = exercise.CurrentIngressChecksum; + var schemaChecksum = exercise.CurrentSchemaChecksum; + await foreach (var progress in processor.ProcessAsync(definition.WindowId, exercise.ExerciseType, inputs, + clearExistingFiles: clearExistingFiles, cancellationToken: cancellationToken, + checkingExerciseId: exercise.UsesExerciseStorage ? exercise.Id : null)) + { + if (progress is { IsComplete: true, IsError: false }) + await definitions.StampAsync(exerciseId, clock.GetUtcNow().UtcDateTime, ingressChecksum, schemaChecksum, cancellationToken); + yield return progress; + } + } +} diff --git a/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CsvSchemaFileProcessor.cs b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CsvSchemaFileProcessor.cs index 3e3337383..ba1e6b7b6 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CsvSchemaFileProcessor.cs +++ b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/CsvSchemaFileProcessor.cs @@ -19,11 +19,12 @@ public class CsvSchemaFileProcessor(ILogger logger, IRea { public async IAsyncEnumerable ProcessAsync( Guid checkingWindowId, - CheckingExerciseType exercise, + CheckingExerciseType? exercise, IReadOnlyList datasets, bool validateOnly = false, bool clearExistingFiles = false, - [EnumeratorCancellation] CancellationToken cancellationToken = default) + [EnumeratorCancellation] CancellationToken cancellationToken = default, + Guid? checkingExerciseId = null, CheckingDataType? dataType = null) { if (datasets.Count == 0) { @@ -40,7 +41,12 @@ public async IAsyncEnumerable ProcessAsync( // Every output path this run touches is scoped to its exercise (#316). Two exercises share // one container, so an unscoped name would let one run overwrite or delete another's output. - string errorLogBlobName = CheckingExerciseBlobPaths.ErrorLogBlobName(exercise, checkingWindowId); + // Since #466 a run may instead be scoped to the exercise's own id, so several releases of + // one kind can each own their output; when no id is given every path stays exactly as it + // was before this task. + string errorLogBlobName = checkingExerciseId is { } logId + ? $"{CheckingExerciseBlobPaths.LogPrefix(logId)}error_log.txt" + : CheckingExerciseBlobPaths.ErrorLogBlobName(exercise!.Value, checkingWindowId); BlobContainerClient container = sourceBlobClient.GetBlobContainerClient(checkingWindowId.ToString()); bool multipleDatasets = datasets.Count > 1; @@ -55,14 +61,9 @@ public async IAsyncEnumerable ProcessAsync( // A fresh, timestamped summary file is written on every real run, so runs never overwrite // each other's summary. string summaryBlobName = - $"{CheckingExerciseBlobPaths.SummaryPrefix(exercise, checkingWindowId)}{DateTime.UtcNow:yyyyMMdd_HHmmss}.csv"; - - // Wipe output left by a previous run before anything is written. Safe now that a single - // run produces every dataset's output. - if (clearExistingFiles && !validateOnly) - { - await ClearOutputAsync(container, checkingWindowId, exercise, errorLogBlobName, cancellationToken); - } + $"{(checkingExerciseId is { } summaryId + ? CheckingExerciseBlobPaths.LogPrefix(summaryId) + "summary_" + : CheckingExerciseBlobPaths.SummaryPrefix(exercise!.Value, checkingWindowId))}{DateTime.UtcNow:yyyyMMdd_HHmmss_fffffff}.csv"; foreach (IngressDataset dataset in datasets) { @@ -76,8 +77,10 @@ public async IAsyncEnumerable ProcessAsync( string? checksumError = null; try { - csvBytes = await DownloadBytesAsync(container, $"ingress/{dataset.InputCsvFile}", cancellationToken); - byte[] schemaBytes = await DownloadBytesAsync(container, $"schema/{dataset.SchemaFile}", cancellationToken); + csvBytes = await DownloadBytesAsync(container, + CheckingExerciseBlobPaths.IngressBlobName(dataset.InputCsvFile), cancellationToken); + byte[] schemaBytes = await DownloadBytesAsync(container, + CheckingExerciseBlobPaths.SchemaBlobName(dataset.SchemaFile), cancellationToken); if (!ChecksumMatches(csvBytes, dataset.InputCsvChecksum)) { @@ -115,6 +118,13 @@ public async IAsyncEnumerable ProcessAsync( JSchema schema = JSchema.Parse(schemaJson!); schema.AllowAdditionalProperties = false; + // Newtonsoft.Json.Schema counts licensed validations per call, not per row, and caps an + // unlicensed process at 1,000 an hour. A school's rows are therefore validated as one + // array, one call per school per dataset, rather than one call per record. The messages + // are the same, and each already carries its row index within the school + // ("Path '[12].ULN'") because the record's path includes its parent array. + JSchema schoolSchema = new() { Type = JSchemaType.Array, Items = { schema } }; + // Read the records and report how many there are. List> records; using (var reader = new StreamReader(new MemoryStream(csvBytes!))) @@ -207,10 +217,11 @@ public async IAsyncEnumerable ProcessAsync( record["SOURCE"] = sourceFile; } - if (!record.IsValid(schema, out IList errorMessages)) - { - schoolErrors.AddRange(errorMessages); - } + } + + if (!jsonArray.IsValid(schoolSchema, out IList errorMessages)) + { + schoolErrors.AddRange(errorMessages); } if (schoolErrors.Count > 0) @@ -323,11 +334,20 @@ public async IAsyncEnumerable ProcessAsync( int filesWritten = 0; string? writeError = null; + // Never clear a dataset that is currently good until every supplied pair has validated. + // Clearing first meant one bad supplier file emptied the school's page. + if (clearExistingFiles && !validateOnly) + await ClearOutputAsync(container, checkingWindowId, exercise, errorLogBlobName, + cancellationToken, checkingExerciseId); + foreach ((string schoolId, JArray jsonArray) in mergedBySchool) { cancellationToken.ThrowIfCancellationRequested(); - string outputBlobName = CheckingExerciseBlobPaths.DataBlobName(exercise, schoolId); + string outputBlobName = checkingExerciseId is { } outputId + ? CheckingExerciseBlobPaths.DataBlobName(outputId, + dataType ?? CheckingExerciseBlobPaths.DefaultDataType(exercise), schoolId) + : CheckingExerciseBlobPaths.DataBlobName(exercise!.Value, schoolId); try { await WriteAsync(container, outputBlobName, jsonArray.ToString(Formatting.Indented), cancellationToken); @@ -428,7 +448,7 @@ private static string EscapeCsv(string value) return value; } - private async Task ClearOutputAsync(BlobContainerClient container, Guid checkingWindowId, CheckingExerciseType exercise, string errorLogBlobName, CancellationToken cancellationToken) + private async Task ClearOutputAsync(BlobContainerClient container, Guid checkingWindowId, CheckingExerciseType? exercise, string errorLogBlobName, CancellationToken cancellationToken, Guid? checkingExerciseId = null) { if (!await container.ExistsAsync(cancellationToken)) { @@ -442,8 +462,12 @@ private async Task ClearOutputAsync(BlobContainerClient container, Guid checking // reach "results-enquiry/data/" and vice versa. foreach (string prefix in new[] { - CheckingExerciseBlobPaths.DataPrefix(exercise), - CheckingExerciseBlobPaths.SummaryPrefix(exercise, checkingWindowId) + checkingExerciseId is { } outputId + ? CheckingExerciseBlobPaths.DataPrefix(outputId) + : CheckingExerciseBlobPaths.DataPrefix(exercise!.Value), + checkingExerciseId is { } logId + ? CheckingExerciseBlobPaths.LogPrefix(logId) + : CheckingExerciseBlobPaths.SummaryPrefix(exercise!.Value, checkingWindowId) }) { await foreach (BlobItem blob in container.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix, cancellationToken)) diff --git a/src/DfE.CheckPerformanceData.Infrastructure/Ingress/ICsvSchemaFileProcessor.cs b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/ICsvSchemaFileProcessor.cs index d4e393aa0..80efe510b 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/Ingress/ICsvSchemaFileProcessor.cs +++ b/src/DfE.CheckPerformanceData.Infrastructure/Ingress/ICsvSchemaFileProcessor.cs @@ -36,9 +36,10 @@ public interface ICsvSchemaFileProcessor /// IAsyncEnumerable ProcessAsync( Guid checkingWindowId, - CheckingExerciseType exercise, + CheckingExerciseType? exercise, IReadOnlyList datasets, bool validateOnly = false, bool clearExistingFiles = false, - CancellationToken cancellationToken = default); + CancellationToken cancellationToken = default, + Guid? checkingExerciseId = null, CheckingDataType? dataType = null); } diff --git a/src/DfE.CheckPerformanceData.Persistence/DependencyManager.cs b/src/DfE.CheckPerformanceData.Persistence/DependencyManager.cs index 96b02de37..4cdb3f1d7 100644 --- a/src/DfE.CheckPerformanceData.Persistence/DependencyManager.cs +++ b/src/DfE.CheckPerformanceData.Persistence/DependencyManager.cs @@ -58,6 +58,9 @@ public static IServiceCollection AddPersistenceDependencies( ContentStaging.ContentStagingSessionStore>(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped + /// What a school may *do* with this exercise. Null since #466: a display-only data share is an + /// exercise the admin named and gave files to, with no journey behind it. Every kind lookup + /// ignores a null row by construction — lifted equality means null matches no member. + /// + public CheckingExerciseType? ExerciseType { get; init; } + + /// + /// True for a row on the exercise-id blob layout (#466), which is every row created since. + /// False keeps the row on the old type-based paths, so blobs already written are still found + /// and no blob migration is needed. + /// + public bool UsesExerciseStorage { get; init; } = true; + + /// The admin's name for this exercise, shown as the tab's heading. + public string? Name { get; set; } + + /// + /// The tab label on Check Your Pupil Data. Null means the exercise draws no tab, which is what + /// keeps every window configured before #466 rendering exactly as it did. + /// + public string? TabName { get; set; } + + /// Left-to-right order of the tabs. + public int TabOrder { get; set; } + + /// False hides the exercise without deleting it, and without losing its files. + public bool IsEnabled { get; set; } + + /// The school may look at this data and download it, and do nothing else. + public bool DisplayOnly { get; set; } + + /// When the tab appears and disappears. Null at either end means no bound. + public DateTime? VisibleFrom { get; set; } + public DateTime? VisibleUntil { get; set; } + + /// + /// The exercise this one supersedes, when a later release replaces an earlier one. Restricted + /// on delete: the row that was replaced must outlive the pointer to it. + /// + public Guid? ReplacesCheckingExerciseId { get; set; } // Settable since #319: the admin wizard captures each exercise's dates, so an existing row has // to be able to take new ones. Before that nothing could change them once written. @@ -63,7 +104,11 @@ public sealed class CheckingExerciseConfiguration : IEntityTypeConfiguration builder) { - builder.ToTable("CheckingExercises"); + // A row with no kind is only meaningful as a display-only share on the new storage. + // Anything else is a half-configured exercise that the journeys cannot route. + builder.ToTable("CheckingExercises", table => table.HasCheckConstraint( + "CK_CheckingExercises_TypeOrDisplayOnly", + "\"ExerciseType\" IS NOT NULL OR (\"DisplayOnly\" AND \"UsesExerciseStorage\")")); builder.HasKey(x => x.Id); @@ -71,7 +116,7 @@ public void Configure(EntityTypeBuilder builder) .HasDefaultValueSql("gen_random_uuid()"); builder.Property(x => x.ExerciseType) - .IsRequired() + .IsRequired(false) .HasConversion() .HasMaxLength(50); @@ -88,9 +133,17 @@ public void Configure(EntityTypeBuilder builder) .HasForeignKey(x => x.CheckingWindowId) .OnDelete(DeleteBehavior.Cascade); - // One row per exercise type per window: the lookup #315 does. This caps repeats of a type, - // never how many types a window may hold. - builder.HasIndex(x => new { x.CheckingWindowId, x.ExerciseType }).IsUnique(); + builder.Property(x => x.Name).HasMaxLength(200); + builder.Property(x => x.TabName).HasMaxLength(100); + builder.Property(x => x.VisibleFrom).HasColumnType("timestamp without time zone"); + builder.Property(x => x.VisibleUntil).HasColumnType("timestamp without time zone"); + builder.HasOne().WithMany() + .HasForeignKey(x => x.ReplacesCheckingExerciseId).OnDelete(DeleteBehavior.Restrict); + + // Only the legacy type-addressed rows need this. The new storage deliberately allows + // several releases of one activity, and any number of typeless shares, in one window. + builder.HasIndex(x => new { x.CheckingWindowId, x.ExerciseType }) + .IsUnique().HasFilter("\"UsesExerciseStorage\" = false"); builder.OwnsOne(x => x.Validated, validated => { diff --git a/src/DfE.CheckPerformanceData.Persistence/Entities/CheckingWindowDataset.cs b/src/DfE.CheckPerformanceData.Persistence/Entities/CheckingWindowDataset.cs index 84bfe7843..c0ac23062 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Entities/CheckingWindowDataset.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Entities/CheckingWindowDataset.cs @@ -29,21 +29,21 @@ public sealed class CheckingWindowDataset public string SchemaFileChecksum { get; set; } = string.Empty; /// Null = inclusion comes from the record's own P_INCL (KS4). - public bool? Included { get; init; } + public bool? Included { get; set; } /// /// The SOURCE tag stamped on every record from this file (#324), e.g. "16to19_LR1". Null = /// nothing is stamped, which is every pupil-data dataset. /// - public string? SourceFile { get; init; } + public string? SourceFile { get; set; } /// /// The exercise cannot be validated until this slot holds both files. False for a slot the /// supplier may not deliver at all — every results file after the main one (#324). /// - public bool Required { get; init; } = true; + public bool Required { get; set; } = true; - public int SortOrder { get; init; } + public int SortOrder { get; set; } } public sealed class CheckingWindowDatasetConfiguration : IEntityTypeConfiguration diff --git a/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.Designer.cs b/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.Designer.cs new file mode 100644 index 000000000..33239aaa7 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.Designer.cs @@ -0,0 +1,1908 @@ +// +using System; +using DfE.CheckPerformanceData.Persistence.Contexts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using NpgsqlTypes; + +#nullable disable + +namespace DfE.CheckPerformanceData.Persistence.Migrations +{ + [DbContext(typeof(PortalDbContext))] + [Migration("20260923113411_AddCheckingExerciseFramework")] + partial class AddCheckingExerciseFramework + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.AuditEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ChangedColumns") + .HasColumnType("text"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NewValues") + .HasColumnType("text"); + + b.Property("OldValues") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("EntityType"); + + b.HasIndex("Timestamp"); + + b.ToTable("AuditEntries"); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.ContentStagingSession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("BundleJson") + .IsRequired() + .HasColumnType("text") + .HasColumnName("bundle_json"); + + b.Property("CreatedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at_utc"); + + b.Property("CreatedBy") + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("created_by"); + + b.Property("ExpiresAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("expires_at_utc"); + + b.HasKey("Id"); + + b.HasIndex("ExpiresAtUtc") + .HasDatabaseName("ix_content_staging_sessions_expires_at_utc"); + + b.ToTable("content_staging_sessions", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.QueueMetricEvent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DecisionStatus") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("decision_status"); + + b.Property("LatencyMs") + .HasColumnType("double precision") + .HasColumnName("latency_ms"); + + b.Property("MessageId") + .HasColumnType("uuid") + .HasColumnName("message_id"); + + b.Property("QueueName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("queue_name"); + + b.Property("RecordedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("recorded_at_utc"); + + b.Property("ReferenceNumber") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("reference_number"); + + b.Property("RulesVersion") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("rules_version"); + + b.Property("Stage") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("stage"); + + b.HasKey("Id"); + + b.HasIndex("RecordedAtUtc") + .HasDatabaseName("ix_queue_metrics_events_recorded_at"); + + b.HasIndex("QueueName", "RecordedAtUtc") + .HasDatabaseName("ix_queue_metrics_events_queue_recorded"); + + b.HasIndex("ReferenceNumber", "RecordedAtUtc") + .HasDatabaseName("ix_queue_metrics_events_reference"); + + b.ToTable("queue_metrics_events", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.SearchEvent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("HostPath") + .HasColumnType("text") + .HasColumnName("host_path"); + + b.Property("IsSeeded") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_seeded"); + + b.Property("JobId") + .HasColumnType("text") + .HasColumnName("job_id"); + + b.Property("LatencyMs") + .HasColumnType("integer") + .HasColumnName("latency_ms"); + + b.Property("OccurredAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("occurred_at_utc"); + + b.Property("QueryNormalised") + .HasColumnType("text") + .HasColumnName("query_normalised"); + + b.Property("QueryRaw") + .HasColumnType("text") + .HasColumnName("query_raw"); + + b.Property("ResultsBlocks") + .HasColumnType("integer") + .HasColumnName("results_blocks"); + + b.Property("ResultsPages") + .HasColumnType("integer") + .HasColumnName("results_pages"); + + b.Property("ResultsSections") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("results_sections"); + + b.Property("ResultsTotal") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("integer") + .HasColumnName("results_total") + .HasComputedColumnSql("results_pages + results_blocks + results_sections", true); + + b.Property("Scope") + .HasColumnType("text") + .HasColumnName("scope"); + + b.Property("SelectedKey") + .HasColumnType("text") + .HasColumnName("selected_key"); + + b.Property("SelectedPosition") + .HasColumnType("integer") + .HasColumnName("selected_position"); + + b.Property("SessionId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("session_id"); + + b.Property("Surface") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue("site") + .HasColumnName("surface"); + + b.Property("ZeroResults") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("boolean") + .HasColumnName("zero_results") + .HasComputedColumnSql("(results_pages + results_blocks + results_sections) = 0", true); + + b.HasKey("Id"); + + b.HasIndex("JobId") + .HasDatabaseName("ix_search_events_job_id") + .HasFilter("job_id IS NOT NULL"); + + b.HasIndex("OccurredAtUtc") + .HasDatabaseName("ix_search_events_occurred_at"); + + b.HasIndex("QueryNormalised") + .HasDatabaseName("ix_search_events_query_normalised"); + + b.HasIndex("SessionId") + .HasDatabaseName("ix_search_events_session_id"); + + b.HasIndex("HostPath", "OccurredAtUtc") + .HasDatabaseName("ix_search_events_host_path_occurred_at") + .HasFilter("host_path IS NOT NULL"); + + b.HasIndex("OccurredAtUtc", "QueryNormalised") + .HasDatabaseName("ix_search_events_occurred_at_query_normalised") + .HasFilter("query_normalised IS NOT NULL"); + + b.HasIndex("OccurredAtUtc", "SessionId") + .HasDatabaseName("ix_search_events_occurred_at_session_id"); + + b.HasIndex("Surface", "OccurredAtUtc") + .HasDatabaseName("ix_search_events_surface_occurred_at"); + + b.HasIndex("ZeroResults", "OccurredAtUtc") + .HasDatabaseName("ix_search_events_zero_results_occurred_at") + .HasFilter("zero_results = true"); + + b.ToTable("search_events", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.SearchEventResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsSeeded") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_seeded"); + + b.Property("JobId") + .HasColumnType("text") + .HasColumnName("job_id"); + + b.Property("Position") + .HasColumnType("integer") + .HasColumnName("position"); + + b.Property("Rank") + .HasColumnType("real") + .HasColumnName("rank"); + + b.Property("ResultKey") + .IsRequired() + .HasColumnType("text") + .HasColumnName("result_key"); + + b.Property("ResultKind") + .IsRequired() + .HasColumnType("text") + .HasColumnName("result_kind"); + + b.Property("SearchEventId") + .HasColumnType("bigint") + .HasColumnName("search_event_id"); + + b.HasKey("Id"); + + b.HasIndex("JobId") + .HasDatabaseName("ix_search_event_results_job_id") + .HasFilter("job_id IS NOT NULL"); + + b.HasIndex("SearchEventId") + .HasDatabaseName("ix_search_event_results_search_event_id"); + + b.ToTable("search_event_results", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.SearchMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("IsRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_read"); + + b.Property("IsSeeded") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("is_seeded"); + + b.Property("JobId") + .HasColumnType("text") + .HasColumnName("job_id"); + + b.Property("ReadAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("read_at_utc"); + + b.Property("ReadByAdminSub") + .HasColumnType("text") + .HasColumnName("read_by_admin_sub"); + + b.Property("SessionId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("session_id"); + + b.Property("SubmittedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("submitted_at_utc"); + + b.Property("WhatGot") + .HasColumnType("text") + .HasColumnName("what_got"); + + b.Property("WhatLookingFor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("what_looking_for"); + + b.HasKey("Id"); + + b.HasIndex("IsRead") + .HasDatabaseName("ix_search_messages_is_read"); + + b.HasIndex("JobId") + .HasDatabaseName("ix_search_messages_job_id") + .HasFilter("job_id IS NOT NULL"); + + b.HasIndex("SessionId") + .HasDatabaseName("ix_search_messages_session_id"); + + b.HasIndex("SubmittedAtUtc") + .HasDatabaseName("ix_search_messages_submitted_at"); + + b.ToTable("search_messages", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.ShareToken", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CreatedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at_utc"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("created_by"); + + b.Property("Label") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)") + .HasColumnName("label"); + + b.Property("RevokedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("revoked_at_utc"); + + b.Property("Surface") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("surface"); + + b.Property("TokenHash") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("token_hash"); + + b.HasKey("Id"); + + b.HasIndex("TokenHash") + .HasDatabaseName("ix_share_tokens_token_hash"); + + b.ToTable("share_tokens", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.AdminSectionAccess", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SectionKey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "SectionKey") + .IsUnique(); + + b.ToTable("AdminSectionAccesses"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.AppLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Category") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CorrelationId") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("EventId") + .HasColumnType("integer"); + + b.Property("Exception") + .HasColumnType("text"); + + b.Property("Level") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text"); + + b.Property("RequestPath") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("StateJson") + .HasColumnType("jsonb"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("Category"); + + b.HasIndex("Level"); + + b.HasIndex("Timestamp") + .IsDescending(); + + b.ToTable("AppLogs"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ChangeRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AmendmentType") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CheckingExerciseId") + .HasColumnType("uuid"); + + b.Property("CrmId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("DecidedAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("DecisionTrace") + .HasColumnType("text"); + + b.Property("MatchedRuleId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OrganisationLaestab") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("OrganisationUrn") + .HasColumnType("bigint"); + + b.Property("Outcome") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("OutcomeKey") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("PupilFirstname") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("PupilId") + .HasColumnType("uuid"); + + b.Property("PupilSurname") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("PupilUpn") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ReferenceNumber") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("RequestType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("RequestTypeDescription") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("RulesVersion") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("Submitted") + .HasColumnType("timestamp without time zone"); + + b.Property("SubmittedByEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SubmittedById") + .HasColumnType("uuid"); + + b.Property("SubmittedByName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("WindowId") + .HasColumnType("uuid"); + + b.Property("WithdrawnAt") + .HasColumnType("timestamp with time zone"); + + b.Property("WithdrawnByEmail") + .HasColumnType("text"); + + b.Property("WorkerStatus") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("CheckingExerciseId"); + + b.HasIndex("CrmId") + .IsUnique() + .HasFilter("\"CrmId\" IS NOT NULL"); + + b.HasIndex("ReferenceNumber") + .IsUnique(); + + b.HasIndex("Status"); + + b.HasIndex("WindowId", "OrganisationUrn"); + + b.ToTable("ChangeRequests"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasDefaultValueSql("gen_random_uuid()"); + + b.Property("CheckingWindowId") + .HasColumnType("uuid"); + + b.Property("DisplayOnly") + .HasColumnType("boolean"); + + b.Property("EndDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExerciseType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ReplacesCheckingExerciseId") + .HasColumnType("uuid"); + + b.Property("SortOrder") + .HasColumnType("integer"); + + b.Property("StartDate") + .HasColumnType("timestamp without time zone"); + + b.Property("TabName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("TabOrder") + .HasColumnType("integer"); + + b.Property("UsesExerciseStorage") + .HasColumnType("boolean"); + + b.Property("VisibleFrom") + .HasColumnType("timestamp without time zone"); + + b.Property("VisibleUntil") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.HasIndex("ReplacesCheckingExerciseId"); + + b.HasIndex("CheckingWindowId", "ExerciseType") + .IsUnique() + .HasFilter("\"UsesExerciseStorage\" = false"); + + b.ToTable("CheckingExercises", null, t => + { + t.HasCheckConstraint("CK_CheckingExercises_TypeOrDisplayOnly", "\"ExerciseType\" IS NOT NULL OR (\"DisplayOnly\" AND \"UsesExerciseStorage\")"); + }); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasDefaultValueSql("gen_random_uuid()"); + + b.Property("CheckingWindowType") + .IsRequired() + .HasColumnType("text"); + + b.Property("EndDate") + .HasColumnType("timestamp without time zone"); + + b.Property("IngressFile") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("IngressFileChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("KeyStage") + .IsRequired() + .HasColumnType("text"); + + b.Property("NextOpportunity") + .HasColumnType("timestamp without time zone"); + + b.Property("Published") + .HasColumnType("boolean"); + + b.Property("SchemaFile") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("SchemaFileChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("StartDate") + .HasColumnType("timestamp without time zone"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TurnaroundCommitment") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.HasKey("Id"); + + b.ToTable("CheckingWindows"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindowDataset", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasDefaultValueSql("gen_random_uuid()"); + + b.Property("CheckingExerciseId") + .HasColumnType("uuid"); + + b.Property("CheckingWindowId") + .HasColumnType("uuid"); + + b.Property("Included") + .HasColumnType("boolean"); + + b.Property("IngressFile") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("IngressFileChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Required") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("SchemaFile") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("SchemaFileChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SortOrder") + .HasColumnType("integer"); + + b.Property("SourceFile") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("CheckingExerciseId", "Name") + .IsUnique(); + + b.ToTable("CheckingWindowDatasets"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ContentBlock", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AppearInSearch") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("BlockType") + .IsRequired() + .HasColumnType("text"); + + b.Property("ContentId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasDefaultValueSql("gen_random_uuid()"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("Key") + .IsRequired() + .HasColumnType("text"); + + b.Property("Keywords") + .HasColumnType("text"); + + b.Property("LastSeenAt") + .HasColumnType("timestamp with time zone"); + + b.Property("LastSeenPath") + .HasColumnType("text"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasComputedColumnSql("setweight(to_tsvector('english', coalesce(\"Keywords\", '')), 'A') || setweight(to_tsvector('english', coalesce(\"ValuePlainText\", '')), 'B')", true); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("text"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text"); + + b.Property("ValuePlainText") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue(""); + + b.HasKey("Id"); + + b.HasIndex("ContentId") + .IsUnique(); + + b.HasIndex("Key") + .IsUnique(); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "gin"); + + b.ToTable("ContentBlocks"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ContentBlockVersion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ContentBlockId") + .HasColumnType("integer"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text"); + + b.Property("VersionNumber") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ContentBlockId", "VersionNumber") + .IsUnique(); + + b.ToTable("ContentBlockVersions"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.Country", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.Property("Kind") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("OfficialName") + .IsRequired() + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.HasKey("Id"); + + b.HasIndex("Code") + .IsUnique(); + + b.HasIndex("Name"); + + b.ToTable("Countries"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.DeadLetterEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Attempts") + .HasColumnType("integer") + .HasColumnName("attempts"); + + b.Property("DeadLetteredAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("dead_lettered_at_utc"); + + b.Property("EnqueuedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("enqueued_at_utc"); + + b.Property("Payload") + .IsRequired() + .HasColumnType("text") + .HasColumnName("payload"); + + b.Property("PayloadHash") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("payload_hash"); + + b.Property("QueueName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("queue_name"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("reason"); + + b.HasKey("Id"); + + b.HasIndex("DeadLetteredAtUtc") + .HasDatabaseName("ix_queue_dead_letters_dead_lettered_at"); + + b.ToTable("queue_dead_letters", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.DevZendeskTicket", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("CreatedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at_utc"); + + b.Property("Priority") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("priority"); + + b.Property("RawJson") + .IsRequired() + .HasColumnType("text") + .HasColumnName("raw_json"); + + b.Property("ReferenceNumber") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("reference_number"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("status"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("subject"); + + b.Property("TicketId") + .HasColumnType("bigint") + .HasColumnName("ticket_id"); + + b.HasKey("Id"); + + b.HasIndex("CreatedAtUtc") + .HasDatabaseName("ix_dev_zendesk_outbox_created_at"); + + b.ToTable("dev_zendesk_outbox", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressNewLearner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AdmissionDate") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ChangeRequestId") + .HasColumnType("uuid"); + + b.Property("CorrectionId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CorrectionType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CycleMonth") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CycleYear") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("DateOfBirth") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EstablishmentNumber") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Forename") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("KeyStage") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("LearnerId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("LocalAuthority") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Postcode") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ReferenceNumber") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("RunId") + .HasColumnType("uuid"); + + b.Property("SchoolUrn") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Sex") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Surname") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("Uln") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Upn") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("YearGroup") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.HasKey("Id"); + + b.HasIndex("RunId"); + + b.ToTable("new_learners", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRemoveLearner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ChangeRequestId") + .HasColumnType("uuid"); + + b.Property("CorrectionId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CorrectionReason") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CorrectionType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CycleMonth") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CycleYear") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("DateOfBirth") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EstablishmentNumber") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Forename") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("KeyStage") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("LearnerId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("LocalAuthority") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ReferenceNumber") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("RemovalYear0") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("RemovalYear1") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("RemovalYear2") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("RunId") + .HasColumnType("uuid"); + + b.Property("Sex") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Surname") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("YearGroup") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.HasKey("Id"); + + b.HasIndex("RunId"); + + b.ToTable("remove_learners", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ExportDate") + .HasColumnType("date"); + + b.Property("FailureJson") + .HasColumnType("text"); + + b.Property("PreprocessedAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("StartedAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("StartedByEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("StartedById") + .HasColumnType("uuid"); + + b.Property("StartedByName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("TransferFailureReason") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)"); + + b.Property("TransferredAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("TransferredByName") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("WindowId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("StartedAtUtc"); + + b.HasIndex("WindowId"); + + b.ToTable("egress_runs", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRunOutput", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("FileName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("OutputRecordCount") + .HasColumnType("integer"); + + b.Property("OutputType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("RawRecordsJson") + .IsRequired() + .HasColumnType("text"); + + b.Property("RunId") + .HasColumnType("uuid"); + + b.Property("Sha256") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("SourceRecordCount") + .HasColumnType("integer"); + + b.Property("WindowId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RunId"); + + b.HasIndex("WindowId", "OutputType") + .IsUnique() + .HasDatabaseName("ix_egress_run_outputs_active_window_output") + .HasFilter("\"IsActive\" = TRUE"); + + b.ToTable("egress_run_outputs", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.OrganisationLogin", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasDefaultValueSql("gen_random_uuid()"); + + b.Property("Laestab") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("LoggedInAtUtc") + .HasColumnType("timestamp with time zone"); + + b.Property("OrganisationName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("character varying(500)"); + + b.Property("OrganisationUrn") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("LoggedInAtUtc"); + + b.HasIndex("OrganisationUrn", "LoggedInAtUtc"); + + b.ToTable("OrganisationLogins"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.PageNode", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AppearInSearch") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("CreatedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("DeletedBy") + .HasColumnType("text"); + + b.Property("DeletedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Keywords") + .HasColumnType("text"); + + b.Property("PageName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PageType") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasComputedColumnSql("setweight(to_tsvector('english', coalesce(\"Keywords\", '')), 'A') || setweight(to_tsvector('english', coalesce(\"Title\", '')), 'B') || setweight(to_tsvector('english', coalesce(\"Subtitle\", '')), 'C')", true); + + b.Property("Segment") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ShowInMenu") + .HasColumnType("boolean"); + + b.Property("SortOrder") + .HasColumnType("integer"); + + b.Property("Subtitle") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedBy") + .HasColumnType("text"); + + b.Property("UpdatedDate") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.HasIndex("Path") + .IsUnique() + .HasFilter("\"DeletedDate\" IS NULL"); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "gin"); + + b.ToTable("PageNodes"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.PageNodeVersion", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BodyPlainText") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue(""); + + b.Property("Content") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("CreatedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("IsCurrent") + .HasColumnType("boolean"); + + b.Property("MinorVersion") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("PageNodeId") + .HasColumnType("uuid"); + + b.Property("PublishFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("PublishTo") + .HasColumnType("timestamp with time zone"); + + b.Property("SearchVector") + .IsRequired() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("tsvector") + .HasComputedColumnSql("setweight(to_tsvector('english', coalesce(\"BodyPlainText\", '')), 'D')", true); + + b.Property("UpdatedBy") + .HasColumnType("text"); + + b.Property("UpdatedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("VersionId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("SearchVector"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("SearchVector"), "gin"); + + b.HasIndex("PageNodeId", "IsCurrent"); + + b.HasIndex("PageNodeId", "VersionId") + .IsUnique(); + + b.ToTable("PageNodeVersions"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.QueueMessageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("id"); + + b.Property("Attempts") + .HasColumnType("integer") + .HasColumnName("attempts"); + + b.Property("EnqueuedAtUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("enqueued_at_utc"); + + b.Property("Payload") + .IsRequired() + .HasColumnType("text") + .HasColumnName("payload"); + + b.Property("QueueName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("queue_name"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("status"); + + b.Property("VisibleAfterUtc") + .HasColumnType("timestamp with time zone") + .HasColumnName("visible_after_utc"); + + b.HasKey("Id"); + + b.HasIndex("QueueName", "Status", "VisibleAfterUtc") + .HasDatabaseName("ix_queue_messages_claim"); + + b.ToTable("queue_messages", (string)null); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.RulesConfigVersion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConfigType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("text"); + + b.Property("VersionNumber") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ConfigType", "VersionNumber") + .IsUnique(); + + b.ToTable("RulesConfigVersions"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.Setting", b => + { + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Value") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue(""); + + b.HasKey("Key"); + + b.ToTable("Settings"); + }); + + modelBuilder.Entity("DfE.CheckPerformance.Persistence.Entities.SearchEventResult", b => + { + b.HasOne("DfE.CheckPerformance.Persistence.Entities.SearchEvent", null) + .WithMany() + .HasForeignKey("SearchEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ChangeRequest", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", null) + .WithMany() + .HasForeignKey("CheckingExerciseId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", null) + .WithMany() + .HasForeignKey("WindowId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", null) + .WithMany("CheckingExercises") + .HasForeignKey("CheckingWindowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", null) + .WithMany() + .HasForeignKey("ReplacesCheckingExerciseId") + .OnDelete(DeleteBehavior.Restrict); + + b.OwnsOne("DfE.CheckPerformanceData.Persistence.Entities.ExerciseValidated", "Validated", b1 => + { + b1.Property("CheckingExerciseId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b1.Property("IngressValidationChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b1.Property("SchemaValidationChecksum") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b1.Property("ValidatedAt") + .HasColumnType("timestamp with time zone"); + + b1.HasKey("CheckingExerciseId"); + + b1.ToTable("CheckingExercises"); + + b1.WithOwner() + .HasForeignKey("CheckingExerciseId"); + }); + + b.Navigation("Validated"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindowDataset", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", null) + .WithMany("Datasets") + .HasForeignKey("CheckingExerciseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ContentBlockVersion", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.ContentBlock", "ContentBlock") + .WithMany("Versions") + .HasForeignKey("ContentBlockId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContentBlock"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressNewLearner", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", null) + .WithMany() + .HasForeignKey("RunId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRemoveLearner", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", null) + .WithMany() + .HasForeignKey("RunId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", null) + .WithMany() + .HasForeignKey("WindowId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRunOutput", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", null) + .WithMany("Outputs") + .HasForeignKey("RunId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.PageNode", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.PageNode", null) + .WithMany() + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict) + .HasConstraintName("FK_PageNode_PageNode_ParentId"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.PageNodeVersion", b => + { + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.PageNode", "PageNode") + .WithMany("Versions") + .HasForeignKey("PageNodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PageNode"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", b => + { + b.Navigation("Datasets"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", b => + { + b.Navigation("CheckingExercises"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.ContentBlock", b => + { + b.Navigation("Versions"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.EgressRun", b => + { + b.Navigation("Outputs"); + }); + + modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.PageNode", b => + { + b.Navigation("Versions"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.cs b/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.cs new file mode 100644 index 000000000..3277eac84 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Persistence/Migrations/20260923113411_AddCheckingExerciseFramework.cs @@ -0,0 +1,194 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DfE.CheckPerformanceData.Persistence.Migrations +{ + /// + public partial class AddCheckingExerciseFramework : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_CheckingExercises_CheckingWindowId_ExerciseType", + table: "CheckingExercises"); + + migrationBuilder.AlterColumn( + name: "ExerciseType", + table: "CheckingExercises", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50); + + migrationBuilder.AddColumn( + name: "DisplayOnly", + table: "CheckingExercises", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsEnabled", + table: "CheckingExercises", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Name", + table: "CheckingExercises", + type: "character varying(200)", + maxLength: 200, + nullable: true); + + migrationBuilder.AddColumn( + name: "ReplacesCheckingExerciseId", + table: "CheckingExercises", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "TabName", + table: "CheckingExercises", + type: "character varying(100)", + maxLength: 100, + nullable: true); + + migrationBuilder.AddColumn( + name: "TabOrder", + table: "CheckingExercises", + type: "integer", + nullable: false, + defaultValue: 0); + + // Every row that exists now was written against the type-based blob layout. Defaulting + // this to true would tell the reader to look under exercises/{id}/, where those rows have + // nothing, and every school would see an empty page. + migrationBuilder.AddColumn( + name: "UsesExerciseStorage", + table: "CheckingExercises", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "VisibleFrom", + table: "CheckingExercises", + type: "timestamp without time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "VisibleUntil", + table: "CheckingExercises", + type: "timestamp without time zone", + nullable: true); + + // New rows use the new layout; only the backfill above is false. + migrationBuilder.Sql("ALTER TABLE \"CheckingExercises\" ALTER COLUMN \"UsesExerciseStorage\" SET DEFAULT TRUE;"); + + migrationBuilder.CreateIndex( + name: "IX_CheckingExercises_CheckingWindowId_ExerciseType", + table: "CheckingExercises", + columns: new[] { "CheckingWindowId", "ExerciseType" }, + unique: true, + filter: "\"UsesExerciseStorage\" = false"); + + migrationBuilder.CreateIndex( + name: "IX_CheckingExercises_ReplacesCheckingExerciseId", + table: "CheckingExercises", + column: "ReplacesCheckingExerciseId"); + + migrationBuilder.AddCheckConstraint( + name: "CK_CheckingExercises_TypeOrDisplayOnly", + table: "CheckingExercises", + sql: "\"ExerciseType\" IS NOT NULL OR (\"DisplayOnly\" AND \"UsesExerciseStorage\")"); + + migrationBuilder.AddForeignKey( + name: "FK_CheckingExercises_CheckingExercises_ReplacesCheckingExercis~", + table: "CheckingExercises", + column: "ReplacesCheckingExerciseId", + principalTable: "CheckingExercises", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_CheckingExercises_CheckingExercises_ReplacesCheckingExercis~", + table: "CheckingExercises"); + + migrationBuilder.DropIndex( + name: "IX_CheckingExercises_CheckingWindowId_ExerciseType", + table: "CheckingExercises"); + + migrationBuilder.DropIndex( + name: "IX_CheckingExercises_ReplacesCheckingExerciseId", + table: "CheckingExercises"); + + migrationBuilder.DropCheckConstraint( + name: "CK_CheckingExercises_TypeOrDisplayOnly", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "DisplayOnly", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "IsEnabled", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "Name", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "ReplacesCheckingExerciseId", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "TabName", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "TabOrder", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "UsesExerciseStorage", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "VisibleFrom", + table: "CheckingExercises"); + + migrationBuilder.DropColumn( + name: "VisibleUntil", + table: "CheckingExercises"); + + migrationBuilder.AlterColumn( + name: "ExerciseType", + table: "CheckingExercises", + type: "character varying(50)", + maxLength: 50, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + migrationBuilder.CreateIndex( + name: "IX_CheckingExercises_CheckingWindowId_ExerciseType", + table: "CheckingExercises", + columns: new[] { "CheckingWindowId", "ExerciseType" }, + unique: true); + } + } +} diff --git a/src/DfE.CheckPerformanceData.Persistence/Migrations/PortalDbContextModelSnapshot.cs b/src/DfE.CheckPerformanceData.Persistence/Migrations/PortalDbContextModelSnapshot.cs index 3240b106c..fb4e9acbf 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Migrations/PortalDbContextModelSnapshot.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Migrations/PortalDbContextModelSnapshot.cs @@ -689,26 +689,60 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CheckingWindowId") .HasColumnType("uuid"); + b.Property("DisplayOnly") + .HasColumnType("boolean"); + b.Property("EndDate") .HasColumnType("timestamp without time zone"); b.Property("ExerciseType") - .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ReplacesCheckingExerciseId") + .HasColumnType("uuid"); + b.Property("SortOrder") .HasColumnType("integer"); b.Property("StartDate") .HasColumnType("timestamp without time zone"); + b.Property("TabName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("TabOrder") + .HasColumnType("integer"); + + b.Property("UsesExerciseStorage") + .HasColumnType("boolean"); + + b.Property("VisibleFrom") + .HasColumnType("timestamp without time zone"); + + b.Property("VisibleUntil") + .HasColumnType("timestamp without time zone"); + b.HasKey("Id"); + b.HasIndex("ReplacesCheckingExerciseId"); + b.HasIndex("CheckingWindowId", "ExerciseType") - .IsUnique(); + .IsUnique() + .HasFilter("\"UsesExerciseStorage\" = false"); - b.ToTable("CheckingExercises", (string)null); + b.ToTable("CheckingExercises", null, t => + { + t.HasCheckConstraint("CK_CheckingExercises_TypeOrDisplayOnly", "\"ExerciseType\" IS NOT NULL OR (\"DisplayOnly\" AND \"UsesExerciseStorage\")"); + }); }); modelBuilder.Entity("DfE.CheckPerformanceData.Persistence.Entities.CheckingWindow", b => @@ -1832,6 +1866,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("DfE.CheckPerformanceData.Persistence.Entities.CheckingExercise", null) + .WithMany() + .HasForeignKey("ReplacesCheckingExerciseId") + .OnDelete(DeleteBehavior.Restrict); + b.OwnsOne("DfE.CheckPerformanceData.Persistence.Entities.ExerciseValidated", "Validated", b1 => { b1.Property("CheckingExerciseId") diff --git a/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckYourPupilDataRepository.cs b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckYourPupilDataRepository.cs index 10e030c72..7cc65dbd1 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckYourPupilDataRepository.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckYourPupilDataRepository.cs @@ -7,6 +7,7 @@ // Aliased, not imported: WindowManagement also declares a CheckingWindowDto, which would make the // LandingPage one ambiguous here. using CheckingExerciseDto = DfE.CheckPerformanceData.Application.WindowManagement.CheckingExerciseDto; +using CheckingWindowDatasetDto = DfE.CheckPerformanceData.Application.WindowManagement.CheckingWindowDatasetDto; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; @@ -51,6 +52,7 @@ public async Task GetCheckingWindowAsync(Guid windowId) .Where(w => w.Id == windowId) .Select(w => new CheckingWindowDto { + Id = w.Id, EndDate = w.EndDate, Title = w.Title, KeyStage = w.KeyStage, @@ -59,16 +61,46 @@ public async Task GetCheckingWindowAsync(Guid windowId) TurnaroundCommitment = w.TurnaroundCommitment, NextOpportunity = w.NextOpportunity, // #315: ICheckingExerciseService answers "is this exercise open" from these rows, - // so every read path that reaches Web has to carry them. + // so every read path that reaches Web has to carry them. #466: the exercise tab + // builder needs the rest — TabName is what decides whether a row draws a tab at + // all, and Datasets is what lets it read the schema that shapes one. Mirrors the + // projection WindowRepository already carries for the admin summary page. Exercises = w.CheckingExercises .OrderBy(e => e.SortOrder) .Select(e => new CheckingExerciseDto { Id = e.Id, + UsesExerciseStorage = e.UsesExerciseStorage, + Name = e.Name, + TabName = e.TabName, + TabOrder = e.TabOrder, + IsEnabled = e.IsEnabled, + DisplayOnly = e.DisplayOnly, + VisibleFrom = e.VisibleFrom, + VisibleUntil = e.VisibleUntil, + WindowStart = w.StartDate, + WindowEnd = w.EndDate, + ReplacesCheckingExerciseId = e.ReplacesCheckingExerciseId, ExerciseType = e.ExerciseType, StartDate = e.StartDate, EndDate = e.EndDate, - SortOrder = e.SortOrder + SortOrder = e.SortOrder, + Datasets = e.Datasets + .OrderBy(d => d.SortOrder) + .Select(d => new CheckingWindowDatasetDto + { + Id = d.Id, + Name = d.Name, + IngressFile = d.IngressFile, + IngressFileChecksum = d.IngressFileChecksum, + SchemaFile = d.SchemaFile, + SchemaFileChecksum = d.SchemaFileChecksum, + Included = d.Included, + SourceFile = d.SourceFile, + Required = d.Required, + SortOrder = d.SortOrder + }) + .ToList() }) .ToList() }) diff --git a/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingDataCatalogue.cs b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingDataCatalogue.cs new file mode 100644 index 000000000..bf3ee22bc --- /dev/null +++ b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingDataCatalogue.cs @@ -0,0 +1,27 @@ +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Persistence.Contexts; +using Microsoft.EntityFrameworkCore; + +namespace DfE.CheckPerformanceData.Persistence.Repositories; + +public sealed class CheckingDataCatalogue(PortalDbContext db, TimeProvider clock) : ICheckingDataCatalogue +{ + public async Task> GetVisibleAsync(CancellationToken cancellationToken) + { + var now = clock.GetLocalNow().DateTime; + return await db.CheckingWindows.AsNoTracking() + .SelectMany(w => w.CheckingExercises + .Where(e => e.TabName != null && e.IsEnabled + && (e.VisibleFrom == null || e.VisibleFrom <= now) + && (e.VisibleUntil == null || e.VisibleUntil > now)) + .Select(e => new { Window = w, Exercise = e })) + .OrderBy(x => x.Exercise.TabOrder).ThenBy(x => x.Exercise.Id) + .Select(x => new CheckingDataExercise(x.Exercise.Id, x.Window.Id, + x.Exercise.Name ?? x.Exercise.TabName!, + x.Exercise.TabName!, x.Exercise.TabOrder, + x.Exercise.ExerciseType, x.Window.KeyStage, x.Exercise.IsEnabled, + x.Exercise.VisibleFrom, x.Exercise.VisibleUntil, x.Window.StartDate, x.Window.EndDate, + x.Exercise.StartDate, x.Exercise.EndDate, x.Exercise.ReplacesCheckingExerciseId, x.Exercise.UsesExerciseStorage, x.Exercise.DisplayOnly)) + .ToListAsync(cancellationToken); + } +} diff --git a/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingExerciseDefinitionRepository.cs b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingExerciseDefinitionRepository.cs new file mode 100644 index 000000000..2fbab23fa --- /dev/null +++ b/src/DfE.CheckPerformanceData.Persistence/Repositories/CheckingExerciseDefinitionRepository.cs @@ -0,0 +1,30 @@ +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Persistence.Contexts; +using DfE.CheckPerformanceData.Persistence.Entities; +using Microsoft.EntityFrameworkCore; + +namespace DfE.CheckPerformanceData.Persistence.Repositories; + +public sealed class CheckingExerciseDefinitionRepository(PortalDbContext db, IWindowRepository windows) : ICheckingExerciseDefinitionRepository +{ + public async Task GetAsync(Guid exerciseId, CancellationToken cancellationToken) + { + var windowId = await db.Set().Where(e => e.Id == exerciseId) + .Select(e => (Guid?)e.CheckingWindowId).SingleOrDefaultAsync(cancellationToken); + if (windowId is null) return null; + var window = await windows.GetByIdAsync(windowId.Value, cancellationToken); + return window is null ? null : new(window.Id, window.Exercises.Single(e => e.Id == exerciseId)); + } + + public async Task StampAsync(Guid exerciseId, DateTime validatedAt, string ingressChecksum, string schemaChecksum, CancellationToken cancellationToken) + { + var exercise = await db.Set().SingleAsync(e => e.Id == exerciseId, cancellationToken); + exercise.Validated = new ExerciseValidated + { + ValidatedAt = validatedAt, + IngressValidationChecksum = ingressChecksum, + SchemaValidationChecksum = schemaChecksum + }; + await db.SaveChangesAsync(cancellationToken); + } +} diff --git a/src/DfE.CheckPerformanceData.Persistence/Repositories/WindowRepository.cs b/src/DfE.CheckPerformanceData.Persistence/Repositories/WindowRepository.cs index d5f9b8daa..a728f0b60 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Repositories/WindowRepository.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Repositories/WindowRepository.cs @@ -35,6 +35,17 @@ await dbContext.CheckingWindows .Select(e => new CheckingExerciseDto { Id = e.Id, + UsesExerciseStorage = e.UsesExerciseStorage, + Name = e.Name, + TabName = e.TabName, + TabOrder = e.TabOrder, + IsEnabled = e.IsEnabled, + DisplayOnly = e.DisplayOnly, + VisibleFrom = e.VisibleFrom, + VisibleUntil = e.VisibleUntil, + WindowStart = w.StartDate, + WindowEnd = w.EndDate, + ReplacesCheckingExerciseId = e.ReplacesCheckingExerciseId, ExerciseType = e.ExerciseType, StartDate = e.StartDate, EndDate = e.EndDate, @@ -67,7 +78,7 @@ await dbContext.CheckingWindows .ToList() }) .ToListAsync(cancellationToken); - + public async Task GetByIdAsync(Guid id, CancellationToken cancellationToken) => await dbContext.CheckingWindows .AsNoTracking() @@ -91,6 +102,17 @@ await dbContext.CheckingWindows .Select(e => new CheckingExerciseDto { Id = e.Id, + UsesExerciseStorage = e.UsesExerciseStorage, + Name = e.Name, + TabName = e.TabName, + TabOrder = e.TabOrder, + IsEnabled = e.IsEnabled, + DisplayOnly = e.DisplayOnly, + VisibleFrom = e.VisibleFrom, + VisibleUntil = e.VisibleUntil, + WindowStart = w.StartDate, + WindowEnd = w.EndDate, + ReplacesCheckingExerciseId = e.ReplacesCheckingExerciseId, ExerciseType = e.ExerciseType, StartDate = e.StartDate, EndDate = e.EndDate, @@ -153,9 +175,11 @@ public async Task UpdateAsync(CheckingWindowDto window, CancellationToken cancel await dbContext.SaveChangesAsync(cancellationToken); } - // Exercises are keyed by type within a window (the unique index), datasets by name within an - // exercise: existing rows are updated in place so their Ids — and any files already uploaded - // against them — survive, new ones are added, and rows no longer wanted are removed. + // Keyed by id since #466. Type is no longer unique within a window, and a typeless share has + // no type to key on at all. An empty id is a row the wizard has just built. Datasets stay + // keyed by name within an exercise: existing rows are updated in place so their Ids — and any + // files already uploaded against them — survive, new ones are added, and rows no longer + // wanted are removed (or, for a configured exercise, disabled — see the sweep below). private void SyncExercises(CheckingWindow entity, List wanted) { if (wanted.Count == 0) @@ -166,18 +190,23 @@ private void SyncExercises(CheckingWindow entity, List want foreach (CheckingExerciseDto dto in wanted) { CheckingExercise? existing = - entity.CheckingExercises.SingleOrDefault(e => e.ExerciseType == dto.ExerciseType); + dto.Id != Guid.Empty + ? entity.CheckingExercises.SingleOrDefault(e => e.Id == dto.Id) + : entity.CheckingExercises.SingleOrDefault(e => e.ExerciseType == dto.ExerciseType); if (existing is null) { existing = new CheckingExercise { + Id = dto.Id == Guid.Empty ? Guid.NewGuid() : dto.Id, CheckingWindowId = entity.Id, + UsesExerciseStorage = true, ExerciseType = dto.ExerciseType, StartDate = dto.StartDate, EndDate = dto.EndDate, SortOrder = dto.SortOrder }; + dbContext.Set().Add(existing); entity.CheckingExercises.Add(existing); } else @@ -187,22 +216,34 @@ private void SyncExercises(CheckingWindow entity, List want // this loop only ever reconciled datasets. dbContext.Entry(existing).CurrentValues.SetValues(new { + dto.ExerciseType, dto.StartDate, dto.EndDate, dto.SortOrder }); } + existing.Name = dto.Name; + existing.TabName = dto.TabName; + existing.TabOrder = dto.TabOrder; + existing.IsEnabled = dto.IsEnabled; + existing.DisplayOnly = dto.DisplayOnly; + existing.VisibleFrom = dto.VisibleFrom; + existing.VisibleUntil = dto.VisibleUntil; + existing.ReplacesCheckingExerciseId = dto.ReplacesCheckingExerciseId; existing.Validated = StampFor(dto); SyncDatasets(entity, existing, dto.Datasets); } foreach (CheckingExercise stale in entity.CheckingExercises - .Where(e => wanted.All(x => x.ExerciseType != e.ExerciseType)) + .Where(e => wanted.All(x => x.Id != e.Id && (x.Id != Guid.Empty || x.ExerciseType != e.ExerciseType))) .ToList()) { - entity.CheckingExercises.Remove(stale); + // A configured release is history: its blobs and its change requests point at this row. + // Hide it instead of destroying it. A row the wizard never configured is still deleted. + if (stale.TabName is not null) stale.IsEnabled = false; + else entity.CheckingExercises.Remove(stale); } } @@ -237,6 +278,10 @@ private static void SyncDatasets( continue; } + existing.Required = dto.Required; + existing.SortOrder = dto.SortOrder; + existing.Included = dto.Included; + existing.SourceFile = dto.SourceFile; existing.IngressFile = dto.IngressFile; existing.IngressFileChecksum = dto.IngressFileChecksum; existing.SchemaFile = dto.SchemaFile; @@ -358,6 +403,16 @@ public async Task CreateAsync(CheckingWindowDto window, Cance { entity.CheckingExercises.Add(new CheckingExercise { + Id = dto.Id == Guid.Empty ? Guid.NewGuid() : dto.Id, + UsesExerciseStorage = true, + Name = dto.Name, + TabName = dto.TabName, + TabOrder = dto.TabOrder, + IsEnabled = dto.IsEnabled, + DisplayOnly = dto.DisplayOnly, + VisibleFrom = dto.VisibleFrom, + VisibleUntil = dto.VisibleUntil, + ReplacesCheckingExerciseId = dto.ReplacesCheckingExerciseId, ExerciseType = dto.ExerciseType, StartDate = dto.StartDate, EndDate = dto.EndDate, @@ -389,6 +444,17 @@ public async Task CreateAsync(CheckingWindowDto window, Cance .Select(e => new CheckingExerciseDto { Id = e.Id, + UsesExerciseStorage = e.UsesExerciseStorage, + Name = e.Name, + TabName = e.TabName, + TabOrder = e.TabOrder, + IsEnabled = e.IsEnabled, + DisplayOnly = e.DisplayOnly, + VisibleFrom = e.VisibleFrom, + VisibleUntil = e.VisibleUntil, + WindowStart = entity.StartDate, + WindowEnd = entity.EndDate, + ReplacesCheckingExerciseId = e.ReplacesCheckingExerciseId, ExerciseType = e.ExerciseType, StartDate = e.StartDate, EndDate = e.EndDate, diff --git a/src/DfE.CheckPerformanceData.Persistence/Seeding/DevDataSeeder.cs b/src/DfE.CheckPerformanceData.Persistence/Seeding/DevDataSeeder.cs index f57c3806b..a1a612116 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Seeding/DevDataSeeder.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Seeding/DevDataSeeder.cs @@ -5,6 +5,10 @@ namespace DfE.CheckPerformanceData.Persistence.Seeding; public sealed class DevDataSeeder(IPortalDbContext dbContext) { public static readonly Guid Post16IngressCheckingWindowId = Guid.Parse("BA9A1FD7-3EC6-44A2-A58F-21F7C289A560"); + // A 16-19 window seen in February: opened in the autumn, pupil data checking long shut, + // results enquiry still open with the first late results file in, and the third Summary + // exercise (light touch revised data share) showing. Ingested from files like the window above. + public static readonly Guid Post16FebruaryCheckingWindowId = Guid.Parse("5E2C7A19-8D4B-4F63-9A0E-6B1D3C8F2A74"); public static readonly Guid KeyStage4JuneCheckingWindowId = Guid.Parse("F34D285B-8660-4D12-9C30-787328DEAA0A"); public static readonly Guid ClosedKeyStage4JuneCheckingWindowId = Guid.Parse("44AEDD2C-7F3E-4F83-BB3D-47FBFAC1C604"); public static readonly Guid Post16CheckingWindowId = Guid.Parse("6C2E1F4A-9B7D-4E38-8A15-3D9C2B4E7F01"); diff --git a/src/DfE.CheckPerformanceData.Persistence/Seeding/SeedCheckingWindows.cs b/src/DfE.CheckPerformanceData.Persistence/Seeding/SeedCheckingWindows.cs index ce83f325e..b3a71b89d 100644 --- a/src/DfE.CheckPerformanceData.Persistence/Seeding/SeedCheckingWindows.cs +++ b/src/DfE.CheckPerformanceData.Persistence/Seeding/SeedCheckingWindows.cs @@ -1,3 +1,4 @@ +using DfE.CheckPerformanceData.Application.ResultsEnquiry; using DfE.CheckPerformanceData.Domain.Enums; using DfE.CheckPerformanceData.Persistence.Contexts; using DfE.CheckPerformanceData.Persistence.Entities; @@ -142,28 +143,23 @@ public static async Task ExecuteSeed(IPortalDbContext dbContext, Guid openKs4Win pupilDataEnd: closedPost16PupilDataEnd) }; + // Two windows ingested from the files under Data/Ingress: one at the start of the Autumn + // window today, and one seen in February, four months in. var ingressStart = DateTime.Today; var ingressEnd = ingressStart.AddMonths(1).AddHours(17); - var ingressExercises = ExercisesFor(CheckingWindowType.Post16, ingressStart, ingressEnd); - foreach (var exercise in ingressExercises) - { - exercise.EndDate = ingressEnd; - } - - var post16IngressWindow = new CheckingWindow - { - Id = DevDataSeeder.Post16IngressCheckingWindowId, - StartDate = ingressStart, - EndDate = ingressEnd, - KeyStage = KeyStages.Post16, - CheckingWindowType = CheckingWindowType.Post16, - Title = "16 to 19 ingress", - TurnaroundCommitment = "updated in Spring", - CheckingExercises = ingressExercises - }; + var post16IngressWindow = IngestedPost16Window( + DevDataSeeder.Post16IngressCheckingWindowId, "16 to 19 ingress", + start: ingressStart, pupilDataEnd: ingressEnd, end: ingressEnd, + currentSummary: 0, resultsFiles: [ResultsFileTags.Post16Main]); + var februaryStart = DateTime.Today.AddMonths(-4); + var post16FebruaryWindow = IngestedPost16Window( + DevDataSeeder.Post16FebruaryCheckingWindowId, "16 to 19 February", + start: februaryStart, pupilDataEnd: februaryStart.AddDays(14).AddHours(17), end: DateTime.Today.AddMonths(2).AddHours(17), + currentSummary: 2, resultsFiles: [ResultsFileTags.Post16Main, ResultsFileTags.Post16LateResults1]); await dbContext.CheckingWindows.AddRangeAsync( post16IngressWindow, + post16FebruaryWindow, openKs4JuneWindow, closedKs4JuneWindow, openPost16Window, @@ -172,4 +168,82 @@ await dbContext.CheckingWindows.AddRangeAsync( await dbContext.SaveChangesAsync(); } -} \ No newline at end of file + + /// + /// A 16-19 window whose exercises are ingested from the files under Data/Ingress by + /// SeedPost16Ingress. Pupil data checking runs a fortnight from the start and results enquiry + /// to the end, so a start in the past stages a window where only enquiry is still open. + /// + /// Which of the four Summary exercises is enabled (0 = Autumn CE). + /// The results files that have landed, as . + private static CheckingWindow IngestedPost16Window(Guid id, string title, DateTime start, DateTime pupilDataEnd, + DateTime end, int currentSummary, IReadOnlyList resultsFiles) + { + var exercises = ExercisesFor(CheckingWindowType.Post16, start, end, pupilDataEnd); + foreach (var exercise in exercises) exercise.IsEnabled = true; + + var students = exercises.Single(e => e.ExerciseType == CheckingExerciseType.PupilData); + students.Name = "Pupil data checking"; + students.TabName = "Students"; + students.TabOrder = 200; + students.SortOrder = 1; + + var results = exercises.Single(e => e.ExerciseType == CheckingExerciseType.ResultsEnquiry); + results.Name = "Results enquiry"; + results.TabName = "Results"; + results.TabOrder = 300; + results.SortOrder = 2; + // One slot per results file that has landed, named by the tag it stamps, as the admin + // wizard names them. Only the main file is required. + foreach (var (tag, index) in resultsFiles.Select((tag, index) => (tag, index))) + results.Datasets.Add(new CheckingWindowDataset + { + Name = tag, SourceFile = tag, Included = null, Required = tag == ResultsFileTags.Post16Main, SortOrder = index + }); + + // The Summary tab is one record per school, pivoted on the page (each schema says + // "layout": "vertical"). Over the year it is four exercises, each replacing the last, and + // the supplier's file has a different column set for each (62, 102, 102 and 135 columns), + // so each dataset names the schema for its own shape. Display-only, so no journey or close + // action. One is enabled: an admin enables the next to swap the tab. + CheckingExercise? previous = null; + foreach (var ((name, dataset), index) in new[] + { + ("Autumn CE", "summary-autumn"), + ("Provisional value added", "summary-november-va"), + ("Light touch revised data share", "summary-november-va"), + ("Retention", "summary-retention") + }.Select((summary, index) => (summary, index))) + { + var summary = new CheckingExercise + { + Id = Guid.NewGuid(), + Name = name, + TabName = "Summary", + TabOrder = 100, + SortOrder = 0, + StartDate = start, + EndDate = end, + IsEnabled = index == currentSummary, + DisplayOnly = true, + UsesExerciseStorage = true, + ReplacesCheckingExerciseId = previous?.Id, + Datasets = [new CheckingWindowDataset { Name = dataset, Included = null, Required = true, SortOrder = 0 }] + }; + exercises.Add(summary); + previous = summary; + } + + return new CheckingWindow + { + Id = id, + StartDate = start, + EndDate = end, + KeyStage = KeyStages.Post16, + CheckingWindowType = CheckingWindowType.Post16, + Title = title, + TurnaroundCommitment = "updated in Spring", + CheckingExercises = exercises + }; + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataController.cs index 048da0bef..3364ee7b4 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataController.cs @@ -5,6 +5,8 @@ // Aliased, not imported: WindowManagement also declares a CheckingWindowDto, which would make the // LandingPage one ambiguous here. using ICheckingExerciseService = DfE.CheckPerformanceData.Application.WindowManagement.ICheckingExerciseService; +using ICheckingDataReader = DfE.CheckPerformanceData.Application.WindowManagement.ICheckingDataReader; +using ExerciseCheckingWindowDto = DfE.CheckPerformanceData.Application.WindowManagement.CheckingWindowDto; using LearnerNoun = DfE.CheckPerformanceData.Application.WindowManagement.LearnerNoun; using DfE.CheckPerformanceData.Web.Authentication; using DfE.CheckPerformanceData.Web.Common; @@ -12,6 +14,7 @@ using DfE.CheckPerformanceData.Web.Analytics; using DfE.CheckPerformanceData.Web.Session; using Microsoft.AspNetCore.Mvc; +using System.IO.Compression; namespace DfE.CheckPerformanceData.Web.Controllers.CheckYourPupilData; @@ -19,7 +22,8 @@ namespace DfE.CheckPerformanceData.Web.Controllers.CheckYourPupilData; // goes through ICheckingExerciseService, which owns the only clock in that path. public sealed class CheckYourPupilDataController(ICheckYourPupilDataService checkYourPupilDataService, ICurrentUserService currentUserService, IAnalyticsService analytics, - INextStepsService nextSteps, ICheckingExerciseService checkingExercises) : Controller + INextStepsService nextSteps, ICheckingExerciseService checkingExercises, + IExerciseTabBuilder tabBuilder, IExerciseDisplayService display, ICheckingDataReader checkingDataReader) : Controller { private const int PageSize = 10; private const int MaxSearchLength = 100; @@ -28,28 +32,50 @@ public sealed class CheckYourPupilDataController(ICheckYourPupilDataService chec public async Task Index( Guid windowId, int includedPage = 0, int nonIncludedPage = 0, int resultsPage = 0, - string? includedSearch = null, string? nonIncludedSearch = null, string? resultsSearch = null) + string? includedSearch = null, string? nonIncludedSearch = null, string? resultsSearch = null, + string? studentDataset = null, string? studentSearch = null, int studentPage = 0) { if (includedSearch?.Length > MaxSearchLength) includedSearch = null; if (nonIncludedSearch?.Length > MaxSearchLength) nonIncludedSearch = null; if (resultsSearch?.Length > MaxSearchLength) resultsSearch = null; + if (studentSearch?.Length > MaxSearchLength) studentSearch = null; HttpContext.Session.ClearRequestState(windowId); - var model = await BuildIndexModelAsync(windowId, includedPage, nonIncludedPage, resultsPage, includedSearch, nonIncludedSearch, resultsSearch); + var model = await BuildIndexModelAsync(windowId, includedPage, nonIncludedPage, resultsPage, + includedSearch, nonIncludedSearch, resultsSearch, studentDataset, studentSearch, studentPage); return View(model); } [Route("CheckYourPupilData/{windowId}/download/all")] public async Task DownloadAll(Guid windowId) { + // The exercise tabs, rebuilt for this school. A window with schema-backed datasets zips + // one CSV per dataset instead; every KS2 and KS4 window today draws no exercise tabs, so + // this falls straight through to the pupil-inclusion zip below, exactly as before. + var model = await BuildIndexModelAsync(windowId, 0, 0, 0, null, null, null); + var window = await checkYourPupilDataService.GetCheckingWindowAsync(windowId); + + var datasets = model.CheckingExerciseTabs.SelectMany(GetDatasets).ToList(); + if (datasets.Count > 0) + { + using var archiveBytes = new MemoryStream(); + await using (var archive = new ZipArchive(archiveBytes, ZipArchiveMode.Create, leaveOpen: true)) + { + foreach (var dataset in datasets) + { + await using var entry = await archive.CreateEntry(dataset.FileName).OpenAsync(); + await entry.WriteAsync(display.Csv(dataset)); + } + } + return File(archiveBytes.ToArray(), "application/zip", GenerateZipFileName(window)); + } + var included = await checkYourPupilDataService.GetPupilCsvAsync(windowId, included: true); var nonIncluded = await checkYourPupilDataService.GetPupilCsvAsync(windowId, included: false); var includedCsv = PupilCsvGenerator.Generate(included); var nonIncludedCsv = PupilCsvGenerator.Generate(nonIncluded); - var window = await checkYourPupilDataService.GetCheckingWindowAsync(windowId); - using var ms = new MemoryStream(); await using (var zip = new System.IO.Compression.ZipArchive(ms, System.IO.Compression.ZipArchiveMode.Create, leaveOpen: true)) { @@ -83,6 +109,44 @@ public async Task DownloadIncluded(Guid windowId) return File(bytes, "text/csv", filename); } + // Rebuilds the tabs for this school and finds the dataset by exercise id and key, so an id + // from another window (or a dataset this window does not run) reaches nothing. + [Route("CheckYourPupilData/{windowId}/download/exercise/{exerciseId:guid}/{dataset}")] + public async Task DownloadExerciseDataset(Guid windowId, Guid exerciseId, string dataset) + { + if (string.IsNullOrWhiteSpace(currentUserService.OrganisationLaestab)) return Forbid(); + + var model = await BuildIndexModelAsync(windowId, 0, 0, 0, null, null, null); + var tab = model.CheckingExerciseTabs.SingleOrDefault(t => t.Exercise.Id == exerciseId); + var selected = tab?.Table?.Datasets.SingleOrDefault(d => d.Key == dataset) + ?? (tab?.Vertical?.Key == dataset ? tab.Vertical.Dataset : null); + + return selected is null ? NotFound() : File(display.Csv(selected), "text/csv", selected.FileName); + } + + // The raw JSON the ingress run wrote, unshaped by any schema. This is the endpoint the POC put + // on /check-data; that page is not ported, so it lives here with the tabs it belongs to. + [Route("CheckYourPupilData/{windowId}/download/exercise/{exerciseId:guid}/json")] + public async Task DownloadExerciseJson(Guid windowId, Guid exerciseId, + CancellationToken cancellationToken) + { + if (string.IsNullOrWhiteSpace(currentUserService.OrganisationLaestab)) return Forbid(); + + var model = await BuildIndexModelAsync(windowId, 0, 0, 0, null, null, null); + var tab = model.CheckingExerciseTabs.SingleOrDefault(t => t.Exercise.Id == exerciseId); + if (tab is null) return NotFound(); + + // Re-read rather than re-serialise the parsed rows: the file a school downloads must be + // the file the run produced, byte for byte. + var bytes = await checkingDataReader.ReadAsync(tab.Exercise, + currentUserService.OrganisationLaestab!, cancellationToken); + + return bytes is null ? NotFound() : File(bytes, "application/json", $"{tab.Exercise.TabName}.json"); + } + + private static IEnumerable GetDatasets(ExerciseTab tab) => + tab.Table?.Datasets ?? (tab.Vertical is not null ? [tab.Vertical.Dataset] : []); + private string GenerateZipFileName(CheckingWindowDto window) { var urn = currentUserService.OrganisationUrn; @@ -170,7 +234,10 @@ private async Task BuildIndexModelAsync( int resultsPage, string? includedSearch, string? nonIncludedSearch, - string? resultsSearch) + string? resultsSearch, + string? studentDataset = null, + string? studentSearch = null, + int studentPage = 0) { var (includedTable, includedTotal) = await checkYourPupilDataService.GetPupilTableAsync(windowId, included: true, includedSearch, includedPage, PageSize); var (nonIncludedTable, nonIncludedTotal) = await checkYourPupilDataService.GetPupilTableAsync(windowId, included: false, nonIncludedSearch, nonIncludedPage, PageSize); @@ -198,6 +265,20 @@ private async Task BuildIndexModelAsync( // the id. Every render of this page re-stamps both. HttpContext.Session.SetSelectedWindow(windowId, window.CheckingWindowType); + // The tab builder wants WindowManagement's CheckingWindowDto (it carries the exercises' + // TabName and Datasets, which the landing page's own DTO has no use for and does not + // build on that path). window.Exercises is already that type, so this is a plain reshape, + // not a second read. + var exerciseTabs = await tabBuilder.BuildAsync( + new ExerciseCheckingWindowDto + { + Id = window.Id, Title = window.Title, EndDate = window.EndDate, + KeyStage = window.KeyStage, CheckingWindowType = window.CheckingWindowType, + StartDate = window.StartDate, Exercises = window.Exercises + }, + currentUserService.OrganisationLaestab, studentDataset, studentSearch, studentPage, + PageSize, HttpContext.RequestAborted); + List sections = [ new() @@ -258,6 +339,9 @@ private async Task BuildIndexModelAsync( { SelectedNextStep = journey.SelectedNextStep, WindowId = windowId.ToString(), + // Empty means this window's exercises draw no tabs — every KS2 and KS4 window today — + // and the view falls back to the inclusion tabs it has always drawn. + CheckingExerciseTabs = exerciseTabs, WindowTitle = window.Title, Sections = sections, ResultsSection = resultsSection, diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataViewModel.cs b/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataViewModel.cs index c1b4fbd7a..45c56a1fa 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataViewModel.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/CheckYourPupilData/CheckYourPupilDataViewModel.cs @@ -7,6 +7,15 @@ public sealed class CheckYourPupilDataViewModel { public required string WindowId { get; init; } + /// + /// One tab per visible exercise that draws a tab (#466), rendered from its own schemas. Empty + /// means this window's exercises draw no tabs — every window configured before #466 — and the + /// view falls back to / exactly as it always + /// has. Defaulted rather than required for the same reason as : this + /// class is also the NextStep POST's model-binding target. + /// + public IReadOnlyList CheckingExerciseTabs { get; init; } = []; + /// The page's pupil tables, in display order. public required IReadOnlyList Sections { get; init; } diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/IngressFolderBrowseViewModel.cs b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/IngressFolderBrowseViewModel.cs index 061611dcd..bae052837 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/IngressFolderBrowseViewModel.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/IngressFolderBrowseViewModel.cs @@ -35,8 +35,17 @@ public class IngressFolderBrowseViewModel /// The checking exercise that consumes this dataset (#319). Part of every link on the page, /// because a dataset name is only unique within one exercise. /// - public CheckingExerciseType Exercise { get; init; } + public CheckingExerciseType? Exercise { get; init; } + + /// + /// The exercise's own id (#466). Every link on this page addresses the exercise by id when one + /// is known, because two exercises of the same kind — or a display-only exercise with no kind + /// at all — can both hold a dataset with this same name. + /// + public Guid? ExerciseId { get; init; } /// Route prefix shared by every link and the form action on this page. - public string BaseUrl => $"/admin/windows/{WindowId}/{Exercise}/ingress-file/{Dataset}"; + public string BaseUrl => ExerciseId is not null + ? $"/admin/windows/{WindowId}/exercises/{ExerciseId}/ingress-file/{Dataset}" + : $"/admin/windows/{WindowId}/{Exercise}/ingress-file/{Dataset}"; } \ No newline at end of file diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/AddExerciseDataItem.cs b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/AddExerciseDataItem.cs new file mode 100644 index 000000000..e2c8f4183 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/AddExerciseDataItem.cs @@ -0,0 +1,25 @@ +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace DfE.CheckPerformanceData.Web.Controllers.ViewModels.WindowAdmin; + +public sealed class AddExerciseDataItem : AdminPage +{ + [Required(ErrorMessage = "Enter a name for this data file")] + [StringLength(50, ErrorMessage = "The name must be 50 characters or fewer")] + [RegularExpression("[a-z0-9][a-z0-9_-]*", ErrorMessage = "Use lowercase letters, numbers, hyphens or underscores")] + public string? Name { get; set; } + + public bool Required { get; set; } = true; + + [RegularExpression("file|included|excluded", ErrorMessage = "Select how pupil inclusion is supplied")] + public string Inclusion { get; set; } = "file"; + + public string? SourceFile { get; set; } + + [BindNever] + public string ExerciseName { get; set; } = string.Empty; + + [BindNever] + public IReadOnlyList SourceOptions { get; set; } = []; +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/CreateCheckingExerciseItem.cs b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/CreateCheckingExerciseItem.cs new file mode 100644 index 000000000..1f817f542 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/CreateCheckingExerciseItem.cs @@ -0,0 +1,71 @@ +using System.ComponentModel.DataAnnotations; +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Domain.Enums; +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace DfE.CheckPerformanceData.Web.Controllers.ViewModels.WindowAdmin; + +public sealed class CreateCheckingExerciseItem : AdminPage, IValidatableObject +{ + [BindNever] + public CheckingExerciseDto? DataExercise { get; set; } + + [BindNever] + public bool IsEditing { get; set; } + + [BindNever] + public bool TabNameOptional { get; set; } + + public string PageTitle => IsEditing ? "Edit checking exercise" : "Add checking exercise"; + public string SubmitLabel => IsEditing ? "Save changes" : "Add checking exercise"; + + [BindNever] + public string WindowTitle { get; set; } = string.Empty; + + [Required(ErrorMessage = "Enter an exercise name")] + [StringLength(200, ErrorMessage = "Exercise name must be 200 characters or fewer")] + public string? Name { get; set; } + + [EnumDataType(typeof(CheckingExerciseType), ErrorMessage = "Select a valid exercise type")] + public CheckingExerciseType? ExerciseType { get; set; } + + [StringLength(100, ErrorMessage = "Tab name must be 100 characters or fewer")] + public string? TabName { get; set; } + + [Required(ErrorMessage = "Enter a tab order")] + [Range(0, int.MaxValue, ErrorMessage = "Tab order must be 0 or more")] + public int? TabOrder { get; set; } = 0; + + [Required(ErrorMessage = "Enter a display order")] + [Range(0, int.MaxValue, ErrorMessage = "Display order must be 0 or more")] + public int? SortOrder { get; set; } = 0; + + public bool IsEnabled { get; set; } + public bool DisplayOnly { get; set; } + public DateTime? VisibleFrom { get; set; } + public DateTime? VisibleUntil { get; set; } + public Guid? ReplacesCheckingExerciseId { get; set; } + + public ExerciseDatesItem Dates { get; set; } = new() + { + StartHour = ExerciseDatesItem.DefaultStartHour, + EndHour = ExerciseDatesItem.DefaultEndHour + }; + + [BindNever] + public IReadOnlyList ReplacementOptions { get; set; } = []; + + public IEnumerable Validate(ValidationContext validationContext) + { + if (!DisplayOnly && ExerciseType is null) + yield return new ValidationResult("Select an exercise type for an exercise with journeys", [nameof(ExerciseType)]); + + if (Dates.StartHour is >= 0 and <= 23 && Dates.StartMinute is >= 0 and <= 59 + && Dates.EndHour is >= 0 and <= 23 && Dates.EndMinute is >= 0 and <= 59 + && Dates.EndDateTime < Dates.StartDateTime) + yield return new ValidationResult("End date cannot occur before the start date", ["Dates.EndDate"]); + + if (VisibleFrom is not null && VisibleUntil <= VisibleFrom) + yield return new ValidationResult("Visible until must be after visible from", [nameof(VisibleUntil)]); + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/ValidationViewModel.cs b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/ValidationViewModel.cs index 57d8066c4..608ef2233 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/ValidationViewModel.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowAdmin/ValidationViewModel.cs @@ -11,5 +11,12 @@ public class ValidationViewModel : AdminPage public ProcessingResult? ProcessingResult { get; set; } + /// True only on the exercise-id addressed route (#466 slice 2/3), which is the only + /// one passes a + /// clearExistingFiles flag through to ICheckingExerciseIngress. The kind-addressed + /// route's own run has never supported wiping previous output, so the checkbox would do + /// nothing there and must not be shown. + public bool ShowClearExistingFiles { get; set; } + private bool ValidateOnly { get; set; } = true; } diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowViewModel.cs b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowViewModel.cs index de58992c8..6bb81aa46 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowViewModel.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/ViewModels/WindowViewModel.cs @@ -72,17 +72,36 @@ public string CheckingWindowTypeLink { public string ExercisesLink => $"{BaseEditUrl}/exercises"; + /// Every section's Add checking exercise link (#466 slice 3) goes here, keyed by + /// window id — . + public string AddExerciseLink => $"{BaseEditUrl}/exercises/new"; + public string? OutputPath { get; set; } public bool IsPublished { get; set; } = false; public Guid? PublishedId { get; set; } } -/// One checking exercise on the window summary page. +/// One checking exercise on the window summary page (#466 slice 3). A display-only data +/// share (null ) appears here on the same footing as a kind-bearing +/// exercise — every link is addressed by , never by kind, because a data share has +/// no kind to route by. public sealed class ExerciseSummarySection { public required Guid WindowId { get; init; } - public required CheckingExerciseType ExerciseType { get; init; } - public required string Label { get; init; } + public required Guid Id { get; init; } + public required CheckingExerciseType? ExerciseType { get; init; } + + /// The admin's own name for this exercise, falling back to the generic kind label + /// ("Data share") only when it has none — see ExerciseLabels.For(CheckingExerciseType?) + /// in SummaryController. + public required string Name { get; init; } + + /// The exercise's kind, or "Data share" when it has none. Distinct from , + /// which is the admin's own label for this exercise. + public required string KindLabel { get; init; } + + public string? TabName { get; init; } + public bool IsEnabled { get; init; } public required DateTime StartDate { get; init; } public required DateTime EndDate { get; init; } @@ -115,11 +134,22 @@ public sealed class ExerciseSummarySection public string StatusLabel => IsOpen ? "Open" : HasClosed ? "Closed" : "Upcoming"; public string StatusTagClass => IsOpen ? "govuk-tag--green" : HasClosed ? "govuk-tag--grey" : "govuk-tag--blue"; - public string DatesLink => $"/admin/windows/{WindowId}/exercises/{ExerciseType}/dates"; - public string ValidateLink => $"/admin/windows/{WindowId}/{ExerciseType}/validate"; - - // Closing does not depend on the exercise's files or on whether they ever validated: it is an - // admin decision about an exercise schools can currently use. + /// Everything about this exercise — name, tab, kind, dates, visibility, data files — + /// is edited on the one page (EditCheckingExerciseController.Edit), so the summary has a + /// single Edit link per section rather than a Change link per field. + public string EditLink => $"/admin/windows/{WindowId}/exercises/{Id}/edit"; + + /// Exercise-id addressed (#466 slice 2/3): the only route a display-only exercise can + /// use to validate, since it has no kind to name in the kind-addressed route. + public string ValidateLink => $"/admin/windows/{WindowId}/exercises/{Id}/validate"; + + // No IsValidatable-style gate beside this one: closing works regardless of the exercise's dates + // and regardless of whether its files ever validated. It is an admin decision, not a + // consequence of the clock — see ICloseExerciseService. + // + // Kind-addressed still: closing replays ChangeRequests, which are only ever routed to a kind + // via WhatToChangeCheckingExerciseMap, so a display-only exercise (no kind) can hold none to + // close. The view renders this action only when ExerciseType is not null. public string CloseLink => $"/admin/windows/{WindowId}/{ExerciseType}/close"; public string SendRequestsLink => $"/admin/windows/{WindowId}/{ExerciseType}/send-requests"; @@ -149,7 +179,7 @@ private bool HasValidDates public sealed class DatasetSummaryRow { public required Guid WindowId { get; init; } - public required CheckingExerciseType Exercise { get; init; } + public required Guid ExerciseId { get; init; } public required string Name { get; init; } public required string Label { get; init; } public string? IngressFile { get; init; } @@ -158,8 +188,10 @@ public sealed class DatasetSummaryRow /// The exercise cannot be validated until this slot holds both files (#324). public bool Required { get; init; } = true; - public string IngressFileLink => $"/admin/windows/{WindowId}/{Exercise}/ingress-file/{Name}"; - public string SchemaFileLink => $"/admin/windows/{WindowId}/{Exercise}/schema-file/{Name}"; + // Exercise-id addressed, same reason as ExerciseSummarySection.ValidateLink: a display-only + // exercise has no kind, so the kind-addressed route would not exist for it. + public string IngressFileLink => $"/admin/windows/{WindowId}/exercises/{ExerciseId}/ingress-file/{Name}"; + public string SchemaFileLink => $"/admin/windows/{WindowId}/exercises/{ExerciseId}/schema-file/{Name}"; public bool IsComplete => !string.IsNullOrWhiteSpace(IngressFile) && !string.IsNullOrWhiteSpace(SchemaFile); diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/CreateCheckingExerciseController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/CreateCheckingExerciseController.cs new file mode 100644 index 000000000..40e901591 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/CreateCheckingExerciseController.cs @@ -0,0 +1,77 @@ +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Web.Admin; +using DfE.CheckPerformanceData.Web.Admin.Nav; +using DfE.CheckPerformanceData.Web.Controllers.ViewModels.WindowAdmin; +using Microsoft.AspNetCore.Mvc; + +namespace DfE.CheckPerformanceData.Web.Controllers.WindowAdmin; + +[RequireAdminSection(AdminNavKeys.ManageWindow)] +public sealed class CreateCheckingExerciseController(IWindowService windowService, TimeProvider timeProvider) : Controller +{ + private const string PageView = "~/Views/WindowAdmin/CreateCheckingExercise.cshtml"; + + [HttpGet("admin/windows/{id:guid}/exercises/new")] + public async Task New(Guid id, CancellationToken cancellationToken) + { + var window = await windowService.GetByIdAsync(id, cancellationToken); + if (window is null) return NotFound(); + + var model = new CreateCheckingExerciseItem { WindowId = id }; + Decorate(model, window); + return View(PageView, model); + } + + [HttpPost("admin/windows/{id:guid}/exercises/new")] + [ValidateAntiForgeryToken] + public async Task Submit(Guid id, CreateCheckingExerciseItem model, CancellationToken cancellationToken) + { + if (id != model.WindowId) return BadRequest(); + + var window = await windowService.GetByIdAsync(id, cancellationToken); + if (window is null) return NotFound(); + + Decorate(model, window); + if (string.IsNullOrWhiteSpace(model.TabName)) + ModelState.AddModelError(nameof(model.TabName), "Enter a tab name"); + + if (model.ReplacesCheckingExerciseId is { } replacementId + && window.Exercises.All(e => e.Id != replacementId)) + ModelState.AddModelError(nameof(model.ReplacesCheckingExerciseId), "Select an exercise from this window"); + + if (ModelState.IsValid && model.Dates.StartDateTime < timeProvider.GetLocalNow().Date) + ModelState.AddModelError("Dates.StartDate", "Start date cannot occur in the past"); + + if (!ModelState.IsValid) return View(PageView, model); + + // Empty IDs are matched by type by the legacy wizard. Assign an identity here so that + // adding another release of the same type cannot overwrite an existing exercise. + window.Exercises.Add(new CheckingExerciseDto + { + Id = Guid.NewGuid(), + ExerciseType = model.ExerciseType, + Name = model.Name!.Trim(), + TabName = model.TabName!.Trim(), + TabOrder = model.TabOrder!.Value, + SortOrder = model.SortOrder!.Value, + IsEnabled = model.IsEnabled, + DisplayOnly = model.DisplayOnly, + VisibleFrom = model.VisibleFrom, + VisibleUntil = model.VisibleUntil, + ReplacesCheckingExerciseId = model.ReplacesCheckingExerciseId, + StartDate = model.Dates.StartDateTime!.Value, + EndDate = model.Dates.EndDateTime!.Value, + Datasets = WindowDatasets.DefaultsFor(window.CheckingWindowType, model.ExerciseType).ToList() + }); + await windowService.UpdateAsync(window, cancellationToken); + return RedirectToAction("Index", "Summary", new { id }); + } + + private void Decorate(CreateCheckingExerciseItem model, CheckingWindowDto window) + { + model.WindowTitle = window.Title; + model.ReplacementOptions = window.Exercises.OrderBy(e => e.SortOrder).ThenBy(e => e.Id).ToList(); + model.PostUrl = Url.Action("Submit", "CreateCheckingExercise", new { id = window.Id }); + model.CancelUrl = Url.Action("Index", "Summary", new { id = window.Id }); + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/EditCheckingExerciseController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/EditCheckingExerciseController.cs new file mode 100644 index 000000000..313673d5a --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/EditCheckingExerciseController.cs @@ -0,0 +1,133 @@ +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Web.Admin; +using DfE.CheckPerformanceData.Web.Admin.Nav; +using DfE.CheckPerformanceData.Web.Controllers.ViewModels.WindowAdmin; +using Microsoft.AspNetCore.Mvc; + +namespace DfE.CheckPerformanceData.Web.Controllers.WindowAdmin; + +[RequireAdminSection(AdminNavKeys.ManageWindow)] +public sealed class EditCheckingExerciseController(IWindowService windowService) : Controller +{ + private const string PageView = "~/Views/WindowAdmin/CreateCheckingExercise.cshtml"; + + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/edit")] + public async Task Edit(Guid id, Guid exerciseId, CancellationToken cancellationToken) + { + var window = await windowService.GetByIdAsync(id, cancellationToken); + var exercise = window?.Exercises.SingleOrDefault(e => e.Id == exerciseId); + if (window is null || exercise is null) return NotFound(); + + var model = new CreateCheckingExerciseItem + { + WindowId = id, + Name = exercise.Name ?? ExerciseLabels.For(exercise.ExerciseType), + ExerciseType = exercise.ExerciseType, + TabName = exercise.TabName, + TabOrder = exercise.TabOrder, + SortOrder = exercise.SortOrder, + IsEnabled = exercise.IsEnabled, + DisplayOnly = exercise.DisplayOnly, + VisibleFrom = exercise.VisibleFrom, + VisibleUntil = exercise.VisibleUntil, + ReplacesCheckingExerciseId = exercise.ReplacesCheckingExerciseId, + Dates = new ExerciseDatesItem + { + StartDate = exercise.StartDate, + StartHour = exercise.StartDate.Hour, + StartMinute = exercise.StartDate.Minute, + EndDate = exercise.EndDate, + EndHour = exercise.EndDate.Hour, + EndMinute = exercise.EndDate.Minute + } + }; + Decorate(model, window, exercise); + return View(PageView, model); + } + + [HttpPost("admin/windows/{id:guid}/exercises/{exerciseId:guid}/edit")] + [ValidateAntiForgeryToken] + public async Task Update(Guid id, Guid exerciseId, CreateCheckingExerciseItem model, + CancellationToken cancellationToken) + { + if (id != model.WindowId) return BadRequest(); + var window = await windowService.GetByIdAsync(id, cancellationToken); + var exercise = window?.Exercises.SingleOrDefault(e => e.Id == exerciseId); + if (window is null || exercise is null) return NotFound(); + + Decorate(model, window, exercise); + if (!model.TabNameOptional && string.IsNullOrWhiteSpace(model.TabName)) + ModelState.AddModelError(nameof(model.TabName), "Enter a tab name"); + + if (model.ReplacesCheckingExerciseId is { } replacementId + && model.ReplacementOptions.All(e => e.Id != replacementId)) + ModelState.AddModelError(nameof(model.ReplacesCheckingExerciseId), + "Select another exercise from this window that does not already replace this exercise"); + + if (!exercise.UsesExerciseStorage) + { + // The exercise type identifies historic output paths. Editing descriptive fields must not + // move the exercise away from its existing files or collide with another legacy row. + if (model.ExerciseType != exercise.ExerciseType) + ModelState.AddModelError(nameof(model.ExerciseType), "The type cannot be changed for this existing exercise"); + } + + if (!ModelState.IsValid) return View(PageView, model); + + var outputChanged = model.ExerciseType != exercise.ExerciseType; + var updated = new CheckingExerciseDto + { + Id = exercise.Id, + UsesExerciseStorage = exercise.UsesExerciseStorage, + ExerciseType = model.ExerciseType, + Name = model.Name!.Trim(), + TabName = string.IsNullOrWhiteSpace(model.TabName) ? null : model.TabName.Trim(), + TabOrder = model.TabOrder!.Value, + SortOrder = model.SortOrder!.Value, + IsEnabled = model.IsEnabled, + DisplayOnly = model.DisplayOnly, + VisibleFrom = model.VisibleFrom, + VisibleUntil = model.VisibleUntil, + ReplacesCheckingExerciseId = model.ReplacesCheckingExerciseId, + StartDate = KeepSeconds(model.Dates.StartDateTime!.Value, exercise.StartDate), + EndDate = KeepSeconds(model.Dates.EndDateTime!.Value, exercise.EndDate), + WindowStart = exercise.WindowStart, + WindowEnd = exercise.WindowEnd, + Datasets = exercise.Datasets, + ValidatedAt = outputChanged ? null : exercise.ValidatedAt, + ValidatedIngressChecksum = exercise.ValidatedIngressChecksum, + ValidatedSchemaChecksum = exercise.ValidatedSchemaChecksum + }; + window.Exercises[window.Exercises.IndexOf(exercise)] = updated; + await windowService.UpdateAsync(window, cancellationToken); + return RedirectToAction("Index", "Summary", new { id }); + } + + private void Decorate(CreateCheckingExerciseItem model, CheckingWindowDto window, CheckingExerciseDto exercise) + { + model.DataExercise = exercise; + model.IsEditing = true; + model.TabNameOptional = exercise.TabName is null; + model.WindowTitle = window.Title; + model.ReplacementOptions = window.Exercises + .Where(e => !WouldCreateCycle(window, exercise.Id, e.Id)) + .OrderBy(e => e.SortOrder).ThenBy(e => e.Id).ToList(); + model.PostUrl = Url.Action("Update", "EditCheckingExercise", new { id = window.Id, exerciseId = exercise.Id }); + model.CancelUrl = Url.Action("Index", "Summary", new { id = window.Id }); + } + + private static bool WouldCreateCycle(CheckingWindowDto window, Guid exerciseId, Guid replacementId) + { + var visited = new HashSet { exerciseId }; + Guid? current = replacementId; + while (current is { } id) + { + if (!visited.Add(id)) return true; + current = window.Exercises.SingleOrDefault(e => e.Id == id)?.ReplacesCheckingExerciseId; + } + return false; + } + + private static DateTime KeepSeconds(DateTime posted, DateTime original) => + posted == original.AddTicks(-(original.Ticks % TimeSpan.TicksPerMinute)) ? original : posted; +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseDataController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseDataController.cs new file mode 100644 index 000000000..5bbdc299d --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseDataController.cs @@ -0,0 +1,65 @@ +using DfE.CheckPerformanceData.Application.WindowManagement; +using DfE.CheckPerformanceData.Domain.Enums; +using DfE.CheckPerformanceData.Web.Admin; +using DfE.CheckPerformanceData.Web.Admin.Nav; +using DfE.CheckPerformanceData.Web.Controllers.ViewModels.WindowAdmin; +using Microsoft.AspNetCore.Mvc; + +namespace DfE.CheckPerformanceData.Web.Controllers.WindowAdmin; + +[RequireAdminSection(AdminNavKeys.ManageWindow)] +public sealed class ExerciseDataController(IWindowService windows) : Controller +{ + private const string PageView = "~/Views/WindowAdmin/AddExerciseData.cshtml"; + + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/data/new")] + public async Task New(Guid id, Guid exerciseId, CancellationToken cancellationToken) + { + var window = await windows.GetByIdAsync(id, cancellationToken); + var exercise = window?.Exercises.SingleOrDefault(e => e.Id == exerciseId); + if (window is null || exercise is null) return NotFound(); + + var model = new AddExerciseDataItem { WindowId = id }; + Decorate(model, window, exercise); + return View(PageView, model); + } + + [HttpPost("admin/windows/{id:guid}/exercises/{exerciseId:guid}/data/new")] + [ValidateAntiForgeryToken] + public async Task Submit(Guid id, Guid exerciseId, AddExerciseDataItem model, CancellationToken cancellationToken) + { + if (model.WindowId != id) return BadRequest(); + var window = await windows.GetByIdAsync(id, cancellationToken); + var exercise = window?.Exercises.SingleOrDefault(e => e.Id == exerciseId); + if (window is null || exercise is null) return NotFound(); + Decorate(model, window, exercise); + + if (exercise.Datasets.Any(d => string.Equals(d.Name, model.Name?.Trim(), StringComparison.OrdinalIgnoreCase))) + ModelState.AddModelError(nameof(model.Name), "This exercise already has a data file with this name"); + if (!string.IsNullOrEmpty(model.SourceFile) && !model.SourceOptions.Contains(model.SourceFile)) + ModelState.AddModelError(nameof(model.SourceFile), "Select a source from the list"); + if (!ModelState.IsValid) return View(PageView, model); + + exercise.Datasets.Add(new CheckingWindowDatasetDto + { + Name = model.Name!.Trim(), + Required = model.Required, + Included = model.Inclusion switch { "included" => true, "excluded" => false, _ => null }, + SourceFile = string.IsNullOrEmpty(model.SourceFile) ? null : model.SourceFile, + SortOrder = exercise.Datasets.Count == 0 ? 0 : exercise.Datasets.Max(d => d.SortOrder) + 1 + }); + // Adding a required input changes completeness even before it has received a file. + exercise.ValidatedAt = null; + await windows.UpdateAsync(window, cancellationToken); + return RedirectToAction("Edit", "EditCheckingExercise", new { id, exerciseId }, "data-files"); + } + + private void Decorate(AddExerciseDataItem model, CheckingWindowDto window, CheckingExerciseDto exercise) + { + model.ExerciseName = exercise.Name ?? ExerciseLabels.For(exercise.ExerciseType); + model.SourceOptions = WindowDatasets.DefaultsFor(window.CheckingWindowType, CheckingExerciseType.ResultsEnquiry) + .Select(d => d.SourceFile).OfType().Distinct().ToList(); + model.PostUrl = Url.Action("Submit", "ExerciseData", new { id = window.Id, exerciseId = exercise.Id }); + model.CancelUrl = Url.Action("Edit", "EditCheckingExercise", new { id = window.Id, exerciseId = exercise.Id }); + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseLabels.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseLabels.cs index a73dcd2d2..ddb81f1aa 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseLabels.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExerciseLabels.cs @@ -13,6 +13,13 @@ public static class ExerciseLabels { public static string For(CheckingExerciseType exercise) => exercise.GetDisplayName(); + /// A display-only data share (#466) has no kind to label from the enum, so it falls + /// back to a generic label here. The admin's own name for the exercise is projected separately + /// () and is not this method's + /// concern. + public static string For(CheckingExerciseType? exercise) => + exercise is { } type ? For(type) : "Data share"; + /// /// The school-facing label, which names a learner on the pupil-data exercise and so takes the /// window's noun — "Student data checking" on 16-19. The parameterless overload above keeps the diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExercisesController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExercisesController.cs index 2426cf6c5..cbede5865 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExercisesController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ExercisesController.cs @@ -90,13 +90,16 @@ public async Task Edit(Guid id, CancellationToken cancellationTok return NotFound(); } + // This page ticks and unticks kinds (#319); a display-only exercise (#466) has no kind to + // tick and is left off both lists — it is added/removed/edited through its own routes. return View(PageView, new ExercisesItem { WindowId = id, All = AllExercises, - Selected = window.Exercises.OrderBy(e => e.SortOrder).Select(e => e.ExerciseType).ToList(), - WithFiles = window.Exercises.Where(e => e.Datasets.Any(d => d.IsComplete)) - .Select(e => e.ExerciseType).ToList(), + Selected = window.Exercises.Where(e => e.ExerciseType is not null) + .OrderBy(e => e.SortOrder).Select(e => e.ExerciseType.Value).ToList(), + WithFiles = window.Exercises.Where(e => e.ExerciseType is not null && e.Datasets.Any(d => d.IsComplete)) + .Select(e => e.ExerciseType.Value).ToList(), PostUrl = Url.Action("Update", "Exercises", new { id }), CancelUrl = Url.Action("Index", "Summary", new { id }) }); @@ -155,8 +158,8 @@ private static ExercisesItem Redisplay( Selected = model.Selected, WithFiles = window is null ? [] - : window.Exercises.Where(e => e.Datasets.Any(d => d.IsComplete)) - .Select(e => e.ExerciseType).ToList(), + : window.Exercises.Where(e => e.ExerciseType is not null && e.Datasets.Any(d => d.IsComplete)) + .Select(e => e.ExerciseType.Value).ToList(), PostUrl = postUrl, CancelUrl = cancelUrl }; diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/IngressFileController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/IngressFileController.cs index 35389e638..476578f48 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/IngressFileController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/IngressFileController.cs @@ -16,10 +16,21 @@ public sealed class IngressFileController(ILogger logger, IWindowService windowService, IReadOnlyDictionary blobClients) : Controller { - // #319: the route names the exercise — see the note on SchemaController. + // #319: the kind-addressed route names the exercise — see the note on SchemaController. + // #466 adds the exercise-id route beside it, for the same reason SchemaController does. [HttpGet("admin/windows/{id:guid}/{exercise}/ingress-file/{dataset}")] - public async Task Index(Guid id, CheckingExerciseType exercise, string dataset, CancellationToken cancellationToken) + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/ingress-file/{dataset}")] + public async Task Index( + Guid id, CheckingExerciseType? exercise, string dataset, CancellationToken cancellationToken, Guid? exerciseId = null) { + CheckingWindowDto? window = await windowService.GetByIdAsync(id, cancellationToken); + CheckingExerciseDto? owner = window is null ? null : FindOwner(window, exercise, exerciseId); + + if (owner is null || owner.Datasets.All(d => d.Name != dataset)) + { + return NotFound(); + } + if (!blobClients.TryGetValue("ingress", out var ingressBlobClient)) { logger.LogWarning("Ingress storage client is not configured"); @@ -41,18 +52,30 @@ public async Task Index(Guid id, CheckingExerciseType exercise, s Files = [], Dataset = dataset, DatasetLabel = DatasetLabels.For(dataset), - Exercise = exercise + Exercise = owner.ExerciseType, + ExerciseId = owner.Id }; return View("~/Views/WindowAdmin/IngressFile.cshtml", model); } - + [HttpGet("admin/windows/{id:guid}/{exercise}/ingress-file/{dataset}/browse")] - public async Task Browse(Guid id, CheckingExerciseType exercise, string dataset, string container, string? path, CancellationToken cancellationToken) + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/ingress-file/{dataset}/browse")] + public async Task Browse( + Guid id, CheckingExerciseType? exercise, string dataset, string container, string? path, + CancellationToken cancellationToken, Guid? exerciseId = null) { + CheckingWindowDto? window = await windowService.GetByIdAsync(id, cancellationToken); + CheckingExerciseDto? owner = window is null ? null : FindOwner(window, exercise, exerciseId); + + if (owner is null || owner.Datasets.All(d => d.Name != dataset)) + { + return NotFound(); + } + if (string.IsNullOrWhiteSpace(container)) { - return RedirectToAction(nameof(Index), new { id, exercise, dataset }); + return RedirectToAction(nameof(Index), new { id, exercise = owner.ExerciseType, exerciseId = owner.Id, dataset }); } if (!blobClients.TryGetValue("ingress", out var ingressBlobClient)) @@ -102,7 +125,8 @@ public async Task Browse(Guid id, CheckingExerciseType exercise, Files = files, Dataset = dataset, DatasetLabel = DatasetLabels.For(dataset), - Exercise = exercise + Exercise = owner.ExerciseType, + ExerciseId = owner.Id }; return View("~/Views/WindowAdmin/IngressFile.cshtml", model); @@ -127,21 +151,24 @@ public async Task Browse(Guid id, CheckingExerciseType exercise, } [HttpPost("admin/windows/{id:guid}/{exercise}/ingress-file/{dataset}")] + [HttpPost("admin/windows/{id:guid}/exercises/{exerciseId:guid}/ingress-file/{dataset}")] [RequestSizeLimit(100_000_000)] [ValidateAntiForgeryToken] - public async Task Select(Guid id, CheckingExerciseType exercise, string dataset, string selectedFile, CancellationToken cancellationToken) + public async Task Select( + Guid id, CheckingExerciseType? exercise, string dataset, string selectedFile, CancellationToken cancellationToken, + Guid? exerciseId = null) { if (string.IsNullOrWhiteSpace(selectedFile)) { ModelState.AddModelError(nameof(selectedFile), "Select an ingress file"); - return RedirectToAction(nameof(Index), new { id, exercise, dataset }); + return RedirectToAction(nameof(Index), new { id, exercise, exerciseId, dataset }); } int separatorIndex = selectedFile.IndexOf('/'); if (separatorIndex <= 0 || separatorIndex == selectedFile.Length - 1) { ModelState.AddModelError(nameof(selectedFile), "Select an ingress file"); - return RedirectToAction(nameof(Index), new { id, exercise, dataset }); + return RedirectToAction(nameof(Index), new { id, exercise, exerciseId, dataset }); } string sourceContainer = selectedFile[..separatorIndex]; @@ -167,6 +194,14 @@ public async Task Select(Guid id, CheckingExerciseType exercise, return NotFound(); } + CheckingExerciseDto? owner = FindOwner(window, exercise, exerciseId); + CheckingWindowDatasetDto? target = owner?.Datasets.SingleOrDefault(d => d.Name == dataset); + + if (owner is null || target is null) + { + return NotFound(); + } + BlobClient? sourceBlob = ingressBlobClient.GetBlobContainerClient(sourceContainer).GetBlobClient(sourceBlobName); if (!await sourceBlob.ExistsAsync(cancellationToken)) @@ -185,7 +220,9 @@ public async Task Select(Guid id, CheckingExerciseType exercise, BlobContainerClient? destinationContainer = appBlobClient.GetBlobContainerClient(id.ToString()); await destinationContainer.CreateIfNotExistsAsync(cancellationToken: cancellationToken).ConfigureAwait(false); - string blobName = $"ingress/{ingressFileName}"; + // #466: stored at a path unique to this exercise and dataset, not a name relative to a + // shared ingress/ root — two exercises can both have a slot called "main". + string blobName = CheckingExerciseBlobPaths.DefinitionFile(owner.Id, target.Id, ingressFileName); BlobClient? destinationBlob = destinationContainer.GetBlobClient(blobName); buffer.Position = 0; @@ -198,21 +235,16 @@ await destinationBlob.UploadAsync( }, cancellationToken); - CheckingWindowDatasetDto? target = - window.FindExercise(exercise)?.Datasets.SingleOrDefault(d => d.Name == dataset); - - if (target is null) - { - return NotFound(); - } - - target.IngressFile = ingressFileName; + // The dataset row stores the complete blob name from here on. A row written before this + // change stores a name relative to the old ingress/ root, and CheckingExerciseBlobPaths. + // IngressBlobName reads both shapes without anything having to move. + target.IngressFile = blobName; target.IngressFileChecksum = checksum; // Legacy scalar columns mirror the first dataset for one release (rollback safety). if (target.SortOrder == 0) { - window.IngressFile = ingressFileName; + window.IngressFile = blobName; window.IngressFileChecksum = checksum; } @@ -220,4 +252,11 @@ await destinationBlob.UploadAsync( return RedirectToAction("index", "Summary", new { id = id }); } -} \ No newline at end of file + + // Addressed by exercise id when the caller has one (#466); otherwise by kind, for every + // caller still on the #319 shape. + private static CheckingExerciseDto? FindOwner(CheckingWindowDto window, CheckingExerciseType? exercise, Guid? exerciseId) => + exerciseId is not null + ? window.Exercises.SingleOrDefault(e => e.Id == exerciseId) + : window.FindExercise(exercise); +} diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SchemaController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SchemaController.cs index fb15c0517..d1889afd3 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SchemaController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SchemaController.cs @@ -21,11 +21,15 @@ public class SchemaController( private const string PageView = "~/Views/WindowAdmin/Schema.cshtml"; - // #319: the route names the exercise. A dataset belongs to the exercise that consumes it, - // and dataset names are only unique within one — "pupils" could belong to either once a - // second exercise gains slots. + // #319: the kind-addressed route names the exercise. A dataset belongs to the exercise that + // consumes it, and dataset names are only unique within one — "pupils" could belong to either + // once a second exercise gains slots. #466 adds the exercise-id route beside it, because two + // exercises of the same kind (a replacement release) can both have a slot with the same name, + // and a display-only exercise has no kind to route by at all. [HttpGet("admin/windows/{id:guid}/{exercise}/schema-file/{dataset}")] - public async Task Index(Guid id, CheckingExerciseType exercise, string dataset, CancellationToken cancellationToken) + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/schema-file/{dataset}")] + public async Task Index( + Guid id, CheckingExerciseType? exercise, string dataset, CancellationToken cancellationToken, Guid? exerciseId = null) { CheckingWindowDto? window = await windowService.GetByIdAsync(id, cancellationToken); @@ -34,9 +38,10 @@ public async Task Index(Guid id, CheckingExerciseType exercise, s return NotFound(); } - CheckingWindowDatasetDto? target = FindDataset(window, exercise, dataset); + CheckingExerciseDto? owner = FindOwner(window, exercise, exerciseId); + CheckingWindowDatasetDto? target = owner?.Datasets.SingleOrDefault(d => d.Name == dataset); - if (target is null) + if (owner is null || target is null) { return NotFound(); } @@ -47,14 +52,19 @@ public async Task Index(Guid id, CheckingExerciseType exercise, s SchemaFile = target.SchemaFile, Dataset = target.Name, DatasetLabel = DatasetLabels.For(target.Name), - PostUrl = Url.Action("Submit", "Schema", new { id = window.Id, exercise, dataset = target.Name }), + PostUrl = Url.Action("Submit", "Schema", + new { id = window.Id, exercise = owner.ExerciseType, exerciseId = owner.Id, dataset = target.Name }), + CancelUrl = Url.Action("Index", "Summary", new { id = window.Id }), }; return View(PageView, model); } [HttpPost("admin/windows/{id:guid}/{exercise}/schema-file/{dataset}")] + [HttpPost("admin/windows/{id:guid}/exercises/{exerciseId:guid}/schema-file/{dataset}")] [ValidateAntiForgeryToken] - public async Task Submit(Guid id, CheckingExerciseType exercise, string dataset, SchemaItem model, CancellationToken cancellationToken) + public async Task Submit( + Guid id, CheckingExerciseType? exercise, string dataset, SchemaItem model, CancellationToken cancellationToken, + Guid? exerciseId = null) { if (id != model.WindowId) { @@ -73,6 +83,14 @@ public async Task Submit(Guid id, CheckingExerciseType exercise, return NotFound(); } + CheckingExerciseDto? owner = FindOwner(window, exercise, exerciseId); + CheckingWindowDatasetDto? target = owner?.Datasets.SingleOrDefault(d => d.Name == dataset); + + if (owner is null || target is null) + { + return NotFound(); + } + using var buffer = new MemoryStream(); await using (Stream upload = model.Schema.OpenReadStream()) { @@ -98,8 +116,10 @@ public async Task Submit(Guid id, CheckingExerciseType exercise, BlobContainerClient destinationContainer = appBlobClient.GetBlobContainerClient(id.ToString()); await destinationContainer.CreateIfNotExistsAsync(cancellationToken: cancellationToken).ConfigureAwait(false); + // #466: stored at a path unique to this exercise and dataset, not a name relative to a + // shared schema/ root — two exercises can both have a slot called "main". string schemaFileName = Path.GetFileName(model.Schema.FileName); - string blobName = $"schema/{schemaFileName}"; + string blobName = CheckingExerciseBlobPaths.DefinitionFile(owner.Id, target.Id, schemaFileName); BlobClient destinationBlob = destinationContainer.GetBlobClient(blobName); buffer.Position = 0; @@ -112,20 +132,16 @@ await destinationBlob.UploadAsync( }, cancellationToken); - CheckingWindowDatasetDto? target = FindDataset(window, exercise, dataset); - - if (target is null) - { - return NotFound(); - } - - target.SchemaFile = schemaFileName; + // The dataset row stores the complete blob name from here on. A row written before this + // change stores a name relative to the old schema/ root, and CheckingExerciseBlobPaths. + // SchemaBlobName reads both shapes without anything having to move. + target.SchemaFile = blobName; target.SchemaFileChecksum = checksum; // Legacy scalar columns mirror the first dataset for one release (rollback safety). if (target.SortOrder == 0) { - window.SchemaFile = schemaFileName; + window.SchemaFile = blobName; window.SchemaFileChecksum = checksum; } @@ -134,7 +150,11 @@ await destinationBlob.UploadAsync( return RedirectToAction("Index", "Summary", new { id }); } - private static CheckingWindowDatasetDto? FindDataset( - CheckingWindowDto window, CheckingExerciseType exercise, string dataset) => - window.FindExercise(exercise)?.Datasets.SingleOrDefault(d => d.Name == dataset); + // Addressed by exercise id when the caller has one (#466 — the only way to name a + // display-only exercise, or one of several releases of the same kind); otherwise by kind, for + // every route and caller still on the #319 shape. + private static CheckingExerciseDto? FindOwner(CheckingWindowDto window, CheckingExerciseType? exercise, Guid? exerciseId) => + exerciseId is not null + ? window.Exercises.SingleOrDefault(e => e.Id == exerciseId) + : window.FindExercise(exercise); } diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SummaryController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SummaryController.cs index 3e3131cfc..696fc027e 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SummaryController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/SummaryController.cs @@ -32,16 +32,23 @@ public async Task Index(Guid id, CancellationToken cancellationTo EndDate = w.EndDate, KeyStage = w.KeyStage, CheckingWindowType = w.CheckingWindowType, - // #319: one section per checking exercise, each with its own dates, files and + // #319/#466: one section per checking exercise, each with its own dates, files and // validation state. There is no window-level validate button any more — an exercise // validates on its own, and a window is usable while another is still unvalidated. + // A display-only exercise (null ExerciseType, #466) is no longer filtered out: every + // link on its section is addressed by exercise id, which it always has, rather than by + // kind, which it never has — so it is no longer a dead-link risk to show it. Exercises = w.Exercises .OrderBy(e => e.SortOrder) .Select(e => new ExerciseSummarySection { WindowId = w.Id, + Id = e.Id, ExerciseType = e.ExerciseType, - Label = ExerciseLabels.For(e.ExerciseType), + Name = e.Name ?? ExerciseLabels.For(e.ExerciseType), + KindLabel = ExerciseLabels.For(e.ExerciseType), + TabName = e.TabName, + IsEnabled = e.IsEnabled, StartDate = e.StartDate, EndDate = e.EndDate, // AB#301022: asked of the one clock, never worked out here. These two decide @@ -56,7 +63,7 @@ public async Task Index(Guid id, CancellationToken cancellationTo .Select(d => new DatasetSummaryRow { WindowId = w.Id, - Exercise = e.ExerciseType, + ExerciseId = e.Id, Name = d.Name, Label = DatasetLabels.For(d.Name), IngressFile = d.IngressFile, diff --git a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ValidateWindowController.cs b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ValidateWindowController.cs index d73729676..1bda7a50e 100644 --- a/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ValidateWindowController.cs +++ b/src/DfE.CheckPerformanceData.Web/Controllers/WindowAdmin/ValidateWindowController.cs @@ -23,7 +23,10 @@ namespace DfE.CheckPerformanceData.Web.Controllers.WindowAdmin; /// merely allowed. /// [RequireAdminSection(AdminNavKeys.ManageWindow)] -public class ValidateWindowController(IWindowService windowService, ICsvSchemaFileProcessor processor): Controller +public class ValidateWindowController( + IWindowService windowService, + ICsvSchemaFileProcessor processor, + ICheckingExerciseIngress ingress): Controller { private const string PageView = "~/Views/WindowAdmin/Validate.cshtml"; @@ -43,6 +46,7 @@ public IResult Stream(Guid id, CheckingExerciseType exercise, CancellationToken // No-JS fallback: run to completion and render the final summary. [HttpPost("admin/windows/{id:guid}/{exercise}/validate")] + [ValidateAntiForgeryToken] public async Task Validate(Guid id, CheckingExerciseType exercise, CancellationToken cancellationToken) { ValidationProgress? last = null; @@ -59,6 +63,75 @@ public async Task Validate(Guid id, CheckingExerciseType exercise return View(PageView, model); } + // --- Exercise-id addressed routes (#466 slice 2) --- + // + // These sit beside the kind-addressed routes above rather than replacing them, so nothing + // already linking to `{exercise}/validate` breaks. They run through ICheckingExerciseIngress + // (Task 11), which stamps the exercise itself on a clean finish, so unlike the kind-addressed + // path above there is no manual stamping here. An exercise id that does not belong to the + // window named in the route is refused with NotFound() before any streaming starts — an admin + // must not be able to drive another window's exercise through this window's page. + + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/validate")] + public async Task IndexForExercise(Guid id, Guid exerciseId, CancellationToken cancellationToken) + { + CheckingExerciseDto? target = await ResolveExerciseAsync(id, exerciseId, cancellationToken); + + return target is null ? NotFound() : View(PageView, ModelForExercise(id, exerciseId, target.ExerciseType)); + } + + [HttpGet("admin/windows/{id:guid}/exercises/{exerciseId:guid}/validate/stream")] + public async Task StreamForExercise( + Guid id, Guid exerciseId, bool clearExistingFiles, CancellationToken cancellationToken) + { + CheckingExerciseDto? target = await ResolveExerciseAsync(id, exerciseId, cancellationToken); + + if (target is null) + { + return Results.NotFound(); + } + + return Results.ServerSentEvents( + ingress.ProcessAsync(exerciseId, clearExistingFiles, cancellationToken), eventType: "progress"); + } + + // No-JS fallback for the exercise-id route: run the one named exercise to completion through + // ICheckingExerciseIngress and render the final summary. One exercise, one run, one terminal + // event — never a loop over the window's exercises. + [HttpPost("admin/windows/{id:guid}/exercises/{exerciseId:guid}/validate")] + [ValidateAntiForgeryToken] + public async Task Run( + Guid id, Guid exerciseId, bool clearExistingFiles, CancellationToken cancellationToken) + { + CheckingExerciseDto? target = await ResolveExerciseAsync(id, exerciseId, cancellationToken); + + if (target is null) + { + return NotFound(); + } + + ValidationProgress? last = null; + await foreach (ValidationProgress progress in ingress.ProcessAsync(exerciseId, clearExistingFiles, cancellationToken)) + { + last = progress; + } + + ValidationViewModel model = ModelForExercise(id, exerciseId, target.ExerciseType); + model.ProcessingResult = last is null + ? null + : new ProcessingResult(last.RecordsRead, last.FilesWritten, last.ErrorCount, new StringBuilder(last.Message), last.SchoolSummary); + + return View(PageView, model); + } + + private async Task ResolveExerciseAsync( + Guid id, Guid exerciseId, CancellationToken cancellationToken) + { + CheckingWindowDto? window = await windowService.GetByIdAsync(id, cancellationToken); + + return window?.Exercises.SingleOrDefault(e => e.Id == exerciseId); + } + private ValidationViewModel Model(Guid id, CheckingExerciseType exercise) => new() { WindowId = id, @@ -68,6 +141,16 @@ public async Task Validate(Guid id, CheckingExerciseType exercise CancelUrl = Url.Action("Index", "Summary", new { id }) }; + private ValidationViewModel ModelForExercise(Guid id, Guid exerciseId, CheckingExerciseType? exercise) => new() + { + WindowId = id, + ExerciseLabel = ExerciseLabels.For(exercise), + StreamUrl = Url.Action(nameof(StreamForExercise), "ValidateWindow", new { id, exerciseId }), + PostUrl = Url.Action(nameof(Run), "ValidateWindow", new { id, exerciseId }), + CancelUrl = Url.Action("Index", "Summary", new { id }), + ShowClearExistingFiles = true + }; + // Drives the processor for one exercise and, on a clean finish, stamps that exercise validated // before the terminal event reaches the caller. private async IAsyncEnumerable Run( diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_LR1.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_LR1.csv new file mode 100644 index 000000000..7dc6364c8 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_LR1.csv @@ -0,0 +1,24 @@ +ULN,CYPMD_ID,SURNAME,FORENAMES,SEX,DOB,AGE,EXAMNO,GNUMBER,AB_Code,EXAMYEAR,SEASON,exam_date,Short_Qual_Desc,SubjectDescription,GRADE,POINTS_1618,CAPPED_PTS,ANCN,ADFECN,BRDSUBNO,MAPPING,Level3QualificationCategory,EMQualificationCategory,R_INCL,R_INCL_EM,QUAL_KS4,UKPRN,URN,LAESTAB +1651662547,CYP0000056,Lovegood,Baldrick,M,29/09/2007,17,7436,60182611,70,2026,S,2026-11-05,GCE A,Mathematics,A,50,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +5212581851,CYP0000062,Janeway,Kathryn,F,16/03/2009,16,7595,60370683,10,2026,S,2026-11-05,BTEC NEC,Sport,P,16,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9426850694,CYP0000064,Meldrew,Beatrice,F,25/02/2009,16,5110,60340005,44,2026,S,2026-11-05,Tech Level,Engineering,D,40,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +9503787171,CYP0000066,Clegg,Baldrick,M,26/12/2007,17,7982,60147542,01,2026,S,2026-11-05,GCE A,English Literature,D,20,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +2905085701,CYP0000070,Crusher,Chirrut,M,10/05/2008,17,5020,60370683,10,2026,S,2026-11-05,BTEC NEC,Sport,M,32,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9403012103,CYP0000084,Skywalker,Poe,M,09/03/2009,16,1324,60310384,70,2026,S,2026-11-05,GCSE,Mathematics,4,4,4,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +8809871735,CYP0000094,La Forge,Geordi,F,23/03/2009,16,3333,60340005,44,2026,S,2026-11-05,Tech Level,Engineering,D,40,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +2613385303,CYP0000100,Janeway,Hera,F,13/03/2008,17,9579,60340005,44,2026,S,2026-11-05,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +4915196257,CYP0000102,Blackadder,Stewie,M,30/06/2008,17,6691,60182490,70,2026,S,2026-11-05,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +8081204252,CYP0000104,Djarin,Guinan,F,14/03/2008,17,2507,60147542,01,2026,S,2026-11-05,GCE A,English Literature,A*,60,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9493209128,CYP0000106,Picard,Jean-Luc,F,02/06/2008,17,2077,60313567,10,2026,S,2026-11-05,BTEC ND,Business,DD,96,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +1494287462,CYP0000114,Erso,Beverly,F,24/09/2008,16,2170,60370683,10,2026,S,2026-11-05,BTEC NEC,Sport,M,32,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +7590302909,CYP0000120,Djarin,Kira,F,19/10/2007,17,4000,60340005,44,2026,S,2026-11-05,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +4104309491,CYP0000126,Organa,Leia,F,21/11/2008,16,4294,60310025,70,2026,S,2026-11-05,GCSE,English Language,5,5,5,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +9379439373,CYP0000128,Puddifoot,Finn,M,06/09/2007,17,3879,60310384,70,2026,S,2026-11-05,GCSE,Mathematics,5,5,5,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +9912067529,CYP0000136,Andor,Marigold,F,13/03/2009,16,6430,60370683,10,2026,S,2026-11-05,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9316609031,CYP0000138,Torres,Cassian,M,03/06/2009,16,4580,60310384,70,2026,S,2026-11-05,GCSE,Mathematics,5,5,5,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +9699264134,CYP0000144,Mouse,Seven,F,05/07/2008,17,9079,60147542,01,2026,S,2026-11-05,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +1171543543,CYP0000158,Skywalker,Luke,F,20/11/2007,17,1092,60183512,70,2026,S,2026-11-05,GCE A,History,D,20,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +4588312351,CYP0000166,Doo,Tasha,F,14/03/2009,16,4693,60183512,70,2026,S,2026-11-05,GCE A,History,E,10,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +5114549022,CYP0000174,Featherstone,Worf,M,06/06/2009,16,5271,60147542,01,2026,S,2026-11-05,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +8389750357,CYP0000176,Doo,Arnold,M,09/11/2008,16,6263,60340005,44,2026,S,2026-11-05,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +5963769028,CYP0000180,Dameron,William,M,13/01/2009,16,7786,60310025,70,2026,S,2026-11-05,GCSE,English Language,5,5,5,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_MAIN.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_MAIN.csv new file mode 100644 index 000000000..e5dd1a9bb --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/16to19_MAIN.csv @@ -0,0 +1,146 @@ +ULN,CYPMD_ID,SURNAME,FORENAMES,SEX,DOB,AGE,EXAMNO,GNUMBER,AB_Code,EXAMYEAR,SEASON,exam_date,Short_Qual_Desc,SubjectDescription,GRADE,POINTS_1618,CAPPED_PTS,ANCN,ADFECN,BRDSUBNO,MAPPING,Level3QualificationCategory,EMQualificationCategory,R_INCL,R_INCL_EM,QUAL_KS4,UKPRN,URN,LAESTAB +2043030161,CYP0000052,Antilles,Wedge,M,20/07/2009,16,6609,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,M,32,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +2043030161,CYP0000052,Antilles,Wedge,M,20/07/2009,16,5660,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,7,7,7,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +4256292393,CYP0000054,Troi,Deanna,M,13/06/2009,16,9793,60183512,70,2026,S,2026-06-15,GCE A,History,D,20,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +4256292393,CYP0000054,Troi,Deanna,M,13/06/2009,16,1647,60147542,01,2026,S,2026-06-15,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +1651662547,CYP0000056,Lovegood,Baldrick,M,29/09/2007,17,9613,60147542,01,2026,S,2026-06-15,GCE A,English Literature,D,20,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +1651662547,CYP0000056,Lovegood,Baldrick,M,29/09/2007,17,5861,60310025,70,2026,S,2026-06-15,GCSE,English Language,4,4,4,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +8252816758,CYP0000058,Solo,Tasha,F,29/04/2009,16,6059,60182490,70,2026,S,2026-06-15,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +8252816758,CYP0000058,Solo,Tasha,F,29/04/2009,16,6737,60313567,10,2026,S,2026-06-15,BTEC ND,Business,DD,96,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +1521521078,CYP0000060,Troi,Minnie,F,07/05/2008,17,1443,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,C,30,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +1521521078,CYP0000060,Troi,Minnie,F,07/05/2008,17,3410,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +5212581851,CYP0000062,Janeway,Kathryn,F,16/03/2009,16,9201,60147542,01,2026,S,2026-06-15,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +5212581851,CYP0000062,Janeway,Kathryn,F,16/03/2009,16,4548,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +9426850694,CYP0000064,Meldrew,Beatrice,F,25/02/2009,16,6715,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +9426850694,CYP0000064,Meldrew,Beatrice,F,25/02/2009,16,4161,60310025,70,2026,S,2026-06-15,GCSE,English Language,4,4,4,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +9503787171,CYP0000066,Clegg,Baldrick,M,26/12/2007,17,1754,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9503787171,CYP0000066,Clegg,Baldrick,M,26/12/2007,17,7710,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,D,20,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +2952996248,CYP0000068,Imwe,Molly,F,21/01/2009,16,2611,60182490,70,2026,S,2026-06-15,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +2952996248,CYP0000068,Imwe,Molly,F,21/01/2009,16,9469,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +2905085701,CYP0000070,Crusher,Chirrut,M,10/05/2008,17,8140,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,A*,60,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +2905085701,CYP0000070,Crusher,Chirrut,M,10/05/2008,17,4970,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,D,40,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +6636925105,CYP0000072,Spencer,Penelope,F,06/07/2007,18,1913,60313567,10,2026,S,2026-06-15,BTEC ND,Business,D*D*,112,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +6636925105,CYP0000072,Spencer,Penelope,F,06/07/2007,18,6236,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,B,40,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +1195066088,CYP0000074,Chekov,Fawlty,M,06/02/2008,17,3087,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,D,40,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +1195066088,CYP0000074,Chekov,Fawlty,M,06/02/2008,17,5358,60313567,10,2026,S,2026-06-15,BTEC ND,Business,DD,96,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +7308968023,CYP0000076,Erso,Ginevra,F,06/10/2008,16,3822,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +7308968023,CYP0000076,Erso,Ginevra,F,06/10/2008,16,9226,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,7,7,7,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +9991312028,CYP0000078,Rogers,Shaggy,F,13/03/2009,16,2799,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9991312028,CYP0000078,Rogers,Shaggy,F,13/03/2009,16,1310,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +5012760260,CYP0000080,Erso,Jyn,F,11/06/2008,17,7835,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,7,7,7,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +5012760260,CYP0000080,Erso,Jyn,F,11/06/2008,17,2432,60182490,70,2026,S,2026-06-15,GCE A,Biology,A*,60,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +2789144223,CYP0000082,Featherstone,David,M,21/06/2009,16,7108,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,C,30,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +2789144223,CYP0000082,Featherstone,David,M,21/06/2009,16,6880,60147542,01,2026,S,2026-06-15,GCE A,English Literature,D,20,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9403012103,CYP0000084,Skywalker,Poe,M,09/03/2009,16,7506,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +9403012103,CYP0000084,Skywalker,Poe,M,09/03/2009,16,1100,60313567,10,2026,S,2026-06-15,BTEC ND,Business,D*D*,112,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +1859759428,CYP0000086,Solo,Luna,F,10/05/2008,17,9124,60310025,70,2026,S,2026-06-15,GCSE,English Language,6,6,6,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +1859759428,CYP0000086,Solo,Luna,F,10/05/2008,17,6520,60147542,01,2026,S,2026-06-15,GCE A,English Literature,A*,60,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +2178758213,CYP0000088,Dinkley,Maggie,F,10/06/2008,17,4680,60183512,70,2026,S,2026-06-15,GCE A,History,A*,60,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +2178758213,CYP0000088,Dinkley,Maggie,F,10/06/2008,17,9867,60182490,70,2026,S,2026-06-15,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +7505693643,CYP0000090,Erso,Bernard,M,22/11/2008,16,7589,60183512,70,2026,S,2026-06-15,GCE A,History,A*,60,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +7505693643,CYP0000090,Erso,Bernard,M,22/11/2008,16,3850,60313567,10,2026,S,2026-06-15,BTEC ND,Business,PP,32,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +3702653209,CYP0000092,Dameron,Manny,M,19/08/2008,17,1004,60147542,01,2026,S,2026-06-15,GCE A,English Literature,E,10,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +3702653209,CYP0000092,Dameron,Manny,M,19/08/2008,17,2878,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +8809871735,CYP0000094,La Forge,Geordi,F,23/03/2009,16,7221,60182490,70,2026,S,2026-06-15,GCE A,Biology,D,20,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +8809871735,CYP0000094,La Forge,Geordi,F,23/03/2009,16,5791,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +4765583254,CYP0000096,Sulu,Bodhi,M,28/01/2009,16,7235,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +4765583254,CYP0000096,Sulu,Bodhi,M,28/01/2009,16,4819,60310025,70,2026,S,2026-06-15,GCSE,English Language,4,4,4,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +5868640848,CYP0000098,Kenobi,Ginevra,F,24/12/2008,16,4074,60182490,70,2026,S,2026-06-15,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +5868640848,CYP0000098,Kenobi,Ginevra,F,24/12/2008,16,7610,60183512,70,2026,S,2026-06-15,GCE A,History,D,20,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +2613385303,CYP0000100,Janeway,Hera,F,13/03/2008,17,1890,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +2613385303,CYP0000100,Janeway,Hera,F,13/03/2008,17,8307,60147542,01,2026,S,2026-06-15,GCE A,English Literature,D,20,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +4915196257,CYP0000102,Blackadder,Stewie,M,30/06/2008,17,2513,60310025,70,2026,S,2026-06-15,GCSE,English Language,7,7,7,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +4915196257,CYP0000102,Blackadder,Stewie,M,30/06/2008,17,5805,60147542,01,2026,S,2026-06-15,GCE A,English Literature,E,10,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +8081204252,CYP0000104,Djarin,Guinan,F,14/03/2008,17,3293,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +8081204252,CYP0000104,Djarin,Guinan,F,14/03/2008,17,5855,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +9493209128,CYP0000106,Picard,Jean-Luc,F,02/06/2008,17,2591,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,D,20,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +9493209128,CYP0000106,Picard,Jean-Luc,F,02/06/2008,17,2531,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +6719736115,CYP0000108,Meldrew,Bodhi,M,17/06/2009,16,9410,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +6719736115,CYP0000108,Meldrew,Bodhi,M,17/06/2009,16,7721,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,P,16,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +5201221330,CYP0000110,Bucket,Cassian,M,14/06/2008,17,4066,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +5201221330,CYP0000110,Bucket,Cassian,M,14/06/2008,17,3701,60310025,70,2026,S,2026-06-15,GCSE,English Language,6,6,6,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +8709662258,CYP0000112,Troi,Daphne,F,21/08/2008,17,6244,60310025,70,2026,S,2026-06-15,GCSE,English Language,4,4,4,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +8709662258,CYP0000112,Troi,Daphne,F,21/08/2008,17,1394,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,5,5,5,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +1494287462,CYP0000114,Erso,Beverly,F,24/09/2008,16,9585,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +1494287462,CYP0000114,Erso,Beverly,F,24/09/2008,16,3487,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +7488943393,CYP0000116,Rogers,Boycie,M,13/11/2008,16,1016,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,A,50,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +7488943393,CYP0000116,Rogers,Boycie,M,13/11/2008,16,1951,60310025,70,2026,S,2026-06-15,GCSE,English Language,7,7,7,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +5269015757,CYP0000118,Janeway,Del,M,16/10/2008,16,6273,60310025,70,2026,S,2026-06-15,GCSE,English Language,7,7,7,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +5269015757,CYP0000118,Janeway,Del,M,16/10/2008,16,6420,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +7590302909,CYP0000120,Djarin,Kira,F,19/10/2007,17,8681,60183512,70,2026,S,2026-06-15,GCE A,History,A,50,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +7590302909,CYP0000120,Djarin,Kira,F,19/10/2007,17,8224,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,A*,60,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +5999842516,CYP0000122,Baldrick,Compo,M,06/09/2007,17,5036,60183512,70,2026,S,2026-06-15,GCE A,History,A,50,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +5999842516,CYP0000122,Baldrick,Compo,M,06/09/2007,17,6866,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,B,40,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +9943959352,CYP0000124,Picard,B'Elanna,F,26/03/2009,16,1588,60310025,70,2026,S,2026-06-15,GCSE,English Language,6,6,6,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +9943959352,CYP0000124,Picard,B'Elanna,F,26/03/2009,16,6788,60183512,70,2026,S,2026-06-15,GCE A,History,A,50,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +4104309491,CYP0000126,Organa,Leia,F,21/11/2008,16,4423,60182490,70,2026,S,2026-06-15,GCE A,Biology,A*,60,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +4104309491,CYP0000126,Organa,Leia,F,21/11/2008,16,8695,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,C,30,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +9379439373,CYP0000128,Puddifoot,Finn,M,06/09/2007,17,1598,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9379439373,CYP0000128,Puddifoot,Finn,M,06/09/2007,17,5491,60183512,70,2026,S,2026-06-15,GCE A,History,A*,60,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +5254923696,CYP0000130,Nerys,Bodhi,M,02/02/2009,16,9901,60182490,70,2026,S,2026-06-15,GCE A,Biology,A,50,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +5254923696,CYP0000130,Nerys,Bodhi,M,02/02/2009,16,5691,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,P,16,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +6676247763,CYP0000132,Rook,Kira,F,16/05/2008,17,1336,60147542,01,2026,S,2026-06-15,GCE A,English Literature,C,30,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +6676247763,CYP0000132,Rook,Kira,F,16/05/2008,17,2744,60183512,70,2026,S,2026-06-15,GCE A,History,A*,60,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +8083175325,CYP0000134,La Forge,Beatrice,F,08/05/2008,17,7545,60147542,01,2026,S,2026-06-15,GCE A,English Literature,E,10,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +8083175325,CYP0000134,La Forge,Beatrice,F,08/05/2008,17,2914,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +9912067529,CYP0000136,Andor,Marigold,F,13/03/2009,16,8095,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +9912067529,CYP0000136,Andor,Marigold,F,13/03/2009,16,1292,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +9316609031,CYP0000138,Torres,Cassian,M,03/06/2009,16,5874,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9316609031,CYP0000138,Torres,Cassian,M,03/06/2009,16,7321,60182490,70,2026,S,2026-06-15,GCE A,Biology,A,50,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +1160913827,CYP0000140,Chekov,Molly,F,01/05/2008,17,4778,60182490,70,2026,S,2026-06-15,GCE A,Biology,E,10,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +1160913827,CYP0000140,Chekov,Molly,F,01/05/2008,17,1072,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9136780852,CYP0000142,McGonagall,Pavel,M,25/02/2008,17,5941,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9136780852,CYP0000142,McGonagall,Pavel,M,25/02/2008,17,5669,60183512,70,2026,S,2026-06-15,GCE A,History,A,50,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +9699264134,CYP0000144,Mouse,Seven,F,05/07/2008,17,5567,60182490,70,2026,S,2026-06-15,GCE A,Biology,C,30,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +9699264134,CYP0000144,Mouse,Seven,F,05/07/2008,17,3406,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,4,4,4,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +1249166485,CYP0000146,Antilles,Miles,M,01/12/2007,17,6874,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,C,30,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +1249166485,CYP0000146,Antilles,Miles,M,01/12/2007,17,4703,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D,20,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9797102584,CYP0000148,Brittas,Trigger,M,12/09/2007,17,5908,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,M,32,0,,0,31525H,,Applied general,,1,0,0,10004270,142313,8604070 +9797102584,CYP0000148,Brittas,Trigger,M,12/09/2007,17,1304,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +5783872028,CYP0000150,Wren,Elizabeth,F,04/12/2007,17,8833,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +5783872028,CYP0000150,Wren,Elizabeth,F,04/12/2007,17,8649,60182490,70,2026,S,2026-06-15,GCE A,Biology,A*,60,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +7266763552,CYP0000152,Sarek,Biggs,M,12/10/2007,17,1894,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +7266763552,CYP0000152,Sarek,Biggs,M,12/10/2007,17,8742,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9125023089,CYP0000154,Andor,Velma,F,02/04/2009,16,6552,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +9125023089,CYP0000154,Andor,Velma,F,02/04/2009,16,4066,60310025,70,2026,S,2026-06-15,GCSE,English Language,6,6,6,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +4471642620,CYP0000156,Solo,Jadzia,F,05/04/2008,17,3521,60310025,70,2026,S,2026-06-15,GCSE,English Language,5,5,5,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +4471642620,CYP0000156,Solo,Jadzia,F,05/04/2008,17,6162,60183512,70,2026,S,2026-06-15,GCE A,History,E,10,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +1171543543,CYP0000158,Skywalker,Luke,F,20/11/2007,17,9843,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,P,24,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +1171543543,CYP0000158,Skywalker,Luke,F,20/11/2007,17,9908,60310025,70,2026,S,2026-06-15,GCSE,English Language,4,4,4,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +4322510552,CYP0000160,Lister,Rumpole,M,18/12/2007,17,6210,60183512,70,2026,S,2026-06-15,GCE A,History,B,40,0,,0,9HI0,,A level,,1,0,0,10004270,142313,8604070 +4322510552,CYP0000160,Lister,Rumpole,M,18/12/2007,17,8409,60182490,70,2026,S,2026-06-15,GCE A,Biology,E,10,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +1611840071,CYP0000162,Coyote,Finn,M,29/07/2009,16,2595,60310025,70,2026,S,2026-06-15,GCSE,English Language,5,5,5,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +1611840071,CYP0000162,Coyote,Finn,M,29/07/2009,16,3922,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,C,30,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +9918338001,CYP0000164,Sisko,Gordon,M,19/07/2009,16,7374,60147542,01,2026,S,2026-06-15,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +9918338001,CYP0000164,Sisko,Gordon,M,19/07/2009,16,1841,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +4588312351,CYP0000166,Doo,Tasha,F,14/03/2009,16,4403,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +4588312351,CYP0000166,Doo,Tasha,F,14/03/2009,16,2940,60182490,70,2026,S,2026-06-15,GCE A,Biology,B,40,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +4296344958,CYP0000168,Bear,Beatrice,F,05/07/2008,17,9834,60147542,01,2026,S,2026-06-15,GCE A,English Literature,C,30,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +4296344958,CYP0000168,Bear,Beatrice,F,05/07/2008,17,3385,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +7775960117,CYP0000170,Granger,Guinan,F,06/02/2008,17,3457,60313567,10,2026,S,2026-06-15,BTEC ND,Business,MM,64,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +7775960117,CYP0000170,Granger,Guinan,F,06/02/2008,17,9031,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,A,50,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +6790024996,CYP0000172,Pearce,Edmund,M,14/06/2008,17,6590,60313567,10,2026,S,2026-06-15,BTEC ND,Business,D*D*,112,0,,0,31489H,,Applied general,,1,0,0,10004270,142313,8604070 +6790024996,CYP0000172,Pearce,Edmund,M,14/06/2008,17,2951,60310025,70,2026,S,2026-06-15,GCSE,English Language,5,5,5,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +5114549022,CYP0000174,Featherstone,Worf,M,06/06/2009,16,3273,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,E,10,0,,0,9MA0,,A level,,1,0,0,10004270,142313,8604070 +5114549022,CYP0000174,Featherstone,Worf,M,06/06/2009,16,7369,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,7,7,7,,0,1MA1,,,Mathematics,1,1,0,10004270,142313,8604070 +8389750357,CYP0000176,Doo,Arnold,M,09/11/2008,16,7680,60182490,70,2026,S,2026-06-15,GCE A,Biology,A*,60,0,,0,9BI0,,A level,,1,0,0,10004270,142313,8604070 +8389750357,CYP0000176,Doo,Arnold,M,09/11/2008,16,9000,60147542,01,2026,S,2026-06-15,GCE A,English Literature,B,40,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +8138332494,CYP0000178,Fawlty,Constance,F,31/12/2008,16,9307,60310025,70,2026,S,2026-06-15,GCSE,English Language,6,6,6,,0,1EN0,,,English Language,1,1,0,10004270,142313,8604070 +8138332494,CYP0000178,Fawlty,Constance,F,31/12/2008,16,6960,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,D,40,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +5963769028,CYP0000180,Dameron,William,M,13/01/2009,16,9169,60147542,01,2026,S,2026-06-15,GCE A,English Literature,A,50,0,,0,H472,,A level,,1,0,0,10004270,142313,8604070 +5963769028,CYP0000180,Dameron,William,M,13/01/2009,16,6995,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10004270,142313,8604070 +3343446878,CYP0000188,Djarin,Nyota,F,16/06/2008,17,5629,60182611,70,2026,S,2026-06-15,GCE A,Mathematics,A,50,0,,0,9MA0,,A level,,1,0,0,10002183,100974,2114505 +4988535000,CYP0000190,Woodpecker,Rose,F,06/07/2008,17,2255,60183512,70,2026,S,2026-06-15,GCE A,History,A,50,0,,0,9HI0,,A level,,1,0,0,10002183,100974,2114505 +9371391276,CYP0000194,Griffin,Ginevra,F,17/09/2007,17,5913,60313567,10,2026,S,2026-06-15,BTEC ND,Business,D*D*,112,0,,0,31489H,,Applied general,,1,0,0,10002183,100974,2114505 +3952265565,CYP0000196,Woodpecker,Luna,F,29/12/2007,17,3825,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10002183,100974,2114505 +9835879150,CYP0000327,Uhura,Ivy,F,30/01/2008,17,2857,60147542,01,2026,S,2026-06-15,GCE A,English Literature,C,30,0,,0,H472,,A level,,1,0,0,10002184,100975,2114507 +1088974176,CYP0000329,Fothergill,Sybil,F,17/03/2009,16,5677,60147542,01,2026,S,2026-06-15,GCE A,English Literature,D,20,0,,0,H472,,A level,,1,0,0,10002184,100975,2114507 +9347308209,CYP0000337,Harris,Kathryn,F,19/10/2008,16,3932,60313567,10,2026,S,2026-06-15,BTEC ND,Business,PP,32,0,,0,31489H,,Applied general,,1,0,0,10002184,100975,2114507 +5571870428,CYP0000341,La Forge,Sabine,F,17/02/2009,16,5642,60182490,70,2026,S,2026-06-15,GCE A,Biology,D,20,0,,0,9BI0,,A level,,1,0,0,10002184,100975,2114507 +2386242699,CYP0000445,Syndulla,Beverly,F,27/11/2007,17,5649,60182490,70,2026,S,2026-06-15,GCE A,Biology,C,30,0,,0,9BI0,,A level,,1,0,0,10008488,101173,2136327 +5645300925,CYP0000451,Rook,Marge,F,23/07/2007,18,1541,60340005,44,2026,S,2026-06-15,Tech Level,Engineering,M,32,0,,0,05822,,Tech level,,1,0,0,10008488,101173,2136327 +9980576769,CYP0000453,McGonagall,Minerva,F,26/05/2009,16,3354,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,5,5,5,,0,1MA1,,,Mathematics,1,1,0,10008488,101173,2136327 +8473642287,CYP0000457,Baldrick,Miles,M,16/02/2009,16,7402,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,6,6,6,,0,1MA1,,,Mathematics,1,1,0,10008488,101173,2136327 +3028462480,CYP0000471,Coyote,Daffy,M,21/03/2009,16,9513,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,P,16,0,,0,31525H,,Applied general,,1,0,0,10002435,130648,8808003 +2348993465,CYP0000475,Janeway,Compo,M,13/06/2007,18,5382,60370683,10,2026,S,2026-06-15,BTEC NEC,Sport,D*,56,0,,0,31525H,,Applied general,,1,0,0,10002435,130648,8808003 +5498095763,CYP0000481,Lister,Julian,M,24/09/1999,25,7656,60310384,70,2026,S,2026-06-15,GCSE,Mathematics,4,4,4,,0,1MA1,,,Mathematics,1,1,0,10002435,130648,8808003 diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/included.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/included.csv index fb07a06bf..b3b9aa12c 100644 --- a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/included.csv +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/included.csv @@ -1,846 +1,98 @@ CYPMD_ID,SURNAME,FORENAMES,SEX,DOB,AGE,P_INCL,P_INCL_aims,attendance_year_0,attendance_year_1,attendance_year_2,src_laestab_0,src_laestab_1,src_laestab_2,LAESTAB,URN,UKPRN,ULN,KS4_DISADVANTAGE,ALEV,TOTENTS_ALEV,TOTPTSE_ALEV,ACAD,TOTENTS_ACAD,TOTPTSE_ACAD,TLEV,TOTENTS_TLEV,TOTPTSE_TLEV,AGEN,TOTENTS_AGEN,TOTPTSE_AGEN,TechCert,TOTENTS_TechCert,TOTPTSE_TechCert,TLEVEL,TOTENTS_TLEVEL,TOTPTSE_TLEVEL,L3_FLAG,TechCert_nodisc,L2VOC_nodisc,TLEV_nodisc,TLEV_denom,AGEN_nodisc,AGEN_denom,LearningAimReference,INSCOPE_E,PROGRESS_E,BASE_pts_E,BEST_E,EXEMPT_E,NO_ENTRIES_E,INSCOPE_M,PROGRESS_M,BASE_pts_M,BEST_M,EXEMPT_M,NO_ENTRIES_M,BEST_L3M,InScope_L3M,ACH_L3M,Retention_CompletionStatus,AimSize_Final,CoreAimFlag,Ret_Trigger,InScope_ALEV_Ret,Retained_ALEV_Ret,Ret_Assessed_ALEV,InScope_ALEV_2ndYr,Retained_ALEV_2ndYr,InScope_ACAD_Ret,Retained_ACAD_Ret,Ret_Assessed_ACAD,InScope_ACAD_2ndYr,Retained_ACAD_2ndYr,InScope_TLEV_Ret,Retained_TLEV_Ret,Ret_Assessed_TLEV,InScope_TLEV_2ndYr,Retained_TLEV_2ndYr,InScope_AGEN_Ret,Retained_AGEN_Ret,Ret_Assessed_AGEN,InScope_AGEN_2ndYr,Retained_AGEN_2ndYr,InScope_TechCert_Ret,Retained_TechCert_Ret,Ret_Assessed_TechCert,INCLUDE_B3,B3PTSE_B3,INCLUDE_AAB,AAB_FAC,KS4_Year_Calc CYP0000052,Antilles,Wedge,M,20/07/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2043030161,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,1,1,50.94,1,0,0,0,0,0,0,8X40Q08K,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000053,Antilles,Wedge,M,03/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,8622026979,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SNJKW5UT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2024 CYP0000054,Troi,Deanna,M,13/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,4256292393,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9UMRLH0L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000055,Organa,Hikaru,M,27/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,7858164010,0,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,AKSM8J5D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,1,2024 CYP0000056,Lovegood,Baldrick,M,29/09/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,1651662547,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WQVC8D1X,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000057,Mouse,Beatrice,F,10/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,1672302490,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7QUY64CF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000058,Solo,Tasha,F,29/04/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,8252816758,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YKB1RY7G,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000059,Pearce,Kira,F,30/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,6726515966,0,1,4,10,1,1,79.21,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5RBTXSRB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.5,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,1,2025 CYP0000060,Troi,Minnie,F,07/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,1521521078,0,1,2,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7KZQSSRE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000061,Foggy,Odo,M,21/01/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,8964640525,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1N759JP5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000062,Janeway,Kathryn,F,16/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5212581851,1,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,45NL015B,1,-2.55,3.55,1,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2025 -CYP0000063,Woodpecker,Popeye,M,11/04/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,5201928545,0,1,2,3,1,1,64.26,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,J7ERJJA3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000064,Meldrew,Beatrice,F,25/02/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9426850694,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Z1BWS6K3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000065,Bootle,Velma,F,05/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5464285982,1,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,74J4S31M,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000066,Clegg,Baldrick,M,26/12/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,9503787171,0,1,3,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6V7HC46L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,2024 -CYP0000067,Bunny,Bugs,F,04/02/2007,18,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,9572442790,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7KZHRJN9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2023 CYP0000068,Imwe,Molly,F,21/01/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2952996248,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,H5MF6A5E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000069,Barker,Nathan,M,15/09/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1566090561,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T8B25TR8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000070,Crusher,Chirrut,M,10/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,2905085701,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2DY5U5Q6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000071,Sarek,Deanna,F,20/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6637352245,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,362.15,0,0,0,1,1,0,0,0,0,0,NEC8VYP5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 CYP0000072,Spencer,Penelope,F,06/07/2007,18,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,6636925105,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XA74KGZL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2023 -CYP0000073,Clegg,Constance,F,25/03/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,1298867122,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CRQWQHTM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,1,2024 CYP0000074,Chekov,Fawlty,M,06/02/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1195066088,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,VV0QDAM3,1,0.79,2.21,3,,0,1,0.11,2.89,3,,0,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2024 -CYP0000075,Pearce,Mon,F,26/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6340003593,0,1,3,8,1,1,55.82,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YG2S11R7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 CYP0000076,Erso,Ginevra,F,06/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,7308968023,0,1,3,10,0,0,0,0,0,0,1,1,67.24,0,0,0,0,0,0,1,0,0,0,0,1,1,1B6VGWT8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,10,1,0,2025 -CYP0000077,Trotter,Del,F,15/10/2006,18,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1741134891,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Y65MVEM8,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2023 CYP0000078,Rogers,Shaggy,F,13/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9991312028,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1TY5XWFG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000079,Uhura,Rodney,M,01/01/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9459318641,0,0,0,0,0,0,0,0,0,0,1,2,103,0,0,0,0,0,0,1,0,0,0,0,1,1,RKNT833E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2025 CYP0000080,Erso,Jyn,F,11/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,5012760260,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QPNPCHLD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000081,Trotter,Ivy,F,01/05/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,8325222092,1,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2RD6WATJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 CYP0000082,Featherstone,David,M,21/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2789144223,1,0,0,0,0,0,0,1,2,131.97,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,RX9JA2M0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000083,Foggy,Poe,M,08/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,3760786161,0,0,0,0,0,0,0,0,0,0,1,1,40.4,0,0,0,1,3,128.43,1,0,0,0,0,0,1,LP3SBXK5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 CYP0000084,Skywalker,Poe,M,09/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9403012103,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6WQX2BYP,1,-0.87,2.87,2,,0,1,-1.06,3.06,2,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000085,Fothergill,Compo,M,13/04/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1149460439,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JD1SPVJJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 CYP0000086,Solo,Luna,F,10/05/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1859759428,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GE2AUN3U,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000087,Kenobi,Ben,M,05/05/2007,18,501,,1,1,0,SC,SC,,8604070,142313,10004270,7552812957,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,54TLF7H8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2023 CYP0000088,Dinkley,Maggie,F,10/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,2178758213,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JHVXB6UX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000089,Sarek,Dolores,F,09/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,3957572769,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JEREB85Q,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2025 CYP0000090,Erso,Bernard,M,22/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,7505693643,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NPVGUCT1,1,-1.05,3.05,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000091,Featherstone,Luna,F,21/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6986770879,0,0,0,0,1,2,156.52,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LM4U0L3N,1,-0.76,2.76,2,,0,1,-0.82,2.82,2,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000092,Dameron,Manny,M,19/08/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,3702653209,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ALFZP275,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2024 -CYP0000093,Blake,Reginald,M,06/08/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,6913417379,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2ZZSSV70,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2024 CYP0000094,La Forge,Geordi,F,23/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,8809871735,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EWVJYUXB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000095,Perkins,Kathryn,F,11/11/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4990452762,0,0,0,0,0,0,0,0,0,0,1,3,284.74,0,0,0,0,0,0,1,0,0,0,0,1,1,VU077F5F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000096,Sulu,Bodhi,M,28/01/2009,16,501,,1,1,0,SC,SC,,8604070,142313,10004270,4765583254,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0Y0AMLYG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000097,Djarin,B'Elanna,F,10/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,1409675904,0,0,0,0,1,2,137.82,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YZCELPT6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000098,Kenobi,Ginevra,F,24/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,5868640848,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RZCVCUTV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,1,2025 -CYP0000099,Troi,Reginald,M,16/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,3099500153,0,1,2,6,0,0,0,0,0,0,0,0,0,1,1,86.09,0,0,0,1,1,0,0,0,0,0,C97C7BP2,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 CYP0000100,Janeway,Hera,F,13/03/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,2613385303,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NHRFG52B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2024 -CYP0000101,Mouse,Cassandra,F,23/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,3550970716,0,0,0,0,0,0,0,0,0,0,1,2,137.35,0,0,0,0,0,0,1,0,0,0,0,1,1,H7VV23J5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2025 CYP0000102,Blackadder,Stewie,M,30/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4915196257,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,037V8UEJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2024 -CYP0000103,Janeway,Victor,M,19/10/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,4562272871,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HG1117ZZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000104,Djarin,Guinan,F,14/03/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,8081204252,0,0,0,0,0,0,0,0,0,0,1,3,143.16,1,1,71.41,0,0,0,1,1,0,0,0,1,1,4SYZJ38X,0,0,0,0,,1,1,0.97,2.03,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,2024 -CYP0000105,Imwe,Penelope,F,08/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,3097302637,0,1,2,5,1,1,50.72,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HRCX77YA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000106,Picard,Jean-Luc,F,02/06/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,9493209128,0,1,2,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8RJZL4C9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000107,Calrissian,Lando,M,03/05/2009,16,501,,1,1,0,SC,SC,,8604070,142313,10004270,9830946410,1,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,C76VB7L8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,2025 CYP0000108,Meldrew,Bodhi,M,17/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,6719736115,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,408.25,1,0,0,0,0,0,0,SN7QZYCX,1,0.03,2.97,3,,0,1,-1.55,3.55,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000109,Skywalker,Victor,M,01/09/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,6968380957,1,0,0,0,1,3,261.65,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,UTDDUW25,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000110,Bucket,Cassian,M,14/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,5201221330,1,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0SWREAP4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000111,Troi,Rey,F,01/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5879617459,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PDVWUZU8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 CYP0000112,Troi,Daphne,F,21/08/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,8709662258,1,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,47.92,1,0,0,0,0,0,0,3W7DJYFW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000113,La Forge,Rey,F,22/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,2111272861,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D7ELRHSS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 CYP0000114,Erso,Beverly,F,24/09/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,1494287462,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PGXQAWGW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000115,Dinkley,Velma,F,28/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9858643842,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4W30LWCE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 CYP0000116,Rogers,Boycie,M,13/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,7488943393,1,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LRBNAE38,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000117,Picard,Kira,F,16/04/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,3098948446,1,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3N3B0U9D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,0,2024 CYP0000118,Janeway,Del,M,16/10/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,5269015757,0,0,0,0,0,0,0,0,0,0,1,4,291.59,0,0,0,0,0,0,1,0,0,0,0,1,1,HHCMKUMZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000119,Perkins,B'Elanna,F,31/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,4946081594,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XNC32P1Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000120,Djarin,Kira,F,19/10/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,7590302909,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FR9Q965L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000121,Fawlty,Basil,F,11/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,3787052438,0,1,2,8,0,0,0,1,1,58.39,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,HD3DNLP3,0,0,0,0,,1,0,0,0,0,,1,1,1,0,3,0.5,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000122,Baldrick,Compo,M,06/09/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,5999842516,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,KCUWW2Z4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000123,Nerys,Fleur,F,21/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5100282913,1,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,82ACJBC2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2025 CYP0000124,Picard,B'Elanna,F,26/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9943959352,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8JJ7DWBY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000125,Sarek,Spock,M,07/09/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,5998623100,0,0,0,0,0,0,0,0,0,0,1,4,286.82,0,0,0,0,0,0,1,0,0,0,0,1,1,A3KC0VCR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 CYP0000126,Organa,Leia,F,21/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,4104309491,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0YHJ7L4V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000127,Doo,Trigger,M,24/05/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5215140451,1,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9920U3F7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 CYP0000128,Puddifoot,Finn,M,06/09/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,9379439373,0,0,0,0,0,0,0,0,0,0,1,4,258.92,0,0,0,0,0,0,1,0,0,0,0,1,1,6TZN9CDE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 -CYP0000129,Dameron,Poe,F,07/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5141285960,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D3LZWH5F,1,-0.94,2.94,2,,0,1,-0.75,2.75,2,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 CYP0000130,Nerys,Bodhi,M,02/02/2009,16,501,,1,1,0,SC,SC,,8604070,142313,10004270,5254923696,0,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3D43E8B7,1,-0.32,2.32,2,,0,1,-2.5,3.5,1,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2025 -CYP0000131,Sulu,Sabine,F,17/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2832508021,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QX3J9UAP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 CYP0000132,Rook,Kira,F,16/05/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,6676247763,1,1,2,3,0,0,0,0,0,0,0,0,0,1,1,83.95,0,0,0,1,1,0,0,0,0,0,18V9P79F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000133,McGonagall,Anakin,M,26/08/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5073211715,0,0,0,0,1,1,93.81,1,4,242.95,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,2458N8PD,1,0.02,2.98,3,,0,1,0.72,2.28,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000134,La Forge,Beatrice,F,08/05/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,8083175325,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BW78HV7E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2024 -CYP0000135,Bunny,Ben,M,17/10/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,6737000272,0,1,3,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2V1HR3BA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,15,1,0,2024 CYP0000136,Andor,Marigold,F,13/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9912067529,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,KKJBV4FN,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000137,Uhura,Nyota,F,21/10/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1110533960,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4VFZDY3Q,0,0,0,0,,1,0,0,0,0,,1,1,1,1,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000138,Torres,Cassian,M,03/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9316609031,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8FHGBCZG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000139,Erso,Bart,M,06/10/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,5668747327,0,0,0,0,0,0,0,0,0,0,1,4,107.21,0,0,0,0,0,0,1,0,0,0,0,1,1,V8DD2255,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000140,Chekov,Molly,F,01/05/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1160913827,1,1,4,9,0,0,0,0,0,0,0,0,0,1,1,81.63,0,0,0,1,1,0,0,0,0,0,HL12L0WD,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,6.75,1,0,2024 -CYP0000141,Chekov,Bo-Katan,F,11/03/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4526242854,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,K3TXEBNW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 CYP0000142,McGonagall,Pavel,M,25/02/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,9136780852,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZSEF3HW8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2024 -CYP0000143,Rook,Hera,F,22/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,7299420031,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DC9X5J06,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000144,Mouse,Seven,F,05/07/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,9699264134,0,0,0,0,0,0,0,0,0,0,1,3,196.49,0,0,0,0,0,0,1,0,0,0,0,1,1,S7NLFYUK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000145,Lister,David,F,14/06/2008,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,1383539822,0,1,3,9,1,1,73.81,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,F9M969E5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 CYP0000146,Antilles,Miles,M,01/12/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,1249166485,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1UAA0H5L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.5,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000147,Dameron,Fawlty,M,25/09/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6544063167,0,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HATE02NX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,0,2025 CYP0000148,Brittas,Trigger,M,12/09/2007,17,501,,1,1,1,SC,SC,SC,8604070,142313,10004270,9797102584,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6TXK2SW2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000149,Kenobi,James,M,09/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9302705838,1,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D46AEYM6,1,-0.16,2.16,2,,0,1,-1.58,3.58,2,,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000150,Wren,Elizabeth,F,04/12/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,5783872028,0,0,0,0,0,0,0,0,0,0,1,4,373.32,0,0,0,0,0,0,1,0,0,0,0,1,1,5506SS6Q,1,-1.51,3.51,2,,0,1,0.05,2.95,3,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000151,Rimmer,Ben,M,14/08/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,9045090355,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,445CSJ8B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 CYP0000152,Sarek,Biggs,M,12/10/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,7266763552,0,0,0,0,0,0,0,0,0,0,1,3,114.51,0,0,0,0,0,0,1,0,0,0,0,1,1,ADWXLTHY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000153,Bear,Hyacinth,F,18/02/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,8117478955,1,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,E00DWG7P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000154,Andor,Velma,F,02/04/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9125023089,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3DYWL5QW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000155,Kenobi,Din,M,09/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,5888445909,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8TZLDMSV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 CYP0000156,Solo,Jadzia,F,05/04/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4471642620,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5151VJ23,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,1,2024 -CYP0000157,Kryze,Hyacinth,F,18/08/2009,16,501,,1,1,0,SC,SC,,8604070,142313,10004270,3371357111,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZGFTNQUE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2025 CYP0000158,Skywalker,Luke,F,20/11/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,1171543543,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,UPM6YMK8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000159,Rimmer,Wendy,F,26/02/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2914126243,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T2TTSLYL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000160,Lister,Rumpole,M,18/12/2007,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4322510552,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YUXX1VZC,1,-2.15,3.15,1,,0,1,-0.28,2.28,2,,0,0,0,0,2,0.5,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,2024 -CYP0000161,Fothergill,Luke,M,14/04/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,6933126143,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,A5EBVPUC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000162,Coyote,Finn,M,29/07/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,1611840071,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CYJGV8NY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.5,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000163,Fawlty,Sybil,M,10/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6659847491,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZMSR2SDX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2025 CYP0000164,Sisko,Gordon,M,19/07/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9918338001,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,H20KRTPT,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000165,Nerys,Jacob,M,22/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,5156392601,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,75BYD8XK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000166,Doo,Tasha,F,14/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,4588312351,0,0,0,0,0,0,0,0,0,0,1,4,145.33,0,0,0,0,0,0,1,0,0,0,0,1,1,HTKFFW3Y,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000167,Barker,Penelope,F,04/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,3057380250,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8X5038HW,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000168,Bear,Beatrice,F,05/07/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,4296344958,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EW462YTN,1,-0.81,2.81,2,,0,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2024 -CYP0000169,Woodpecker,Jean-Luc,M,05/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,6932365592,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,VJUVW9PG,1,-1.41,2.41,1,,0,1,0.99,2.01,3,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 CYP0000170,Granger,Guinan,F,06/02/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,7775960117,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,1,1,92.62,1,0,0,0,0,0,0,DE7QCHCB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2024 -CYP0000171,Featherstone,Sabine,F,26/01/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,3566125120,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Y9CKPYPG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2024 CYP0000172,Pearce,Edmund,M,14/06/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,6790024996,0,1,2,6,0,0,0,1,1,61.29,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,8V218RRV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000173,Baldrick,Bart,M,23/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,6651020291,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,15HGJXFD,0,0,0,0,,1,1,1.43,2.57,4,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 CYP0000174,Featherstone,Worf,M,06/06/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,5114549022,0,1,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,TPZF9ZRZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3.75,1,0,2025 -CYP0000175,Weasley,Biggs,M,06/03/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,2115406331,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HDKJQNE8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2025 CYP0000176,Doo,Arnold,M,09/11/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,8389750357,0,1,4,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JAE58GVY,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13.5,1,0,2025 -CYP0000177,Imwe,Popeye,M,21/05/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,8458323087,0,1,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,KKXKR5NV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3.75,1,0,2025 CYP0000178,Fawlty,Constance,F,31/12/2008,16,501,,1,0,0,SC,,,8604070,142313,10004270,8138332494,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XC7PH1RE,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000179,Trotter,Rodney,M,15/02/2009,16,501,,1,0,0,SC,,,8604070,142313,10004270,9006854740,0,0,0,0,1,4,303,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,R15QXU6S,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000180,Dameron,William,M,13/01/2009,16,501,,1,1,0,SC,SC,,8604070,142313,10004270,5963769028,0,1,2,6,0,0,0,0,0,0,0,0,0,1,1,93.67,0,0,0,1,0,0,0,0,0,0,5QJ0X4HC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000181,Solo,Peter,M,31/05/2008,17,501,,1,1,0,SC,SC,,8604070,142313,10004270,8768773991,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EQADAHQ2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 CYP0000182,Trotter,Deanna,F,15/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,5535650160,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9SZLLXB7,0,0,0,0,,1,1,1.38,2.62,4,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000183,Dinkley,Luke,M,28/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,1485024047,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FDX79XCX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,1,2025 CYP0000184,Doo,Scooby,M,14/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,8544958420,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0K47UCFL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,0,2025 -CYP0000185,Lister,Deanna,F,18/05/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,9670335754,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,C4E5GSDV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 CYP0000186,Bootle,Seven,F,11/01/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5505788456,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BWT04CHT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000187,Vizsla,Rumpole,M,29/05/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,3821263164,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YUW76U94,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2025 CYP0000188,Djarin,Nyota,F,16/06/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3343446878,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,L2837TVV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000189,Blake,Daphne,M,15/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,3500339713,0,1,3,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XB3N27M5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,2025 CYP0000190,Woodpecker,Rose,F,06/07/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,4988535000,0,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PQZ1SGPV,1,0.29,2.71,3,,0,1,-0.36,2.36,2,,0,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2024 -CYP0000191,La Forge,Peter,M,23/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1384806111,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3GN14DB8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,1,2025 CYP0000192,Rimmer,Popeye,M,28/10/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,6605439330,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6TJCGZKR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000193,Garcia,Manuel,M,05/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1463390201,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LS1AZNL9,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 CYP0000194,Griffin,Ginevra,F,17/09/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,9371391276,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LWREYVZG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000195,Foggy,Sherlock,M,15/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,5973777930,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,13X1FGEA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000196,Woodpecker,Luna,F,29/12/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3952265565,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Q191C795,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2024 -CYP0000197,Simpson,Deanna,F,23/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,8835431320,0,0,0,0,1,4,247.22,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,R4B9TP0U,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000198,Kirk,William,M,26/01/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,2981470996,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0GRJZ630,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000199,Jones,Fred,M,15/10/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5079161918,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,G68A2ASS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000200,Mouse,Worf,M,05/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7338134731,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,B5Y4L7BQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000201,Featherstone,Popeye,M,25/08/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,7781608576,1,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9KWLT9NE,1,-1.38,3.38,2,,0,1,-0.34,2.34,2,,0,0,0,0,3,0.35,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2024 -CYP0000202,Sulu,Ginevra,F,03/12/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,1831314297,0,0,0,0,0,0,0,0,0,0,1,4,371.18,0,0,0,0,0,0,1,0,0,0,0,1,1,K2LTMAZM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000203,Antilles,Bugs,M,11/08/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,9742656117,1,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,1,1,37.81,1,0,0,0,0,0,0,73CF4MNU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,0,2024 -CYP0000204,Rogers,Cassian,M,06/02/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,5430809445,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,S5LM2D9T,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000205,Riker,Del,M,27/05/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1497511785,1,0,0,0,0,0,0,1,1,109.97,1,2,93.88,0,0,0,0,0,0,1,0,0,0,1,1,1,LQEFKAXT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000206,Erso,Basil Brush,M,28/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,8748133196,1,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,U91RE37R,1,0.37,2.63,3,,0,1,-0.01,3.01,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,0,2025 -CYP0000207,Bashir,Molly,F,25/12/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,6855970349,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,P0DUCLRW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000208,Duck,Basil Brush,M,17/03/2007,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5578692558,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DRLPWZW3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2023 -CYP0000209,Blackadder,Minerva,F,12/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,5935846979,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,79VWT44C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000210,Duck,Daffy,M,24/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,4718065741,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9YECA0SQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000211,Riker,Spock,M,23/08/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,6067191149,0,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SNV8C0T5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,1,2024 -CYP0000212,Torres,Elizabeth,F,17/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,6348227727,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9LFZWL2J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2024 -CYP0000213,Spencer,Tasha,F,29/01/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3681421120,1,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JGTB98W3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000214,Vizsla,Bo-Katan,F,15/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1718476143,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PJUQK3NL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000215,Puddifoot,Rumpole,M,11/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,6465734977,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ACPTZM0J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,1,2025 -CYP0000216,Blackadder,Onslow,M,03/08/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5113699666,0,1,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2J2KCP9J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4.5,1,0,2024 -CYP0000217,Chekov,Marigold,F,13/12/2006,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7916193949,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7SQ422UA,1,-0.4,2.4,2,,0,1,0.76,2.24,3,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2023 -CYP0000218,Imwe,Jadzia,F,04/02/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,2720627470,0,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZS6QGBA9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,1,2025 -CYP0000219,Yar,Edmund,M,14/05/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5277072865,1,0,0,0,0,0,0,0,0,0,1,2,114.85,0,0,0,0,0,0,1,0,0,0,0,1,1,7BEYS7BZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000220,Dameron,Trigger,M,21/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3538508163,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BFCK1FNF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.35,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000221,Foggy,Rodney,M,22/07/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7925383538,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HXTQ7WBG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000222,Higgins,Elizabeth,F,03/02/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,6788986983,0,1,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8SFYBXKQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,2024 -CYP0000223,Riker,Wendy,F,28/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,1755431522,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D15NHSS6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000224,Doo,Tom,M,10/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,2158329197,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,UHPT5HSR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000225,Simpson,Goofy,M,25/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,5064122912,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,J9AYFRVV,1,-0.28,3.28,3,,0,1,0.62,2.38,3,,0,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000226,Sarek,Ivy,F,10/03/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7987099862,1,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,51B8Y6DN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,1,2025 -CYP0000227,Granger,Nathan,M,15/06/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,1879233902,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NRT4RU46,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,1,2024 -CYP0000228,Baldrick,Dolores,F,24/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1374988236,1,0,0,0,0,0,0,1,1,79.49,0,0,0,1,2,156.98,0,0,0,1,1,0,1,1,0,0,EMRXKC5H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000229,Djarin,Rey,F,07/08/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7207328566,1,0,0,0,0,0,0,0,0,0,1,2,156.11,0,0,0,0,0,0,1,0,0,0,0,1,1,8XFUGF06,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000230,Harris,Boycie,M,23/06/2007,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5838166906,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SERLA19M,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000231,Lovegood,Minnie,F,17/06/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,9256181725,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GT22GC4Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000232,Jones,Bodhi,M,06/07/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,5051881463,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,F060Q4WE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000233,Antilles,Seven,F,01/07/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,8542452431,0,0,0,0,0,0,0,0,0,0,1,3,243.41,0,0,0,0,0,0,1,0,0,0,0,1,1,B44LVRAA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000234,Puddifoot,Ginevra,F,02/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,6530582285,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BL5EFKQ7,1,1.1,2.9,4,,0,1,0.24,2.76,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000235,Hayes,Minnie,F,11/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3207039799,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3ATNSM6D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000236,Granger,Bugs,M,28/05/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,4447056094,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FL1EEZZL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000237,Crusher,Victor,M,29/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,1333870589,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,27G6GMD4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000238,Imwe,Padme,F,16/05/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,3632627835,1,0,0,0,0,0,0,0,0,0,1,2,183.65,0,0,0,0,0,0,1,0,0,0,0,1,1,0774SZGY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000239,Kryze,Anakin,M,23/05/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,6272305209,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,KWL9RUK5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000240,Wren,Pavel,M,13/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,5746677104,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,MW9E40K0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000241,Sarek,Molly,F,09/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,2197826153,1,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FXDC122G,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000242,Yar,Maggie,F,05/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,3347715190,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,E0SDYYZV,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000243,O'Brien,Beatrice,F,14/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9464825444,0,0,0,0,0,0,0,1,3,291.7,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,Q9QBJHLC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000244,Andor,Boycie,M,04/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,2400661168,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,MT2MWNQS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000245,Coyote,Rumpole,M,26/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,7758219918,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,324.26,0,0,0,1,1,0,0,0,0,0,H3YL3QUG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000246,Riker,B'Elanna,F,08/06/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,9669835245,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CGRJ124P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000247,Skywalker,James,M,28/07/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,5984671649,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,A2KUXB02,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000248,Erso,Victor,M,04/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,5682829864,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JE3MVP1J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000249,Doo,Daisy,F,20/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7182499837,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3A8W4Y7Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000250,Dameron,Cassian,M,25/08/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,4723534498,0,0,0,0,0,0,0,0,0,0,1,3,342.54,0,0,0,0,0,0,1,0,0,0,0,1,1,52PB537S,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000251,Crusher,Rey,F,23/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,4540774757,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,VDJ02YEW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000252,Janeway,Jyn,F,09/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,2119611566,0,0,0,0,0,0,0,1,1,88.67,1,2,96.72,0,0,0,0,0,0,1,0,0,1,1,1,1,69GZFPQJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000253,Delacour,Jacob,M,29/05/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,8188100401,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EKJX6NZR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000254,Kirk,Lando,M,01/09/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7859904332,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,N9YE6BGF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000255,Compo,Deanna,F,31/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7573120172,1,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1JL6L91F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000256,Spencer,Prunella,F,20/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,7314665068,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,K413VYH9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000257,Rogers,Bernard,M,11/10/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,2411574423,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3K31UWDJ,1,1.27,2.73,4,,0,1,1.99,2.01,4,,0,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000258,Pearce,Chirrut,M,17/12/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,5994792212,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,S6SVQ13W,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000259,Harris,Elizabeth,F,26/04/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3905287810,0,0,0,0,1,4,443.72,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,L9ZLJQVU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000260,Crusher,Odo,M,27/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,6383227541,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,R3M73HC9,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000261,La Forge,Daisy,F,04/09/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,2696227959,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,G3ZGASEJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,0,2024 -CYP0000262,Clegg,Montgomery,M,13/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,1500186829,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QQSV09BP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000263,Hayes,Hyacinth,F,24/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,5567743118,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6MW4YEK0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000264,Syndulla,Dolores,F,23/11/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3670792703,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,A5NF46BC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000265,Corbett,Marge,F,08/05/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3875420006,0,1,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,56FKRT0D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,0,2024 -CYP0000266,Corbett,Ivy,F,13/04/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,9459525070,1,0,0,0,0,0,0,1,1,91.91,1,3,167.51,0,0,0,0,0,0,1,0,0,1,1,1,1,PR43NBEA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000267,Sarek,Ben,M,25/11/2006,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,2864326250,1,0,0,0,1,2,152.42,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6Z50LM46,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000268,Blake,Julian,M,17/07/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,8095445250,0,0,0,0,0,0,0,0,0,0,1,3,196.9,0,0,0,0,0,0,1,0,0,0,0,1,1,A3WJ209D,1,0.85,3.15,4,,0,1,-0.87,2.87,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000269,Higgins,Bart,M,04/11/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5830763639,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Y3VEN1DT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000270,Riker,Mace,M,01/09/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,2769753981,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,X9Z80QFT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000271,Nerys,Ivy,F,01/11/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3982728970,1,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7LKG1AUC,0,0,0,0,,1,0,0,0,0,,1,1,1,1,3,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2024 -CYP0000272,Dameron,Bernard,M,21/02/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,8650837203,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HPU861X5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000273,Granger,Han,M,27/07/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3402402094,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6R3WPB5A,0,0,0,0,,1,0,0,0,0,,1,1,1,1,3,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000274,Hayes,Cassandra,F,11/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1390949767,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0LDE6J86,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000275,Mouse,Fawlty,M,17/05/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5789238017,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,1,1,102.12,1,0,0,0,0,0,0,T2EUFJ88,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2024 -CYP0000276,Bootle,Deanna,F,26/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,1002331874,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,X90KYLH8,1,-0.48,2.48,2,,0,1,0.78,2.22,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000277,Foggy,Bridget,F,03/09/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7909686474,1,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NG2ZAR7R,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000278,Imwe,Stewie,M,13/07/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7980337876,0,0,0,0,0,0,0,0,0,0,1,1,98.45,0,0,0,1,3,187.49,1,0,0,0,0,1,1,KTFG1YWF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000279,Sailor,Rene,M,27/12/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,2178229686,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,202.15,0,0,0,1,1,0,0,0,0,0,8B7Q9KZR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000280,Bear,Raquel,F,05/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7581652053,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,S3WXMJDJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,2025 -CYP0000281,Torres,Rey,F,09/10/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,7955985378,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LXCZVLND,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000282,Bootle,Fleur,F,17/03/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,5729952677,0,1,4,16,0,0,0,1,1,79.42,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,LQ81L62F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,12,1,1,2025 -CYP0000283,Wren,Minnie,F,25/05/2007,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,3913277923,0,0,0,0,0,0,0,0,0,0,1,2,127.09,0,0,0,0,0,0,1,0,0,0,0,1,1,9WMV8WQF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2023 -CYP0000284,Sulu,Raquel,F,03/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,3743483601,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EQX7N9GK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000285,Andor,Nathan,M,05/01/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,1766829608,0,0,0,0,0,0,0,0,0,0,1,2,151.71,0,0,0,0,0,0,1,0,0,0,0,1,1,Y79955CE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000286,Sisko,Bugs,M,12/03/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,3732213159,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SYCT1XTS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,1,2025 -CYP0000287,Wren,Miranda,F,06/05/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7420082849,0,0,0,0,1,4,238.31,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6V7NUECR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000288,Bashir,Raquel,F,21/02/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,7125062918,0,0,0,0,0,0,0,0,0,0,1,3,207.87,0,0,0,0,0,0,1,0,0,0,0,1,1,BGGML3ZK,0,0,0,0,,1,1,0.2,2.8,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000289,Sailor,Blackadder,M,02/02/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9576372513,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T210R2LG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000290,Granger,Beverly,F,12/11/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,5846207636,1,0,0,0,0,0,0,0,0,0,1,3,224.61,0,0,0,0,0,0,1,0,0,0,0,1,1,VVBE99V3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000291,Kirk,Daphne,F,18/03/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,6103875769,0,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,1,1,55.89,1,0,0,0,0,0,0,EQ1P6H5L,0,0,0,0,,1,1,0.63,2.37,3,,0,1,1,1,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,0,2025 -CYP0000292,Dameron,Tasha,F,16/05/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7266170179,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Z0LW3FJ6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000293,Rogers,Minerva,F,20/10/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5061696296,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2MRJTRCZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2024 -CYP0000294,Sarek,Fenella,F,23/03/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,1162240931,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LUPC1ZFN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,1,2024 -CYP0000295,Spencer,William,M,26/05/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,4852628125,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,MGYH534F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000296,Brittas,Odo,M,14/02/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,7621562469,1,1,3,12,0,0,0,1,1,71.01,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,Z9ZMX6L4,1,-1.59,2.59,1,,0,1,0.52,2.48,3,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,12,1,0,2024 -CYP0000297,Fothergill,Cassandra,F,18/04/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5245063515,0,0,0,0,0,0,0,0,0,0,1,3,215.96,0,0,0,0,0,0,1,0,0,0,0,1,1,B7W81MKX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000298,Solo,Spock,M,28/12/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,6717762282,0,0,0,0,0,0,0,0,0,0,1,4,372.75,0,0,0,0,0,0,1,0,0,0,0,1,1,XCS8B97E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000299,Mouse,Shaggy,M,07/04/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,8408771795,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PFRT0132,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000300,Bucket,Jean-Luc,M,02/02/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,4120930408,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QP1PL9C6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000301,Duck,Tim,M,13/04/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9405667093,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZXJRZJW8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2025 -CYP0000302,Vizsla,Onslow,M,29/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9935027997,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,33KH1ZAF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000303,Picard,Marigold,F,02/08/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,2850914417,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XCCECBHS,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,1,2024 -CYP0000304,Lister,Peter,M,23/09/2007,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,1415932585,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NMDRZ06E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,1,2024 -CYP0000305,Simpson,Stewie,M,15/07/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9030957760,0,1,4,12,0,0,0,0,0,0,1,1,62.98,0,0,0,0,0,0,1,0,0,0,0,1,1,0KGETV5T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,9,1,0,2025 -CYP0000306,Calrissian,Onslow,M,08/06/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3004903816,0,1,4,12,0,0,0,0,0,0,0,0,0,1,1,55.57,0,0,0,1,1,0,0,0,0,0,3MHV7CM6,0,0,0,0,,1,1,-0.61,2.61,2,,0,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,9,1,0,2024 -CYP0000307,La Forge,Guinan,F,25/12/2007,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,2112800039,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Q237EYWD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000308,Erso,Tom,M,31/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,4595818171,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,M4H03ZB5,1,-1.1,3.1,2,,0,1,0.08,2.92,3,,0,0,0,0,3,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000309,Calrissian,Bodhi,M,05/08/2007,18,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,9682559090,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5B7LYVRS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2023 -CYP0000310,Rimmer,Fred,M,23/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,4686932034,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,F0JEPLWF,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000311,Pearce,Minerva,F,30/07/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,6936078258,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SXQVDC63,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000312,Kirk,Basil,M,02/06/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,7571676457,0,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FV4B9TNU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,0,2024 -CYP0000313,Lister,Minerva,F,25/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,8657075548,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,48WHNEXC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000314,Duck,Molly,F,14/10/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,9352596797,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QF9QAWCE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000315,Baldrick,James,M,17/10/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,2173612708,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,TZ5UW6F8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2025 -CYP0000316,Sisko,Fenella,F,26/03/2008,17,501,,1,1,1,SC,SC,SC,2114505,100974,10002183,5842885728,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RQNRK8T0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000317,Dameron,Onslow,M,09/02/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,4630302254,1,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7ESZZUEA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000318,Crusher,David,M,25/02/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,3616466630,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HL7X4BRX,1,-1.55,3.55,2,,0,1,0.67,3.33,4,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000319,Featherstone,Sybil,F,01/02/2009,16,501,,1,1,0,SC,SC,,2114505,100974,10002183,2519957781,0,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PLQG3DQ4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,0,2025 -CYP0000320,Lister,Geordi,M,31/08/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1852399067,1,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,M15T74PD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000321,Batty,Rene,M,08/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,2015780972,0,0,0,0,0,0,0,1,4,380.54,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,KDJZYQS2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000322,Featherstone,Data,M,01/07/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,1638773733,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,80J6GAYL,1,0.51,2.49,3,,0,1,-0.54,2.54,2,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000323,Perkins,Fleur,F,09/01/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,9368005850,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NYHP6E1E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000324,Perkins,Julian,M,08/06/2009,16,501,,1,0,0,SC,,,2114505,100974,10002183,7953596590,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,06CQ7TAW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,0,2025 -CYP0000325,Blackadder,Tim,M,22/08/2008,17,501,,1,1,0,SC,SC,,2114505,100974,10002183,8793362077,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WA7TT0J4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000326,Corbett,Guinan,F,25/09/2008,16,501,,1,0,0,SC,,,2114505,100974,10002183,3291647639,0,0,0,0,1,3,213.81,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HDYX9M86,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000327,Uhura,Ivy,F,30/01/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,9835879150,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WHRMGX5P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2024 -CYP0000328,La Forge,Penelope,F,05/05/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,5697367349,0,0,0,0,0,0,0,0,0,0,1,2,44.5,0,0,0,0,0,0,1,0,0,0,0,1,1,GEQRXP0E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000329,Fothergill,Sybil,F,17/03/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,1088974176,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D1M0GSVR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000330,Scott,Rey,F,30/09/2008,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,3334799664,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ZZ06S9H8,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 CYP0000331,Featherstone,Marigold,F,05/03/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4950827048,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,730CA7FY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000332,Scott,Penelope,F,29/10/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,7776783557,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7PUUSUHC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000333,Lovegood,Seven,F,23/12/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4019762806,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,95.31,1,0,0,0,0,0,0,CM453LE5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000334,Simpson,Bo-Katan,F,25/12/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,9829875790,0,1,3,7,1,1,65.51,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4Q2RET8R,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,1,2025 CYP0000335,Rimmer,Beverly,F,20/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,3759320154,1,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9T9EHXHG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2025 -CYP0000336,Fothergill,Guinan,F,21/08/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,7306885001,0,0,0,0,0,0,0,1,1,61.24,1,2,125.3,0,0,0,0,0,0,1,0,0,1,1,1,1,A6GG7JCV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000337,Harris,Kathryn,F,19/10/2008,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,9347308209,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FVNV4KFR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000338,Woodpecker,Elizabeth,F,15/08/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,3809854155,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,233.87,0,0,0,1,1,0,0,0,0,0,MN5Q62PH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 CYP0000339,Batty,Marigold,F,13/05/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,1064174343,0,0,0,0,0,0,0,0,0,0,1,2,91.54,0,0,0,0,0,0,1,0,0,0,0,1,1,SNKPXZQT,1,0.89,2.11,3,,0,1,0.42,3.58,4,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2024 -CYP0000340,Wren,Jyn,F,01/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,7467973482,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PRDRX6RC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,1,2025 CYP0000341,La Forge,Sabine,F,17/02/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,5571870428,0,1,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,329HHA1Q,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,2025 -CYP0000342,Bucket,Constance,F,20/01/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,2739755884,0,0,0,0,0,0,0,0,0,0,1,4,280.66,0,0,0,0,0,0,1,0,0,0,0,1,1,1FMQSZFZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000343,Lovegood,Bridget,F,07/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,1852808613,0,1,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PTAR4ER8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3.75,1,0,2025 -CYP0000344,Jones,Daphne,F,08/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4325955655,0,1,2,3,0,0,0,0,0,0,1,1,116.63,0,0,0,0,0,0,1,0,0,0,0,1,1,4Q9M7RNU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000345,Kryze,Nyota,F,05/08/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4680775250,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,H2UD58M2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,0,2025 -CYP0000346,Kirk,Molly,F,12/03/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4359506482,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T1LFVQUP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000347,Spencer,Sabine,F,23/06/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2842980985,0,1,3,7,0,0,0,1,1,74.76,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,A2FXU9VA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,7,1,1,2024 -CYP0000348,Puddifoot,Deanna,F,03/03/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,1801248380,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7EEJGC47,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000349,Chekov,Daisy,F,31/03/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,5610973669,1,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,M9WATJEW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000350,Nerys,Seven,F,21/12/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,9018163876,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3Q87JG40,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000351,Weasley,Daisy,F,28/06/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2338247946,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,68JPW58U,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2024 -CYP0000352,Rogers,Rose,F,08/04/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4396874072,1,1,3,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WTDKW65C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,1,0,2024 -CYP0000353,La Forge,Bo-Katan,F,12/02/2009,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,1851049558,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,K4P67BXC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000354,Calrissian,Bo-Katan,F,26/02/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,2719465864,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DLZQFG6N,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,1,2025 -CYP0000355,Spencer,Sybil,F,24/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,1475897833,1,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0HJLCU5Y,1,1.07,2.93,4,,0,1,-0.02,3.02,3,,0,0,0,0,1,0.5,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000356,Meldrew,Daphne,F,13/05/2009,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,1258844497,0,0,0,0,0,0,0,0,0,0,1,2,99.98,0,0,0,0,0,0,1,0,0,0,0,1,1,Y4DE7PRX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000357,Jones,Sabine,F,06/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,3784783625,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CQFTTBKD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000358,Crusher,Penelope,F,07/12/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,2729549409,0,1,3,14,1,1,71.56,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,XZKAG6X1,1,-1.11,2.11,1,,0,1,0.01,2.99,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,1,0,2025 -CYP0000359,Mouse,Bridget,F,16/08/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,1298305388,0,1,2,5,0,0,0,0,0,0,1,1,79.89,0,0,0,0,0,0,1,0,0,0,0,1,1,DL1R09JS,1,2,2,4,,0,1,-1.07,2.07,1,,0,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000360,Imwe,Sybil,F,19/02/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,7853666330,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9N1G8X85,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000361,Hayes,Beverly,F,15/08/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,6717441860,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8SZRF8XY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000362,Baldrick,Minnie,F,09/09/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,2949306060,0,1,3,9,0,0,0,0,0,0,1,1,60.86,0,0,0,0,0,0,1,0,0,0,0,1,1,VCHSN3XQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,9,1,0,2024 -CYP0000363,Sailor,Daisy,F,03/07/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2334600121,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ERL70RQQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2024 -CYP0000364,Granger,Cassandra,F,05/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,9189853166,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,K9DW3VZ5,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2025 -CYP0000365,Nerys,Hermione,F,29/09/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,4013231659,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,150.93,0,0,0,1,1,0,0,0,0,0,XGCF5TJD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000366,Troi,B'Elanna,F,03/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,6583130018,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SKY8SYPZ,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000367,Crusher,Bo-Katan,F,25/01/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,2963153449,1,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5TM0PCYM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000368,Riker,Rey,F,12/11/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2691911008,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PB4FDD7S,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000369,Mouse,Penelope,F,30/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,9475343686,1,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EXUGSZH1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000370,Jones,Seven,F,14/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,3871865327,0,0,0,0,0,0,0,0,0,0,1,3,307.68,0,0,0,0,0,0,1,0,0,0,0,1,1,4VSMXUEC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000371,Meldrew,Hera,F,06/11/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,2280875150,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,57TPBZDS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000372,Garcia,Maggie,F,05/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,2120475823,0,1,4,9,0,0,0,0,0,0,0,0,0,1,1,117.98,0,0,0,1,1,0,0,0,0,0,CU8KBBTY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,6.75,1,0,2025 -CYP0000373,Woodpecker,Leia,F,30/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,9667651430,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,M7JDAQ13,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000374,Rimmer,Raquel,F,07/01/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4490184455,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7GZ365RL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000375,Kenobi,Guinan,F,05/01/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,6444022456,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,E9ZYRDSB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2024 -CYP0000376,Calrissian,Hera,F,15/10/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,5551462938,0,1,3,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4J1HA0X5,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,0,2024 -CYP0000377,Blackadder,Fenella,F,11/06/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,8206824242,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JUMPWNY2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,2024 -CYP0000378,Rimmer,Fleur,F,20/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,8132980658,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,C6U8QJ2J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000379,Higgins,Marge,F,15/07/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,3817404707,0,1,4,11,0,0,0,0,0,0,1,1,93.66,0,0,0,0,0,0,1,0,0,0,0,1,1,AWN96N8K,1,-1.86,2.86,1,,0,1,0.83,2.17,3,,0,1,1,1,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000380,Harris,Mon,F,17/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,1109673244,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,53WYTLGV,1,-2.6,3.6,1,,0,1,-1.5,3.5,2,,0,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2025 -CYP0000381,Simpson,Rey,F,05/03/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,6286635299,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,497J6YYW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000382,Erso,Rey,F,30/03/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,5223016951,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QZ9E576N,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000383,Mouse,Guinan,F,01/11/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4101737697,0,0,0,0,1,3,136.18,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3TFAWYRL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000384,McGonagall,Penelope,F,21/10/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,6292531626,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5LMFKSHF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000385,Fothergill,Maggie,F,29/12/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,8157277882,0,1,1,1,0,0,0,0,0,0,1,2,87.04,0,0,0,0,0,0,1,0,0,0,0,1,1,ER707E6S,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000386,Organa,Ivy,F,31/10/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,9454383593,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DZTGU4X8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000387,Foggy,Lisa,F,23/12/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,3892006052,1,0,0,0,0,0,0,0,0,0,1,4,233.23,0,0,0,0,0,0,1,0,0,0,0,1,1,UHGQJNVX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000388,Chekov,Minnie,F,20/07/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,7360670711,1,0,0,0,0,0,0,0,0,0,1,3,210.72,0,0,0,0,0,0,1,0,0,0,0,1,1,DZZ2S3SQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000389,Skywalker,Minnie,F,29/03/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,9851082595,0,1,3,9,0,0,0,0,0,0,0,0,0,1,1,67.26,0,0,0,1,1,0,0,0,0,0,WEU8AN2M,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,9,1,0,2024 -CYP0000390,Baldrick,Guinan,F,24/05/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,6198900694,0,0,0,0,0,0,0,0,0,0,1,3,150.42,0,0,0,0,0,0,1,0,0,0,0,1,1,A41TT2BK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 -CYP0000391,Simpson,Ginevra,F,04/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,2721212175,0,0,0,0,0,0,0,0,0,0,1,2,202.96,0,0,0,0,0,0,1,0,0,0,0,1,1,LRD8VNQH,1,0.76,2.24,3,,0,1,0.69,2.31,3,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000392,Scott,Olive,F,27/08/2009,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,6345576602,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,P4T41CSQ,1,-1.76,2.76,1,,0,1,0.77,2.23,3,,0,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,1,2025 -CYP0000393,Trotter,Prunella,F,18/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,7866493470,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CEATEG5D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000394,Bunny,Kira,F,27/05/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,3092479645,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,W0TJR770,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2024 -CYP0000395,Bunny,Ivy,F,01/05/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,5337148987,1,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,X6MAGK6Q,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000396,Bootle,Mon,F,10/01/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,1870109340,1,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1W6HAHH7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000397,Bunny,Prunella,F,02/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,2388725602,1,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,LCWHFXKE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000398,Chekov,Beverly,F,08/01/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,3943631361,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1ARTALDN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000399,Trotter,Olive,F,26/07/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,7351117916,0,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6F15EQ4B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,1,2024 -CYP0000400,Erso,Hyacinth,F,07/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4661785483,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,CG1FKFBW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000401,Doo,Bo-Katan,F,03/09/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,6631408741,1,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NKKVQ4KG,1,-0.03,2.03,2,,0,1,-1.02,3.02,2,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000402,Troi,Maggie,F,10/05/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,6856674089,0,0,0,0,0,0,0,0,0,0,1,4,343.06,0,0,0,0,0,0,1,0,0,0,0,0,1,9QXZKM8U,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000403,Pearce,Olive,F,18/12/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2109020054,1,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QMYD7LRG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2024 -CYP0000404,Riker,Luna,F,22/08/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,7010091529,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,AT7688G9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000405,Antilles,Ivy,F,29/09/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,5167514715,0,0,0,0,0,0,0,0,0,0,1,3,151.78,0,0,0,0,0,0,1,0,0,0,0,1,1,DJZ4NSMS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000406,Coyote,Bridget,F,09/08/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4938269146,0,0,0,0,1,3,254.58,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,MY8A6GHN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000407,Kirk,Fleur,F,28/07/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,1988158051,1,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GPTD3M0Y,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000408,Duck,Sybil,F,23/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,7472388712,1,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,49DGQ15C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2025 -CYP0000409,McGonagall,Miranda,F,23/05/2009,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,7249131725,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NAMXWNB1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000410,Sisko,Elizabeth,F,15/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,8013338099,0,0,0,0,0,0,0,1,4,133.94,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,NE9X5N9C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000411,Calrissian,Fenella,F,13/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,8502307281,0,1,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1Q12KYW6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,0,2025 -CYP0000412,Lister,Olive,F,11/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,8653848950,0,1,4,18,0,0,0,0,0,0,1,1,36.88,0,0,0,0,0,0,1,0,0,0,0,1,1,AMMRR1HZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,13.5,1,0,2025 -CYP0000413,Sarek,Maggie,F,21/06/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,5156341268,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FMQ9A9US,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000414,Compo,Jadzia,F,04/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,5711492455,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WLND681L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000415,Bear,Sabine,F,12/05/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,8545519608,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9PXXEX9W,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000416,Djarin,Cassandra,F,26/11/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2590408851,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HRJW939T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2024 -CYP0000417,Antilles,Fleur,F,22/11/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,6346647816,1,1,4,4,0,0,0,0,0,0,0,0,0,1,1,113.99,0,0,0,1,1,0,0,0,0,0,0BP7XQ2D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,1,0,2024 -CYP0000418,Weasley,Wendy,F,29/10/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4100941554,0,1,2,6,1,1,57.99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JKBETA5V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000419,Duck,Leia,F,05/02/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2266498312,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PXFMF4LN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000420,Scott,Seven,F,15/03/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,9651063115,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PDMCUU15,1,0.09,2.91,3,,0,1,-0.19,3.19,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000421,Janeway,Hyacinth,F,06/01/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,6345912504,0,0,0,0,1,2,149.49,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4C6TCHVV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000422,Spencer,Jadzia,F,23/07/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,1313766891,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RXWX19JP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000423,Doo,Ginevra,F,07/05/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,7503440495,0,0,0,0,0,0,0,0,0,0,1,2,209.3,0,0,0,0,0,0,1,0,0,0,0,1,1,8SL9RFCQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000424,Andor,Beverly,F,03/06/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,4532858338,1,1,3,10,0,0,0,0,0,0,1,1,83.58,0,0,0,0,0,0,1,0,0,0,0,1,1,Y22K7S5L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,10,1,0,2024 -CYP0000425,Imwe,Rey,F,10/02/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,7226447920,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NL2MVGHT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000426,Meldrew,Daisy,F,15/02/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,8399580743,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,126.71,0,0,0,1,1,0,0,0,0,0,WNDXKN7D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000427,Meldrew,Fenella,F,01/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,4540387502,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,18N21HLH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,0,2025 -CYP0000428,Sailor,Velma,F,13/09/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,1602454789,0,0,0,0,0,0,0,0,0,0,1,2,147.62,0,0,0,0,0,0,1,0,0,0,0,1,1,MUKMCCDU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.35,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000429,Nerys,Beatrice,F,16/10/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,8232523707,0,0,0,0,0,0,0,0,0,0,1,4,252.96,0,0,0,0,0,0,1,0,0,0,0,1,1,3QAVA4AH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000430,Bear,Maggie,F,16/02/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,7581454446,0,0,0,0,0,0,0,0,0,0,1,3,291.91,0,0,0,0,0,0,1,0,0,0,0,1,1,42U8MLHH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000431,Skywalker,Nyota,F,22/12/2008,16,501,,1,1,0,SC,SC,,2114507,100975,10002184,8612165250,0,0,0,0,1,2,96.67,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RPGN3DF7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000432,Duck,Rose,F,02/11/2007,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,9335224859,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,279.4,1,0,0,0,0,0,0,8ANQ8DNL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000433,Calrissian,Molly,F,27/08/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,9952650911,0,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5YNQFF78,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000434,Barker,Mon,F,17/09/2007,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,3136984143,0,0,0,0,0,0,0,0,0,0,1,3,388.49,0,0,0,0,0,0,1,0,0,0,0,0,1,D9DS95UE,1,-2.18,3.18,1,,0,1,0.14,2.86,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000435,Lister,Ginevra,F,30/04/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,2103212258,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,258.93,0,0,0,1,1,0,0,0,0,0,EY10KWJJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000436,Antilles,Leia,F,25/04/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,9089926693,1,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,VSMX3VRH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2024 -CYP0000437,Troi,Jadzia,F,23/01/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,6743875978,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EHRDUL5L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2025 -CYP0000438,O'Brien,Elizabeth,F,21/05/2009,16,501,,1,0,0,SC,,,2114507,100975,10002184,1836994570,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QGB8PPTQ,1,0.89,3.11,4,,0,1,0.75,2.25,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2025 -CYP0000439,Foggy,Jyn,F,02/02/2008,17,501,,1,1,1,SC,SC,SC,2114507,100975,10002184,1001518755,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WJMH8EP0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2024 -CYP0000440,Batty,Dolores,F,13/11/2008,16,501,,1,0,0,SC,,,2114507,100975,10002184,8182207815,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,96MK9N6D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,1,2025 -CYP0000441,Bunny,Hermione,F,21/08/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,2250294737,1,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YJNA0SVH,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2024 -CYP0000442,Brittas,Olive,F,30/08/2007,18,501,,1,1,0,SC,SC,,2114507,100975,10002184,7724287042,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6QP1M24V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000443,Higgins,Sabine,F,10/04/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,1110125417,1,0,0,0,1,2,90.96,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3M9JRBR9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000444,Blake,Beatrice,F,08/06/2008,17,501,,1,1,0,SC,SC,,2114507,100975,10002184,8079338369,0,0,0,0,0,0,0,0,0,0,1,2,188.62,0,0,0,0,0,0,1,0,0,0,0,1,1,7DPXX1G5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000445,Syndulla,Beverly,F,27/11/2007,17,501,,1,1,1,SC,SC,SC,2136327,101173,10008488,2386242699,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,136.37,0,0,0,1,1,0,0,0,0,0,GDW5PJ0U,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000446,Brittas,Hera,F,30/01/2008,17,501,,1,1,1,SC,SC,SC,2136327,101173,10008488,5169319206,0,0,0,0,0,0,0,0,0,0,1,2,77.65,0,0,0,0,0,0,1,0,0,0,0,1,1,EL85SQU9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 CYP0000447,Weasley,Reginald,M,23/06/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,9500303270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,180.91,1,0,0,0,0,0,0,LN8E59JU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000448,Paris,Data,M,25/10/2007,17,501,,1,1,0,SC,SC,,2136327,101173,10008488,3594553624,0,0,0,0,0,0,0,0,0,0,1,4,307.07,0,0,0,0,0,0,1,0,0,0,0,1,1,FVVBM5FZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2024 CYP0000449,Delacour,Stewie,M,16/09/2008,16,501,,1,0,0,SC,,,2136327,101173,10008488,7402979400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,111.74,1,0,0,0,0,0,0,MV58EUZL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000450,Imwe,Trigger,M,08/10/2007,17,501,,1,1,0,SC,SC,,2136327,101173,10008488,3636467652,0,0,0,0,0,0,0,0,0,0,1,2,215.24,0,0,0,0,0,0,1,0,0,0,0,1,1,S4GLGQJD,0,0,0,0,,1,1,-1.53,2.53,1,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000451,Rook,Marge,F,23/07/2007,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,5645300925,1,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,1,1,65.19,1,0,0,0,0,0,0,NGQ42T3R,1,-0.28,3.28,3,,0,1,-0.11,2.11,2,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2023 -CYP0000452,Dameron,Norman,M,27/10/2006,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,3226892666,0,0,0,0,0,0,0,0,0,0,1,4,461.76,0,0,0,0,0,0,1,0,0,0,0,1,1,JE8S2BB9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 CYP0000453,McGonagall,Minerva,F,26/05/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,9980576769,0,0,0,0,0,0,0,0,0,0,1,4,180.08,0,0,0,0,0,0,1,0,0,0,0,1,1,1KXPNSSL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000454,Sulu,Leia,F,27/01/2007,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,4001759769,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,295.33,0,0,0,1,1,0,0,0,0,0,LG8B451T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 CYP0000455,Coyote,Rodney,M,06/12/2008,16,501,,1,0,0,SC,,,2136327,101173,10008488,4832640177,1,1,2,6,0,0,0,0,0,0,0,0,0,1,1,47.09,0,0,0,1,1,0,0,0,0,0,MGPH7PFW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000456,Lovegood,Nyota,F,18/07/2008,17,501,,1,1,0,SC,SC,,2136327,101173,10008488,2330319954,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,184.92,0,0,0,1,1,0,0,0,0,0,AZB2EZCD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 CYP0000457,Baldrick,Miles,M,16/02/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,8473642287,0,0,0,0,0,0,0,0,0,0,1,3,146.32,0,0,0,0,0,0,1,0,0,0,0,1,1,6GC4GTBS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000458,Baldrick,Victor,M,14/07/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,6887978829,0,0,0,0,0,0,0,0,0,0,1,4,417.29,0,0,0,0,0,0,1,0,0,0,0,1,1,87MGXPFK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 CYP0000459,Garcia,William,M,07/10/2007,17,501,,1,1,0,SC,SC,,2136327,101173,10008488,4622471205,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BPV51BUA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,1,2024 -CYP0000460,Vizsla,Molly,F,14/07/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,6956119508,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8PJF1QLB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2025 -CYP0000461,Woodpecker,Jadzia,F,05/11/2006,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,2515871660,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2NR52NLP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2023 -CYP0000462,Janeway,Molly,F,18/07/2009,16,501,,1,0,0,SC,,,2136327,101173,10008488,2770032700,0,0,0,0,1,4,219.17,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HVF9Z2XV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000463,Bashir,Ben,M,07/11/2008,16,501,,1,0,0,SC,,,2136327,101173,10008488,7385263415,0,1,4,10,1,1,65.32,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,L6RMFL3F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2025 -CYP0000464,Sisko,Norman,M,30/03/2007,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,9518221601,0,0,0,0,0,0,0,1,4,313.31,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,G688V696,1,-0.76,2.76,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000465,Kirk,Luke,M,28/10/2006,18,501,,1,1,0,SC,SC,,2136327,101173,10008488,3872920236,0,0,0,0,0,0,0,0,0,0,1,2,62.87,0,0,0,0,0,0,1,0,0,0,0,1,1,T7S6BJLR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2023 -CYP0000466,Riker,Olive,F,19/02/2008,17,501,,1,1,1,SC,SC,SC,2136327,101173,10008488,3367704310,0,0,0,0,0,0,0,0,0,0,1,4,479.6,0,0,0,0,0,0,1,0,0,0,0,1,1,ZM352PM8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000467,Solo,Kira,F,20/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1487587350,1,1,4,11,0,0,0,0,0,0,1,1,90.9,0,0,0,0,0,0,1,0,0,0,0,1,1,77G0DQZH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000468,Jones,Sherlock,M,12/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4033423665,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GL9FXWWT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 CYP0000469,Rook,Maggie,F,31/05/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9619926628,0,1,2,4,0,0,0,0,0,0,0,0,0,1,1,47.79,0,0,0,1,1,0,0,0,0,0,W8V0LN3N,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000470,Yar,Jyn,F,08/12/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1732519312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,72.32,1,0,0,0,0,0,0,52N5FNQ3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 CYP0000471,Coyote,Daffy,M,21/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3028462480,0,0,0,0,0,0,0,0,0,0,1,4,322.7,0,0,0,0,0,0,1,0,0,0,0,1,1,YND80WET,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000472,Dameron,Sybil,F,22/02/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8002768253,0,0,0,0,1,3,191.09,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8Z66X6SK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 CYP0000473,Jones,Rey,F,13/02/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4914351005,0,0,0,0,1,3,91.76,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SW68KR22,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000474,Blackadder,Mon,F,25/12/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3719014181,1,0,0,0,0,0,0,0,0,0,1,3,152.95,0,0,0,0,0,0,1,0,0,0,0,1,1,Q3AJEAY1,0,0,0,0,,1,1,-1.47,2.47,1,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 CYP0000475,Janeway,Compo,M,13/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2348993465,0,0,0,0,0,0,0,0,0,0,1,2,143.67,0,0,0,0,0,0,1,0,0,0,0,0,1,KVV6B0EC,1,0.77,2.23,3,,0,1,-0.04,2.04,2,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000476,Torres,Mickey,M,31/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6828618664,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,145.57,0,0,0,1,1,0,0,0,0,0,HHF5TL1Y,1,-1.39,3.39,2,,0,1,-2.09,3.09,1,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 CYP0000477,Sulu,Bluto,M,24/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1291892607,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WYTPGB31,1,-0.43,2.43,2,,0,1,-0.34,3.34,3,,0,0,0,0,2,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,1,2025 -CYP0000478,Calrissian,Tim,M,13/08/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6597934134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,268.48,1,0,1,0,0,0,0,WFSVK95J,1,1.67,2.33,4,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 CYP0000479,Bootle,Manuel,M,07/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9361386989,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,168.92,1,0,0,0,0,0,0,YLBEER79,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000480,Paris,Manuel,M,29/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9959710945,1,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,C2KKS3AK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,1,2025 CYP0000481,Lister,Julian,M,24/09/1999,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5498095763,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,225.17,0,0,0,1,1,0,0,0,0,0,P8CJE7XR,1,-0.28,2.28,2,,0,1,-0.56,2.56,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2016 -CYP0000482,O'Brien,Din,M,19/07/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4198865421,0,1,4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SM4N7T3H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4.5,1,0,2021 -CYP0000483,Brittas,Bridget,F,28/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2948429488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,42.15,1,0,0,0,0,0,0,UD3ABEG2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000484,Corbett,Julian,M,03/03/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8136453451,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,UDZXM9SA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000485,Paris,Onslow,M,19/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1356330603,1,0,0,0,0,0,0,0,0,0,1,3,214.43,0,0,0,0,0,0,1,0,0,0,0,0,1,PAE527RT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000486,Vizsla,Tasha,F,03/06/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5504196105,1,0,0,0,0,0,0,0,0,0,1,2,197.8,0,0,0,0,0,0,1,0,0,0,0,1,1,RZ6DE18V,1,0.38,2.62,3,,0,1,-0.28,2.28,2,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000487,La Forge,Bridget,F,28/05/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3334248722,0,0,0,0,0,0,0,1,1,44.16,1,2,154.77,0,0,0,0,0,0,1,0,0,1,1,1,1,HFEZAC2D,1,0.69,2.31,3,,0,1,-0.89,2.89,2,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000488,Erso,Ivy,F,05/05/2003,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4441236442,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,74P1BLPG,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2019 -CYP0000489,Bear,Fleur,F,06/11/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3728783673,0,0,0,0,0,0,0,0,0,0,1,2,148.31,0,0,0,0,0,0,1,0,0,0,0,1,1,R37LUML8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000490,McGonagall,Bridget,F,17/08/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3465260174,0,0,0,0,1,4,234.56,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YGW23ZGZ,1,0.55,3.45,4,,0,1,-0.56,2.56,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000491,Weasley,Deanna,F,01/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9057984307,0,0,0,0,0,0,0,0,0,0,1,4,230.77,0,0,0,0,0,0,1,0,0,0,0,1,1,J839AG77,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 -CYP0000492,Weasley,Guinan,F,21/05/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7732162114,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,157.19,0,0,0,1,1,0,0,0,0,0,UK27ZG6V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000493,Solo,Stewie,M,29/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8523608307,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,232,0,0,0,1,1,0,0,0,0,0,D19KSD4H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2024 -CYP0000494,Bear,Constance,F,03/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6619939965,0,0,0,0,0,0,0,0,0,0,1,2,99.98,0,0,0,0,0,0,1,0,0,0,0,1,1,YQ5MATPR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000495,Umbridge,Baldrick,M,17/08/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2622055689,0,0,0,0,0,0,0,0,0,0,1,4,331.84,0,0,0,0,0,0,1,0,0,0,0,1,1,R3PMNS06,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000496,Woodpecker,Finn,M,13/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3055273936,0,0,0,0,0,0,0,1,2,181.54,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,FC5XV255,1,1.87,2.13,4,,0,1,1.53,2.47,4,,0,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000497,Crusher,Pavel,M,31/12/2004,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5128933049,1,0,0,0,0,0,0,1,2,134.53,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,A52TATBE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000498,Mouse,Rene,M,09/03/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6494453109,0,1,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T2V4PJ7F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,0,2021 -CYP0000499,Blake,Raquel,F,09/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8911097892,1,1,3,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,66JP0NGE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,13,1,0,2025 -CYP0000500,Puddifoot,Compo,M,31/01/2003,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2606470862,1,0,0,0,0,0,0,0,0,0,1,4,256.01,0,0,0,0,0,0,1,0,0,0,0,1,1,E0KAHTAP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2019 -CYP0000501,Solo,Jyn,F,23/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3515223769,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,271.94,0,0,0,1,1,0,0,0,0,0,00XE1GWK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000502,Rimmer,Luke,M,10/12/2002,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6126748956,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,156.29,1,0,0,0,0,0,0,7FYDY3M0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000503,Lovegood,Maggie,F,18/02/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4850825248,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,210.09,1,0,0,0,0,0,0,3J4U4H8R,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000504,O'Brien,Blackadder,M,24/03/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6717516887,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,230.2,0,0,0,1,1,0,0,0,0,0,J5S8WP4K,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000505,McGonagall,Lando,M,14/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1432330710,0,0,0,0,1,2,133.26,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,E9NZ4NVB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000506,Weasley,Raquel,F,22/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3638670490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,279.09,1,0,0,0,0,0,0,R4F2TSHK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000507,Duck,Minerva,F,21/04/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7480572559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,265.38,1,0,0,0,0,0,0,CVEDRFC2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000508,Scott,Miranda,F,03/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4045607582,1,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0Y815G5F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000509,Antilles,Kira,F,12/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7888791835,0,0,0,0,0,0,0,1,4,228.31,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,Y1TU69WW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000510,Harris,Penelope,F,30/06/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7644843476,0,0,0,0,0,0,0,0,0,0,1,4,341.91,0,0,0,0,0,0,1,0,0,0,0,1,1,4HJ643YV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2024 -CYP0000511,Woodpecker,Seven,F,20/04/2009,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6321378438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,342.26,1,0,0,0,0,0,0,SVUU257P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000512,Dinkley,Molly,F,09/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5637176934,1,0,0,0,0,0,0,1,3,223.63,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,5AJ2388D,1,0.42,2.58,3,,0,1,-0.6,3.6,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000513,Sisko,B'Elanna,F,03/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7933649196,0,0,0,0,0,0,0,0,0,0,1,2,107.95,0,0,0,1,1,65.31,1,0,0,0,0,1,1,32PFXSVZ,1,0.74,2.26,3,,0,1,1.23,2.77,4,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000514,Granger,Worf,M,19/03/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2584288034,1,0,0,0,0,0,0,0,0,0,1,4,396.48,0,0,0,0,0,0,1,0,0,0,0,1,1,DES90MXB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000515,Crusher,Jadzia,F,26/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5952255182,0,0,0,0,1,4,228.66,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,7W4NDJM6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000516,Bucket,Manny,M,21/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7640296994,0,0,0,0,0,0,0,1,2,105.78,1,1,111.75,0,0,0,0,0,0,1,0,0,1,1,1,1,3PDF76JM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000517,Brittas,Tim,M,10/09/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3019990441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,286.46,1,0,0,0,0,0,0,SJQWP4KE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000518,Featherstone,Lisa,F,04/11/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8331098417,0,0,0,0,0,0,0,0,0,0,1,2,184.93,0,0,0,0,0,0,1,0,0,0,0,1,1,910ZEH8V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000519,Uhura,Arnold,M,16/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2920170392,0,0,0,0,0,0,0,0,0,0,1,3,152.24,0,0,0,0,0,0,1,0,0,0,0,1,1,241TGDKK,1,0.93,3.07,4,,0,1,-0.78,2.78,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000520,Paris,Arnold,M,31/05/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9870374607,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,265.12,0,0,0,1,1,0,0,0,0,0,HSH8T7D0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000521,Torres,Olive,F,27/03/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1087185982,1,0,0,0,0,0,0,1,4,437.35,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,QMSG00QZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000522,Sarek,Ginevra,F,07/07/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2532820191,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Q9CZ9RE1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2023 -CYP0000523,Griffin,Del,M,29/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2757235114,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YZA43HQM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000524,Lovegood,Woody,M,08/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8285892694,1,0,0,0,0,0,0,1,4,207.61,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,GHERYHEE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000525,La Forge,Luke,M,04/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5978162882,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,297.13,0,0,0,1,1,0,0,0,0,0,F9UV8QW3,1,0.17,2.83,3,,0,1,0.48,3.52,4,,0,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2025 -CYP0000526,Coyote,Fleur,F,12/09/2002,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6137939009,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,374.31,0,0,0,1,1,0,0,0,0,0,6V1ETUHE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2019 -CYP0000527,Meldrew,Blackadder,M,11/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5653888632,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,C0U1LFK4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000528,Garcia,Arnold,M,21/08/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1130341144,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Y3TKKFUF,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000529,Meldrew,Seven,F,27/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4385765083,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FKHLYN32,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000530,Harris,Guinan,F,29/09/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2746900245,0,0,0,0,0,0,0,0,0,0,1,2,150.7,0,0,0,0,0,0,1,0,0,0,0,1,1,5G8S7TN1,1,0.51,3.49,4,,0,1,1.15,2.85,4,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000531,Batty,Goofy,M,13/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8287032823,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,128.69,0,0,0,1,1,0,0,0,0,0,K9PN115B,1,0.41,2.59,3,,0,1,-0.34,2.34,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000532,Wren,Penelope,F,16/08/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6097934243,1,0,0,0,0,0,0,0,0,0,1,3,244.41,0,0,0,0,0,0,1,0,0,0,0,1,1,UTG9M9R4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000533,Trotter,Din,M,26/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8958425729,0,0,0,0,0,0,0,0,0,0,1,4,110.61,0,0,0,0,0,0,1,0,0,0,0,1,1,D0RR5EB9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000534,Sulu,Fred,M,28/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8061047493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,287.35,1,0,0,0,0,0,0,6AG39AD2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000535,Rimmer,Sherlock,M,14/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6728850543,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,88.57,1,0,0,0,0,0,0,PWM6CW35,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000536,Bear,Minnie,F,31/05/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7345156560,0,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7BNA2J7Q,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2025 -CYP0000537,Barker,Denzil,M,08/04/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5253126856,0,0,0,0,1,1,91.91,0,0,0,0,0,0,1,2,89.48,0,0,0,1,1,0,0,0,0,0,XEHTJ1BJ,0,0,0,0,,1,1,-0.31,3.31,3,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000538,Jones,Julian,M,01/01/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5881210029,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,V8QX35Y4,1,-0.13,3.13,3,,0,1,-1.29,2.29,1,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000539,Kenobi,Seven,F,08/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7782954171,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3LE8PV7P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000540,Batty,Pavel,M,01/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4829425048,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,296.48,1,0,0,0,0,0,0,E6149468,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000541,Featherstone,Tim,M,17/09/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5927368473,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,199.55,0,0,0,1,1,0,0,0,0,0,SQYZEGTV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000542,Skywalker,Bugs,M,17/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7481239891,0,0,0,0,0,0,0,0,0,0,1,2,113.88,0,0,0,0,0,0,1,0,0,0,0,1,1,Y3M85BCT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000543,Fothergill,Ginevra,F,13/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5528285106,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,141.09,0,0,0,1,1,1,0,0,0,0,SRKF0REP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000544,Foggy,Fleur,F,12/06/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4430248652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,196.44,1,0,0,0,0,0,0,YJ8GRDE7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000545,Dinkley,Beatrice,F,25/03/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5761887310,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,133.58,1,0,0,0,0,0,0,EHCYLJB8,1,0.32,2.68,3,,1,1,-0.51,2.51,2,,0,0,0,0,3,0.5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000546,Kenobi,Sabine,F,20/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7146784303,1,0,0,0,0,0,0,0,0,0,1,2,96.33,0,0,0,0,0,0,1,0,0,0,0,1,1,X56W4DGT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000547,Andor,Jadzia,F,11/05/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2880899340,1,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,SC5S6T35,0,0,0,0,,1,0,0,0,0,,1,0,1,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,1,2023 -CYP0000548,Kryze,David,M,15/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1734182868,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,344.84,1,0,0,0,0,0,0,7ZPFCY7C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000549,Riker,Bodhi,M,22/09/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8223542272,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,161.93,0,0,0,1,1,0,0,0,0,0,U9WZTKE6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000550,Nerys,Luna,F,05/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3780006745,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,133.34,1,0,0,0,0,0,0,PPG2YAWK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000551,Higgins,Edmund,M,26/04/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7580737343,0,0,0,0,1,4,374.67,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NZ6Y51P0,0,0,0,0,,1,1,-1.03,3.03,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000552,Trotter,Tasha,F,04/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6016176766,0,0,0,0,0,0,0,0,0,0,1,3,106.25,0,0,0,0,0,0,1,0,0,0,0,1,1,XXEUVKP5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000553,Brittas,Bernard,M,25/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2119819986,0,0,0,0,0,0,0,1,3,279.58,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,ZD57D0NA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000554,Granger,Hera,F,10/07/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8215987738,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,470.58,0,0,0,1,1,0,0,0,0,0,BTZVKB4H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000555,Riker,Minnie,F,16/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1868859809,0,0,0,0,0,0,0,1,3,187.53,0,0,0,1,1,16.56,0,0,0,1,1,0,0,1,0,0,D82BNRW8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2025 -CYP0000556,Paris,Sherlock,M,07/07/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3053053746,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,96.66,0,0,0,1,1,0,0,0,0,0,VQ1UK5E0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000557,Organa,Minerva,F,22/02/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9017817824,0,0,0,0,0,0,0,0,0,0,1,4,386.65,0,0,0,0,0,0,1,0,0,0,0,1,1,BFLXV5CJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000558,Baldrick,Ben,M,14/02/2009,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6754954558,0,0,0,0,0,0,0,1,4,340.42,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,Z7Q620KQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,0.5,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000559,Bunny,Odo,M,27/01/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5117549050,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QSGUMU2P,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000560,Rogers,Nathan,M,05/05/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7288954957,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JDB508XF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000561,Troi,Velma,F,22/12/2005,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5151602251,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,324.11,0,0,0,1,1,0,0,0,0,0,ZJV6GULQ,1,1.48,2.52,4,,0,1,0.51,2.49,3,,0,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2022 -CYP0000562,Sulu,Deanna,F,22/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2244865317,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,128.8,0,0,0,1,1,0,0,0,0,0,QFMYW160,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000563,Foggy,Lando,M,13/06/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3228851436,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,T5QZZ05Y,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2024 -CYP0000564,Sisko,Ginevra,F,03/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1173678976,0,1,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GK5TB36V,1,-2.39,3.39,1,,0,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10.5,1,1,2024 -CYP0000565,McGonagall,Dolores,F,09/07/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5155014085,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DPD7BWBE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000566,Troi,Seven,F,12/12/2002,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1919506215,0,0,0,0,1,4,189.03,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,KDK2ZXEM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000567,Umbridge,Foggy,M,06/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8932259541,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,EG7UUP1E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000568,Batty,Baldrick,M,06/05/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4995115141,0,1,1,3,0,0,0,0,0,0,0,0,0,1,3,292.9,0,0,0,1,1,1,0,0,0,0,BBAN68V2,1,0.96,3.04,4,,0,1,1.58,2.42,4,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000569,Bootle,Leia,F,16/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6789753893,0,1,3,14,1,1,81,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8SQBAD0N,0,0,0,0,,1,0,0,0,0,,1,1,1,0,1,0.35,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,1,0,2025 -CYP0000570,Brittas,Manuel,M,27/08/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5556111786,0,0,0,0,0,0,0,0,0,0,1,3,196.2,0,0,0,0,0,0,1,0,0,0,0,1,1,ZAVGUTNQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,2016 -CYP0000571,Garcia,Kira,F,16/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5318446519,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,101.55,0,0,0,1,1,0,0,0,0,0,KQD8XACD,1,-2.32,3.32,1,,0,1,0.16,2.84,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000572,Bashir,Minerva,F,09/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1160420219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,164.28,1,0,0,0,0,0,0,J9C2BWT3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000573,Sulu,Fleur,F,23/03/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1279682481,0,0,0,0,0,0,0,0,0,0,1,4,177.72,0,0,0,0,0,0,1,0,0,0,0,1,1,SKHFLG18,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2019 -CYP0000574,Featherstone,Rose,F,09/09/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9877678494,0,0,0,0,0,0,0,0,0,0,1,1,81.75,0,0,0,1,4,319.09,1,0,0,0,0,1,1,Z1VW62RE,1,0.75,2.25,3,,0,1,-0.29,3.29,3,,0,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 -CYP0000575,Fawlty,William,M,04/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6411812236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,103.09,1,0,0,0,0,0,0,UCAUQLY4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000576,Delacour,Biggs,M,03/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2731857559,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,260.22,1,0,0,0,0,0,0,KWHE6DVD,1,-0.81,2.81,2,,0,1,1.07,2.93,4,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000577,Simpson,Guinan,F,25/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6257601294,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,237.29,0,0,0,1,0,0,0,0,0,0,U07QKTFR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000578,Vizsla,Mickey,M,03/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8002154568,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,101.14,0,0,0,1,1,0,0,0,0,0,CLH4V10N,1,-1.58,3.58,2,,0,1,-0.58,3.58,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000579,Uhura,Shaggy,M,20/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5296790158,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,77.91,0,0,0,1,1,0,0,0,0,0,EDLBGKAV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000580,Scott,Kathryn,F,05/10/2004,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3707920718,0,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,1,2,184.75,1,0,0,0,0,0,0,X8UWU3J9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000581,Troi,Guinan,F,18/05/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5682785101,1,1,2,4,0,0,0,0,0,0,0,0,0,1,1,86.54,0,0,0,1,1,0,0,0,0,0,TJNBSBWY,1,0.32,2.68,3,,0,1,0.05,2.95,3,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000582,Hayes,Leia,F,08/01/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1768487943,0,0,0,0,0,0,0,1,4,277.79,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,2LQN1M6V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000583,Jones,Marge,F,10/07/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5419054626,0,0,0,0,0,0,0,0,0,0,1,2,157.12,0,0,0,0,0,0,1,0,0,0,0,1,1,A7Q5EFG1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2022 -CYP0000584,Paris,Kathryn,F,09/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8575501582,1,0,0,0,0,0,0,0,0,0,1,2,117.73,0,0,0,1,1,76.67,1,0,0,0,0,1,1,TP09E5FW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000585,Skywalker,Sybil,F,29/03/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8698850499,1,0,0,0,0,0,0,1,2,109.31,0,0,0,0,0,0,1,1,69.72,1,0,0,1,1,0,0,RM3F98FE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000586,Syndulla,Homer,M,17/01/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1202503746,0,0,0,0,0,0,0,0,0,0,1,3,317.62,0,0,0,0,0,0,1,0,0,0,0,1,1,R2W19ZX3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000587,Blake,Bodhi,M,30/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6009467923,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,172.91,1,1,57.68,1,1,0,0,0,0,0,J0GP99MU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000588,Antilles,Woody,M,05/02/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1050746336,0,0,0,0,1,4,346.04,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HUNCWHZU,1,-0.45,2.45,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000589,Mouse,Lando,M,04/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8134243381,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,211.93,0,0,0,1,1,0,0,0,0,0,LVESKREN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2023 -CYP0000590,Kryze,Blackadder,M,30/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2150190600,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,9TTBV7FE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000591,Doo,Woody,M,10/09/2004,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9860649633,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,344.36,1,0,0,0,0,0,0,ACLN3K7H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000592,Simpson,Molly,F,15/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4243203487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,180.36,1,0,0,0,0,0,0,42BG2A4P,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000593,Antilles,Stewie,M,30/06/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6923573378,0,0,0,0,0,0,0,0,0,0,1,4,226.38,1,1,81.1,0,0,0,1,1,0,0,0,1,1,KXBWNVGQ,1,-0.36,2.36,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,2019 -CYP0000594,Kryze,Compo,M,18/06/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2740563054,0,0,0,0,1,4,103.37,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,B3QN4V6A,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000595,Compo,Onslow,M,26/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6834741794,0,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,1,3,161.91,1,0,1,0,0,0,0,NT9ESKD1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000596,Rogers,Fleur,F,21/10/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5916249024,0,0,0,0,0,0,0,0,0,0,1,2,171.19,0,0,0,0,0,0,1,0,0,0,0,1,1,S4L2E4E4,1,-0.41,3.41,3,,0,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2022 -CYP0000597,Lovegood,Sybil,F,27/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9862103780,1,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,JRD9C8U7,1,0.48,2.52,3,,0,1,-1.01,2.01,1,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000598,Blackadder,Marigold,F,16/06/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1253411069,1,0,0,0,0,0,0,0,0,0,1,2,191.05,0,0,0,0,0,0,1,0,0,0,0,1,1,32BVGBCQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000599,Scott,Sybil,F,26/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3807387390,0,0,0,0,0,0,0,0,0,0,1,3,223.69,0,0,0,0,0,0,1,0,0,0,0,1,1,WKSD4CX0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000600,Dameron,Fred,M,14/10/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4321925889,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,405.48,0,0,0,1,1,0,0,0,0,0,T5J5FUPK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000601,Janeway,Nyota,F,09/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6054647130,0,0,0,0,0,0,0,0,0,0,1,2,101.81,1,1,65.07,0,0,0,1,1,0,0,0,1,1,HG4WUM2D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,2025 -CYP0000602,Garcia,Leia,F,06/07/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2003179826,0,0,0,0,0,0,0,0,0,0,1,4,297.22,0,0,0,0,0,0,1,0,0,0,0,1,1,0NH37ZCG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000603,Rogers,Gordon,M,09/02/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5131668045,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QB4DRGEW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000604,Syndulla,Fawlty,M,29/12/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4561531149,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,KCLWDHY5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2023 -CYP0000605,Rook,Anakin,M,04/01/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9200392086,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,JSKZ08YV,1,-0.45,3.45,3,,0,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000606,Wren,Bridget,F,12/09/2004,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5306903384,0,0,0,0,0,0,0,0,0,0,1,2,139.26,0,0,0,0,0,0,1,0,0,0,0,1,1,2HHMDA2V,1,1.59,2.41,4,,0,1,0.83,2.17,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000607,Imwe,Raquel,F,25/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9218525137,0,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,V2ULVGF1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2025 -CYP0000608,Harris,Sabine,F,03/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3981630061,1,0,0,0,0,0,0,0,0,0,1,3,288.33,0,0,0,0,0,0,1,0,0,0,0,1,1,UGQ8D30F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000609,Corbett,Seven,F,09/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4104356852,1,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,1,1,48.38,1,0,0,0,0,0,0,B9MJU3WH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,1,2024 -CYP0000610,Nerys,Prunella,F,05/05/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4862097674,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,367.06,1,0,0,0,0,0,0,DK9Y0751,1,0.02,2.98,3,,0,1,-1.34,3.34,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000611,Lovegood,Mace,M,11/12/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4011204942,1,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5J0B2EDM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000612,Dinkley,Bodhi,M,01/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8851959614,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,169.97,0,0,0,1,1,1,0,0,0,0,8H8AJ8UK,1,-0.41,3.41,3,,0,1,-0.75,2.75,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000613,Delacour,Prunella,F,14/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5032484588,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,277.32,0,0,0,1,1,0,0,0,0,0,7CTPNLK1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000614,Troi,Raquel,F,20/03/2000,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5207764721,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,196.65,1,1,52.69,1,1,0,0,0,0,0,17ULYDTT,0,0,0,0,,1,1,-1.47,2.47,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2016 -CYP0000615,Umbridge,Worf,M,15/07/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2750473645,0,1,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BUHJG33J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9.75,1,0,2019 -CYP0000616,Hayes,Mace,M,16/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8382052227,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,347.58,0,0,0,1,1,0,0,0,0,0,87MG8QV9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000617,Umbridge,Penelope,F,16/03/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5568050505,1,0,0,0,0,0,0,0,0,0,1,2,46.21,0,0,0,0,0,0,1,0,0,0,0,1,1,PE2NNLRD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000618,Foggy,Stewie,M,30/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5240417482,0,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RQYRD66B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2025 -CYP0000619,Imwe,Sherlock,M,13/11/2004,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5002571041,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,178.1,1,0,0,0,0,0,0,Q63J4YZB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000620,Garcia,Beatrice,F,31/03/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8716478411,0,0,0,0,0,0,0,0,0,0,1,4,159.48,0,0,0,0,0,0,1,0,0,0,0,0,1,9B7SZ0CG,1,-0.48,3.48,3,,0,1,-0.24,2.24,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000621,Corbett,Velma,F,07/07/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2293317379,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8M6YHHFX,1,-0.56,2.56,2,,0,1,0.72,2.28,3,,0,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000622,Jones,Luna,F,07/07/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3611012505,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,168.37,1,0,0,0,0,0,0,S8134GBA,1,-1.56,3.56,2,,0,1,1.92,2.08,4,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000623,Imwe,Denzil,M,12/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8984473676,0,0,0,0,0,0,0,0,0,0,1,3,223.81,0,0,0,0,0,0,1,0,0,0,0,1,1,FVY1F39X,0,0,0,0,,1,1,-1.11,3.11,2,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,2023 -CYP0000624,Sarek,Anakin,M,04/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9560119285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,181.29,1,0,0,0,0,0,0,UKZSDJSL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000625,Granger,Molly,F,08/09/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1308108493,1,0,0,0,0,0,0,1,4,187.69,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,V37YNQ0C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000626,Fawlty,Olive,F,10/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9982168099,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,260.77,0,0,0,1,1,0,0,0,0,0,FAXYD0DL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000627,Bootle,Geordi,M,31/05/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7244466778,1,0,0,0,0,0,0,0,0,0,1,3,223.82,0,0,0,0,0,0,1,0,0,0,0,1,1,8USUM477,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,2024 -CYP0000628,Pearce,Fleur,F,16/03/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6707219859,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,218.14,0,0,0,1,1,0,0,0,0,0,SN9VR7S0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000629,Bashir,Gareth,M,07/02/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8569945568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,114.17,1,0,0,0,0,0,0,BPNZRB19,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000630,Barker,Elizabeth,F,18/06/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8087013251,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YJ9158KH,1,1.52,2.48,4,,0,1,1.02,2.98,4,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2021 -CYP0000631,Featherstone,Leia,F,20/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3530114839,0,0,0,0,0,0,0,0,0,0,1,4,308.49,0,0,0,0,0,0,1,0,0,0,0,1,1,4ZFHWTE0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000632,Torres,Rumpole,M,18/01/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1428461497,0,1,2,8,0,0,0,0,0,0,1,1,56.37,0,0,0,0,0,0,1,0,0,0,0,1,1,LV4NC0HB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000633,Brittas,Anakin,M,30/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9004850270,0,0,0,0,0,0,0,0,0,0,1,3,332.27,0,0,0,0,0,0,1,0,0,0,0,1,1,CVHCZUGZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000634,Meldrew,Elizabeth,F,06/06/2009,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7660334923,1,0,0,0,1,1,55.18,0,0,0,0,0,0,0,0,0,1,2,205.96,1,0,0,0,0,0,0,DLY0Q1YY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000635,Clegg,Ben,M,23/01/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1215276821,0,0,0,0,1,3,257.45,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NBFV8QMR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000636,Duck,Wendy,F,09/11/2008,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4406801806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,153.55,1,0,1,0,0,0,0,5ESW1L6B,1,0.29,2.71,3,,0,1,-0.44,3.44,3,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000637,Blackadder,Daphne,F,29/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4909430347,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,B307J6R2,1,-0.56,3.56,3,,0,1,-0.6,3.6,3,,0,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000638,Puddifoot,Pavel,M,13/02/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8837629299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,269.27,1,0,0,0,0,0,0,XM5CFW3V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000639,Sisko,Wendy,F,10/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6357565508,0,1,2,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,U31B79C5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000640,Higgins,Raquel,F,05/07/2003,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5943724655,0,1,3,8,0,0,0,1,1,76.43,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,FZZJ5P86,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,8,1,1,2019 -CYP0000641,Dinkley,Fred,M,30/01/2000,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6592227466,0,0,0,0,1,4,210.94,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,SX6PXH8W,0,0,0,0,,1,1,0.4,2.6,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000642,Rogers,Olive,F,13/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7331491752,1,0,0,0,0,0,0,0,0,0,1,3,181.48,0,0,0,0,0,0,1,0,0,0,0,1,1,LYVHJY3X,1,-1.48,3.48,2,,0,1,1.89,2.11,4,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000643,Rogers,Bluto,M,14/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5621375327,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,164.11,0,0,0,1,1,0,0,0,0,0,D42NLY60,1,1.64,2.36,4,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000644,Sulu,Rumpole,M,01/02/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4838109500,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,206.34,0,0,0,1,1,0,0,0,0,0,G77SXS4T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2016 -CYP0000645,Sarek,Minnie,F,01/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7853880208,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,424.88,0,0,0,1,1,1,0,0,0,0,U3D077V5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000646,Batty,Julian,M,29/03/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7927637315,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,106,0,0,0,1,0,0,0,0,0,0,CMGFMUGD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000647,Doo,Jyn,F,31/05/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4861796075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,352.82,1,0,0,0,0,0,0,FRQJH49H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000648,Coyote,Daphne,F,29/03/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9947713046,0,0,0,0,0,0,0,1,3,310.71,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,F60FY40H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000649,Hayes,Edmund,M,29/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4007839611,1,1,4,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PRTD8Q5X,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7.5,1,0,2024 -CYP0000650,Doo,Kira,F,10/09/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6973394281,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,183.82,0,0,0,1,1,0,0,0,0,0,HKQX116V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2023 -CYP0000651,Clegg,Pavel,M,31/03/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2307872543,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,262.28,0,0,0,1,1,0,0,0,0,0,KK8GWTLP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000652,Torres,Tom,M,24/02/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6180838159,1,0,0,0,0,0,0,0,0,0,1,4,212.46,0,0,0,0,0,0,1,0,0,0,0,1,1,49FERPKW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2019 -CYP0000653,Doo,Blackadder,M,09/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1951075546,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,132.74,0,0,0,1,1,0,0,0,0,0,59UQ5A7R,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000654,Lister,Hyacinth,F,15/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8210499145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,187.33,1,0,0,0,0,0,0,QVTS0AES,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000655,Garcia,Raquel,F,15/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7132039885,1,0,0,0,0,0,0,0,0,0,1,3,229.39,0,0,0,0,0,0,1,0,0,0,0,0,1,73NLBE2D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000656,Scott,Nyota,F,07/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4299043428,1,0,0,0,0,0,0,0,0,0,1,4,235.84,0,0,0,0,0,0,1,0,0,0,0,1,1,MWWMD4HH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000657,Foggy,Victor,M,27/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1936995928,0,0,0,0,0,0,0,0,0,0,1,4,221.17,0,0,0,0,0,0,1,0,0,0,0,1,1,XXRF2UUJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000658,Djarin,Miranda,F,28/11/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8166554025,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QT10D2RN,1,-2.36,3.36,1,,0,1,-0.15,2.15,2,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000659,Riker,Tasha,F,28/01/2009,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3590013765,0,0,0,0,0,0,0,0,0,0,1,2,94.79,0,0,0,0,0,0,1,0,0,0,0,1,1,QBSUF7C3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000660,Rimmer,Velma,F,13/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2867430033,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,197.13,0,0,0,1,1,0,0,0,0,0,T5NZGKNC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000661,Duck,Hera,F,24/03/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2333121938,0,0,0,0,0,0,0,0,0,0,1,3,161.81,0,0,0,0,0,0,1,0,0,0,0,1,1,USVUH70F,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000662,Torres,James,M,27/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6561162527,1,0,0,0,0,0,0,1,4,212.34,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,TDWGC1RU,0,0,0,0,,1,1,-1.24,3.24,2,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000663,Hayes,Luke,M,25/07/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8988119876,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,254.5,0,0,0,1,1,0,0,0,0,0,PTC0XHT1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000664,Simpson,Bernard,M,11/05/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5637647152,0,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,H3NXY1UA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,0,2023 -CYP0000665,Erso,Sybil,F,12/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2694638707,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,122.68,0,0,0,1,1,0,0,0,0,0,LE0BCU43,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000666,Blackadder,Lando,M,02/02/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2980145442,0,0,0,0,0,0,0,0,0,0,1,3,255.34,0,0,0,0,0,0,1,0,0,0,0,1,1,ZXU994QN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000667,Pearce,Lisa,F,18/03/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8818607239,0,0,0,0,0,0,0,1,2,176.47,1,1,71.35,0,0,0,0,0,0,1,0,0,1,1,1,1,2NA7LTNJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000668,Meldrew,James,M,25/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8286703470,1,0,0,0,1,4,500.3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,E9AEQQ7T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000669,Skywalker,Bart,M,29/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9682739123,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,358.9,0,0,0,1,0,0,0,0,0,0,T251M5J4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000670,Foggy,Deanna,F,04/11/2005,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7242789730,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,184.95,0,0,0,1,1,0,0,0,0,0,8W16TGRY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000671,Woodpecker,Marge,F,25/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8563355529,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,459.54,0,0,0,1,1,0,0,0,0,0,EJFBJYF5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000672,Janeway,Anakin,M,05/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2200436831,0,0,0,0,1,1,81.41,0,0,0,0,0,0,0,0,0,1,3,128.23,1,0,0,0,0,0,0,L87EK8A0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000673,Griffin,Hera,F,23/06/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2747509852,0,0,0,0,0,0,0,0,0,0,1,2,175.72,0,0,0,0,0,0,1,0,1,0,0,1,1,4BGPQZHS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000674,Bunny,Julian,M,18/11/2008,16,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4345934272,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,205.51,1,0,0,0,0,0,0,RWBDJM38,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000675,Featherstone,Wile E.,M,08/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9738571759,1,0,0,0,0,0,0,1,4,246.99,0,0,0,0,0,0,1,1,61.41,1,0,0,1,1,0,0,SAJJB941,1,-0.39,3.39,3,,0,1,-1.65,2.65,1,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000676,Rogers,Ivy,F,19/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8077873290,0,0,0,0,0,0,0,0,0,0,1,2,142.99,0,0,0,0,0,0,1,0,0,0,0,1,1,46NAYQXL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000677,Uhura,Pavel,M,28/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3393118718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,157.07,1,0,0,0,0,0,0,036JU26T,1,-0.49,3.49,3,,0,1,-0.27,2.27,2,,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000678,Kryze,Deanna,F,06/09/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6451319739,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,238.65,1,0,0,0,0,0,0,P8X429KK,1,-2.35,3.35,1,,0,1,-0.07,2.07,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000679,O'Brien,Raquel,F,25/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7561782621,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HHCATJK0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000680,Barker,Hermione,F,03/09/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5291841958,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,84.97,0,0,0,1,1,0,0,0,0,0,8VR0BA3M,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2023 -CYP0000681,Crusher,Basil Brush,M,12/01/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2668628610,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,188.84,0,0,0,1,1,0,0,0,0,0,MEV3FAX3,1,-1.84,2.84,1,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000682,Djarin,Shaggy,M,22/01/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7068243075,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,120.38,0,0,0,1,1,0,0,0,0,0,TW28F6EU,1,-0.41,3.41,3,,0,1,-0.13,3.13,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000683,Woodpecker,Montgomery,M,04/03/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6122407316,0,1,2,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,29MAY6DB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000684,Blackadder,Marge,F,30/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1101067602,1,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,A1QM8209,1,-0.68,2.68,2,,0,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000685,Doo,Leia,F,15/04/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8018032769,1,0,0,0,0,0,0,0,0,0,1,3,159.25,0,0,0,0,0,0,1,0,0,0,0,1,1,ER8P9T4Z,1,-0.24,2.24,2,,0,1,-0.67,2.67,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000686,Sarek,Bridget,F,07/11/2002,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9071622490,0,0,0,0,1,1,93.77,0,0,0,0,0,0,0,0,0,1,4,253.38,1,0,0,0,0,0,0,3LV99ELK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000687,Picard,Han,M,14/03/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3352283837,0,0,0,0,0,0,0,0,0,0,1,3,122.84,0,0,0,0,0,0,1,0,0,0,0,1,1,RAYHHZ2T,1,-0.28,3.28,3,,0,1,0.8,2.2,3,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000688,Torres,Sherlock,M,04/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3305711735,0,0,0,0,0,0,0,0,0,0,1,2,95.16,0,0,0,0,0,0,1,0,0,0,0,1,1,PL1TA8SD,0,0,0,0,,1,1,-1.05,3.05,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000689,Dinkley,Hyacinth,F,25/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1866056235,0,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,1,2,209.96,1,0,0,0,0,0,0,WRYQ2DXP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000690,Featherstone,Anakin,M,28/09/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2109692905,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,267.85,1,0,0,0,0,0,0,MMFESFT5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000691,Paris,Sybil,F,29/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9831475386,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,373.23,0,0,0,1,1,0,0,0,0,0,PS2US4B5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000692,Rogers,David,M,09/06/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9654034196,0,0,0,0,1,1,50.99,0,0,0,0,0,0,0,0,0,1,4,358.19,1,0,0,0,0,0,0,4PB9W1U4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000693,Fawlty,Kathryn,F,15/04/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2531187247,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,130.11,1,0,0,0,0,0,0,1463PA7H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000694,Torres,Molly,F,21/11/2005,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5883178329,1,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0109ZP3H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000695,Pearce,Guinan,F,15/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8563669597,0,0,0,0,1,4,320.13,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,266MDHNV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000696,Batty,Bart,M,25/07/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7865754002,1,0,0,0,0,0,0,1,3,83.71,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,S91S0HSL,1,-1.06,2.06,1,,0,1,-1.74,2.74,1,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000697,Troi,Daffy,M,09/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8905044610,0,0,0,0,0,0,0,0,0,0,1,2,103.47,0,0,0,0,0,0,1,0,0,0,0,1,1,49RQER6Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000698,Blake,Edmund,M,17/12/2002,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7016762718,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,187.26,1,0,0,0,0,0,0,3T79WHBM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000699,Lister,Maggie,F,15/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5916836707,0,0,0,0,1,1,77.32,0,0,0,1,3,164.06,0,0,0,0,0,0,1,0,0,0,0,1,1,JQCZA4TF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000700,Compo,Chirrut,M,16/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1774221044,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,WUDKUVHN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000701,Rimmer,Manny,M,02/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1803933938,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,577.83,0,0,0,1,1,0,0,0,0,0,5R6173C7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000702,Andor,Raquel,F,18/09/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1851625498,0,0,0,0,0,0,0,0,0,0,1,2,153.05,0,0,0,0,0,0,1,0,0,0,0,1,1,AHV11MC5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000703,Fothergill,Fenella,F,26/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4009545166,0,1,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4RFXNGSX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,0,2025 -CYP0000704,Lister,Penelope,F,07/06/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7162629786,0,0,0,0,0,0,0,1,2,166.73,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,6285JBJV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000705,Duck,Nathan,M,09/12/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2062000207,1,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,5V33K2X1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,2024 -CYP0000706,Kenobi,Clegg,M,22/03/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4947660867,0,0,0,0,0,0,0,0,0,0,1,4,376.74,0,0,0,0,0,0,1,0,0,0,0,1,1,6WW8EJSG,0,0,0,0,,1,1,-0.43,2.43,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000707,Wren,Hermione,F,05/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4893020391,1,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PP6EAXE3,1,-0.37,2.37,2,,0,1,1.36,2.64,4,,0,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000708,McGonagall,Bernard,M,01/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9170684632,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,120.67,0,0,0,1,0,0,0,0,0,0,WEZJE9TJ,1,-1.02,3.02,2,,0,1,1.92,2.08,4,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000709,Djarin,Dolores,F,05/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4398250825,1,0,0,0,0,0,0,0,0,0,1,1,42.45,1,3,247.94,0,0,0,1,1,0,0,0,1,1,T20U4U9L,1,-0.57,2.57,2,,0,1,-0.09,2.09,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,2023 -CYP0000710,Foggy,Kathryn,F,29/11/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9667198721,0,0,0,0,0,0,0,1,3,117.37,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,UF5ADG0Y,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000711,Janeway,Leia,F,31/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8561199922,0,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,4REPJ4M4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000712,Baldrick,Constance,F,25/01/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3778912172,1,0,0,0,0,0,0,1,4,296.08,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,KDZQ4SQE,1,-0.95,2.95,2,,0,1,1.93,2.07,4,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000713,Imwe,Seven,F,22/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2398288554,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,363.16,1,0,0,0,0,0,0,A7WKDQEG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000714,Dinkley,Boycie,M,26/04/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9137930866,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,177.04,0,0,0,1,1,0,0,0,0,0,UAC4XVFZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000715,Granger,Popeye,M,06/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2148126752,0,0,0,0,0,0,0,1,2,123.09,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,KU1N1QVK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000716,La Forge,Seven,F,16/01/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9861459309,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,355.95,1,0,0,0,0,0,0,2W4B2SCY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000717,Perkins,James,M,23/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6419922458,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,160.19,0,0,0,1,1,0,0,0,0,0,1P762NLZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000718,Batty,Hyacinth,F,23/08/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4621186982,1,0,0,0,0,0,0,0,0,0,1,4,225.34,0,0,0,0,0,0,1,0,0,0,0,1,1,QH3S26UE,0,0,0,0,,1,1,-0.4,2.4,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000719,Lovegood,Pavel,M,13/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3638434339,0,0,0,0,0,0,0,0,0,0,1,4,328.15,0,0,0,0,0,0,1,0,0,0,0,1,1,43X44XVE,1,-0.66,2.66,2,,0,1,-0.11,3.11,3,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,2023 -CYP0000720,Sailor,Frank,M,16/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9923866164,1,0,0,0,0,0,0,0,0,0,1,2,179.56,0,0,0,0,0,0,1,0,0,0,0,1,1,V2TWYVUF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000721,Djarin,Spock,M,15/12/1999,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6297328564,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,115.11,1,0,0,0,0,0,0,0WZY9C28,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000722,Umbridge,Ginevra,F,29/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6507337708,1,0,0,0,0,0,0,0,0,0,1,2,176.96,0,0,0,0,0,0,1,0,0,0,0,1,1,1K23Z2Z3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2023 -CYP0000723,Barker,Rumpole,M,16/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5318934866,1,1,4,7,0,0,0,0,0,0,1,1,77.79,0,0,0,0,0,0,1,0,0,0,0,1,1,BWFXB5GT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,5.25,1,1,2024 -CYP0000724,Riker,Edmund,M,17/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3270715443,0,0,0,0,0,0,0,1,3,242.19,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,Z06PD3PE,1,0.46,2.54,3,,0,1,-0.75,2.75,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000725,Mouse,Basil,M,23/04/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9833968573,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,160.97,1,0,0,0,0,0,0,XMT3SAG1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000726,Clegg,Minerva,F,04/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9061246812,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,107.85,1,0,0,0,0,0,0,JN1A7KNE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000727,Bear,Padme,F,07/04/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4237972552,0,0,0,0,0,0,0,0,0,0,1,2,148.57,0,0,0,0,0,0,1,0,0,0,0,1,1,7PFGEQN3,0,0,0,0,,1,1,-0.23,2.23,2,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000728,Compo,Marigold,F,07/02/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4887286715,0,0,0,0,0,0,0,0,0,0,1,2,195,0,0,0,0,0,0,1,0,0,0,0,1,1,N968YF7W,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2024 -CYP0000729,Scott,Basil Brush,M,25/03/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7422832448,1,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,A6KB9Z7E,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2021 -CYP0000730,Woodpecker,Han,M,25/01/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3422460343,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,189.51,0,0,0,1,1,0,0,0,0,0,8YBGMHVS,1,-0.03,3.03,3,,0,1,0.74,2.26,3,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000731,Bootle,Daisy,F,15/06/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2720902231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,88.54,1,0,0,0,0,0,0,F17X24AJ,1,-2,3,1,,0,1,1.35,2.65,4,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000732,Bear,Jyn,F,03/08/2000,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6128926096,1,0,0,0,1,3,105.1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8EMX4WCG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000733,Harris,Deanna,F,05/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8775458792,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,149.53,1,1,44.79,1,1,0,0,0,0,0,C1CSB7U2,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2025 -CYP0000734,Bunny,Minerva,F,02/07/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2490840217,1,0,0,0,0,0,0,1,1,62.63,0,0,0,1,2,101.6,0,0,0,1,1,0,1,1,0,0,SSBAJ4AL,0,0,0,0,,1,1,0.57,2.43,3,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2021 -CYP0000735,Simpson,Wendy,F,01/09/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3344758807,1,0,0,0,0,0,0,0,0,0,1,2,147.76,0,0,0,1,1,34.18,1,0,0,0,0,1,1,ARUFLWM9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000736,Umbridge,Nyota,F,15/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4102576612,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,BF90WWU0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000737,Pearce,Elizabeth,F,15/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8777141549,1,0,0,0,0,0,0,0,0,0,1,2,96.47,0,0,0,0,0,0,1,0,0,0,0,1,1,YFAH6ZS8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000738,Scott,Minnie,F,01/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1844761343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,411.81,1,0,0,0,0,0,0,ZV7N9EP1,0,0,0,0,,1,1,-0.62,2.62,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000739,Chekov,Mon,F,19/04/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1025502063,0,0,0,0,0,0,0,1,3,215.62,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,B1XEEWMZ,1,-1.04,3.04,2,,0,1,0,3,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000740,Bashir,Tasha,F,08/03/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2685444628,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,276.06,1,0,0,0,0,0,0,JKX8BKUW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000741,Nerys,Marge,F,14/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9659899550,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,324.12,0,0,0,1,1,0,0,0,0,0,NEWBZNH3,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000742,Dameron,Gordon,M,17/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2922620445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,229.06,1,0,0,0,0,0,0,ANGARZXD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000743,Crusher,Jyn,F,29/05/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5560561097,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,161.53,0,0,0,1,1,0,0,0,0,0,9RB0E7CX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000744,Sarek,Miranda,F,09/04/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6712726232,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,228.37,0,0,0,1,1,0,0,0,0,0,GJ1SS0UJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000745,Delacour,Denzil,M,15/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7886851189,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YJQ7X0HU,1,-1.47,3.47,2,,0,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000746,Foggy,Raquel,F,04/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9683097097,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,YMLC4ZEP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000747,Fothergill,Tasha,F,14/12/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1949777164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,127,1,0,0,0,0,0,0,SRH7Q0ZB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000748,Scott,Leia,F,16/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1014813393,0,0,0,0,0,0,0,0,0,0,1,3,172.65,0,0,0,0,0,0,1,0,0,0,0,1,1,2LB6KY5S,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000749,Riker,Nyota,F,10/03/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9271877370,1,0,0,0,0,0,0,0,0,0,1,4,236.74,0,0,0,0,0,0,1,0,0,0,0,1,1,RLSVD79Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000750,Organa,Jadzia,F,05/07/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4391278116,1,0,0,0,0,0,0,1,3,157.16,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,QHEHW6DD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000751,Antilles,Mickey,M,16/06/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9301251045,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,199.32,0,0,0,1,1,0,0,0,0,0,L47FPRTS,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000752,Blake,Rene,M,27/07/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3074807966,1,0,0,0,1,3,30,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,QRK2P6U9,1,-0.59,2.59,2,,0,1,0.08,2.92,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000753,Corbett,Sabine,F,07/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9844857980,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RKAPRT33,1,-1.52,3.52,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000754,Imwe,Frank,M,16/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6810662214,1,0,0,0,0,0,0,0,0,0,1,2,147.29,0,0,0,0,0,0,1,0,0,0,0,1,1,UQTHLRBC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000755,Jones,James,M,17/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9317675740,0,1,4,15,0,0,0,0,0,0,0,0,0,0,0,0,1,1,40.9,1,0,0,0,0,0,0,K9UDNWTL,1,0.07,2.93,3,,0,1,0.89,2.11,3,,0,0,0,0,2,0.35,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11.25,1,0,2025 -CYP0000756,Calrissian,Miles,M,09/09/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7756142058,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GLBD1YSU,1,1.76,2.24,4,,0,1,0.72,3.28,4,,0,0,0,0,3,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,1,2016 -CYP0000757,Dameron,Minerva,F,07/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8463854628,1,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,H9Q1NU01,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000758,Kenobi,Hikaru,M,18/12/2002,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9513441942,1,1,1,0,0,0,0,0,0,0,0,0,0,1,4,471,0,0,0,1,1,0,0,0,0,0,3VQU477J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2019 -CYP0000759,Paris,Marge,F,18/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3487952241,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,119.66,0,0,0,1,1,0,0,0,0,0,RYU39VZC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000760,McGonagall,Velma,F,06/06/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3944160184,0,0,0,0,0,0,0,0,0,0,1,2,114.41,0,0,0,0,0,0,1,0,0,0,0,1,1,HJTPT58Z,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000761,McGonagall,Lisa,F,27/10/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1774840914,0,0,0,0,0,0,0,0,0,0,1,2,194.02,0,0,0,0,0,0,1,0,0,0,0,1,1,Y1TE3YS7,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000762,Trotter,Fleur,F,26/09/2004,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1566743151,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,155.59,0,0,0,1,1,0,0,0,0,0,QMTQT0H9,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2021 -CYP0000763,Troi,Kira,F,23/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4289696531,1,0,0,0,0,0,0,1,1,25.61,1,4,468.5,0,0,0,0,0,0,1,0,0,1,1,1,1,KBNTH9LL,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000764,Brittas,Molly,F,27/12/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8702073808,0,1,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,93XNTJ9V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6.75,1,0,2023 -CYP0000765,Woodpecker,Wendy,F,06/04/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1092981535,0,0,0,0,0,0,0,1,4,350.32,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,FQDPV10E,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000766,Calrissian,Wedge,M,27/12/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1973407726,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,272.36,0,0,0,1,1,1,0,0,0,0,40P0MXNK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000767,Skywalker,Miles,M,11/07/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5788478677,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,85.49,1,0,0,0,0,0,0,6D2LKSZB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000768,Chekov,Daphne,F,27/01/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9700875529,0,0,0,0,1,3,95.06,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,D6QRE19Q,1,0.98,3.02,4,,0,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000769,Kirk,Ben,M,22/01/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1137746581,0,0,0,0,0,0,0,0,0,0,1,4,40,0,0,0,0,0,0,1,0,1,0,0,1,1,3EKWH2MR,1,-0.35,2.35,2,,0,1,-2.18,3.18,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2021 -CYP0000770,Dameron,Nyota,F,13/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4494196944,0,0,0,0,0,0,0,0,0,0,1,2,70,0,0,0,0,0,0,1,0,0,0,0,1,1,XSQ4JDWA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000771,Antilles,Constance,F,17/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8229916046,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,108.33,1,0,0,0,0,0,0,JNN1CZK4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000772,Sailor,Boycie,M,30/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7515717157,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,267.99,0,0,0,1,1,0,0,0,0,0,M7JQUFD3,1,-0.29,3.29,3,,0,1,-0.16,3.16,3,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000773,Dax,Marigold,F,25/09/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7547701286,0,1,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BGB8QMX8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,1,2024 -CYP0000774,Bunny,Gordon,M,20/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5706586808,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,TE4KBL5V,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000775,Wren,Trigger,M,02/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1118246046,1,1,2,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,GP2LR2FV,1,1.39,2.61,4,,0,1,0.75,2.25,3,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000776,Doo,Olive,F,27/06/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9378431385,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,143.4,1,0,0,0,0,0,0,SHP2MGP8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000777,Baldrick,Tasha,F,20/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5125063457,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,193.89,1,0,0,0,0,0,0,MVZZP15V,1,1.75,2.25,4,,0,1,0.48,3.52,4,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000778,Kenobi,Prunella,F,30/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6962519567,0,1,4,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0FVWJW6U,1,0.54,2.46,3,,0,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5.25,1,1,2025 -CYP0000779,Bear,Anakin,M,16/05/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1357781152,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,W386A6PK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000780,Solo,Norman,M,11/12/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8616097483,0,0,0,0,0,0,0,1,4,345.89,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1V3XLH3J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000781,Vizsla,James,M,19/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2976391858,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,146.12,1,0,0,0,0,0,0,W0B1GH9H,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000782,Blake,Minerva,F,20/01/2003,22,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,5726142801,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,6BU4QQE7,1,-1.17,2.17,1,,0,1,-0.05,3.05,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000783,Bootle,Baldrick,M,06/01/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2254036269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,255.69,1,0,0,0,0,0,0,CCS9D47D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000784,Scott,Jyn,F,27/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4795718896,1,0,0,0,0,0,0,0,0,0,0,0,0,1,4,196.56,0,0,0,1,1,0,0,0,0,0,T3DDEU4L,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2025 -CYP0000785,Fothergill,Baldrick,M,13/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7485728824,0,0,0,0,0,0,0,0,0,0,1,2,48.61,1,1,51.36,0,0,0,1,1,0,0,0,1,1,B0CMMPY8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,2025 -CYP0000786,Dax,James,M,25/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2447984505,0,0,0,0,0,0,0,1,1,62.77,1,2,250.77,0,0,0,0,0,0,1,0,0,1,1,1,1,QWT9W9BD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000787,Sarek,Padme,F,07/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5254263850,1,0,0,0,0,0,0,0,0,0,1,4,417.53,0,0,0,0,0,0,1,0,0,0,0,1,1,5YK4A3T8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000788,Harris,Maggie,F,22/05/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4470448240,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,247.66,0,0,0,1,1,0,0,0,0,0,KUS5TNWW,1,-2.15,3.15,1,,0,1,-2.06,3.06,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000789,Trotter,Onslow,M,12/06/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6445917955,0,1,2,4,0,0,0,0,0,0,1,1,128.27,0,0,0,0,0,0,1,0,0,0,0,1,1,KX7NS9WR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2023 -CYP0000790,Fawlty,Blackadder,M,14/09/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9138769588,0,0,0,0,0,0,0,0,0,0,1,2,72.49,0,0,0,0,0,0,1,0,0,0,0,1,1,HP1S7X8Y,1,0.11,2.89,3,,0,1,-2.41,3.41,1,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2022 -CYP0000791,Barker,Manny,M,21/10/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8381865861,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,122.67,0,0,0,1,1,0,0,0,0,0,ZA1G6AQ8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000792,Batty,Anakin,M,06/06/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2843188735,0,0,0,0,0,0,0,0,0,0,1,2,106.4,0,0,0,0,0,0,1,0,1,0,0,1,1,SPWX4LL2,1,0.33,2.67,3,,0,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,2024 -CYP0000793,Djarin,Constance,F,06/09/2005,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7577758569,0,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,FFRJ1HE3,1,-0.4,3.4,3,,0,1,-0.54,2.54,2,,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2022 -CYP0000794,Bucket,Marge,F,03/06/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2661614934,0,0,0,0,0,0,0,0,0,0,1,4,300.74,0,0,0,0,0,0,1,0,0,0,0,1,1,U26NJFPW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,2024 -CYP0000795,Kirk,Sybil,F,05/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8814292341,1,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,A0YQNGM0,1,0.92,2.08,3,,0,1,0.66,2.34,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000796,Nerys,Marigold,F,02/03/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2327593101,1,0,0,0,0,0,0,0,0,0,1,3,183.78,0,0,0,0,0,0,1,0,0,0,0,1,1,NQKJA1W8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000797,Brittas,Luna,F,11/08/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7437955197,1,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,1,1,10.06,1,0,0,0,0,0,0,QMEGSUVC,1,-0.88,2.88,2,,0,1,-2.15,3.15,1,,0,1,1,1,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2021 -CYP0000798,Solo,Reginald,M,09/03/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2778481852,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,150.56,0,0,0,1,1,0,0,0,0,0,Z5ZCEQWX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000799,Compo,Daphne,F,02/06/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8359880081,0,0,0,0,1,3,212.16,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2YBPNZPG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000800,Wren,Marge,F,14/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3095307333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,269.89,1,0,0,0,0,0,0,JRKQF3V0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000801,Higgins,James,M,04/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9412010808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,127.08,1,0,0,0,0,0,0,50G81ZWV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000802,Foggy,Peter,M,23/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5768474727,1,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,MSV5EDTZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000803,Woodpecker,Shaggy,M,31/05/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1575329655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,144.36,1,0,0,0,0,0,0,L0PP0AGX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000804,Crusher,Reginald,M,29/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1650896650,0,0,0,0,0,0,0,0,0,0,1,3,167.27,0,0,0,0,0,0,1,0,0,0,0,1,1,RVA2F9UP,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000805,Rimmer,Biggs,M,26/07/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8203426392,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,256.42,0,0,0,1,1,0,0,0,0,0,KDM606XU,1,0.85,2.15,3,,0,1,0.92,2.08,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2022 -CYP0000806,Nerys,Sherlock,M,20/09/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6522646143,1,1,3,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,BBXDP7NR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,1,0,2024 -CYP0000807,Dax,Beverly,F,18/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,3612192326,0,0,0,0,0,0,0,0,0,0,1,4,244.56,0,0,0,0,0,0,1,0,0,0,0,1,1,TP9TQCV4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000808,Torres,Hermione,F,12/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5981437770,0,0,0,0,0,0,0,0,0,0,1,4,295.1,0,0,0,0,0,0,1,0,0,0,0,1,1,J89VW1FF,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000809,Bashir,Daisy,F,26/08/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7365046312,0,0,0,0,0,0,0,0,0,0,1,3,251.27,0,0,0,0,0,0,1,0,0,0,0,1,1,YJCN1CL5,0,0,0,0,,1,1,0.76,2.24,3,,0,0,0,0,2,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,2021 -CYP0000810,Brittas,Nyota,F,04/09/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4931038429,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,120.79,1,0,0,0,0,0,0,Y7G2CRCC,1,0.27,2.73,3,,0,1,0.81,2.19,3,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000811,Clegg,Stewie,M,13/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6541656257,0,0,0,0,1,4,324.44,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,NWMP2PBW,1,-1.14,3.14,2,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000812,Jones,Lisa,F,16/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1069053522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,182.86,1,0,0,0,0,0,0,EDCJ9ZRN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000813,Picard,Lisa,F,30/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6731955695,0,0,0,0,0,0,0,0,0,0,1,4,272.67,0,0,0,0,0,0,1,0,1,0,0,1,1,BPV0Y46W,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000814,O'Brien,Popeye,M,16/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6833238335,1,0,0,0,0,0,0,0,0,0,1,4,336.35,0,0,0,0,0,0,1,0,0,0,0,1,1,F5D9SEYQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000815,Dameron,Compo,M,19/02/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4872521694,1,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,2K4SD8GB,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000816,Picard,Ben,M,22/12/2005,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1055248201,0,0,0,0,1,4,316.4,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,48FX8M8C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000817,Bootle,Trigger,M,27/09/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9261208252,0,0,0,0,0,0,0,0,0,0,1,3,145.92,0,0,0,0,0,0,1,0,0,0,0,1,1,56H95D9Z,1,-0.83,2.83,2,,1,1,-1.22,3.22,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000818,Rimmer,Goofy,M,11/04/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7458935790,0,0,0,0,0,0,0,1,2,173.61,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,3QZDSP6Y,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000819,La Forge,Donald,M,07/08/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8158715028,0,0,0,0,0,0,0,1,2,96.82,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,GXCP3FUX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000820,Weasley,Manny,M,11/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1456007305,0,0,0,0,0,0,0,0,0,0,1,4,302.23,0,0,0,0,0,0,1,0,0,0,0,0,1,UL778K2D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000821,Lovegood,Velma,F,12/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6997843248,1,1,3,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,4SX9XX2W,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,1,0,2025 -CYP0000822,Andor,Foggy,M,04/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,3686777209,0,0,0,0,0,0,0,0,0,0,1,4,239.66,0,0,0,0,0,0,1,0,0,0,0,1,1,B2SG7326,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000823,Paris,Lisa,F,24/07/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9696804577,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,187.81,0,0,0,1,1,0,0,0,0,0,0USHXJNJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2019 -CYP0000824,Dax,Jean-Luc,M,06/08/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8828528214,0,0,0,0,0,0,0,0,0,0,1,2,152.86,0,0,0,0,0,0,1,0,0,0,0,1,1,94TJAYRN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2016 -CYP0000825,Fothergill,B'Elanna,F,22/11/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8088604632,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,127.47,0,0,0,1,1,0,0,0,0,0,A0L3N0WU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000826,Rimmer,Penelope,F,11/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2204154538,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,225.38,0,0,0,1,1,0,0,0,0,0,BEZA9AGV,1,-0.01,3.01,3,,0,1,-2.48,3.48,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000827,Baldrick,Marge,F,27/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7857452357,1,0,0,0,0,0,0,0,0,0,1,3,316.97,0,0,0,0,0,0,1,0,0,0,0,1,1,GRJU4NGY,1,-0.18,2.18,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000828,Syndulla,Sherlock,M,29/05/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,6798623914,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,335.18,1,0,0,0,0,0,0,Z7QSUDRJ,1,-0.55,2.55,2,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000829,Pearce,Ivy,F,03/05/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7122054903,1,0,0,0,0,0,0,0,0,0,1,2,84.82,0,0,0,0,0,0,1,0,0,0,0,1,1,XMC17LBM,1,-0.68,2.68,2,,0,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000830,Picard,Rene,M,13/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4452419330,1,0,0,0,0,0,0,1,4,255.8,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,S2RRWC0K,1,-0.97,2.97,2,,0,1,0.93,2.07,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000831,Jones,Bart,M,26/05/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2284859269,0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,DYRE6836,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000832,Barker,Odo,M,13/11/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9948054234,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,ETRAXMWX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000833,Blackadder,Fred,M,11/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,1219552043,0,0,0,0,0,0,0,0,0,0,1,4,275.29,0,0,0,0,0,0,1,0,0,0,0,1,1,5FLP1BYB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000834,Skywalker,Shaggy,M,20/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6789554402,1,0,0,0,0,0,0,1,4,253.41,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,NDLFDUUN,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000835,Dinkley,Basil Brush,M,11/10/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8181693747,0,0,0,0,0,0,0,0,0,0,1,2,139.58,0,0,0,0,0,0,1,0,0,0,0,1,1,QGBNCZDB,0,0,0,0,,1,1,-0.39,2.39,2,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000836,Barker,Deanna,F,17/01/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7702848840,0,0,0,0,0,0,0,1,1,79.36,0,0,0,0,0,0,1,3,246.59,1,0,0,1,1,0,0,N7QSWMPD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000837,Bucket,Worf,M,18/04/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4482707812,0,1,3,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,RG4T13B0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,0,2025 -CYP0000838,Kryze,Popeye,M,03/02/2000,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2637513165,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,183.79,1,0,0,0,0,0,0,S4PN9PTS,1,-0.47,2.47,2,,0,1,-0.58,3.58,3,,0,0,0,0,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000839,Granger,Basil Brush,M,29/12/2005,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1012841575,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,241.73,0,0,0,1,1,0,0,0,0,0,08DXSBMH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2022 -CYP0000840,Spencer,Bart,M,18/08/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1404533615,1,0,0,0,0,0,0,0,0,0,1,4,293.29,0,0,0,1,1,78.81,1,0,0,0,0,1,1,W20Y4SKW,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000841,Brittas,Gordon,M,28/10/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8961440460,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,131.23,0,0,0,1,0,0,0,0,0,0,DW9NM311,1,-1.38,3.38,2,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000842,Fothergill,Han,M,08/05/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3178049115,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,40,0,0,0,1,1,0,0,0,0,0,XAC9M3ZD,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000843,Picard,Bugs,M,03/01/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5625171850,0,0,0,0,0,0,0,1,2,117.85,0,0,0,1,1,97.74,0,0,0,1,1,0,1,1,0,0,3HWV1ESK,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,2019 -CYP0000844,Clegg,Foggy,M,24/02/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5749552612,0,1,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PBZPVJJ4,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,0,2021 -CYP0000845,Erso,Daisy,F,28/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3590328042,0,0,0,0,0,0,0,1,4,392.17,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,9W5ZRX6M,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000846,Baldrick,Odo,M,16/12/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7965148678,0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,L6DUYLKL,1,-1.36,3.36,2,,0,1,0.16,2.84,3,,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,0,2025 -CYP0000847,Garcia,Minerva,F,23/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,2579928249,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,62.79,1,2,156.73,1,1,0,0,0,0,0,E49ZXT4P,1,-0.49,2.49,2,,0,1,-1.99,2.99,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000848,Garcia,Baldrick,M,11/02/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6941360796,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,J4XU1WAX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,1,2023 -CYP0000849,Compo,Han,M,22/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4687924148,1,0,0,0,0,0,0,1,3,220.89,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,SD8TQW0T,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000850,Solo,Constance,F,16/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6053437271,0,0,0,0,0,0,0,0,0,0,1,2,95.39,0,0,0,0,0,0,1,0,0,0,0,1,1,9W5745JQ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000851,Djarin,Daphne,F,30/04/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7033817459,0,1,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,N8QWWJAZ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000852,Fawlty,Molly,F,11/04/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3509300549,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,AMUT8ZPY,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000853,Rogers,Penelope,F,23/08/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9441977143,0,1,3,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0663QSZV,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,1,0,2025 -CYP0000854,Calrissian,Rose,F,07/11/2002,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2419222174,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,315.4,0,0,0,1,1,0,0,0,0,0,1JXV1PVB,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2019 -CYP0000855,Rook,B'Elanna,F,15/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4281901324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,277.1,1,0,0,0,0,0,0,RT1BHME8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000856,Solo,Leia,F,03/07/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,6403777434,0,0,0,0,0,0,0,0,0,0,1,2,138.04,0,0,0,0,0,0,1,0,0,0,0,1,1,R6FQEJPU,1,0.24,2.76,3,,1,1,-0.72,2.72,2,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000857,Fothergill,Basil Brush,M,12/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2435731500,0,0,0,0,0,0,0,0,0,0,1,2,214.88,0,0,0,0,0,0,1,0,0,0,0,1,1,H2CW2XB4,1,-1.53,3.53,2,,0,1,0.87,2.13,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2024 -CYP0000858,Kirk,Wedge,M,18/05/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,1644310097,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,182.89,1,0,0,0,0,0,0,8QBZ715B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000859,Bucket,Tasha,F,05/01/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,8795076800,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,7PC0RQDX,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000860,Bashir,Olive,F,31/03/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4802927858,0,0,0,0,0,0,0,0,0,0,1,3,296.83,0,0,0,1,1,65.96,1,0,0,0,0,1,1,GQKAKSJU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000861,Griffin,Edmund,M,06/10/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,9968920059,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,60.45,1,0,0,0,0,0,0,LLEGWKA6,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000862,O'Brien,Yogi,M,26/12/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8895450000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,169.76,1,0,0,0,0,0,0,DGNTGETG,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000863,Bucket,Jadzia,F,16/07/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5805756498,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,143.7,0,0,0,1,1,0,0,0,0,0,349DR1GU,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000864,Sisko,Han,M,21/06/2006,19,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9983782476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,130.29,1,0,0,0,0,0,0,9441DCLS,1,-1.31,3.31,2,,0,1,0.9,3.1,4,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000865,Kenobi,Onslow,M,17/10/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1844570258,1,1,2,9,0,0,0,0,0,0,1,1,63.03,0,0,0,0,0,0,1,0,0,0,0,1,1,L9L21GWE,1,-1.18,3.18,2,,0,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000866,Picard,Hyacinth,F,14/10/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4451828371,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,372.06,0,0,0,1,0,0,0,0,0,0,FJ3EUQTE,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000867,Imwe,Worf,M,26/03/2003,22,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,8654335825,0,1,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,URZFB8Y7,0,0,0,0,,1,0,0,0,0,,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2019 -CYP0000868,Sulu,Luna,F,10/01/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4457712674,0,0,0,0,0,0,0,0,0,0,1,2,205.31,0,0,0,0,0,0,1,0,0,0,0,1,1,P3BUF7GA,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2023 -CYP0000869,Sailor,Kathryn,F,24/03/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2464864695,1,0,0,0,1,4,186.31,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,M4QETSTT,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000870,Featherstone,Bridget,F,01/01/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1318123463,1,0,0,0,1,1,71.36,0,0,0,0,0,0,0,0,0,1,4,317.42,1,0,0,0,0,0,0,05T320V8,1,0.56,2.44,3,,1,1,0.87,2.13,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000871,Corbett,Hermione,F,17/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,4139951803,1,0,0,0,0,0,0,0,0,0,1,3,332.74,0,0,0,0,0,0,1,0,0,0,0,1,1,PAU51PX1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2025 -CYP0000872,Kryze,Rey,F,17/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6011363609,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,131.47,1,0,0,0,0,0,0,TFNB6TQ0,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2023 -CYP0000873,Puddifoot,Bo-Katan,F,11/09/2007,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7009619893,0,0,0,0,0,0,0,1,4,227.46,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,URK8CX9P,0,0,0,0,,1,1,0.45,2.55,3,,0,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000874,Corbett,Lando,M,01/08/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7412471088,0,0,0,0,0,0,0,1,2,191.2,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,7A3VH13C,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2022 -CYP0000875,Trotter,Bugs,M,16/02/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7767181379,1,1,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,Z8359K2G,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,1,0,2025 -CYP0000876,Antilles,Marigold,F,14/04/2005,20,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4211566169,0,0,0,0,1,3,185.71,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,74PZSBMH,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,1,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000877,Brittas,Marigold,F,19/11/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6794014659,0,0,0,0,0,0,0,0,0,0,1,2,171.15,0,0,0,0,0,0,1,0,0,0,0,1,1,YR5UDFGJ,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000878,Nerys,Molly,F,23/03/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,5305823632,0,1,4,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,TXYSQQNL,1,-0.15,2.15,2,,0,1,0.46,2.54,3,,0,0,0,0,1,0.35,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8.25,1,0,2025 -CYP0000879,Djarin,Mace,M,11/07/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,8882744094,0,1,3,10,0,0,0,0,0,0,0,0,0,0,0,0,1,1,67.03,1,0,0,0,0,0,0,REBBEMJR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,1,0,2024 -CYP0000880,Mouse,Bart,M,05/08/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7599473321,0,0,0,0,0,0,0,1,1,62.69,1,3,300.44,0,0,0,0,0,0,1,0,0,1,1,1,1,U8MA2124,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000881,Chekov,Leia,F,15/05/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,7050681917,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,253.69,0,0,0,1,1,0,0,0,0,0,LRJ39R0J,0,0,0,0,,1,0,0,0,0,,1,0,0,0,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2024 -CYP0000882,Simpson,Kira,F,04/11/1999,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,7682844583,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,269.11,0,0,0,1,0,0,0,0,0,0,2KBUZGTL,1,-0.12,2.12,2,,0,1,-2.05,3.05,1,,0,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2016 -CYP0000883,Barker,Foggy,M,07/03/2007,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,4352623546,0,0,0,0,0,0,0,0,0,0,1,2,124.06,0,0,0,0,0,0,1,0,0,0,0,1,1,BEUH28HM,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.35,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000884,Meldrew,David,M,26/09/2008,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7887413935,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,61.8,1,0,0,0,0,0,0,R3CZTAZ5,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2025 -CYP0000885,Woodpecker,Tom,M,20/07/2006,19,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,4495069054,0,0,0,0,0,0,0,0,0,0,1,4,350.95,0,0,0,0,0,0,1,0,0,0,0,1,1,1P7D3Y83,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2022 -CYP0000886,Djarin,Jacob,M,14/03/2005,20,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5202410531,0,0,0,0,0,0,0,1,3,300.57,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,RTAMBUYU,1,-1.46,2.46,1,,0,1,-0.28,3.28,3,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2021 -CYP0000887,Nerys,Jean-Luc,M,23/10/2007,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9151027359,0,1,2,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,PGT5PK6B,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000888,La Forge,Hikaru,M,07/06/2009,16,501,,1,0,0,ILR,,,8808003,130648,10002435,7292264982,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,252.02,0,0,0,1,1,0,0,0,0,0,4F4Y3JQL,1,0.16,2.84,3,,0,1,-2.05,3.05,1,,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2025 -CYP0000889,Woodpecker,Lando,M,12/09/2006,18,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,9210786610,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,180.83,0,0,0,1,1,0,0,0,0,0,C5UDPUVR,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 -CYP0000890,Corbett,Nathan,M,06/01/2000,25,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,9877631689,0,0,0,0,0,0,0,0,0,0,1,2,114.88,0,0,0,0,0,0,1,0,1,0,0,1,1,NKA57H2N,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2016 -CYP0000891,Jones,Luke,M,17/07/2007,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,3743532114,0,0,0,0,0,0,0,0,0,0,1,2,100.34,0,0,0,0,0,0,1,0,0,0,0,1,1,62FUGVN8,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,2023 -CYP0000892,Bear,Sybil,F,06/07/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,2949038093,0,1,2,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,HXULJPJ1,0,0,0,0,,1,0,0,0,0,,1,0,0,0,2,0.5,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000893,Riker,Sabine,F,08/08/2008,17,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,1260451177,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,290.01,0,0,0,1,1,0,0,0,0,0,SJHGVQ40,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2024 -CYP0000894,Sailor,Kira,F,23/02/2000,25,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,5296351529,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,202.88,1,0,0,0,0,0,0,V730LS4D,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2016 -CYP0000895,Paris,Bernard,M,19/04/2008,17,501,,1,1,0,ILR,ILR,,8808003,130648,10002435,6849991684,0,0,0,0,1,3,164.36,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,AGAT8N51,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2024 -CYP0000896,McGonagall,Biggs,M,04/12/2006,18,501,,1,1,1,ILR,ILR,ILR,8808003,130648,10002435,2751159612,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,313.03,0,0,0,1,1,1,0,0,0,0,HRG11RYC,0,0,0,0,,1,0,0,0,0,,1,0,0,0,1,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,2023 diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/nonincluded.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/nonincluded.csv index 1396cdbbf..c5fe83271 100644 --- a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/nonincluded.csv +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/nonincluded.csv @@ -9,44 +9,9 @@ C0007,CYP0000007,Sisko,Jacob,M,24/11/2007,17,8604070,142313,10004270,1240251661, C0008,CYP0000008,Kirk,Kira,F,27/07/2008,17,8604070,142313,10004270,2137651678,,,, C0001,CYP0000009,Weasley,Nyota,F,23/12/2008,16,2114505,100974,10002183,3119634399,3.36,2.5,, C0002,CYP0000010,Umbridge,Jean-Luc,M,16/03/2009,16,2114505,100974,10002183,5047709743,6.38,5.63,, -C0003,CYP0000011,Harris,Trigger,F,03/09/2008,16,2114505,100974,10002183,4919706735,6.14,5.84,, -C0004,CYP0000012,Yar,Clegg,M,31/05/2007,18,2114505,100974,10002183,7867414708,5.37,4.38,, -C0005,CYP0000013,Delacour,Lisa,F,15/10/2006,18,2114505,100974,10002183,4504793184,5.24,4.71,, -C0006,CYP0000014,Solo,Han,M,25/11/2006,18,2114505,100974,10002183,,3.77,3.23,, -C0007,CYP0000015,Wren,Chirrut,M,24/05/2009,16,2114505,100974,10002183,2064746525,,,, -C0008,CYP0000016,McGonagall,Woody,M,08/10/2008,16,2114505,100974,10002183,1252860896,,,, -C0009,CYP0000017,Nerys,Baldrick,M,10/08/2009,16,2114505,100974,10002183,3315992115,4.88,4.0,, -C0010,CYP0000018,Uhura,Kathryn,F,21/10/2008,16,2114505,100974,10002183,6816663775,4.76,4.11,, C0001,CYP0000019,Sarek,Hyacinth,F,27/10/2007,17,2114507,100975,10002184,,,,, C0002,CYP0000020,Rogers,Nyota,F,07/01/2009,16,2114507,100975,10002184,5618742930,4.2,3.34,, -C0003,CYP0000021,Kirk,James,F,09/09/2006,18,2114507,100975,10002184,4645120421,,,, -C0004,CYP0000022,Sarek,Daphne,F,25/11/2007,17,2114507,100975,10002184,9526836552,,,, -C0005,CYP0000023,Solo,Deanna,F,13/06/2009,16,2114507,100975,10002184,3090237817,,,, -C0006,CYP0000024,Weasley,Hyacinth,F,03/10/2007,17,2114507,100975,10002184,1245522987,2.15,1.99,, C0001,CYP0000025,Umbridge,Edmund,M,31/12/2008,16,2136327,101173,10008488,3446737272,4.46,4.42,, C0002,CYP0000026,Delacour,Manny,M,13/01/2008,17,2136327,101173,10008488,,4.59,3.92,, C0001,CYP0000027,Meldrew,Wendy,F,17/07/2009,16,8808003,130648,10002435,5278201677,,,SDC-MAIN,SDC-MAIN C0002,CYP0000028,Simpson,Edmund,M,21/11/2007,17,8808003,130648,10002435,3271782991,5.7,5.15,SDC-DIGITAL,SDC-DIGITAL -C0003,CYP0000029,Dax,Mickey,M,24/01/2009,16,8808003,130648,10002435,8377088167,,,SDC-DIGITAL,SDC-DIGITAL -C0004,CYP0000030,Pearce,Hyacinth,F,21/01/2007,18,8808003,130648,10002435,,6.78,6.62,SDC-NORTH,SDC-NORTH -C0005,CYP0000031,Meldrew,Rose,F,21/08/2003,22,8808003,130648,10002435,3343292475,6.96,6.38,SDC-MAIN,SDC-MAIN -C0006,CYP0000032,Imwe,Rodney,M,07/01/2009,16,8808003,130648,10002435,9051829827,4.49,4.25,SDC-MAIN,SDC-MAIN -C0007,CYP0000033,Crusher,Beverly,F,31/03/2003,22,8808003,130648,10002435,4482141802,,,SDC-DIGITAL,SDC-DIGITAL -C0008,CYP0000034,Dinkley,Yogi,M,25/04/2006,19,8808003,130648,10002435,,1.76,0.89,SDC-MAIN,SDC-MAIN -C0009,CYP0000035,Baldrick,Stewie,M,22/01/2000,25,8808003,130648,10002435,7482848011,5.1,5.07,SDC-NORTH,SDC-NORTH -C0010,CYP0000036,Djarin,Din,F,09/02/2008,17,8808003,130648,10002435,5791662169,3.6,3.41,SDC-MAIN,SDC-MAIN -C0011,CYP0000037,Dinkley,Rumpole,M,07/10/2007,17,8808003,130648,10002435,9249648005,4.18,3.28,SDC-DIGITAL,SDC-DIGITAL -C0012,CYP0000038,Kenobi,Bridget,F,09/12/2007,17,8808003,130648,10002435,9333798503,3.97,3.07,SDC-DIGITAL,SDC-DIGITAL -C0013,CYP0000039,Calrissian,Sybil,F,10/04/2009,16,8808003,130648,10002435,6679017210,3.85,3.06,SDC-DIGITAL,SDC-DIGITAL -C0014,CYP0000040,Pearce,Poe,M,31/12/2005,19,8808003,130648,10002435,1855256552,,,SDC-MAIN,SDC-DIGITAL -C0015,CYP0000041,Jones,Bernard,M,17/03/2007,18,8808003,130648,10002435,2047905204,3.22,3.21,SDC-MAIN,SDC-MAIN -C0016,CYP0000042,Bashir,Reginald,M,07/01/2009,16,8808003,130648,10002435,5816198518,,,SDC-NORTH,SDC-NORTH -C0017,CYP0000043,Featherstone,Beverly,F,18/05/2006,19,8808003,130648,10002435,8995059760,4.53,4.25,SDC-DIGITAL,SDC-DIGITAL -C0018,CYP0000044,Solo,Baldrick,M,20/02/2009,16,8808003,130648,10002435,,2.2,2.06,SDC-MAIN,SDC-MAIN -C0019,CYP0000045,Picard,Edmund,M,05/06/2008,17,8808003,130648,10002435,1267429212,2.92,1.97,SDC-MAIN,SDC-DIGITAL -C0020,CYP0000046,Calrissian,Padme,F,04/04/2007,18,8808003,130648,10002435,4856070374,5.82,5.55,SDC-NORTH,SDC-NORTH -C0021,CYP0000047,Bunny,Sabine,F,06/11/2005,19,8808003,130648,10002435,3294043548,3.02,2.94,SDC-NORTH,SDC-NORTH -C0022,CYP0000048,Kryze,Maggie,F,21/04/2008,17,8808003,130648,10002435,,3.53,3.15,SDC-NORTH,SDC-NORTH -C0023,CYP0000049,Spencer,Blackadder,M,28/02/2000,25,8808003,130648,10002435,,,,SDC-DIGITAL,SDC-DIGITAL -C0024,CYP0000050,Fawlty,Fred,M,02/01/2007,18,8808003,130648,10002435,,3.73,3.03,SDC-NORTH,SDC-NORTH -C0025,CYP0000051,Dameron,Clegg,M,15/09/2008,16,8808003,130648,10002435,6906898409,4.17,3.97,SDC-DIGITAL,SDC-DIGITAL diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-autumn.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-autumn.csv new file mode 100644 index 000000000..1fa19ef67 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-autumn.csv @@ -0,0 +1,6 @@ +LAESTAB,CampID,TALLPUP_1618,TALLPUP_ALEV_1618,TALLPPEGRD_ALEV_1618,TALLPPE_ALEV_1618,TALLPUP_ACAD_1618,TALLPPEGRD_ACAD_1618,TALLPPE_ACAD_1618,TALLPUP_AGEN,TALLPPEGRD_AGEN,TALLPPE_AGEN,TALLPUP_TLEV,TALLPPEGRD_TLEV,TALLPPE_TLEV,TALLPUP_TLEVEL,TALLPPEGRD_TLEVEL,TALLPPE_TLEVEL,TALLPUP_TechCert,TALLPPEGRD_TechCert,TALLPPE_TechCert,TALLPUP_ALEV_1618_DIS,TALLPPEGRD_ALEV_DIS,TALLPPE_ALEV_1618_DIS,TALLPUP_ACAD_1618_DIS,TALLPPEGRD_ACAD_DIS,TALLPPE_ACAD_1618_DIS,TALLPUP_AGEN_DIS,TALLPPEGRD_AGEN_DIS,TALLPPE_AGEN_DIS,TALLPUP_TLEV_DIS,TALLPPEGRD_TLEV_DIS,TALLPPE_TLEV_DIS,TALLPUP_TLEVEL_DIS,TALLPPEGRD_TLEVEL_DIS,TALLPPE_TLEVEL_DIS,TALLPUP_TechCert_DIS,TALLPPEGRD_TechCert_DIS,TALLPPE_TechCert_DIS,TINCLUDE_AAB_2FAC,PTAAB_2FAC,TINCLUDE_B3,TB3PTSE_GRD,TB3PTSE,TALLPUP_TLEVDENOM,TLEV_PER,TALLPUP_AGENDENOM,AGEN_PER,TALLPUP_ANYL2VOC,Techcert_PER,ENTRY_PER_E,ENTRY_PER_M,T_SCOPEEX_E,PROGEX_E,T_SCOPEEX_M,PROGEX_M,T_SCOPEEX_E_DIS,PROGEX_E_DIS,T_SCOPEEX_M_DIS,PROGEX_M_DIS,TALLPUP_SCOPE_L3M,L3M_PER +2114505,C2114505,96,17,C+,14.06,40,C,24.02,47,Merit-,28.71,39,Dist,29.62,42,Dist*,26.85,45,Pass+,34.07,26,A,35.87,19,A-,31.02,45,Dist-,22.03,46,Dist-,42.14,33,Dist*,19.31,18,Dist*,28.73,34,14.4%,8,C+,32.41,10,20.3%,31,92.3%,28,79.7%,71.7%,99.7%,8,0.31,7,0.30,40,0.10,14,0.20,40,53.0% +2114507,C2114507,142,15,C,45.64,43,A*,31.45,65,Merit+,42.62,34,Merit,25.20,50,Merit-,24.86,28,Pass+,46.48,42,C-,17.58,32,B,29.73,10,Pass,25.86,25,Dist*,44.68,66,Merit,22.74,35,Dist-,47.04,61,44.1%,30,B-,21.53,38,57.6%,36,14.4%,44,76.3%,23.6%,88.4%,43,0.31,57,0.34,19,0.09,8,-0.09,15,35.9% +2136327,C2136327,38,6,A,25.04,15,D+,37.63,9,Merit,21.67,7,Merit,47.81,8,Dist-,26.63,17,Merit-,33.98,16,D,29.56,10,A,23.82,15,Pass,19.05,7,Dist*,28.95,4,Dist,28.42,19,Merit-,40.79,4,27.5%,16,C,31.17,10,18.3%,13,32.1%,10,60.1%,21.4%,63.4%,11,0.26,12,0.37,16,-0.03,16,0.20,14,24.6% +8604070,C8604070,210,11,B+,41.23,17,A-,38.28,100,Pass,28.73,92,Dist*,34.81,103,Pass,35.76,46,Dist,39.69,93,A-,31.91,23,D+,33.72,34,Pass,15.37,92,Merit-,45.13,61,Dist,22.02,16,Dist,18.20,86,73.2%,39,C-,31.90,79,27.6%,22,35.8%,102,41.6%,45.1%,34.1%,51,-0.33,6,-0.27,45,0.28,51,0.24,72,85.9% +8808003,C8808003,175,84,B-,39.80,58,A-,27.17,12,Pass,38.41,77,Pass,26.23,5,Merit-,47.14,58,Merit,40.06,43,C+,23.65,10,C,35.88,13,Pass,38.90,16,Merit,19.81,40,Merit,46.40,45,Pass,26.23,41,83.6%,9,C+,26.59,38,1.8%,76,73.4%,46,70.9%,18.6%,57.3%,38,-0.04,63,-0.19,73,0.36,44,-0.20,16,85.0% diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-november-va.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-november-va.csv new file mode 100644 index 000000000..0d1cd214f --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-november-va.csv @@ -0,0 +1,6 @@ +LAESTAB,CampID,TALLPUP_1618,TALLPUP_ALEV_1618,TALLPPEGRD_ALEV_1618,TALLPPE_ALEV_1618,TALLPUP_ACAD_1618,TALLPPEGRD_ACAD_1618,TALLPPE_ACAD_1618,TALLPUP_AGEN,TALLPPEGRD_AGEN,TALLPPE_AGEN,TALLPUP_TLEV,TALLPPEGRD_TLEV,TALLPPE_TLEV,TALLPUP_TLEVEL,TALLPPEGRD_TLEVEL,TALLPPE_TLEVEL,TALLPUP_TechCert,TALLPPEGRD_TechCert,TALLPPE_TechCert,TALLPUP_ALEV_1618_DIS,TALLPPEGRD_ALEV_DIS,TALLPPE_ALEV_1618_DIS,TALLPUP_ACAD_1618_DIS,TALLPPEGRD_ACAD_DIS,TALLPPE_ACAD_1618_DIS,TALLPUP_AGEN_DIS,TALLPPEGRD_AGEN_DIS,TALLPPE_AGEN_DIS,TALLPUP_TLEV_DIS,TALLPPEGRD_TLEV_DIS,TALLPPE_TLEV_DIS,TALLPUP_TLEVEL_DIS,TALLPPEGRD_TLEVEL_DIS,TALLPPE_TLEVEL_DIS,TALLPUP_TechCert_DIS,TALLPPEGRD_TechCert_DIS,TALLPPE_TechCert_DIS,TINCLUDE_AAB_2FAC,PTAAB_2FAC,TINCLUDE_B3,TB3PTSE_GRD,TB3PTSE,TALLPUP_TLEVDENOM,TLEV_PER,TALLPUP_AGENDENOM,AGEN_PER,TALLPUP_ANYL2VOC,Techcert_PER,ENTRY_PER_E,ENTRY_PER_M,VA_INS_ALEV,UCI_INS_ALEV,LCI_INS_ALEV,ENTRIES_ALEV,VA_INS_ACAD,UCI_INS_ACAD,LCI_INS_ACAD,ENTRIES_ACAD,VA_INS_AGEN,UCI_INS_AGEN,LCI_INS_AGEN,ENTRIES_AGEN,VA_INS_TLEV,UCI_INS_TLEV,LCI_INS_TLEV,ENTRIES_TLEV,VA_INS_TechCERT,UCI_INS_TechCERT,LCI_INS_TechCERT,ENTRIES_TechCERT,T_SCOPEEX_E,PROGEX_E,T_SCOPEEX_M,PROGEX_M,VA_INS_ALEV_DIS,UCI_INS_ALEV_DIS,LCI_INS_ALEV_DIS,ENTRIES_ALEV_DIS,VA_INS_ACAD_DIS,UCI_INS_ACAD_DIS,LCI_INS_ACAD_DIS,ENTRIES_ACAD_DIS,VA_INS_AGEN_DIS,UCI_INS_AGEN_DIS,LCI_INS_AGEN_DIS,ENTRIES_AGEN_DIS,VA_INS_TLEV_DIS,UCI_INS_TLEV_DIS,LCI_INS_TLEV_DIS,ENTRIES_TLEV_DIS,VA_INS_TechCERT_DIS,UCI_INS_TechCERT_DIS,LCI_INS_TechCERT_DIS,ENTRIES_TechCERT_DIS,T_SCOPEEX_E_DIS,PROGEX_E_DIS,T_SCOPEEX_M_DIS,PROGEX_M_DIS,TALLPUP_SCOPE_L3M,L3M_PER +2114505,C2114505,96,27,D+,43.98,48,C,33.67,47,Merit-,14.73,35,Pass,15.27,23,Merit,42.31,29,Merit-,26.00,11,C+,22.15,31,A*,34.00,47,Merit-,27.12,35,Merit-,35.00,45,Merit-,44.16,28,Merit+,17.30,4,64.4%,40,D+,16.73,11,80.0%,5,10.0%,27,4.3%,53.3%,33.5%,0.29,0.15,-0.29,6,0.16,0.59,-0.89,23,0.34,0.78,-0.28,32,0.04,0.58,-0.36,24,0.03,0.47,-0.81,46,45,0.03,38,0.10,-0.02,0.39,-0.70,15,-0.35,0.41,-0.87,21,0.09,0.53,-0.57,15,0.25,0.14,-0.54,25,0.24,0.77,-0.70,47,25,0.13,7,-0.27,31,20.8% +2114507,C2114507,142,19,D+,22.38,17,B-,28.95,39,Merit-,45.07,30,Merit+,17.29,25,Dist-,19.54,60,Dist,17.35,39,B+,44.59,16,B+,47.36,68,Dist-,24.89,22,Pass,20.27,30,Merit+,40.94,34,Dist,32.90,9,96.2%,62,A-,28.01,13,66.3%,34,8.7%,20,46.0%,58.6%,27.6%,-0.28,0.70,-0.12,48,-0.32,0.25,-0.78,22,0.45,0.46,-0.81,54,-0.32,0.53,-0.35,63,0.01,0.59,-0.74,29,41,-0.27,52,0.12,0.35,0.61,-0.32,66,0.28,0.25,-0.27,14,-0.28,0.26,-0.71,8,-0.34,0.53,-0.68,42,0.16,0.59,-0.76,66,26,0.39,26,0.37,56,25.6% +2136327,C2136327,38,17,A-,18.92,17,B-,28.51,17,Dist-,38.29,5,Merit+,46.72,4,Dist-,42.04,4,Pass,29.73,12,C-,33.71,16,B+,35.05,7,Merit-,23.95,4,Dist*,20.78,12,Merit-,14.68,7,Dist*,30.13,9,68.3%,16,B,43.54,8,89.9%,19,98.5%,5,50.1%,73.0%,19.3%,0.20,0.86,-0.84,8,-0.17,0.38,-0.63,18,0.48,0.65,-0.15,12,-0.44,0.66,-0.90,9,0.09,0.77,-0.20,19,17,-0.12,10,0.21,0.37,0.23,-0.80,9,0.21,0.13,-0.31,18,-0.46,0.56,-0.26,10,0.27,0.20,-0.65,5,-0.06,0.62,-0.33,11,16,0.09,11,0.18,15,67.2% +8604070,C8604070,210,90,B+,16.55,33,D,22.34,23,Pass,19.27,61,Dist,39.71,35,Pass,31.80,62,Pass,29.03,55,B-,30.95,57,A*,35.75,88,Merit+,20.63,73,Merit+,47.36,87,Pass,18.47,93,Pass,23.14,100,87.8%,96,B-,36.65,101,55.1%,56,71.0%,101,62.3%,61.4%,10.7%,-0.19,0.75,-0.11,35,-0.47,0.69,-0.28,86,-0.22,0.69,-0.81,76,0.27,0.12,-0.67,91,0.04,0.42,-0.34,28,71,-0.07,34,-0.36,0.23,0.30,-0.55,93,0.02,0.51,-0.26,27,0.42,0.81,-0.68,105,-0.07,0.34,-0.70,82,0.43,0.33,-0.34,16,79,0.16,5,-0.17,100,15.0% +8808003,C8808003,175,73,A-,40.40,7,C,32.65,76,Merit+,31.44,37,Dist,14.33,75,Pass,23.55,27,Dist*,45.27,8,C,14.43,71,C-,23.72,17,Merit-,40.83,12,Dist*,35.43,47,Dist*,29.37,54,Dist*,17.29,31,49.4%,7,A*,41.89,13,52.0%,64,39.0%,77,12.3%,38.3%,46.3%,-0.16,0.87,-0.67,53,-0.05,0.59,-0.90,68,0.22,0.30,-0.59,70,0.33,0.15,-0.69,37,0.08,0.39,-0.55,49,58,0.02,78,0.06,-0.00,0.17,-0.45,5,0.03,0.26,-0.21,29,0.08,0.53,-0.54,36,0.26,0.39,-0.69,38,-0.19,0.32,-0.40,42,69,0.15,35,0.11,60,19.9% diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-retention.csv b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-retention.csv new file mode 100644 index 000000000..36e128899 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/ingress/summary-retention.csv @@ -0,0 +1,6 @@ +LAESTAB,CampID,TALLPUP_1618,TALLPUP_ALEV_1618,TALLPPEGRD_ALEV_1618,TALLPPE_ALEV_1618,TALLPUP_ACAD_1618,TALLPPEGRD_ACAD_1618,TALLPPE_ACAD_1618,TALLPUP_AGEN,TALLPPEGRD_AGEN,TALLPPE_AGEN,TALLPUP_TLEV,TALLPPEGRD_TLEV,TALLPPE_TLEV,TALLPUP_TLEVEL,TALLPPEGRD_TLEVEL,TALLPPE_TLEVEL,TALLPUP_TechCert,TALLPPEGRD_TechCert,TALLPPE_TechCert,TALLPUP_ALEV_1618_DIS,TALLPPEGRD_ALEV_DIS,TALLPPE_ALEV_1618_DIS,TALLPUP_ACAD_1618_DIS,TALLPPEGRD_ACAD_DIS,TALLPPE_ACAD_1618_DIS,TALLPUP_AGEN_DIS,TALLPPEGRD_AGEN_DIS,TALLPPE_AGEN_DIS,TALLPUP_TLEV_DIS,TALLPPEGRD_TLEV_DIS,TALLPPE_TLEV_DIS,TALLPUP_TLEVEL_DIS,TALLPPEGRD_TLEVEL_DIS,TALLPPE_TLEVEL_DIS,TALLPUP_TechCert_DIS,TALLPPEGRD_TechCert_DIS,TALLPPE_TechCert_DIS,TINCLUDE_AAB_2FAC,PTAAB_2FAC,TINCLUDE_B3,TB3PTSE_GRD,TB3PTSE,TALLPUP_TLEVDENOM,TLEV_PER,TALLPUP_AGENDENOM,AGEN_PER,TALLPUP_ANYL2VOC,Techcert_PER,ENTRY_PER_E,ENTRY_PER_M,PT_RET_ASSESSED_ALEV,T_INSCOPE_ALEV_2ndYR,PT_RETAINED_ALEV_2ndYR,PT_RET_ASSESSED_ACAD,T_INSCOPE_ACAD_2ndYR,PT_RETAINED_ACAD_2ndYR,PT_RET_ASSESSED_AGEN,T_INSCOPE_AGEN_2ndYR,PT_RETAINED_AGEN_2ndYR,PT_RET_ASSESSED_TLEV,T_INSCOPE_TLEV_2ndYR,PT_RETAINED_TLEV_2ndYR,PT_RET_ASSESSED_TechCert,VA_INS_ALEV,UCI_INS_ALEV,LCI_INS_ALEV,ENTRIES_ALEV,VA_INS_ACAD,UCI_INS_ACAD,LCI_INS_ACAD,ENTRIES_ACAD,VA_INS_AGEN,UCI_INS_AGEN,LCI_INS_AGEN,ENTRIES_AGEN,VA_INS_TLEV,UCI_INS_TLEV,LCI_INS_TLEV,ENTRIES_TLEV,VA_INS_TechCERT,UCI_INS_TechCERT,LCI_INS_TechCERT,ENTRIES_TechCERT,T_SCOPEEX_E,PROGEX_E,T_SCOPEEX_M,PROGEX_M,T_INSCOPE_ALEV_RET,PT_Retained_ALEV_Ret,T_InScope_ACAD_Ret,PT_Retained_ACAD_Ret,T_InScope_AGEN_Ret,PT_Retained_AGEN_Ret,T_InScope_TLEV_Ret,PT_Retained_TLEV_Ret,T_INSCOPE_TechCert_RET,PT_RETAINED_TechCert_RET,VA_INS_ALEV_DIS,UCI_INS_ALEV_DIS,LCI_INS_ALEV_DIS,ENTRIES_ALEV_DIS,VA_INS_ACAD_DIS,UCI_INS_ACAD_DIS,LCI_INS_ACAD_DIS,ENTRIES_ACAD_DIS,VA_INS_AGEN_DIS,UCI_INS_AGEN_DIS,LCI_INS_AGEN_DIS,ENTRIES_AGEN_DIS,VA_INS_TLEV_DIS,UCI_INS_TLEV_DIS,LCI_INS_TLEV_DIS,ENTRIES_TLEV_DIS,VA_INS_TechCERT_DIS,UCI_INS_TechCERT_DIS,LCI_INS_TechCERT_DIS,ENTRIES_TechCERT_DIS,T_SCOPEEX_E_DIS,PROGEX_E_DIS,T_SCOPEEX_M_DIS,PROGEX_M_DIS,T_INSCOPE_ALEV_RET_DIS,PT_Retained_ALEV_Ret_DIS,T_InScope_ACAD_Ret_DIS,PT_Retained_ACAD_Ret_DIS,T_InScope_AGEN_Ret_DIS,PT_Retained_AGEN_Ret_DIS,T_InScope_TLEV_Ret_DIS,PT_Retained_TLEV_Ret_DIS,T_INSCOPE_TechCert_RET_DIS,PT_RETAINED_TechCert_RET_DIS,TALLPUP_SCOPE_L3M,L3M_PER +2114505,C2114505,96,42,A*,17.65,22,B-,45.68,38,Pass,25.45,7,Dist*,18.03,36,Merit,43.10,24,Merit,37.02,33,B+,14.95,34,D+,43.79,7,Dist-,29.94,4,Dist*,46.46,24,Dist-,37.28,43,Merit,30.27,6,23.9%,9,B-,27.03,41,79.6%,12,4.4%,16,44.2%,35.7%,9.4%,81.9%,5,32.1%,33.0%,25,50.8%,55.5%,44,86.8%,40.7%,8,72.1%,18.4%,0.26,0.77,-0.70,44,-0.41,0.42,-0.49,43,0.34,0.24,-0.79,10,-0.37,0.88,-0.76,29,0.22,0.15,-0.63,20,37,-0.06,10,0.09,34,44.4%,21,73.2%,33,91.1%,28,65.8%,40,67.4%,-0.01,0.84,-0.30,13,0.45,0.39,-0.66,15,-0.04,0.80,-0.78,16,-0.26,0.42,-0.38,5,-0.33,0.18,-0.63,24,38,-0.10,38,-0.09,23,70.9%,34,44.2%,4,30.0%,32,29.5%,35,46.9%,28,25.9% +2114507,C2114507,142,15,C,39.58,49,A,39.84,28,Pass+,28.10,41,Dist,35.54,71,Pass,25.82,50,Merit+,25.43,8,B,32.96,53,D,18.24,23,Dist,18.81,20,Merit+,36.54,19,Merit+,37.24,20,Pass+,15.37,20,24.8%,6,B-,46.39,69,77.8%,40,80.6%,44,41.6%,77.4%,79.5%,28.2%,54,12.6%,30.7%,61,77.6%,98.0%,24,64.1%,58.2%,24,0.4%,40.9%,0.50,0.31,-0.61,14,0.20,0.62,-0.56,48,0.02,0.75,-0.32,33,0.18,0.68,-0.78,59,0.41,0.77,-0.40,41,6,0.37,59,0.31,33,44.0%,34,18.4%,44,37.0%,8,3.9%,43,69.4%,-0.34,0.34,-0.72,24,0.29,0.42,-0.54,41,-0.03,0.43,-0.68,20,0.13,0.81,-0.56,30,0.32,0.67,-0.44,54,38,0.13,54,0.35,60,34.2%,34,3.4%,68,37.8%,48,80.8%,40,82.9%,48,36.2% +2136327,C2136327,38,9,D,46.14,19,C-,23.15,13,Merit-,47.45,5,Pass,42.57,17,Pass+,31.75,9,Merit-,19.48,10,A-,14.57,14,B-,21.20,15,Merit,36.61,19,Dist,38.27,16,Pass,24.94,15,Pass,37.21,5,56.2%,13,B,38.63,8,71.0%,19,62.4%,6,4.5%,4.5%,8.0%,28.7%,14,34.8%,80.4%,16,84.9%,71.8%,12,27.7%,47.6%,15,32.3%,46.5%,0.45,0.66,-0.31,18,-0.33,0.34,-0.87,10,-0.07,0.50,-0.26,19,-0.47,0.75,-0.63,11,-0.38,0.79,-0.42,9,4,0.24,19,0.38,5,26.5%,10,89.0%,14,63.7%,13,54.7%,12,42.3%,-0.02,0.62,-0.86,13,0.25,0.56,-0.88,4,-0.37,0.40,-0.12,5,0.41,0.71,-0.67,19,-0.37,0.87,-0.63,8,15,-0.15,16,0.05,14,47.1%,14,76.3%,7,62.2%,10,45.3%,9,19.6%,18,72.2% +8604070,C8604070,210,95,B+,35.26,74,B,23.84,29,Merit+,20.15,83,Merit-,18.02,84,Dist*,34.16,89,Dist-,30.70,74,A-,36.13,20,B+,15.61,87,Merit,19.01,27,Merit+,37.17,38,Pass,26.45,14,Merit+,24.47,11,11.6%,84,D+,26.72,82,51.3%,53,91.2%,16,72.9%,22.5%,78.4%,96.1%,15,55.7%,75.4%,89,89.6%,4.3%,61,62.1%,65.8%,49,37.9%,11.0%,0.47,0.23,-0.44,81,0.43,0.21,-0.73,90,0.07,0.22,-0.33,75,-0.44,0.42,-0.54,44,0.06,0.79,-0.11,40,84,0.13,50,-0.40,82,44.8%,26,74.7%,36,48.3%,39,94.2%,35,47.4%,-0.35,0.16,-0.75,49,-0.13,0.45,-0.29,81,-0.36,0.36,-0.36,15,-0.11,0.12,-0.14,42,-0.23,0.10,-0.88,40,59,0.03,48,-0.31,65,55.0%,17,92.9%,99,45.7%,78,17.1%,86,91.7%,7,7.0% +8808003,C8808003,175,62,C,37.46,63,B,27.07,25,Dist,38.44,53,Dist*,37.46,76,Pass,17.85,20,Pass,37.22,40,C-,31.65,75,B,42.43,33,Merit,20.23,7,Dist*,32.57,54,Merit-,15.36,47,Dist*,26.75,51,95.9%,50,A*,46.17,46,63.8%,20,57.5%,70,6.6%,74.4%,9.8%,6.2%,25,12.5%,3.5%,7,62.1%,47.4%,14,51.3%,78.8%,83,0.4%,2.1%,-0.27,0.63,-0.78,30,0.43,0.76,-0.51,31,0.02,0.17,-0.29,38,-0.48,0.19,-0.69,57,0.39,0.11,-0.27,85,39,0.12,36,-0.05,25,96.2%,72,78.0%,30,33.7%,47,51.4%,12,43.0%,0.39,0.56,-0.55,71,0.03,0.81,-0.13,60,-0.08,0.80,-0.75,83,0.26,0.56,-0.75,82,0.37,0.36,-0.64,69,4,-0.31,33,-0.21,52,59.2%,38,98.0%,7,60.9%,86,54.2%,42,68.1%,29,15.1% diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/README.md b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/README.md new file mode 100644 index 000000000..f8a5d2f3a --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/README.md @@ -0,0 +1,32 @@ +# Post-16 workbook schemas + +These row schemas transcribe the field references, SQL types, CSV column letters and supplied headings in `Post16.ods`. `post16-ingress.json` defines one combined document per institution. A collection name identifies the source dataset, so a CSV download can select that collection without guessing from overlapping fields. + +Each row schema uses the same extensions: + +- `x-ingress.collection` is the key in the combined JSON; `pageTab` groups collections on the page; `institutionKey` identifies the source field used to split incoming records by institution. +- `x-download.fileName` and `properties.*.x-csv.columns` identify the separate CSV and its column order. The variant keys distinguish provisional/revised from retention columns where the workbook does. +- `x-display.section` gives the selector label; `properties.*.x-display` gives the page label, visibility, order and, for names, searchability. Only selected pupil identity fields are marked visible by default. Other fields remain available for a details view. + +For example, `students-included`, `students-non-included` and `students-previously-published` all have `pageTab: students`, but occupy separate collections and CSV files. `students-value-added` and `students-aims` also belong to that tab. The screenshot's Subject column has no field in the pupil sheets; it would need a defined join to results and a choice of how to handle multiple results per student. + +This is a schema and display contract. The current `CsvSchemaFileProcessor` writes a flat merged array per school and requires `LAESTAB` in every source. To persist this envelope, ingress must tag each dataset and group rows into these collections. The previously published sheet uses `LAESTAB_0` for institution partitioning, and the aims sheet specifies `AimLAESTAB`; those routes need explicit handling. The downloads page must read the collection metadata and produce the workbook's CSV headers/order. The schemas alone do not change those runtime paths. + +The workbook does not define JSON nullability or required values consistently across its exercise variants. The row schemas allow null for source fields and leave `required` unset. Fields without a CSV column remain in the schema with an empty `x-csv.columns` map and should not be exported. The included pupil sheet marks six T level core/OS fields removed, and the included results sheet strikes through `SCHCNO` and `EXAMCAND` while reusing their column letters; those fields are excluded from CSV export metadata. The included pupil sheet also has a heading-only inclusion description row without a field reference, so it is not a JSON property. + +## Results schema and the dev seed + +`results-included.json` carries one field the workbook does not: `SOURCE`. The processor stamps the dataset slot's tag (`16to19_MAIN` and so on) on every record, and only does so when the schema declares the column, because `additionalProperties` is false. It has no CSV column, so it is not exported. The schema also marks the student and result columns visible, with the names searchable, so the Results tab renders a table; the dev seed's `16to19_MAIN.csv` and `16to19_LR1.csv` are in this shape (the main file and the first late results file), built from the students in `included.csv`. The seed feeds two windows from these files: "16 to 19 ingress" at the start of the Autumn window, and "16 to 19 February" four months in, with pupil data checking shut, the late results file landed and the third Summary exercise enabled. + +## Summary schemas + +The 1618 Summary Data sheet feeds four checking exercises over the year, and the supplier sends a different file shape for each. The sheet's three column-letter columns describe those shapes, and its four "Included in" flags say which exercise gets which: + +| Exercise | Workbook column | Columns | Schema | +|---|---|---|---| +| Autumn CE | Column (Autumn) | 62 (A–BJ) | `summary-autumn.json` | +| Provisional Value Added (November) | Column (November VA) | 102 (A–CX) | `summary-november-va.json` | +| Light touch, revised data share (February) | Column (November VA) | 102 (A–CX) | `summary-november-va.json` | +| Retention (March) | Column (Retention) | 135 (A–EE) | `summary-retention.json` | + +Each schema lists only the fields its file carries, with one `default` column letter each, every field visible and `order` equal to the column position. There is one schema per file shape rather than one schema with three variants, so an exercise's dataset is uploaded with the schema that matches its file and nothing has to record which variant an exercise uses. The workbook's Autumn column repeats `AZ` for `ENTRY_PER_M` and `T_SCOPEEX_E`; the schema numbers the column contiguously, so `T_SCOPEEX_E` onwards is one letter later than the sheet (BA–BJ). All three set `x-display.layout` to `vertical`: one record per school, pivoted into label/value rows. The CSV filename is still to be confirmed; `summary.csv` is a placeholder in all three. diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/post16-ingress.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/post16-ingress.json new file mode 100644 index 000000000..b4e54c646 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/post16-ingress.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "post16-ingress.json", + "title": "Post-16 checking exercise data", + "description": "One institution's combined ingress document. Each source worksheet has its own collection so the records can be exported separately.", + "type": "object", + "additionalProperties": false, + "properties": { + "summary": { + "type": "array", + "items": { + "$ref": "summary.json" + } + }, + "students-included": { + "type": "array", + "items": { + "$ref": "students-included.json" + } + }, + "students-non-included": { + "type": "array", + "items": { + "$ref": "students-non-included.json" + } + }, + "students-previously-published": { + "type": "array", + "items": { + "$ref": "students-previously-published.json" + } + }, + "results-included": { + "type": "array", + "items": { + "$ref": "results-included.json" + } + }, + "results-non-included": { + "type": "array", + "items": { + "$ref": "results-non-included.json" + } + }, + "students-value-added": { + "type": "array", + "items": { + "$ref": "students-value-added.json" + } + }, + "students-aims": { + "type": "array", + "items": { + "$ref": "students-aims.json" + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-included.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-included.json new file mode 100644 index 000000000..2d472a7eb --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-included.json @@ -0,0 +1,626 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "results-included.json", + "title": "Results included", + "description": "One row from the 16-18 Results Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "results-included", + "pageTab": "results", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "KS5res25.csv", + "label": "Results included" + }, + "x-display": { + "tab": "results", + "section": "Results included", + "selectorOrder": 0 + }, + "properties": { + "ULN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": false + } + }, + "SURNAME": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Surname", + "visible": true, + "order": 1, + "searchable": true + } + }, + "FORENAMES": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Forename" + }, + "x-display": { + "label": "Forename", + "visible": true, + "order": 2, + "searchable": true + } + }, + "SEX": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student sex (F=female, M=male)", + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": false + } + }, + "DOB": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": false + } + }, + "AGE": { + "type": [ + "integer", + "null" + ], + "description": "Student age at beginning of the reporting year (ie, 31 August 2024)", + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Age" + }, + "x-display": { + "label": "Age", + "visible": false + } + }, + "EXAMNO": { + "type": [ + "integer", + "null" + ], + "description": "Exam serial number", + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Exam" + }, + "x-display": { + "label": "Exam", + "visible": false + } + }, + "GNUMBER": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "description": "Qualification number for each qualification (one row per qualification)", + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Qualification number" + }, + "x-display": { + "label": "Qualification number", + "visible": true, + "order": 5 + } + }, + "AB_Code": { + "type": [ + "string", + "null" + ], + "maxLength": 28, + "description": "Awarding organisation abbreviation, eg AQA", + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Awarding Organisation" + }, + "x-display": { + "label": "Awarding Organisation", + "visible": false + } + }, + "EXAMYEAR": { + "type": [ + "integer", + "null" + ], + "description": "Exam year", + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Year" + }, + "x-display": { + "label": "Year", + "visible": false + } + }, + "SEASON": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Exam season, ie S (summer), W (winter)", + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Season" + }, + "x-display": { + "label": "Season", + "visible": true, + "order": 6 + } + }, + "exam_date": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Result date", + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Exam date" + }, + "x-display": { + "label": "Exam date", + "visible": false + } + }, + "Short_Qual_Desc": { + "type": [ + "string", + "null" + ], + "maxLength": 12, + "description": "Type of qualification, eg GCE AS level", + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Qualification type" + }, + "x-display": { + "label": "Qualification type", + "visible": true, + "order": 3 + } + }, + "SubjectDescription": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "description": "Subject mapping description, eg English", + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Subject name" + }, + "x-display": { + "label": "Subject name", + "visible": true, + "order": 4 + } + }, + "GRADE": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "description": "Grade achieved", + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "Grade" + }, + "x-display": { + "label": "Grade", + "visible": true, + "order": 7 + } + }, + "POINTS_1618": { + "type": [ + "number", + "null" + ], + "description": "Point score for qualification", + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "Point score" + }, + "x-display": { + "label": "Point score", + "visible": true, + "order": 8 + } + }, + "CAPPED_PTS": { + "type": [ + "number", + "null" + ], + "description": "Capped points for English and Maths progress measures", + "x-csv": { + "columns": { + "default": "R" + }, + "heading": "Capped points for English and Maths progress" + }, + "x-display": { + "label": "Capped points for English and Maths progress", + "visible": false + } + }, + "SCHCNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "A number allocated to each student within each school/college (same for each line for the same student).", + "x-csv": { + "columns": {}, + "heading": "Candidate number" + }, + "x-display": { + "label": "Candidate number", + "visible": false + } + }, + "EXAMCAND": { + "type": [ + "string", + "null" + ], + "maxLength": 13, + "description": "Candidate number for actual entry", + "x-csv": { + "columns": {}, + "heading": "Actual candidate number" + }, + "x-display": { + "label": "Actual candidate number", + "visible": false + } + }, + "ANCN": { + "type": [ + "string", + "null" + ], + "maxLength": 6, + "description": "National Centre number", + "x-csv": { + "columns": { + "default": "S" + }, + "heading": "NCN" + }, + "x-display": { + "label": "NCN", + "visible": false + } + }, + "ADFECN": { + "type": [ + "integer", + "null" + ], + "description": "DfE (LAESTAB) number of the centre where the exam/assessment was entered", + "x-csv": { + "columns": { + "default": "T" + }, + "heading": "ADFECN" + }, + "x-display": { + "label": "ADFECN", + "visible": false + } + }, + "BRDSUBNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Syllabus/scheme code where available", + "x-csv": { + "columns": { + "default": "U" + }, + "heading": "Syllabus code" + }, + "x-display": { + "label": "Syllabus code", + "visible": false + } + }, + "MAPPING": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "description": "LEAP or LDCS subject classification code, eg 5010", + "x-csv": { + "columns": { + "default": "V" + }, + "heading": "LEAP/LDCS code" + }, + "x-display": { + "label": "LEAP/LDCS code", + "visible": false + } + }, + "Level3QualificationCategory": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "Qualification category: ie A level, academic, tech level or applied general qualifications, technical certificate and other level 2 vocational qualifications", + "x-csv": { + "columns": { + "default": "W" + }, + "heading": "Qualification category" + }, + "x-display": { + "label": "Qualification category", + "visible": false + } + }, + "EMQualificationCategory": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "English or maths qualification", + "x-csv": { + "columns": { + "default": "X" + }, + "heading": "English and maths qualification category" + }, + "x-display": { + "label": "English and maths qualification category", + "visible": false + } + }, + "R_INCL": { + "type": [ + "integer", + "null" + ], + "description": "51= Level 3 or level 2 Result included in performance measures and student entries 52= Level 3 Point score counted but size of qualification discounted 53= Level 3 Point score discounted but size of qualification counted 54 = Both point score and size of qualification discounted by a better result 55= Qualification does not count in the performance tables or is not approved by the secretary of state for this age group 56= Student only has result(s) in an approved qualification with a size less than 0.5 (excluding extended project) and is not included in performance measures", + "x-csv": { + "columns": { + "default": "Y" + }, + "heading": "Exam inclusion status - attainment measures" + }, + "x-display": { + "label": "Exam inclusion status - attainment measures", + "visible": false + } + }, + "R_INCL_EM": { + "type": [ + "integer", + "null" + ], + "description": "57= Result excluded from English and/or maths measures 58= Result included in English and/or maths measures", + "x-csv": { + "columns": { + "default": "Z" + }, + "heading": "English and maths included" + }, + "x-display": { + "label": "English and maths included", + "visible": false + } + }, + "QUAL_KS4": { + "type": [ + "integer", + "null" + ], + "description": "59= Qualification was taken during KS4 60= Qualification was not taken during KS4", + "x-csv": { + "columns": { + "default": "AA" + }, + "heading": "Qualifications taken during KS4" + }, + "x-display": { + "label": "Qualifications taken during KS4", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college UK Provider Registration Number", + "x-csv": { + "columns": { + "default": "AB" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "URN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college Unique Reference Number", + "x-csv": { + "columns": { + "default": "AC" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for institution", + "x-csv": { + "columns": { + "default": "AD" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (laestab,pupilid,gnumber,examyear,examno)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + }, + "SOURCE": { + "type": [ + "string", + "null" + ], + "x-csv": { + "columns": {}, + "heading": "Source file" + }, + "x-display": { + "label": "Source file", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-non-included.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-non-included.json new file mode 100644 index 000000000..5ff866af3 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/results-non-included.json @@ -0,0 +1,607 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "results-non-included.json", + "title": "Results non-included", + "description": "One row from the 16-18 Non-included Results Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "results-non-included", + "pageTab": "results", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "KS5_not_incl_pup_res25.csv", + "label": "Results non-included" + }, + "x-display": { + "tab": "results", + "section": "Results non-included", + "selectorOrder": 1 + }, + "properties": { + "ULN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Forvus index", + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": false + } + }, + "SURNAME": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Surname", + "visible": false + } + }, + "FORENAMES": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Forename" + }, + "x-display": { + "label": "Forename", + "visible": false + } + }, + "SEX": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student sex (F=female, M=male)", + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": false + } + }, + "DOB": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": false + } + }, + "AGE": { + "type": [ + "integer", + "null" + ], + "description": "Student age at beginning of the reporting year (ie, 31 August 2017)", + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Age" + }, + "x-display": { + "label": "Age", + "visible": false + } + }, + "EXAMNO": { + "type": [ + "integer", + "null" + ], + "description": "Exam serial number", + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Exam" + }, + "x-display": { + "label": "Exam", + "visible": false + } + }, + "GNUMBER": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "description": "Qualification number for each qualification (one row per qualification)", + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Qualification number" + }, + "x-display": { + "label": "Qualification number", + "visible": false + } + }, + "AB_Code": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "description": "Awarding organisation abbreviation, eg AQA", + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Awarding Organisation" + }, + "x-display": { + "label": "Awarding Organisation", + "visible": false + } + }, + "EXAMYEAR": { + "type": [ + "integer", + "null" + ], + "description": "Exam year", + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Year" + }, + "x-display": { + "label": "Year", + "visible": false + } + }, + "SEASON": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Exam season, ie S (summer), W (winter)", + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Season" + }, + "x-display": { + "label": "Season", + "visible": false + } + }, + "exam_date": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Result date", + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Exam date" + }, + "x-display": { + "label": "Exam date", + "visible": false + } + }, + "Short_Qual_Desc": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "Type of qualification, eg GCE AS level", + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Qualification type" + }, + "x-display": { + "label": "Qualification type", + "visible": false + } + }, + "SubjectDescription": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "description": "Subject mapping description, eg English", + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Subject name" + }, + "x-display": { + "label": "Subject name", + "visible": false + } + }, + "GRADE": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "description": "Grade achieved", + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "Grade" + }, + "x-display": { + "label": "Grade", + "visible": false + } + }, + "POINTS_1618": { + "type": [ + "number", + "null" + ], + "description": "Point score for qualification", + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "Point score" + }, + "x-display": { + "label": "Point score", + "visible": false + } + }, + "CAPPED_PTS": { + "type": [ + "number", + "null" + ], + "description": "Capped points for English and Math progress measures", + "x-csv": { + "columns": { + "default": "R" + }, + "heading": "Capped points for English and Math progress" + }, + "x-display": { + "label": "Capped points for English and Math progress", + "visible": false + } + }, + "SCHCNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "A number allocated to each student within each school/college (same for each line for the same student).", + "x-csv": { + "columns": { + "default": "S" + }, + "heading": "Candidate number" + }, + "x-display": { + "label": "Candidate number", + "visible": false + } + }, + "EXAMCAND": { + "type": [ + "string", + "null" + ], + "maxLength": 13, + "description": "Candidate number for actual entry", + "x-csv": { + "columns": { + "default": "T" + }, + "heading": "Actual candidate number" + }, + "x-display": { + "label": "Actual candidate number", + "visible": false + } + }, + "ANCN": { + "type": [ + "string", + "null" + ], + "maxLength": 6, + "description": "National Centre number", + "x-csv": { + "columns": { + "default": "U" + }, + "heading": "NCN" + }, + "x-display": { + "label": "NCN", + "visible": false + } + }, + "ADFECN": { + "type": [ + "integer", + "null" + ], + "description": "DfE (LAESTAB) number of the centre where the exam/assessment was entered", + "x-csv": { + "columns": { + "default": "V" + }, + "heading": "ADFECN" + }, + "x-display": { + "label": "ADFECN", + "visible": false + } + }, + "BRDSUBNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Syllabus/scheme code where available", + "x-csv": { + "columns": { + "default": "W" + }, + "heading": "Syllabus code" + }, + "x-display": { + "label": "Syllabus code", + "visible": false + } + }, + "MAPPING": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "description": "LEAP or LDCS subject classification code, eg 5010", + "x-csv": { + "columns": { + "default": "X" + }, + "heading": "LEAP/LDCS code" + }, + "x-display": { + "label": "LEAP/LDCS code", + "visible": false + } + }, + "Level3QualificationCategory": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "Qualification category: ie A level, academic, tech level or applied general qualifications, technical certificate and other level 2 vocational qualifications", + "x-csv": { + "columns": { + "default": "Y" + }, + "heading": "Qualification category" + }, + "x-display": { + "label": "Qualification category", + "visible": false + } + }, + "EMQualificationCategory": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "English or maths qualification", + "x-csv": { + "columns": { + "default": "Z" + }, + "heading": "English and maths qualification category" + }, + "x-display": { + "label": "English and maths qualification category", + "visible": false + } + }, + "R_INCL": { + "type": [ + "integer", + "null" + ], + "description": "51= Level 3 or level 2 Result included in performance measures and student entries 52= Level 3 Point score counted but size of qualification discounted 53= Level 3 Point score discounted but size of qualification counted 54 = Both point score and size of qualification discounted by a better result 55= Qualification does not count in the performance tables or is not approved by the secretary of state for this age group 56= Student only has a result(s) in an approved qualification with a size less than 0.5 (excluding extended project) and is not included in performance measures", + "x-csv": { + "columns": { + "default": "AA" + }, + "heading": "Exam inclusion status - attainment measures" + }, + "x-display": { + "label": "Exam inclusion status - attainment measures", + "visible": false + } + }, + "R_INCL_EM": { + "type": [ + "integer", + "null" + ], + "description": "57= Result excluded from English and/or maths measures 58= Result included in English and/or maths measures", + "x-csv": { + "columns": { + "default": "AB" + }, + "heading": "English and maths included" + }, + "x-display": { + "label": "English and maths included", + "visible": false + } + }, + "QUAL_KS4": { + "type": [ + "integer", + "null" + ], + "description": "59= Qualification was taken during KS4 60= Qualification was not taken during KS4", + "x-csv": { + "columns": { + "default": "AC" + }, + "heading": "Qualifications taken during KS4" + }, + "x-display": { + "label": "Qualifications taken during KS4", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college UK Provider Registration Number", + "x-csv": { + "columns": { + "default": "AD" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "URN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college Unique Reference Number", + "x-csv": { + "columns": { + "default": "AE" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for institution", + "x-csv": { + "columns": { + "default": "AF" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (laestab,pupilid,gnumber,examyear,examno)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-aims.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-aims.json new file mode 100644 index 000000000..24a85fe98 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-aims.json @@ -0,0 +1,290 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "students-aims.json", + "title": "Pupil aims", + "description": "One row from the 1618 Pupil Aims worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "students-aims", + "pageTab": "students", + "institutionKey": "AimLAESTAB" + }, + "x-download": { + "fileName": "ks5aim25.csv", + "label": "Pupil aims" + }, + "x-display": { + "tab": "students", + "section": "Pupil aims", + "selectorOrder": 4 + }, + "properties": { + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for institution", + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "URN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college URN", + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college UKPRN", + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "AimLAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "The DfE number for the provider where an aim is recorded. This maybe different to where the student is allocated or qualification assessed.", + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "DfE number where the aim was recorded" + }, + "x-display": { + "label": "DfE number where the aim was recorded", + "visible": false + } + }, + "ULN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student index number (for use in checking exercise)", + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": false + } + }, + "SURNAME": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Surname", + "visible": false + } + }, + "FORENAMES": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Forename" + }, + "x-display": { + "label": "Forename", + "visible": false + } + }, + "SEX": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student Sex (F = female, M = male)", + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": false + } + }, + "DOB": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": false + } + }, + "AGE": { + "type": [ + "integer", + "null" + ], + "description": "Student age at beginning of the reporting year (i.e. 31 August 2020)", + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Age" + }, + "x-display": { + "label": "Age", + "visible": false + } + }, + "LearningAimReference": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "description": "Qualification number for each qualification (one row per qualification)", + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Qualification number" + }, + "x-display": { + "label": "Qualification number", + "visible": false + } + }, + "Subj_Desc": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "Subject description for this learning aim", + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Description of subject" + }, + "x-display": { + "label": "Description of subject", + "visible": false + } + }, + "Aim_Type": { + "type": [ + "integer", + "null" + ], + "description": "Learning aim type (2 = tech levels, 4 = tech certifications, 5 = other level 2 vocational qualifications). Tech certifications are a subset of the level 2 vocational category.", + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Aim type" + }, + "x-display": { + "label": "Aim type", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (aimlaestab,pupilid,learningaimreference)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-included.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-included.json new file mode 100644 index 000000000..7e2a60ddf --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-included.json @@ -0,0 +1,1486 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "students-included.json", + "title": "Students included", + "description": "One row from the 16-18 Pupil Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "students-included", + "pageTab": "students", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "ks5pup25.csv", + "label": "Students included" + }, + "x-display": { + "tab": "students", + "section": "Students included", + "selectorOrder": 0 + }, + "properties": { + "INCLUDED": { + "type": "boolean", + "description": "Whether this row came from the included students file", + "x-csv": { "columns": {}, "heading": "Included" }, + "x-display": { "label": "Included", "visible": false, "order": 999 } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "A student reference number for use in checking exercise", + "x-csv": { + "columns": { + "provisional-revised": "A" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": true, + "order": 5 + } + }, + "SURNAME": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "provisional-revised": "B" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Last name", + "visible": true, + "order": 0, + "searchable": true + } + }, + "FORENAMES": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "provisional-revised": "C" + }, + "heading": "Forename" + }, + "x-display": { + "label": "First name", + "visible": true, + "order": 1, + "searchable": true + } + }, + "SEX": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student sex", + "x-csv": { + "columns": { + "provisional-revised": "D" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": true, + "order": 2 + } + }, + "DOB": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "provisional-revised": "E" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": true, + "order": 3 + } + }, + "AGE": { + "type": [ + "integer", + "null" + ], + "description": "Student age at beginning of the reporting year (ie, 31 August 2024)", + "x-csv": { + "columns": { + "provisional-revised": "F" + }, + "heading": "Age" + }, + "x-display": { + "label": "Age", + "visible": true, + "order": 4 + } + }, + "P_INCL": { + "type": [ + "integer", + "null" + ], + "description": "501: Student included in performance measures for level 3 or level 2 vocational 502: Student not included in performance measures for level 3 or level 2 vocational", + "x-csv": { + "columns": { + "provisional-revised": "G" + }, + "heading": "Student inclusion flag" + }, + "x-display": { + "label": "Student inclusion flag", + "visible": false + } + }, + "P_INCL_aims": { + "type": [ + "integer", + "null" + ], + "description": "503: Student included in aims based measures, eg Completion and Attainment and/or Retention measures; 504: Student not included in aims based measures, eg Completion and Attainment and/or Retention measures;", + "x-csv": { + "columns": { + "retention": "I" + }, + "heading": "Student inclusion flag for aims based measures" + }, + "x-display": { + "label": "Student inclusion flag for aims based measures", + "visible": false + } + }, + "attendance_year_0": { + "type": [ + "integer", + "null" + ], + "description": "Student included in this school or college's results for the 2024/25 academic year", + "x-csv": { + "columns": { + "provisional-revised": "I", + "retention": "K" + }, + "heading": "Allocated to provider in 2024/25" + }, + "x-display": { + "label": "Allocated to provider in 2024/25", + "visible": false + } + }, + "attendance_year_1": { + "type": [ + "integer", + "null" + ], + "description": "Student included in this school or college's results for the 2023/24 academic year", + "x-csv": { + "columns": { + "provisional-revised": "J", + "retention": "L" + }, + "heading": "Allocated to provider in 2023/24" + }, + "x-display": { + "label": "Allocated to provider in 2023/24", + "visible": false + } + }, + "attendance_year_2": { + "type": [ + "integer", + "null" + ], + "description": "Student included in this school or college's results for the 2022/23 academic year", + "x-csv": { + "columns": { + "provisional-revised": "K", + "retention": "M" + }, + "heading": "Allocated to provider in 2022/23" + }, + "x-display": { + "label": "Allocated to provider in 2022/23", + "visible": false + } + }, + "src_laestab_0": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Source of allocation if the student is included in this school or college's results for the 2024/25 academic year", + "x-csv": { + "columns": { + "provisional-revised": "L", + "retention": "N" + }, + "heading": "Allocation source in 2024/25" + }, + "x-display": { + "label": "Allocation source in 2024/25", + "visible": false + } + }, + "src_laestab_1": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Source of allocation if the student is included in this school or college's results for the 2023/24 academic year", + "x-csv": { + "columns": { + "provisional-revised": "M", + "retention": "O" + }, + "heading": "Allocation source in 2023/24" + }, + "x-display": { + "label": "Allocation source in 2023/24", + "visible": false + } + }, + "src_laestab_2": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Source of allocation if the student is included in this school or college's results for the 2022/23 academic year", + "x-csv": { + "columns": { + "provisional-revised": "N", + "retention": "P" + }, + "heading": "Allocation source in 2022/23" + }, + "x-display": { + "label": "Allocation source in 2022/23", + "visible": false + } + }, + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for school or college", + "x-csv": { + "columns": { + "provisional-revised": "O", + "retention": "Q" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "URN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college Unique Reference Number", + "x-csv": { + "columns": { + "provisional-revised": "P", + "retention": "R" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college UK Provider Registration Number", + "x-csv": { + "columns": { + "provisional-revised": "Q", + "retention": "S" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "ULN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "provisional-revised": "R", + "retention": "T" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "KS4_DISADVANTAGE": { + "type": [ + "integer", + "null" + ], + "description": "Student counts as disadvantaged during KS4 so counts in institution's disadvantage breakdown on headline indicators (attainment, progress, retention, and English and maths progress", + "x-csv": { + "columns": { + "provisional-revised": "S", + "retention": "U" + }, + "heading": "Student counts as disadvantaged during KS4 (eligible for FSM or looked after for more than 6 months)" + }, + "x-display": { + "label": "Student counts as disadvantaged during KS4 (eligible for FSM or looked after for more than 6 months)", + "visible": false + } + }, + "ALEV": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one A level or AS level.", + "x-csv": { + "columns": { + "provisional-revised": "T", + "retention": "V" + }, + "heading": "A level student" + }, + "x-display": { + "label": "A level student", + "visible": false + } + }, + "TOTENTS_ALEV": { + "type": [ + "number", + "null" + ], + "description": "Total size of entries for A level, ie this student’s contribution to their institution’s published average point scores in A levels.", + "x-csv": { + "columns": { + "provisional-revised": "U", + "retention": "W" + }, + "heading": "Total size of entries in A levels" + }, + "x-display": { + "label": "Total size of entries in A levels", + "visible": false + } + }, + "TOTPTSE_ALEV": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in A levels at grades A*-E that contribute to their institution’s published average point scores in A levels.", + "x-csv": { + "columns": { + "provisional-revised": "V", + "retention": "X" + }, + "heading": "Total point score in A levels" + }, + "x-display": { + "label": "Total point score in A levels", + "visible": false + } + }, + "ACAD": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one academic qualification.", + "x-csv": { + "columns": { + "provisional-revised": "W", + "retention": "Y" + }, + "heading": "Academic student" + }, + "x-display": { + "label": "Academic student", + "visible": false + } + }, + "TOTENTS_ACAD": { + "type": [ + "number", + "null" + ], + "description": "Total size of entries in academic qualifications, ie this student’s contribution to their institution’s published average point scores in academic qualifications.", + "x-csv": { + "columns": { + "provisional-revised": "X", + "retention": "Z" + }, + "heading": "Total size of entries in academic qualifications" + }, + "x-display": { + "label": "Total size of entries in academic qualifications", + "visible": false + } + }, + "TOTPTSE_ACAD": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in academic qualifications that contribute to their institution’s published average point scores in academic qualifications.", + "x-csv": { + "columns": { + "provisional-revised": "Y", + "retention": "AA" + }, + "heading": "Total point score in academic qualifications" + }, + "x-display": { + "label": "Total point score in academic qualifications", + "visible": false + } + }, + "TLEV": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one tech level.", + "x-csv": { + "columns": { + "provisional-revised": "Z", + "retention": "AB" + }, + "heading": "Tech level student" + }, + "x-display": { + "label": "Tech level student", + "visible": false + } + }, + "TOTENTS_TLEV": { + "type": [ + "number", + "null" + ], + "description": "Total size of entries for tech levels, ie this student’s contribution to their institution’s published average point scores in tech levels.", + "x-csv": { + "columns": { + "provisional-revised": "AA", + "retention": "AC" + }, + "heading": "Total size of entries in tech levels" + }, + "x-display": { + "label": "Total size of entries in tech levels", + "visible": false + } + }, + "TOTPTSE_TLEV": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in tech levels that contribute to their institution’s published average point scores (in tech levels).", + "x-csv": { + "columns": { + "provisional-revised": "AB", + "retention": "AD" + }, + "heading": "Total point score in tech levels" + }, + "x-display": { + "label": "Total point score in tech levels", + "visible": false + } + }, + "AGEN": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one applied general qualification", + "x-csv": { + "columns": { + "provisional-revised": "AC", + "retention": "AE" + }, + "heading": "Applied general student" + }, + "x-display": { + "label": "Applied general student", + "visible": false + } + }, + "TOTENTS_AGEN": { + "type": [ + "number", + "null" + ], + "description": "Total size of entries for applied general qualifications, ie this student’s contribution to their institution’s published average point scores in applied general qualifications.", + "x-csv": { + "columns": { + "provisional-revised": "AD", + "retention": "AF" + }, + "heading": "Total size of entries in applied general qualifications" + }, + "x-display": { + "label": "Total size of entries in applied general qualifications", + "visible": false + } + }, + "TOTPTSE_AGEN": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in applied general qualifications that contribute to their institution’s published average point scores (in applied general qualifications).", + "x-csv": { + "columns": { + "provisional-revised": "AE", + "retention": "AG" + }, + "heading": "Total point score in applied general qualifications" + }, + "x-display": { + "label": "Total point score in applied general qualifications", + "visible": false + } + }, + "TechCert": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one technical certificate qualification", + "x-csv": { + "columns": { + "provisional-revised": "AF", + "retention": "AH" + }, + "heading": "Technical certificate student" + }, + "x-display": { + "label": "Technical certificate student", + "visible": false + } + }, + "TOTENTS_TechCert": { + "type": [ + "number", + "null" + ], + "description": "Total size of entries for technical certificate qualifications, ie this student’s contribution to their institution’s published average point scores in technical certificate qualifications.", + "x-csv": { + "columns": { + "provisional-revised": "AG", + "retention": "AI" + }, + "heading": "Total size of entries in technical certificates" + }, + "x-display": { + "label": "Total size of entries in technical certificates", + "visible": false + } + }, + "TOTPTSE_TechCert": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in technical certificate qualifications that contribute to their institution’s published average point scores (in technical certificate qualifications).", + "x-csv": { + "columns": { + "provisional-revised": "AH", + "retention": "AJ" + }, + "heading": "Total point score in technical certificates" + }, + "x-display": { + "label": "Total point score in technical certificates", + "visible": false + } + }, + "TLEVEL_Core": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one T level core qualification", + "x-csv": { + "columns": {}, + "heading": "T level Core student" + }, + "x-display": { + "label": "T level Core student", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "TOTENTS_TLEVEL_Core": { + "type": [ + "number", + "null" + ], + "description": "Total entries for T level core qualifications, ie this student’s contribution to their institution’s published average point scores in T Level Core qualifications.", + "x-csv": { + "columns": {}, + "heading": "Total entries in T level Core" + }, + "x-display": { + "label": "Total entries in T level Core", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "TOTPTSE_TLEVEL_Core": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in T level core qualifications that contribute to their institution’s published average point scores (in T Level Core qualifications).", + "x-csv": { + "columns": {}, + "heading": "Total point score in T level Core" + }, + "x-display": { + "label": "Total point score in T level Core", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "TLEVEL_OS": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one T level OS qualification", + "x-csv": { + "columns": {}, + "heading": "T level OS student" + }, + "x-display": { + "label": "T level OS student", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "TOTENTS_TLEVEL_OS": { + "type": [ + "number", + "null" + ], + "description": "Total entries for T level OS qualifications, ie this student’s contribution to their institution’s published average point scores in T Level OS qualifications.", + "x-csv": { + "columns": {}, + "heading": "Total entries in T level OS" + }, + "x-display": { + "label": "Total entries in T level OS", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "TOTPTSE_TLEVEL_OS": { + "type": [ + "number", + "null" + ], + "description": "Total points achieved in T level OS qualifications that contribute to their institution’s published average point scores (in T Level OS qualifications).", + "x-csv": { + "columns": {}, + "heading": "Total point score in T level OS" + }, + "x-display": { + "label": "Total point score in T level OS", + "visible": false + }, + "x-source": { + "status": "removed" + } + }, + "L3_FLAG": { + "type": [ + "integer", + "null" + ], + "description": "Student is flagged in at least one of the ACAD, AGEN or TLEV attainment programmes", + "x-csv": { + "columns": { + "provisional-revised": "AI", + "retention": "AK" + }, + "heading": "Student in one of the L3 attainment programmes" + }, + "x-display": { + "label": "Student in one of the L3 attainment programmes", + "visible": false + } + }, + "TechCert_nodisc": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one technical certificate qualification (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AJ", + "retention": "AL" + }, + "heading": "Technical certificate student (ignoring discounting)" + }, + "x-display": { + "label": "Technical certificate student (ignoring discounting)", + "visible": false + } + }, + "L2VOC_nodisc": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one level 2 vocational qualification (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AK", + "retention": "AM" + }, + "heading": "Level 2 vocational student (ignoring discounting)" + }, + "x-display": { + "label": "Level 2 vocational student (ignoring discounting)", + "visible": false + } + }, + "TLEV_nodisc": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one tech level qualification (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AL", + "retention": "AN" + }, + "heading": "Tech level student (ignoring discounting)" + }, + "x-display": { + "label": "Tech level student (ignoring discounting)", + "visible": false + } + }, + "TLEV_denom": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one level 3 vocational qualification excluding applied generals (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AM", + "retention": "AO" + }, + "heading": "Level 3 vocational student excluding applied generals (ignoring discounting)" + }, + "x-display": { + "label": "Level 3 vocational student excluding applied generals (ignoring discounting)", + "visible": false + } + }, + "AGEN_nodisc": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one applied general qualification (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AN", + "retention": "AP" + }, + "heading": "Applied general student (ignoring discounting)" + }, + "x-display": { + "label": "Applied general student (ignoring discounting)", + "visible": false + } + }, + "AGEN_denom": { + "type": [ + "integer", + "null" + ], + "description": "Student entered for at least one level 3 vocational qualification excluding tech levels (ignoring discounting)", + "x-csv": { + "columns": { + "provisional-revised": "AO", + "retention": "AQ" + }, + "heading": "Level 3 vocational student excluding tech levels (ignoring discounting)" + }, + "x-display": { + "label": "Level 3 vocational student excluding tech levels (ignoring discounting)", + "visible": false + } + }, + "LearningAimReference": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "description": "Qualification number of aim selected as core aim for retention measure", + "x-csv": { + "columns": { + "retention": "AR" + }, + "heading": "Retention core aim qualification number" + }, + "x-display": { + "label": "Retention core aim qualification number", + "visible": false + } + }, + "Retention_CompletionStatus": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether core aim was completed for retention measure", + "x-csv": { + "columns": { + "retention": "AS" + }, + "heading": "Retention core aim completion status" + }, + "x-display": { + "label": "Retention core aim completion status", + "visible": false + } + }, + "AimSize_Final": { + "type": [ + "number", + "null" + ], + "description": "Shows size of core aim for retention measure", + "x-csv": { + "columns": { + "retention": "AT" + }, + "heading": "Retention core aim size" + }, + "x-display": { + "label": "Retention core aim size", + "visible": false + } + }, + "CoreAimFlag": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether learning aim has been flagged as a core aim by provider 1 = Yes, 0 = No", + "x-csv": { + "columns": { + "retention": "AU" + }, + "heading": "Retention core aim flagged as core aim by provider" + }, + "x-display": { + "label": "Retention core aim flagged as core aim by provider", + "visible": false + } + }, + "Ret_Trigger": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether learning aim is in scope for inclusion in retention measure 1 = Yes, 0 = No", + "x-csv": { + "columns": { + "retention": "AV" + }, + "heading": "Retention core aim in scope" + }, + "x-display": { + "label": "Retention core aim in scope", + "visible": false + } + }, + "InScope_ALEV_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether this student has an A level core aim", + "x-csv": { + "columns": { + "retention": "AW" + }, + "heading": "Student in A level programme for retention measure" + }, + "x-display": { + "label": "Student in A level programme for retention measure", + "visible": false + } + }, + "Retained_ALEV_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Student has an A level core aim which was retained", + "x-csv": { + "columns": { + "retention": "AX" + }, + "heading": "Student retained in A level programme" + }, + "x-display": { + "label": "Student retained in A level programme", + "visible": false + } + }, + "Ret_Assessed_ALEV": { + "type": [ + "integer", + "null" + ], + "description": "Student retained in an A level core aim and was assessed in an exam of the same level and at least the same size as the core aim.", + "x-csv": { + "columns": { + "retention": "AY" + }, + "heading": "Student retained and assessed with an A-level core aim" + }, + "x-display": { + "label": "Student retained and assessed with an A-level core aim", + "visible": false + } + }, + "InScope_ALEV_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether student has an A level core aim and is in scope for returned for a second year supporting measure", + "x-csv": { + "columns": { + "retention": "AZ" + }, + "heading": "Student in A level programme for returned for a second year supporting measure" + }, + "x-display": { + "label": "Student in A level programme for returned for a second year supporting measure", + "visible": false + } + }, + "Retained_ALEV_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Student has an A level core aim which was retained and returned for a second year.", + "x-csv": { + "columns": { + "retention": "BA" + }, + "heading": "Student retained and returned for a second year with an A level programme" + }, + "x-display": { + "label": "Student retained and returned for a second year with an A level programme", + "visible": false + } + }, + "InScope_ACAD_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether this student has a academic core aim", + "x-csv": { + "columns": { + "retention": "BB" + }, + "heading": "Student in academic programme for retention measure" + }, + "x-display": { + "label": "Student in academic programme for retention measure", + "visible": false + } + }, + "Retained_ACAD_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Student has an academic core aim which was retained", + "x-csv": { + "columns": { + "retention": "BC" + }, + "heading": "Student retained in academic programme" + }, + "x-display": { + "label": "Student retained in academic programme", + "visible": false + } + }, + "Ret_Assessed_ACAD": { + "type": [ + "integer", + "null" + ], + "description": "Student retained in an academic core aim and was assessed in an exam of the same level and at least the same size as the core aim.", + "x-csv": { + "columns": { + "retention": "BD" + }, + "heading": "Student retained and assessed with an academic core aim" + }, + "x-display": { + "label": "Student retained and assessed with an academic core aim", + "visible": false + } + }, + "InScope_ACAD_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether student has an academic core aim and is in scope for returned for a second year supporting measure", + "x-csv": { + "columns": { + "retention": "BE" + }, + "heading": "Student in academic programme for returned for a second year supporting measure" + }, + "x-display": { + "label": "Student in academic programme for returned for a second year supporting measure", + "visible": false + } + }, + "Retained_ACAD_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Student has an academic core aim which was retained and returned for a second year.", + "x-csv": { + "columns": { + "retention": "BF" + }, + "heading": "Student retained for a second year with an academic core aim" + }, + "x-display": { + "label": "Student retained for a second year with an academic core aim", + "visible": false + } + }, + "InScope_TLEV_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether this student has a tech level core aim", + "x-csv": { + "columns": { + "retention": "BG" + }, + "heading": "Student in tech level programme for retention measure" + }, + "x-display": { + "label": "Student in tech level programme for retention measure", + "visible": false + } + }, + "Retained_TLEV_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Student has a tech level core aim which was retained", + "x-csv": { + "columns": { + "retention": "BH" + }, + "heading": "Student retained in tech level programme" + }, + "x-display": { + "label": "Student retained in tech level programme", + "visible": false + } + }, + "Ret_Assessed_TLEV": { + "type": [ + "integer", + "null" + ], + "description": "Student retained in a tech level core aim and was assessed in an exam of the same level and at least the same size as the core aim.", + "x-csv": { + "columns": { + "retention": "BI" + }, + "heading": "Student retained and assessed with a tech level core aim" + }, + "x-display": { + "label": "Student retained and assessed with a tech level core aim", + "visible": false + } + }, + "InScope_TLEV_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether student has a tech level core aim and is in scope for returned for a second year supporting measure", + "x-csv": { + "columns": { + "retention": "BJ" + }, + "heading": "Student in tech level programme for returned for a second year supporting measure" + }, + "x-display": { + "label": "Student in tech level programme for returned for a second year supporting measure", + "visible": false + } + }, + "Retained_TLEV_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Student has a tech level core aim which was retained and returned for a second year.", + "x-csv": { + "columns": { + "retention": "BK" + }, + "heading": "Student retained for a second year with a tech level core aim" + }, + "x-display": { + "label": "Student retained for a second year with a tech level core aim", + "visible": false + } + }, + "InScope_AGEN_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether this student has a tech level core aim", + "x-csv": { + "columns": { + "retention": "BL" + }, + "heading": "Student in applied general programme for retention measure" + }, + "x-display": { + "label": "Student in applied general programme for retention measure", + "visible": false + } + }, + "Retained_AGEN_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Student has an applied general core aim which was retained", + "x-csv": { + "columns": { + "retention": "BM" + }, + "heading": "Student retained in applied general programme" + }, + "x-display": { + "label": "Student retained in applied general programme", + "visible": false + } + }, + "Ret_Assessed_AGEN": { + "type": [ + "integer", + "null" + ], + "description": "Student retained in an applied general core aim and was assessed in an exam of the same level and at least the same size as the core aim.", + "x-csv": { + "columns": { + "retention": "BN" + }, + "heading": "Student retained and assessed with an applied general core aim" + }, + "x-display": { + "label": "Student retained and assessed with an applied general core aim", + "visible": false + } + }, + "InScope_AGEN_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether student has an applied general core aim and is in scope for returned for a second year supporting measure", + "x-csv": { + "columns": { + "retention": "BO" + }, + "heading": "Student in applied general programme for returned for a second year supporting measure" + }, + "x-display": { + "label": "Student in applied general programme for returned for a second year supporting measure", + "visible": false + } + }, + "Retained_AGEN_2ndYr": { + "type": [ + "integer", + "null" + ], + "description": "Student has an applied general core aim which was retained and returned for a second year.", + "x-csv": { + "columns": { + "retention": "BP" + }, + "heading": "Student retained for a second year with an applied general core aim" + }, + "x-display": { + "label": "Student retained for a second year with an applied general core aim", + "visible": false + } + }, + "InScope_TechCert_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Shows whether this student has a technical certificate core aim", + "x-csv": { + "columns": { + "retention": "BQ" + }, + "heading": "Student in technical certificate programme for retention measure" + }, + "x-display": { + "label": "Student in technical certificate programme for retention measure", + "visible": false + } + }, + "Retained_TechCert_Ret": { + "type": [ + "integer", + "null" + ], + "description": "Student has a technical certificate core aim which was retained", + "x-csv": { + "columns": { + "retention": "BR" + }, + "heading": "Student retained in a technical certificate programme" + }, + "x-display": { + "label": "Student retained in a technical certificate programme", + "visible": false + } + }, + "Ret_Assessed_TechCert": { + "type": [ + "integer", + "null" + ], + "description": "Student retained in a technical certificate core aim and was assessed in an exam of the same level and at least the same size as the core aim.", + "x-csv": { + "columns": { + "retention": "BS" + }, + "heading": "Student retained and assessed with a technical certificate core aim" + }, + "x-display": { + "label": "Student retained and assessed with a technical certificate core aim", + "visible": false + } + }, + "INCLUDE_B3": { + "type": [ + "integer", + "null" + ], + "description": "Student is included in the best 3 A levels measure", + "x-csv": { + "columns": { + "provisional-revised": "AP", + "retention": "BT" + }, + "heading": "Student included in Best 3 measure" + }, + "x-display": { + "label": "Student included in Best 3 measure", + "visible": false + } + }, + "B3PTSE_B3": { + "type": [ + "number", + "null" + ], + "description": "Student's average points in their best 3 A levels", + "x-csv": { + "columns": { + "provisional-revised": "AQ", + "retention": "BU" + }, + "heading": "Student's Best 3 score" + }, + "x-display": { + "label": "Student's Best 3 score", + "visible": false + } + }, + "INCLUDE_AAB": { + "type": [ + "integer", + "null" + ], + "description": "Student is included in the AAB (including 2 facilitating subjects) measure", + "x-csv": { + "columns": { + "provisional-revised": "AR", + "retention": "BV" + }, + "heading": "Student included in AAB measure" + }, + "x-display": { + "label": "Student included in AAB measure", + "visible": false + } + }, + "AAB_FAC": { + "type": [ + "integer", + "null" + ], + "description": "Student achieved at least AAB including at least 2 facilitating subjects", + "x-csv": { + "columns": { + "provisional-revised": "AS", + "retention": "BW" + }, + "heading": "Student achieved AAB measure" + }, + "x-display": { + "label": "Student achieved AAB measure", + "visible": false + } + }, + "KS4_Year_Calc": { + "type": [ + "integer", + "null" + ], + "description": "Year student reached or assumed to have reached the end of key stage 4", + "x-csv": { + "columns": { + "provisional-revised": "AT", + "retention": "BX" + }, + "heading": "KS4 year" + }, + "x-display": { + "label": "KS4 year", + "visible": false + } + }, + "new_trigger": { + "type": [ + "integer", + "null" + ], + "description": "FIELD ONLY REQUIRED IN 2024 REVISED DATA. This field shows whether the student is newly triggered in revised data due to the addition of late results. This field identified students that should be included in the list of students in scope of removal, as well as can be used to identify schools that are impacted by the late triggering of students.", + "x-csv": { + "columns": {}, + "heading": "Student newly triggered in revised data" + }, + "x-display": { + "label": "Student newly triggered in revised data", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (laestab,pupilid)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-non-included.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-non-included.json new file mode 100644 index 000000000..3852ba18b --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-non-included.json @@ -0,0 +1,249 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "students-non-included.json", + "title": "Students non-included", + "description": "One row from the 16-18 Non-included Pupil Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "students-non-included", + "pageTab": "students", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "KS5_not_incl_pup25.csv", + "label": "Students non-included" + }, + "x-display": { + "tab": "students", + "section": "Students non-included", + "selectorOrder": 1 + }, + "properties": { + "INCLUDED": { + "type": "boolean", + "description": "Whether this row came from the included students file", + "x-csv": { "columns": {}, "heading": "Included" }, + "x-display": { "label": "Included", "visible": false, "order": 999 } + }, + "SCHCNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "A number allocated to each student within each school/college", + "x-csv": { + "columns": {}, + "heading": "Candidate number" + }, + "x-display": { + "label": "Candidate number", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student index number (for use in checking exercise)", + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": true, + "order": 5 + } + }, + "SURNAME": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Last name", + "visible": true, + "order": 0, + "searchable": true + } + }, + "FORENAMES": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Forename" + }, + "x-display": { + "label": "First name", + "visible": true, + "order": 1, + "searchable": true + } + }, + "SEX": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student sex (F=female, M=male)", + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": true, + "order": 2 + } + }, + "DOB": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": true, + "order": 3 + } + }, + "AGE": { + "type": [ + "integer", + "null" + ], + "description": "Student age at beginning of the reporting year (ie, 31 August 2024)", + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Age" + }, + "x-display": { + "label": "Age", + "visible": true, + "order": 4 + } + }, + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for school or college", + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "URN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college Unique Reference Number", + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "School or college UK Provider Registration Number", + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "ULN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (laestab,pupilid)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-previously-published.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-previously-published.json new file mode 100644 index 000000000..d3e6d6588 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-previously-published.json @@ -0,0 +1,227 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "students-previously-published.json", + "title": "Previously published", + "description": "One row from the 16-18 Previously Published Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "students-previously-published", + "pageTab": "students", + "institutionKey": "LAESTAB_0" + }, + "x-download": { + "fileName": "ks5_prev_pub_pup25.csv", + "label": "Previously published" + }, + "x-display": { + "tab": "students", + "section": "Previously published", + "selectorOrder": 2 + }, + "properties": { + "SCHCNO": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "A number allocated to each student within each school/college", + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "Candidate number" + }, + "x-display": { + "label": "Candidate number", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student index number (for use in checking exercise)", + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": true, + "order": 5 + } + }, + "SURNAME_0": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student surname", + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Last name", + "visible": true, + "order": 0, + "searchable": true + } + }, + "FORENAMES_0": { + "type": [ + "string", + "null" + ], + "maxLength": 100, + "description": "Student forename", + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Forename" + }, + "x-display": { + "label": "First name", + "visible": true, + "order": 1, + "searchable": true + } + }, + "SEX_0": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "description": "Student sex (F=female, M=male)", + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": true, + "order": 2 + } + }, + "DOB_0": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "Student date of birth in format DD/MM/YYYY", + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Date of birth" + }, + "x-display": { + "label": "Date of birth", + "visible": true, + "order": 3 + } + }, + "LAESTAB_0": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "description": "DfE number for school or college", + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + }, + "URN_0": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college Unique Reference Number", + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "URN" + }, + "x-display": { + "label": "URN", + "visible": false + } + }, + "UKPRN": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "description": "School or college UK Provider Registration Number", + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "UKPRN" + }, + "x-display": { + "label": "UKPRN", + "visible": false + } + }, + "ULN_0": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "description": "Student's Unique Learner Number", + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "ULN" + }, + "x-display": { + "label": "ULN", + "visible": false + } + }, + "cypmd_pk": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "description": "primary key for use by Oracle team (laestab_0,pupilid)", + "x-csv": { + "columns": {}, + "heading": "cypmd_pk" + }, + "x-display": { + "label": "cypmd_pk", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-value-added.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-value-added.json new file mode 100644 index 000000000..b583b89e5 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/students-value-added.json @@ -0,0 +1,303 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "students-value-added.json", + "title": "Value added", + "description": "One row from the 1618 Value-added Pupil Data worksheet of Post16.ods.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "students-value-added", + "pageTab": "students", + "institutionKey": "Laestab" + }, + "x-download": { + "fileName": "ks5va25.csv", + "label": "Value added" + }, + "x-display": { + "tab": "students", + "section": "Value added", + "selectorOrder": 3 + }, + "properties": { + "Forename": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "Forename" + }, + "x-display": { + "label": "Forename", + "visible": false + } + }, + "Surname": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "Surname" + }, + "x-display": { + "label": "Surname", + "visible": false + } + }, + "Sex": { + "type": [ + "string", + "null" + ], + "maxLength": 1, + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Sex" + }, + "x-display": { + "label": "Sex", + "visible": false + } + }, + "Qualification_code": { + "type": [ + "integer", + "null" + ], + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Qualification code" + }, + "x-display": { + "label": "Qualification code", + "visible": false + } + }, + "Qualification_name": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Qualification name" + }, + "x-display": { + "label": "Qualification name", + "visible": false + } + }, + "Subject_code": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Subject code" + }, + "x-display": { + "label": "Subject code", + "visible": false + } + }, + "Subject_name": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Subject name" + }, + "x-display": { + "label": "Subject name", + "visible": false + } + }, + "Size": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Size" + }, + "x-display": { + "label": "Size", + "visible": false + } + }, + "Cohort": { + "type": [ + "string", + "null" + ], + "maxLength": 21, + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Cohort" + }, + "x-display": { + "label": "Cohort", + "visible": false + } + }, + "Prior_attainment": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Prior attainment" + }, + "x-display": { + "label": "Prior attainment", + "visible": false + } + }, + "Estimated_points": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Estimated points (new points)" + }, + "x-display": { + "label": "Estimated points (new points)", + "visible": false + } + }, + "Actual_points": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Actual points (new points)" + }, + "x-display": { + "label": "Actual points (new points)", + "visible": false + } + }, + "Value_Added_score": { + "type": [ + "number", + "null" + ], + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Value Added score" + }, + "x-display": { + "label": "Value Added score", + "visible": false + } + }, + "QUAL_ID": { + "type": [ + "integer", + "null" + ], + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "QUAL_ID" + }, + "x-display": { + "label": "QUAL_ID", + "visible": false + } + }, + "Disadvantaged_status": { + "type": [ + "integer", + "null" + ], + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Disadvantaged status" + }, + "x-display": { + "label": "Disadvantaged status", + "visible": false + } + }, + "CYPMD_ID": { + "type": [ + "integer", + "null" + ], + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "CYPMD ID" + }, + "x-display": { + "label": "CYPMD ID", + "visible": false + } + }, + "Laestab": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": false + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-autumn.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-autumn.json new file mode 100644 index 000000000..d1bcb0d79 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-autumn.json @@ -0,0 +1,1141 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "summary-autumn.json", + "title": "Summary (Autumn CE)", + "description": "One row per institution from the 1618 Summary Data worksheet of Post16.ods, in the Column (Autumn) layout used by the Autumn CE exercise.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "summary", + "pageTab": "summary", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "summary.csv", + "label": "Summary" + }, + "x-display": { + "tab": "summary", + "section": "Summary", + "selectorOrder": 0, + "layout": "vertical" + }, + "properties": { + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": true, + "order": 1 + } + }, + "CampID": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "Campus Identifier" + }, + "x-display": { + "label": "Campus Identifier", + "visible": true, + "order": 2 + } + }, + "TALLPUP_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Number of students at the end of 16 to 18 studies" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 studies", + "visible": true, + "order": 3 + } + }, + "TALLPUP_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 4 + } + }, + "TALLPPEGRD_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per A level entry expressed as a grade", + "visible": true, + "order": 5 + } + }, + "TALLPPE_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Average point score per A level entry" + }, + "x-display": { + "label": "Average point score per A level entry", + "visible": true, + "order": 6 + } + }, + "TALLPUP_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 7 + } + }, + "TALLPPEGRD_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 8 + } + }, + "TALLPPE_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Average point score per academic entry" + }, + "x-display": { + "label": "Average point score per academic entry", + "visible": true, + "order": 9 + } + }, + "TALLPUP_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 10 + } + }, + "TALLPPEGRD_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 11 + } + }, + "TALLPPE_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Average point score per applied general entry" + }, + "x-display": { + "label": "Average point score per applied general entry", + "visible": true, + "order": 12 + } + }, + "TALLPUP_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 13 + } + }, + "TALLPPEGRD_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 14 + } + }, + "TALLPPE_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Average point score per tech level entry" + }, + "x-display": { + "label": "Average point score per tech level entry", + "visible": true, + "order": 15 + } + }, + "TALLPUP_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "Number of students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 16 + } + }, + "TALLPPEGRD_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "Average point score per T Level entry" + }, + "x-display": { + "label": "Average point score per T Level entry", + "visible": true, + "order": 17 + } + }, + "TALLPPE_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "R" + }, + "heading": "Average point score per T Level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade", + "visible": true, + "order": 18 + } + }, + "TALLPUP_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "S" + }, + "heading": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)", + "visible": true, + "order": 19 + } + }, + "TALLPPEGRD_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "T" + }, + "heading": "Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 20 + } + }, + "TALLPPE_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "U" + }, + "heading": "Average point score per technical certificate entry" + }, + "x-display": { + "label": "Average point score per technical certificate entry", + "visible": true, + "order": 21 + } + }, + "TALLPUP_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "V" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 22 + } + }, + "TALLPPEGRD_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "W" + }, + "heading": "Disadvantaged - Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry expressed as a grade", + "visible": true, + "order": 23 + } + }, + "TALLPPE_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "X" + }, + "heading": "Disadvantaged - Average point score per A level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry", + "visible": true, + "order": 24 + } + }, + "TALLPUP_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Y" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 25 + } + }, + "TALLPPEGRD_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Z" + }, + "heading": "Disadvantaged - Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 26 + } + }, + "TALLPPE_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AA" + }, + "heading": "Disadvantaged - Average point score per academic entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry", + "visible": true, + "order": 27 + } + }, + "TALLPUP_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AB" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 28 + } + }, + "TALLPPEGRD_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AC" + }, + "heading": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 29 + } + }, + "TALLPPE_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AD" + }, + "heading": "Disadvantaged - Average point score per applied general entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry", + "visible": true, + "order": 30 + } + }, + "TALLPUP_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AE" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 31 + } + }, + "TALLPPEGRD_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AF" + }, + "heading": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 32 + } + }, + "TALLPPE_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AG" + }, + "heading": "Disadvantaged - Average point score per tech level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry", + "visible": true, + "order": 33 + } + }, + "TALLPUP_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AH" + }, + "heading": "Number of disadvantaged students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of disadvantaged students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 34 + } + }, + "TALLPPEGRD_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AI" + }, + "heading": "Average point score per T Level entry for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry for disadvantaged students", + "visible": true, + "order": 35 + } + }, + "TALLPPE_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AJ" + }, + "heading": "Average point score per T Level entry expressed as a grade for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade for disadvantaged students", + "visible": true, + "order": 36 + } + }, + "TALLPUP_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AK" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)", + "visible": true, + "order": 37 + } + }, + "TALLPPEGRD_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AL" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 38 + } + }, + "TALLPPE_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AM" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry", + "visible": true, + "order": 39 + } + }, + "TINCLUDE_AAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AN" + }, + "heading": "Number of students included in the AAB measure" + }, + "x-display": { + "label": "Number of students included in the AAB measure", + "visible": true, + "order": 40 + } + }, + "PTAAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AO" + }, + "heading": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects" + }, + "x-display": { + "label": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects", + "visible": true, + "order": 41 + } + }, + "TINCLUDE_B3": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AP" + }, + "heading": "Number of students included in the best three A levels measure" + }, + "x-display": { + "label": "Number of students included in the best three A levels measure", + "visible": true, + "order": 42 + } + }, + "TB3PTSE_GRD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AQ" + }, + "heading": "Average points per entry in best three A levels expressed as a grade" + }, + "x-display": { + "label": "Average points per entry in best three A levels expressed as a grade", + "visible": true, + "order": 43 + } + }, + "TB3PTSE": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AR" + }, + "heading": "Average point score per entry in best three A levels entries" + }, + "x-display": { + "label": "Average point score per entry in best three A levels entries", + "visible": true, + "order": 44 + } + }, + "TALLPUP_TLEVDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AS" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding applied generals" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding applied generals", + "visible": true, + "order": 45 + } + }, + "TLEV_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AT" + }, + "heading": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)" + }, + "x-display": { + "label": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)", + "visible": true, + "order": 46 + } + }, + "TALLPUP_AGENDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AU" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding tech levels" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding tech levels", + "visible": true, + "order": 47 + } + }, + "AGEN_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AV" + }, + "heading": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)" + }, + "x-display": { + "label": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)", + "visible": true, + "order": 48 + } + }, + "TALLPUP_ANYL2VOC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AW" + }, + "heading": "Number of students whose highest attainment is at level 2" + }, + "x-display": { + "label": "Number of students whose highest attainment is at level 2", + "visible": true, + "order": 49 + } + }, + "Techcert_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AX" + }, + "heading": "Percentage of students entering a technical certificate whose highest attainment is at level 2" + }, + "x-display": { + "label": "Percentage of students entering a technical certificate whose highest attainment is at level 2", + "visible": true, + "order": 50 + } + }, + "ENTRY_PER_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AY" + }, + "heading": "Percentage of students in scope for English progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for English progress measure entering an approved qualification", + "visible": true, + "order": 51 + } + }, + "ENTRY_PER_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AZ" + }, + "heading": "Percentage of students in scope for maths progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for maths progress measure entering an approved qualification", + "visible": true, + "order": 52 + } + }, + "T_SCOPEEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BA" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 53 + } + }, + "PROGEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BB" + }, + "heading": "Average progress made in English" + }, + "x-display": { + "label": "Average progress made in English", + "visible": true, + "order": 54 + } + }, + "T_SCOPEEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BC" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 55 + } + }, + "PROGEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BD" + }, + "heading": "Average progress made in maths" + }, + "x-display": { + "label": "Average progress made in maths", + "visible": true, + "order": 56 + } + }, + "T_SCOPEEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BE" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 57 + } + }, + "PROGEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BF" + }, + "heading": "Disadvantaged - Average progress made in English" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in English", + "visible": true, + "order": 58 + } + }, + "T_SCOPEEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BG" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 59 + } + }, + "PROGEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BH" + }, + "heading": "Disadvantaged - Average progress made in maths" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in maths", + "visible": true, + "order": 60 + } + }, + "TALLPUP_SCOPE_L3M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BI" + }, + "heading": "Number of students in level 3 maths measure" + }, + "x-display": { + "label": "Number of students in level 3 maths measure", + "visible": true, + "order": 61 + } + }, + "L3M_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BJ" + }, + "heading": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths" + }, + "x-display": { + "label": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths", + "visible": true, + "order": 62 + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-november-va.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-november-va.json new file mode 100644 index 000000000..806099653 --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-november-va.json @@ -0,0 +1,1861 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "summary-november-va.json", + "title": "Summary (Provisional Value Added and light touch revised data share)", + "description": "One row per institution from the 1618 Summary Data worksheet of Post16.ods, in the Column (November VA) layout used by the Provisional Value Added and light touch revised data share exercise.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "summary", + "pageTab": "summary", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "summary.csv", + "label": "Summary" + }, + "x-display": { + "tab": "summary", + "section": "Summary", + "selectorOrder": 0, + "layout": "vertical" + }, + "properties": { + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": true, + "order": 1 + } + }, + "CampID": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "Campus Identifier" + }, + "x-display": { + "label": "Campus Identifier", + "visible": true, + "order": 2 + } + }, + "TALLPUP_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Number of students at the end of 16 to 18 studies" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 studies", + "visible": true, + "order": 3 + } + }, + "TALLPUP_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 4 + } + }, + "TALLPPEGRD_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per A level entry expressed as a grade", + "visible": true, + "order": 5 + } + }, + "TALLPPE_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Average point score per A level entry" + }, + "x-display": { + "label": "Average point score per A level entry", + "visible": true, + "order": 6 + } + }, + "TALLPUP_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 7 + } + }, + "TALLPPEGRD_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 8 + } + }, + "TALLPPE_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Average point score per academic entry" + }, + "x-display": { + "label": "Average point score per academic entry", + "visible": true, + "order": 9 + } + }, + "TALLPUP_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 10 + } + }, + "TALLPPEGRD_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 11 + } + }, + "TALLPPE_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Average point score per applied general entry" + }, + "x-display": { + "label": "Average point score per applied general entry", + "visible": true, + "order": 12 + } + }, + "TALLPUP_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 13 + } + }, + "TALLPPEGRD_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 14 + } + }, + "TALLPPE_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Average point score per tech level entry" + }, + "x-display": { + "label": "Average point score per tech level entry", + "visible": true, + "order": 15 + } + }, + "TALLPUP_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "Number of students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 16 + } + }, + "TALLPPEGRD_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "Average point score per T Level entry" + }, + "x-display": { + "label": "Average point score per T Level entry", + "visible": true, + "order": 17 + } + }, + "TALLPPE_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "R" + }, + "heading": "Average point score per T Level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade", + "visible": true, + "order": 18 + } + }, + "TALLPUP_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "S" + }, + "heading": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)", + "visible": true, + "order": 19 + } + }, + "TALLPPEGRD_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "T" + }, + "heading": "Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 20 + } + }, + "TALLPPE_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "U" + }, + "heading": "Average point score per technical certificate entry" + }, + "x-display": { + "label": "Average point score per technical certificate entry", + "visible": true, + "order": 21 + } + }, + "TALLPUP_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "V" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 22 + } + }, + "TALLPPEGRD_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "W" + }, + "heading": "Disadvantaged - Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry expressed as a grade", + "visible": true, + "order": 23 + } + }, + "TALLPPE_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "X" + }, + "heading": "Disadvantaged - Average point score per A level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry", + "visible": true, + "order": 24 + } + }, + "TALLPUP_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Y" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 25 + } + }, + "TALLPPEGRD_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Z" + }, + "heading": "Disadvantaged - Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 26 + } + }, + "TALLPPE_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AA" + }, + "heading": "Disadvantaged - Average point score per academic entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry", + "visible": true, + "order": 27 + } + }, + "TALLPUP_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AB" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 28 + } + }, + "TALLPPEGRD_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AC" + }, + "heading": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 29 + } + }, + "TALLPPE_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AD" + }, + "heading": "Disadvantaged - Average point score per applied general entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry", + "visible": true, + "order": 30 + } + }, + "TALLPUP_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AE" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 31 + } + }, + "TALLPPEGRD_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AF" + }, + "heading": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 32 + } + }, + "TALLPPE_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AG" + }, + "heading": "Disadvantaged - Average point score per tech level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry", + "visible": true, + "order": 33 + } + }, + "TALLPUP_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AH" + }, + "heading": "Number of disadvantaged students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of disadvantaged students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 34 + } + }, + "TALLPPEGRD_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AI" + }, + "heading": "Average point score per T Level entry for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry for disadvantaged students", + "visible": true, + "order": 35 + } + }, + "TALLPPE_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AJ" + }, + "heading": "Average point score per T Level entry expressed as a grade for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade for disadvantaged students", + "visible": true, + "order": 36 + } + }, + "TALLPUP_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AK" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)", + "visible": true, + "order": 37 + } + }, + "TALLPPEGRD_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AL" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 38 + } + }, + "TALLPPE_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AM" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry", + "visible": true, + "order": 39 + } + }, + "TINCLUDE_AAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AN" + }, + "heading": "Number of students included in the AAB measure" + }, + "x-display": { + "label": "Number of students included in the AAB measure", + "visible": true, + "order": 40 + } + }, + "PTAAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AO" + }, + "heading": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects" + }, + "x-display": { + "label": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects", + "visible": true, + "order": 41 + } + }, + "TINCLUDE_B3": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AP" + }, + "heading": "Number of students included in the best three A levels measure" + }, + "x-display": { + "label": "Number of students included in the best three A levels measure", + "visible": true, + "order": 42 + } + }, + "TB3PTSE_GRD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AQ" + }, + "heading": "Average points per entry in best three A levels expressed as a grade" + }, + "x-display": { + "label": "Average points per entry in best three A levels expressed as a grade", + "visible": true, + "order": 43 + } + }, + "TB3PTSE": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AR" + }, + "heading": "Average point score per entry in best three A levels entries" + }, + "x-display": { + "label": "Average point score per entry in best three A levels entries", + "visible": true, + "order": 44 + } + }, + "TALLPUP_TLEVDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AS" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding applied generals" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding applied generals", + "visible": true, + "order": 45 + } + }, + "TLEV_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AT" + }, + "heading": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)" + }, + "x-display": { + "label": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)", + "visible": true, + "order": 46 + } + }, + "TALLPUP_AGENDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AU" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding tech levels" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding tech levels", + "visible": true, + "order": 47 + } + }, + "AGEN_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AV" + }, + "heading": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)" + }, + "x-display": { + "label": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)", + "visible": true, + "order": 48 + } + }, + "TALLPUP_ANYL2VOC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AW" + }, + "heading": "Number of students whose highest attainment is at level 2" + }, + "x-display": { + "label": "Number of students whose highest attainment is at level 2", + "visible": true, + "order": 49 + } + }, + "Techcert_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AX" + }, + "heading": "Percentage of students entering a technical certificate whose highest attainment is at level 2" + }, + "x-display": { + "label": "Percentage of students entering a technical certificate whose highest attainment is at level 2", + "visible": true, + "order": 50 + } + }, + "ENTRY_PER_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AY" + }, + "heading": "Percentage of students in scope for English progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for English progress measure entering an approved qualification", + "visible": true, + "order": 51 + } + }, + "ENTRY_PER_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AZ" + }, + "heading": "Percentage of students in scope for maths progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for maths progress measure entering an approved qualification", + "visible": true, + "order": 52 + } + }, + "VA_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BA" + }, + "heading": "A level value added score" + }, + "x-display": { + "label": "A level value added score", + "visible": true, + "order": 53 + } + }, + "UCI_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BB" + }, + "heading": "Upper confidence limit (A level)" + }, + "x-display": { + "label": "Upper confidence limit (A level)", + "visible": true, + "order": 54 + } + }, + "LCI_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BC" + }, + "heading": "Lower confidence limit (A level)" + }, + "x-display": { + "label": "Lower confidence limit (A level)", + "visible": true, + "order": 55 + } + }, + "ENTRIES_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BD" + }, + "heading": "Number of A level exam entries (for value added measure)" + }, + "x-display": { + "label": "Number of A level exam entries (for value added measure)", + "visible": true, + "order": 56 + } + }, + "VA_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BE" + }, + "heading": "Academic value added score" + }, + "x-display": { + "label": "Academic value added score", + "visible": true, + "order": 57 + } + }, + "UCI_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BF" + }, + "heading": "Upper confidence limit (Academic)" + }, + "x-display": { + "label": "Upper confidence limit (Academic)", + "visible": true, + "order": 58 + } + }, + "LCI_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BG" + }, + "heading": "Lower confidence limit (Academic)" + }, + "x-display": { + "label": "Lower confidence limit (Academic)", + "visible": true, + "order": 59 + } + }, + "ENTRIES_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BH" + }, + "heading": "Number of academic entries (for value added measure)" + }, + "x-display": { + "label": "Number of academic entries (for value added measure)", + "visible": true, + "order": 60 + } + }, + "VA_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BI" + }, + "heading": "Applied general value added score" + }, + "x-display": { + "label": "Applied general value added score", + "visible": true, + "order": 61 + } + }, + "UCI_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BJ" + }, + "heading": "Upper confidence limit (Applied General)" + }, + "x-display": { + "label": "Upper confidence limit (Applied General)", + "visible": true, + "order": 62 + } + }, + "LCI_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BK" + }, + "heading": "Lower confidence limit (Applied General)" + }, + "x-display": { + "label": "Lower confidence limit (Applied General)", + "visible": true, + "order": 63 + } + }, + "ENTRIES_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BL" + }, + "heading": "Number of applied general entries (for value added measure)" + }, + "x-display": { + "label": "Number of applied general entries (for value added measure)", + "visible": true, + "order": 64 + } + }, + "VA_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BM" + }, + "heading": "Tech Level value added score" + }, + "x-display": { + "label": "Tech Level value added score", + "visible": true, + "order": 65 + } + }, + "UCI_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BN" + }, + "heading": "Upper confidence limit (Tech Level)" + }, + "x-display": { + "label": "Upper confidence limit (Tech Level)", + "visible": true, + "order": 66 + } + }, + "LCI_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BO" + }, + "heading": "Lower confidence limit (Tech Level)" + }, + "x-display": { + "label": "Lower confidence limit (Tech Level)", + "visible": true, + "order": 67 + } + }, + "ENTRIES_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BP" + }, + "heading": "Number of Tech Level entries (for value added measure)" + }, + "x-display": { + "label": "Number of Tech Level entries (for value added measure)", + "visible": true, + "order": 68 + } + }, + "VA_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BQ" + }, + "heading": "Technical Certificate value added score" + }, + "x-display": { + "label": "Technical Certificate value added score", + "visible": true, + "order": 69 + } + }, + "UCI_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BR" + }, + "heading": "Upper confidence limit (Technical Certificate)" + }, + "x-display": { + "label": "Upper confidence limit (Technical Certificate)", + "visible": true, + "order": 70 + } + }, + "LCI_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BS" + }, + "heading": "Lower confidence limit (Technical Certificate)" + }, + "x-display": { + "label": "Lower confidence limit (Technical Certificate)", + "visible": true, + "order": 71 + } + }, + "ENTRIES_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BT" + }, + "heading": "Number of Technical Certificate entries (for value added measure)" + }, + "x-display": { + "label": "Number of Technical Certificate entries (for value added measure)", + "visible": true, + "order": 72 + } + }, + "T_SCOPEEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BU" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 73 + } + }, + "PROGEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BV" + }, + "heading": "Average progress made in English" + }, + "x-display": { + "label": "Average progress made in English", + "visible": true, + "order": 74 + } + }, + "T_SCOPEEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BW" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 75 + } + }, + "PROGEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BX" + }, + "heading": "Average progress made in maths" + }, + "x-display": { + "label": "Average progress made in maths", + "visible": true, + "order": 76 + } + }, + "VA_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BY" + }, + "heading": "Disadvantaged - A level value added score" + }, + "x-display": { + "label": "Disadvantaged - A level value added score", + "visible": true, + "order": 77 + } + }, + "UCI_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BZ" + }, + "heading": "Upper confidence limit (A level - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (A level - disadvantaged)", + "visible": true, + "order": 78 + } + }, + "LCI_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CA" + }, + "heading": "Lower confidence limit (A level - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (A level - disadvantaged)", + "visible": true, + "order": 79 + } + }, + "ENTRIES_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CB" + }, + "heading": "Disadvantaged - Number of A level exam entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of A level exam entries (for value added measure)", + "visible": true, + "order": 80 + } + }, + "VA_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CC" + }, + "heading": "Disadvantaged - Academic value added score" + }, + "x-display": { + "label": "Disadvantaged - Academic value added score", + "visible": true, + "order": 81 + } + }, + "UCI_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CD" + }, + "heading": "Upper confidence limit (Academic - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Academic - disadvantaged)", + "visible": true, + "order": 82 + } + }, + "LCI_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CE" + }, + "heading": "Lower confidence limit (Academic - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Academic - disadvantaged)", + "visible": true, + "order": 83 + } + }, + "ENTRIES_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CF" + }, + "heading": "Disadvantaged - Number of academic entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of academic entries (for value added measure)", + "visible": true, + "order": 84 + } + }, + "VA_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CG" + }, + "heading": "Disadvantaged - Applied general value added score" + }, + "x-display": { + "label": "Disadvantaged - Applied general value added score", + "visible": true, + "order": 85 + } + }, + "UCI_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CH" + }, + "heading": "Upper confidence limit (Applied General - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Applied General - disadvantaged)", + "visible": true, + "order": 86 + } + }, + "LCI_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CI" + }, + "heading": "Lower confidence limit (Applied General - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Applied General - disadvantaged)", + "visible": true, + "order": 87 + } + }, + "ENTRIES_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CJ" + }, + "heading": "Disadvantaged - Number of applied general exam entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of applied general exam entries (for value added measure)", + "visible": true, + "order": 88 + } + }, + "VA_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CK" + }, + "heading": "Disadvantaged - Tech Level value added score" + }, + "x-display": { + "label": "Disadvantaged - Tech Level value added score", + "visible": true, + "order": 89 + } + }, + "UCI_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CL" + }, + "heading": "Upper confidence limit (Tech Level - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Tech Level - disadvantaged)", + "visible": true, + "order": 90 + } + }, + "LCI_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CM" + }, + "heading": "Lower confidence limit (Tech Level - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Tech Level - disadvantaged)", + "visible": true, + "order": 91 + } + }, + "ENTRIES_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CN" + }, + "heading": "Disadvantaged - Number of Tech Level entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of Tech Level entries (for value added measure)", + "visible": true, + "order": 92 + } + }, + "VA_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CO" + }, + "heading": "Disadvantaged - Technical Certificate value added score" + }, + "x-display": { + "label": "Disadvantaged - Technical Certificate value added score", + "visible": true, + "order": 93 + } + }, + "UCI_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CP" + }, + "heading": "Upper confidence limit (Technical Certificate - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Technical Certificate - disadvantaged)", + "visible": true, + "order": 94 + } + }, + "LCI_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CQ" + }, + "heading": "Lower confidence limit (Technical Certificate - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Technical Certificate - disadvantaged)", + "visible": true, + "order": 95 + } + }, + "ENTRIES_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CR" + }, + "heading": "Disadvantaged - Number of Technical Certificate entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of Technical Certificate entries (for value added measure)", + "visible": true, + "order": 96 + } + }, + "T_SCOPEEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CS" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 97 + } + }, + "PROGEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CT" + }, + "heading": "Disadvantaged - Average progress made in English" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in English", + "visible": true, + "order": 98 + } + }, + "T_SCOPEEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CU" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 99 + } + }, + "PROGEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CV" + }, + "heading": "Disadvantaged - Average progress made in maths" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in maths", + "visible": true, + "order": 100 + } + }, + "TALLPUP_SCOPE_L3M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CW" + }, + "heading": "Number of students in level 3 maths measure" + }, + "x-display": { + "label": "Number of students in level 3 maths measure", + "visible": true, + "order": 101 + } + }, + "L3M_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CX" + }, + "heading": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths" + }, + "x-display": { + "label": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths", + "visible": true, + "order": 102 + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-retention.json b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-retention.json new file mode 100644 index 000000000..faec4638d --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/Data/Ingress/schema/post16/summary-retention.json @@ -0,0 +1,2455 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "summary-retention.json", + "title": "Summary (Retention)", + "description": "One row per institution from the 1618 Summary Data worksheet of Post16.ods, in the Column (Retention) layout used by the Retention exercise.", + "type": "object", + "additionalProperties": false, + "x-ingress": { + "collection": "summary", + "pageTab": "summary", + "institutionKey": "LAESTAB" + }, + "x-download": { + "fileName": "summary.csv", + "label": "Summary" + }, + "x-display": { + "tab": "summary", + "section": "Summary", + "selectorOrder": 0, + "layout": "vertical" + }, + "properties": { + "LAESTAB": { + "type": [ + "string", + "null" + ], + "maxLength": 7, + "x-csv": { + "columns": { + "default": "A" + }, + "heading": "DfE number" + }, + "x-display": { + "label": "DfE number", + "visible": true, + "order": 1 + } + }, + "CampID": { + "type": [ + "string", + "null" + ], + "maxLength": 8, + "x-csv": { + "columns": { + "default": "B" + }, + "heading": "Campus Identifier" + }, + "x-display": { + "label": "Campus Identifier", + "visible": true, + "order": 2 + } + }, + "TALLPUP_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "C" + }, + "heading": "Number of students at the end of 16 to 18 studies" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 studies", + "visible": true, + "order": 3 + } + }, + "TALLPUP_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "D" + }, + "heading": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 4 + } + }, + "TALLPPEGRD_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "E" + }, + "heading": "Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per A level entry expressed as a grade", + "visible": true, + "order": 5 + } + }, + "TALLPPE_ALEV_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "F" + }, + "heading": "Average point score per A level entry" + }, + "x-display": { + "label": "Average point score per A level entry", + "visible": true, + "order": 6 + } + }, + "TALLPUP_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "G" + }, + "heading": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 7 + } + }, + "TALLPPEGRD_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "H" + }, + "heading": "Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 8 + } + }, + "TALLPPE_ACAD_1618": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "I" + }, + "heading": "Average point score per academic entry" + }, + "x-display": { + "label": "Average point score per academic entry", + "visible": true, + "order": 9 + } + }, + "TALLPUP_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "J" + }, + "heading": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 10 + } + }, + "TALLPPEGRD_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "K" + }, + "heading": "Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 11 + } + }, + "TALLPPE_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "L" + }, + "heading": "Average point score per applied general entry" + }, + "x-display": { + "label": "Average point score per applied general entry", + "visible": true, + "order": 12 + } + }, + "TALLPUP_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "M" + }, + "heading": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 13 + } + }, + "TALLPPEGRD_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "N" + }, + "heading": "Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 14 + } + }, + "TALLPPE_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "O" + }, + "heading": "Average point score per tech level entry" + }, + "x-display": { + "label": "Average point score per tech level entry", + "visible": true, + "order": 15 + } + }, + "TALLPUP_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "P" + }, + "heading": "Number of students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 16 + } + }, + "TALLPPEGRD_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Q" + }, + "heading": "Average point score per T Level entry" + }, + "x-display": { + "label": "Average point score per T Level entry", + "visible": true, + "order": 17 + } + }, + "TALLPPE_TLEVEL": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "R" + }, + "heading": "Average point score per T Level entry expressed as a grade" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade", + "visible": true, + "order": 18 + } + }, + "TALLPUP_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "S" + }, + "heading": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a technical certificate exam entry (for average grade measure)", + "visible": true, + "order": 19 + } + }, + "TALLPPEGRD_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "T" + }, + "heading": "Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 20 + } + }, + "TALLPPE_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "U" + }, + "heading": "Average point score per technical certificate entry" + }, + "x-display": { + "label": "Average point score per technical certificate entry", + "visible": true, + "order": 21 + } + }, + "TALLPUP_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "V" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level exam entry (for average grade measure)", + "visible": true, + "order": 22 + } + }, + "TALLPPEGRD_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "W" + }, + "heading": "Disadvantaged - Average point score per A level entry expressed as a grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry expressed as a grade", + "visible": true, + "order": 23 + } + }, + "TALLPPE_ALEV_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "X" + }, + "heading": "Disadvantaged - Average point score per A level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per A level entry", + "visible": true, + "order": 24 + } + }, + "TALLPUP_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Y" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic exam entry (for average grade measure)", + "visible": true, + "order": 25 + } + }, + "TALLPPEGRD_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "Z" + }, + "heading": "Disadvantaged - Average point score per academic entry expressed as an A level grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry expressed as an A level grade", + "visible": true, + "order": 26 + } + }, + "TALLPPE_ACAD_1618_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AA" + }, + "heading": "Disadvantaged - Average point score per academic entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per academic entry", + "visible": true, + "order": 27 + } + }, + "TALLPUP_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AB" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general exam entry (for average grade measure)", + "visible": true, + "order": 28 + } + }, + "TALLPPEGRD_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AC" + }, + "heading": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry expressed as a vocational grade", + "visible": true, + "order": 29 + } + }, + "TALLPPE_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AD" + }, + "heading": "Disadvantaged - Average point score per applied general entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per applied general entry", + "visible": true, + "order": 30 + } + }, + "TALLPUP_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AE" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level exam entry (for average grade measure)", + "visible": true, + "order": 31 + } + }, + "TALLPPEGRD_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AF" + }, + "heading": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry expressed as a vocational grade", + "visible": true, + "order": 32 + } + }, + "TALLPPE_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AG" + }, + "heading": "Disadvantaged - Average point score per tech level entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per tech level entry", + "visible": true, + "order": 33 + } + }, + "TALLPUP_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AH" + }, + "heading": "Number of disadvantaged students at the end of 16-18 study with a T Level entry" + }, + "x-display": { + "label": "Number of disadvantaged students at the end of 16-18 study with a T Level entry", + "visible": true, + "order": 34 + } + }, + "TALLPPEGRD_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AI" + }, + "heading": "Average point score per T Level entry for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry for disadvantaged students", + "visible": true, + "order": 35 + } + }, + "TALLPPE_TLEVEL_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AJ" + }, + "heading": "Average point score per T Level entry expressed as a grade for disadvantaged students" + }, + "x-display": { + "label": "Average point score per T Level entry expressed as a grade for disadvantaged students", + "visible": true, + "order": 36 + } + }, + "TALLPUP_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AK" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech certificate exam entry (for average grade measure)", + "visible": true, + "order": 37 + } + }, + "TALLPPEGRD_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AL" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry expressed as a vocational grade", + "visible": true, + "order": 38 + } + }, + "TALLPPE_TechCert_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AM" + }, + "heading": "Disadvantaged - Average point score per technical certificate entry" + }, + "x-display": { + "label": "Disadvantaged - Average point score per technical certificate entry", + "visible": true, + "order": 39 + } + }, + "TINCLUDE_AAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AN" + }, + "heading": "Number of students included in the AAB measure" + }, + "x-display": { + "label": "Number of students included in the AAB measure", + "visible": true, + "order": 40 + } + }, + "PTAAB_2FAC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AO" + }, + "heading": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects" + }, + "x-display": { + "label": "Percentage of students who achieve three GCE A levels at grades AAB or higher, with two in facilitating subjects", + "visible": true, + "order": 41 + } + }, + "TINCLUDE_B3": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AP" + }, + "heading": "Number of students included in the best three A levels measure" + }, + "x-display": { + "label": "Number of students included in the best three A levels measure", + "visible": true, + "order": 42 + } + }, + "TB3PTSE_GRD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AQ" + }, + "heading": "Average points per entry in best three A levels expressed as a grade" + }, + "x-display": { + "label": "Average points per entry in best three A levels expressed as a grade", + "visible": true, + "order": 43 + } + }, + "TB3PTSE": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AR" + }, + "heading": "Average point score per entry in best three A levels entries" + }, + "x-display": { + "label": "Average point score per entry in best three A levels entries", + "visible": true, + "order": 44 + } + }, + "TALLPUP_TLEVDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AS" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding applied generals" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding applied generals", + "visible": true, + "order": 45 + } + }, + "TLEV_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AT" + }, + "heading": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)" + }, + "x-display": { + "label": "Percentage entering tech level qualifications as a proportion who enter level 3 vocational qualifications (excl applied general)", + "visible": true, + "order": 46 + } + }, + "TALLPUP_AGENDENOM": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AU" + }, + "heading": "Number of students entering at least one level 3 vocational qualification excluding tech levels" + }, + "x-display": { + "label": "Number of students entering at least one level 3 vocational qualification excluding tech levels", + "visible": true, + "order": 47 + } + }, + "AGEN_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AV" + }, + "heading": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)" + }, + "x-display": { + "label": "Percentage entering applied general qualifications as a proportion who enter level 3 vocational qualifications (excl tech level)", + "visible": true, + "order": 48 + } + }, + "TALLPUP_ANYL2VOC": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AW" + }, + "heading": "Number of students whose highest attainment is at level 2" + }, + "x-display": { + "label": "Number of students whose highest attainment is at level 2", + "visible": true, + "order": 49 + } + }, + "Techcert_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AX" + }, + "heading": "Percentage of students entering a technical certificate whose highest attainment is at level 2" + }, + "x-display": { + "label": "Percentage of students entering a technical certificate whose highest attainment is at level 2", + "visible": true, + "order": 50 + } + }, + "ENTRY_PER_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AY" + }, + "heading": "Percentage of students in scope for English progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for English progress measure entering an approved qualification", + "visible": true, + "order": 51 + } + }, + "ENTRY_PER_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "AZ" + }, + "heading": "Percentage of students in scope for maths progress measure entering an approved qualification" + }, + "x-display": { + "label": "Percentage of students in scope for maths progress measure entering an approved qualification", + "visible": true, + "order": 52 + } + }, + "PT_RET_ASSESSED_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BA" + }, + "heading": "Percentage of A level students retained and assessed" + }, + "x-display": { + "label": "Percentage of A level students retained and assessed", + "visible": true, + "order": 53 + } + }, + "T_INSCOPE_ALEV_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BB" + }, + "heading": "Number of students at the end of 16 to 18 study with an A level core aim (for returned and retained for a second year measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an A level core aim (for returned and retained for a second year measure)", + "visible": true, + "order": 54 + } + }, + "PT_RETAINED_ALEV_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BC" + }, + "heading": "Percentage of A level students returned and retained for a second year" + }, + "x-display": { + "label": "Percentage of A level students returned and retained for a second year", + "visible": true, + "order": 55 + } + }, + "PT_RET_ASSESSED_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BD" + }, + "heading": "Percentage of academic students retained and assessed" + }, + "x-display": { + "label": "Percentage of academic students retained and assessed", + "visible": true, + "order": 56 + } + }, + "T_INSCOPE_ACAD_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BE" + }, + "heading": "Number of students at the end of 16 to 18 study with an academic core aim (for returned and retained for a second year measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an academic core aim (for returned and retained for a second year measure)", + "visible": true, + "order": 57 + } + }, + "PT_RETAINED_ACAD_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BF" + }, + "heading": "Percentage of academic students returned and retained for a second year" + }, + "x-display": { + "label": "Percentage of academic students returned and retained for a second year", + "visible": true, + "order": 58 + } + }, + "PT_RET_ASSESSED_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BG" + }, + "heading": "Percentage of applied general students retained and assessed" + }, + "x-display": { + "label": "Percentage of applied general students retained and assessed", + "visible": true, + "order": 59 + } + }, + "T_INSCOPE_AGEN_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BH" + }, + "heading": "Number of students at the end of 16-18 study with applied general core aim (for returned and retained for a second year measure)" + }, + "x-display": { + "label": "Number of students at the end of 16-18 study with applied general core aim (for returned and retained for a second year measure)", + "visible": true, + "order": 60 + } + }, + "PT_RETAINED_AGEN_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BI" + }, + "heading": "Percentage of applied general students returned and retained for a second year" + }, + "x-display": { + "label": "Percentage of applied general students returned and retained for a second year", + "visible": true, + "order": 61 + } + }, + "PT_RET_ASSESSED_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BJ" + }, + "heading": "Percentage of tech level students retained and assessed" + }, + "x-display": { + "label": "Percentage of tech level students retained and assessed", + "visible": true, + "order": 62 + } + }, + "T_INSCOPE_TLEV_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BK" + }, + "heading": "Number of students at the end of 16 to 18 study with a tech level core aim (for returned and retained for a second year measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a tech level core aim (for returned and retained for a second year measure)", + "visible": true, + "order": 63 + } + }, + "PT_RETAINED_TLEV_2ndYR": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BL" + }, + "heading": "Percentage of tech level students returned and retained for a second year" + }, + "x-display": { + "label": "Percentage of tech level students returned and retained for a second year", + "visible": true, + "order": 64 + } + }, + "PT_RET_ASSESSED_TechCert": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BM" + }, + "heading": "Percentage of technical certificate students retained and assessed" + }, + "x-display": { + "label": "Percentage of technical certificate students retained and assessed", + "visible": true, + "order": 65 + } + }, + "VA_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BN" + }, + "heading": "A level value added score" + }, + "x-display": { + "label": "A level value added score", + "visible": true, + "order": 66 + } + }, + "UCI_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BO" + }, + "heading": "Upper confidence limit (A level)" + }, + "x-display": { + "label": "Upper confidence limit (A level)", + "visible": true, + "order": 67 + } + }, + "LCI_INS_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BP" + }, + "heading": "Lower confidence limit (A level)" + }, + "x-display": { + "label": "Lower confidence limit (A level)", + "visible": true, + "order": 68 + } + }, + "ENTRIES_ALEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BQ" + }, + "heading": "Number of A level exam entries (for value added measure)" + }, + "x-display": { + "label": "Number of A level exam entries (for value added measure)", + "visible": true, + "order": 69 + } + }, + "VA_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BR" + }, + "heading": "Academic value added score" + }, + "x-display": { + "label": "Academic value added score", + "visible": true, + "order": 70 + } + }, + "UCI_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BS" + }, + "heading": "Upper confidence limit (Academic)" + }, + "x-display": { + "label": "Upper confidence limit (Academic)", + "visible": true, + "order": 71 + } + }, + "LCI_INS_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BT" + }, + "heading": "Lower confidence limit (Academic)" + }, + "x-display": { + "label": "Lower confidence limit (Academic)", + "visible": true, + "order": 72 + } + }, + "ENTRIES_ACAD": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BU" + }, + "heading": "Number of academic entries (for value added measure)" + }, + "x-display": { + "label": "Number of academic entries (for value added measure)", + "visible": true, + "order": 73 + } + }, + "VA_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BV" + }, + "heading": "Applied general value added score" + }, + "x-display": { + "label": "Applied general value added score", + "visible": true, + "order": 74 + } + }, + "UCI_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BW" + }, + "heading": "Upper confidence limit (Applied General)" + }, + "x-display": { + "label": "Upper confidence limit (Applied General)", + "visible": true, + "order": 75 + } + }, + "LCI_INS_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BX" + }, + "heading": "Lower confidence limit (Applied General)" + }, + "x-display": { + "label": "Lower confidence limit (Applied General)", + "visible": true, + "order": 76 + } + }, + "ENTRIES_AGEN": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BY" + }, + "heading": "Number of applied general entries (for value added measure)" + }, + "x-display": { + "label": "Number of applied general entries (for value added measure)", + "visible": true, + "order": 77 + } + }, + "VA_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "BZ" + }, + "heading": "Tech Level value added score" + }, + "x-display": { + "label": "Tech Level value added score", + "visible": true, + "order": 78 + } + }, + "UCI_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CA" + }, + "heading": "Upper confidence limit (Tech Level)" + }, + "x-display": { + "label": "Upper confidence limit (Tech Level)", + "visible": true, + "order": 79 + } + }, + "LCI_INS_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CB" + }, + "heading": "Lower confidence limit (Tech Level)" + }, + "x-display": { + "label": "Lower confidence limit (Tech Level)", + "visible": true, + "order": 80 + } + }, + "ENTRIES_TLEV": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CC" + }, + "heading": "Number of Tech Level entries (for value added measure)" + }, + "x-display": { + "label": "Number of Tech Level entries (for value added measure)", + "visible": true, + "order": 81 + } + }, + "VA_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CD" + }, + "heading": "Technical Certificate value added score" + }, + "x-display": { + "label": "Technical Certificate value added score", + "visible": true, + "order": 82 + } + }, + "UCI_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CE" + }, + "heading": "Upper confidence limit (Technical Certificate)" + }, + "x-display": { + "label": "Upper confidence limit (Technical Certificate)", + "visible": true, + "order": 83 + } + }, + "LCI_INS_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CF" + }, + "heading": "Lower confidence limit (Technical Certificate)" + }, + "x-display": { + "label": "Lower confidence limit (Technical Certificate)", + "visible": true, + "order": 84 + } + }, + "ENTRIES_TechCERT": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CG" + }, + "heading": "Number of Technical Certificate entries (for value added measure)" + }, + "x-display": { + "label": "Number of Technical Certificate entries (for value added measure)", + "visible": true, + "order": 85 + } + }, + "T_SCOPEEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CH" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 86 + } + }, + "PROGEX_E": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CI" + }, + "heading": "Average progress made in English" + }, + "x-display": { + "label": "Average progress made in English", + "visible": true, + "order": 87 + } + }, + "T_SCOPEEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CJ" + }, + "heading": "Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 88 + } + }, + "PROGEX_M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CK" + }, + "heading": "Average progress made in maths" + }, + "x-display": { + "label": "Average progress made in maths", + "visible": true, + "order": 89 + } + }, + "T_INSCOPE_ALEV_RET": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CL" + }, + "heading": "Number of students at the end of 16 to 18 study with an A level core aim (for retention and retained and assessed measures)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an A level core aim (for retention and retained and assessed measures)", + "visible": true, + "order": 90 + } + }, + "PT_Retained_ALEV_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CM" + }, + "heading": "Percentage of A level students retained" + }, + "x-display": { + "label": "Percentage of A level students retained", + "visible": true, + "order": 91 + } + }, + "T_InScope_ACAD_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CN" + }, + "heading": "Number of students at the end of 16 to 18 study with an academic core aim (for retention and retained and assessed measures)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with an academic core aim (for retention and retained and assessed measures)", + "visible": true, + "order": 92 + } + }, + "PT_Retained_ACAD_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CO" + }, + "heading": "Percentage of academic students retained" + }, + "x-display": { + "label": "Percentage of academic students retained", + "visible": true, + "order": 93 + } + }, + "T_InScope_AGEN_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CP" + }, + "heading": "Number of students at the end of 16 to 18 study with applied general core aim (for retention, retained and assessed measures)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with applied general core aim (for retention, retained and assessed measures)", + "visible": true, + "order": 94 + } + }, + "PT_Retained_AGEN_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CQ" + }, + "heading": "Percentage of applied general students retained" + }, + "x-display": { + "label": "Percentage of applied general students retained", + "visible": true, + "order": 95 + } + }, + "T_InScope_TLEV_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CR" + }, + "heading": "Number of students at the end of 16 to 18 study with a tech level core aim (for retention and retained and assessed measures)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a tech level core aim (for retention and retained and assessed measures)", + "visible": true, + "order": 96 + } + }, + "PT_Retained_TLEV_Ret": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CS" + }, + "heading": "Percentage of tech level students retained" + }, + "x-display": { + "label": "Percentage of tech level students retained", + "visible": true, + "order": 97 + } + }, + "T_INSCOPE_TechCert_RET": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CT" + }, + "heading": "Number of students at the end of 16 to 18 study with a technical certificate core aim (for retention measure)" + }, + "x-display": { + "label": "Number of students at the end of 16 to 18 study with a technical certificate core aim (for retention measure)", + "visible": true, + "order": 98 + } + }, + "PT_RETAINED_TechCert_RET": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CU" + }, + "heading": "Percentage of technical certificate students retained" + }, + "x-display": { + "label": "Percentage of technical certificate students retained", + "visible": true, + "order": 99 + } + }, + "VA_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CV" + }, + "heading": "Disadvantaged - A level value added score" + }, + "x-display": { + "label": "Disadvantaged - A level value added score", + "visible": true, + "order": 100 + } + }, + "UCI_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CW" + }, + "heading": "Upper confidence limit (A level - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (A level - disadvantaged)", + "visible": true, + "order": 101 + } + }, + "LCI_INS_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CX" + }, + "heading": "Lower confidence limit (A level - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (A level - disadvantaged)", + "visible": true, + "order": 102 + } + }, + "ENTRIES_ALEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CY" + }, + "heading": "Disadvantaged - Number of A level exam entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of A level exam entries (for value added measure)", + "visible": true, + "order": 103 + } + }, + "VA_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "CZ" + }, + "heading": "Disadvantaged - Academic value added score" + }, + "x-display": { + "label": "Disadvantaged - Academic value added score", + "visible": true, + "order": 104 + } + }, + "UCI_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DA" + }, + "heading": "Upper confidence limit (Academic - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Academic - disadvantaged)", + "visible": true, + "order": 105 + } + }, + "LCI_INS_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DB" + }, + "heading": "Lower confidence limit (Academic - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Academic - disadvantaged)", + "visible": true, + "order": 106 + } + }, + "ENTRIES_ACAD_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DC" + }, + "heading": "Disadvantaged - Number of academic entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of academic entries (for value added measure)", + "visible": true, + "order": 107 + } + }, + "VA_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DD" + }, + "heading": "Disadvantaged - Applied general value added score" + }, + "x-display": { + "label": "Disadvantaged - Applied general value added score", + "visible": true, + "order": 108 + } + }, + "UCI_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DE" + }, + "heading": "Upper confidence limit (Applied General - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Applied General - disadvantaged)", + "visible": true, + "order": 109 + } + }, + "LCI_INS_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DF" + }, + "heading": "Lower confidence limit (Applied General - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Applied General - disadvantaged)", + "visible": true, + "order": 110 + } + }, + "ENTRIES_AGEN_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DG" + }, + "heading": "Disadvantaged - Number of applied general exam entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of applied general exam entries (for value added measure)", + "visible": true, + "order": 111 + } + }, + "VA_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DH" + }, + "heading": "Disadvantaged - Tech Level value added score" + }, + "x-display": { + "label": "Disadvantaged - Tech Level value added score", + "visible": true, + "order": 112 + } + }, + "UCI_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DI" + }, + "heading": "Upper confidence limit (Tech Level - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Tech Level - disadvantaged)", + "visible": true, + "order": 113 + } + }, + "LCI_INS_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DJ" + }, + "heading": "Lower confidence limit (Tech Level - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Tech Level - disadvantaged)", + "visible": true, + "order": 114 + } + }, + "ENTRIES_TLEV_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DK" + }, + "heading": "Disadvantaged - Number of Tech Level entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of Tech Level entries (for value added measure)", + "visible": true, + "order": 115 + } + }, + "VA_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DL" + }, + "heading": "Disadvantaged - Technical Certificate value added score" + }, + "x-display": { + "label": "Disadvantaged - Technical Certificate value added score", + "visible": true, + "order": 116 + } + }, + "UCI_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DM" + }, + "heading": "Upper confidence limit (Technical Certificate - disadvantaged)" + }, + "x-display": { + "label": "Upper confidence limit (Technical Certificate - disadvantaged)", + "visible": true, + "order": 117 + } + }, + "LCI_INS_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DN" + }, + "heading": "Lower confidence limit (Technical Certificate - disadvantaged)" + }, + "x-display": { + "label": "Lower confidence limit (Technical Certificate - disadvantaged)", + "visible": true, + "order": 118 + } + }, + "ENTRIES_TechCERT_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DO" + }, + "heading": "Disadvantaged - Number of Technical Certificate entries (for value added measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of Technical Certificate entries (for value added measure)", + "visible": true, + "order": 119 + } + }, + "T_SCOPEEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DP" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for English progress measure", + "visible": true, + "order": 120 + } + }, + "PROGEX_E_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DQ" + }, + "heading": "Disadvantaged - Average progress made in English" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in English", + "visible": true, + "order": 121 + } + }, + "T_SCOPEEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DR" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study in scope for maths progress measure", + "visible": true, + "order": 122 + } + }, + "PROGEX_M_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DS" + }, + "heading": "Disadvantaged - Average progress made in maths" + }, + "x-display": { + "label": "Disadvantaged - Average progress made in maths", + "visible": true, + "order": 123 + } + }, + "T_INSCOPE_ALEV_RET_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DT" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level core aim (for retention measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an A level core aim (for retention measure)", + "visible": true, + "order": 124 + } + }, + "PT_Retained_ALEV_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DU" + }, + "heading": "Disadvantaged - Percentage of A level students retained" + }, + "x-display": { + "label": "Disadvantaged - Percentage of A level students retained", + "visible": true, + "order": 125 + } + }, + "T_InScope_ACAD_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DV" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic core aim (for retention measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an academic core aim (for retention measure)", + "visible": true, + "order": 126 + } + }, + "PT_Retained_ACAD_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DW" + }, + "heading": "Disadvantaged - Percentage of academic students retained" + }, + "x-display": { + "label": "Disadvantaged - Percentage of academic students retained", + "visible": true, + "order": 127 + } + }, + "T_InScope_AGEN_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DX" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general core aim (for retention measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with an applied general core aim (for retention measure)", + "visible": true, + "order": 128 + } + }, + "PT_Retained_AGEN_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DY" + }, + "heading": "Disadvantaged - Percentage of applied general students retained" + }, + "x-display": { + "label": "Disadvantaged - Percentage of applied general students retained", + "visible": true, + "order": 129 + } + }, + "T_InScope_TLEV_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "DZ" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level core aim (for retention measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a tech level core aim (for retention measure)", + "visible": true, + "order": 130 + } + }, + "PT_Retained_TLEV_Ret_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "EA" + }, + "heading": "Disadvantaged - Percentage of tech level students retained" + }, + "x-display": { + "label": "Disadvantaged - Percentage of tech level students retained", + "visible": true, + "order": 131 + } + }, + "T_INSCOPE_TechCert_RET_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "EB" + }, + "heading": "Disadvantaged - Number of students at the end of 16 to 18 study with a technical certificate core aim (for retention measure)" + }, + "x-display": { + "label": "Disadvantaged - Number of students at the end of 16 to 18 study with a technical certificate core aim (for retention measure)", + "visible": true, + "order": 132 + } + }, + "PT_RETAINED_TechCert_RET_DIS": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "EC" + }, + "heading": "Disadvantaged - Percentage of technical certificate students retained" + }, + "x-display": { + "label": "Disadvantaged - Percentage of technical certificate students retained", + "visible": true, + "order": 133 + } + }, + "TALLPUP_SCOPE_L3M": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "ED" + }, + "heading": "Number of students in level 3 maths measure" + }, + "x-display": { + "label": "Number of students in level 3 maths measure", + "visible": true, + "order": 134 + } + }, + "L3M_PER": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "x-csv": { + "columns": { + "default": "EE" + }, + "heading": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths" + }, + "x-display": { + "label": "Percentage of students in scope of level 3 maths measure achieving approved level 3 maths", + "visible": true, + "order": 135 + } + } + } +} diff --git a/src/DfE.CheckPerformanceData.Web/DfE.CheckPerformanceData.Web.csproj b/src/DfE.CheckPerformanceData.Web/DfE.CheckPerformanceData.Web.csproj index a5de4ffee..ec0b79830 100644 --- a/src/DfE.CheckPerformanceData.Web/DfE.CheckPerformanceData.Web.csproj +++ b/src/DfE.CheckPerformanceData.Web/DfE.CheckPerformanceData.Web.csproj @@ -39,9 +39,9 @@ - - + + - + + true + + DfE.CheckPerformanceData.Persistence.Contexts.PortalDbContext, DfE.CheckPerformanceData.Persistence diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index b82b470de..ff45c22a2 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -13,6 +13,9 @@ + + + From 8983e7bc9fde951d87e3982221a7d15ef3a38fb1 Mon Sep 17 00:00:00 2001 From: Cole Jordan Date: Tue, 27 Oct 2026 13:48:51 +0000 Subject: [PATCH 11/11] Feat:airbyte config --- .../packages.lock.json | 26 ++- .../packages.lock.json | 195 +++++++++++++++++- .../packages.lock.json | 26 ++- .../packages.lock.json | 34 ++- src/Directory.Packages.props | 2 - .../packages.lock.json | 31 ++- .../packages.lock.json | 31 ++- 7 files changed, 312 insertions(+), 33 deletions(-) diff --git a/src/DfE.CheckPerformanceData.Infrastructure/packages.lock.json b/src/DfE.CheckPerformanceData.Infrastructure/packages.lock.json index 3d59561a0..74402a6a0 100644 --- a/src/DfE.CheckPerformanceData.Infrastructure/packages.lock.json +++ b/src/DfE.CheckPerformanceData.Infrastructure/packages.lock.json @@ -21,9 +21,9 @@ }, "DfeAnalytics.Core": { "type": "Direct", - "requested": "[0.6.2, )", - "resolved": "0.6.2", - "contentHash": "LIW1zpoLKWPt2017anc4xtmoPrsqV/EifFTJMhwA1/ZT3XJZp/AVj7KTsYcy3FJSCIbvPyAjpdfjFV53tIPd6g==", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", "dependencies": { "Google.Apis.Auth": "1.71.0", "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)", @@ -680,6 +680,11 @@ "resolved": "7.0.0", "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" + }, "System.IO.Hashing": { "type": "Transitive", "resolved": "10.0.9", @@ -728,6 +733,7 @@ "dependencies": { "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", + "DfeAnalytics.EFCore": "[0.6.4, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", "Microsoft.EntityFrameworkCore.Relational": "[10.0.13, )", "Microsoft.Extensions.Configuration.Abstractions": "[10.0.13, )", @@ -753,6 +759,20 @@ "System.IO.Hashing": "10.0.9" } }, + "DfeAnalytics.EFCore": { + "type": "CentralTransitive", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "10.0.0", + "Microsoft.Extensions.Http": "10.0.9", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "HtmlSanitizer": { "type": "CentralTransitive", "requested": "[9.2.1039, )", diff --git a/src/DfE.CheckPerformanceData.Persistence/packages.lock.json b/src/DfE.CheckPerformanceData.Persistence/packages.lock.json index 4e2d27278..03bb8ddd9 100644 --- a/src/DfE.CheckPerformanceData.Persistence/packages.lock.json +++ b/src/DfE.CheckPerformanceData.Persistence/packages.lock.json @@ -2,6 +2,20 @@ "version": 2, "dependencies": { "net10.0": { + "DfeAnalytics.EFCore": { + "type": "Direct", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "10.0.0", + "Microsoft.Extensions.Http": "10.0.9", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "Microsoft.EntityFrameworkCore": { "type": "Direct", "requested": "[10.0.13, )", @@ -101,11 +115,79 @@ "AngleSharp": "[1.5.0, 2.0.0)" } }, + "Google.Api.Gax": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "2Q4RruOjUawrtjTazANpp+MNB1M2E8nj2A1kweU1zF0OoNDKUnAIlMbDXs3d+kgcuj/zUVa89/nYot5UZICBWA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Newtonsoft.Json": "13.0.1" + } + }, + "Google.Api.Gax.Rest": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "YFoxv4UNP7Hn8Eask0FqwMbCAfBs5hUlzronJgFGVXcStohtKc0Mi+2YqgGN82nynx75jVWEF7siSLBwkmZsHA==", + "dependencies": { + "Google.Api.Gax": "4.0.0", + "Google.Apis.Auth": "[1.57.0, 2.0.0)", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0" + } + }, + "Google.Apis": { + "type": "Transitive", + "resolved": "1.71.0", + "contentHash": "xKVk+SLZXeBPKuEKzNTg2K7ptr5ZL40+VSR8e5+yJbzTE9uRCCDPlAzT/ij3urh4usBsn5IiW5rXQI+xAc3bRQ==", + "dependencies": { + "Google.Apis.Core": "1.71.0" + } + }, + "Google.Apis.Auth": { + "type": "Transitive", + "resolved": "1.71.0", + "contentHash": "AshxDrFfj0QQPkmGQWvWhT+iZ8Vif23hLa9mFZ6cnbwvfXmXwXOWK9bP6uWnLj+sO6otAYKm+7SMZYgwi1AdJA==", + "dependencies": { + "Google.Apis": "1.71.0", + "Google.Apis.Core": "1.71.0", + "System.Management": "7.0.2" + } + }, + "Google.Apis.Bigquery.v2": { + "type": "Transitive", + "resolved": "1.57.0.2704", + "contentHash": "soEgBHVrONkBjjFywp0rqFuBTO/Ok/jYVjc2784hY4BjW1l1C6Q30d9hgWQDFa2MWLem4PDrlFRr+sK1lYEBug==", + "dependencies": { + "Google.Apis": "1.57.0", + "Google.Apis.Auth": "1.57.0" + } + }, + "Google.Apis.Core": { + "type": "Transitive", + "resolved": "1.71.0", + "contentHash": "tCsg4USOGBVCIrSOyLht1akZe/+ioH7+LVWix6XuxP5fFiw5kEFSBXL+Of93aK/ztJa1dQI+p03dJ+AKgViRuw==", + "dependencies": { + "Newtonsoft.Json": "13.0.3" + } + }, + "Google.Cloud.BigQuery.V2": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "2P4+4qIRPBt8wuGhq+78m6IkIilJBuPgs7nU/NweIZzxpK9JI0BiPzWzUmci62FAH5z2Rc+q1GX/21TEzjIkcQ==", + "dependencies": { + "Google.Api.Gax.Rest": "[4.0.0, 5.0.0)", + "Google.Apis.Bigquery.v2": "[1.57.0.2704, 2.0.0)" + } + }, "Humanizer.Core": { "type": "Transitive", "resolved": "2.14.1", "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==" + }, "Microsoft.Build.Framework": { "type": "Transitive", "resolved": "18.0.2", @@ -198,11 +280,68 @@ "Microsoft.Extensions.Primitives": "10.0.13" } }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "woZsWLhOQsASuxbmgiZJqiGUBNo3IjRdXC92xt8rRokza+P6/nIsnzq7sm9Or6ZYcRl2kL1ufj8HVzp1QlPTXw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "Tp/+LPb70RyjjtLg9m5C959eP4KrUpJHThZfAegZVpsfmGvzfuNkuYbI/ft+LvXhMSyUcAeOPaN6rzTccwnZAg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9" + } + }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", "resolved": "10.0.13", "contentHash": "6TyllZsToy3S/Ziu67GddljRTttuVJ8bbrbVUrsdHqH5678Oax5MpaEubxLoPoWLvgUBYo4KfcAig0mkBtktXQ==" }, + "Microsoft.Extensions.Diagnostics": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "NLXI3PbTe39q6/sgs7JYhmfPf7bMzReUoAJ0q9Po6yhfM+0anZa7PrEva4W2SdiLWGyB9eKZS9THGt2BP40xJg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.9", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.9", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.9" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "86RgyFsmVslW4Nu28IXgt8tLglynGQrwjk/xhGZaTe8j6YIeR1Ywoc42hSHsBSl920CQdfqq2dBohZiGm3AkUA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" + } + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "10.0.0", + "contentHash": "/ppSdehKk3fuXjlqCDgSOtjRK/pSHU8eWgzSHfHdwVm5BP4Dgejehkw+PtxKG2j98qTDEHDst2Y99aNsmJldmw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.0" + } + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "10.0.0", + "contentHash": "KrN6TGFwCwqOkLLk/idW/XtDQh+8In+CL9T4M1Dx+5ScsjTq4TlVbal8q532m82UYrMr6RiQJF2HvYCN0QwVsA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "Transitive", "resolved": "10.0.13", @@ -230,6 +369,18 @@ "Microsoft.Extensions.Primitives": "10.0.13" } }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "10.0.9", + "contentHash": "Y4E24zffF/aPS0igNvY6ZzAQfbxd6AYdC9L4brnH+uK0yYYHIR6FeGVQVVjAOo8wub1EQDl2B90lCcpqoTF7Yw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.Configuration.Binder": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9", + "Microsoft.Extensions.Primitives": "10.0.9" + } + }, "Microsoft.Extensions.Primitives": { "type": "Transitive", "resolved": "10.0.13", @@ -258,8 +409,13 @@ }, "System.CodeDom": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==" + "resolved": "7.0.0", + "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" + }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" }, "System.Composition": { "type": "Transitive", @@ -309,6 +465,14 @@ "System.Composition.Runtime": "9.0.0" } }, + "System.Management": { + "type": "Transitive", + "resolved": "7.0.2", + "contentHash": "/qEUN91mP/MUQmJnM5y5BdT7ZoPuVrtxnFlbJ8a3kBJGhe2wCzBfnPFtK2wTtEEcf3DMGR9J00GZZfg6HRI6yA==", + "dependencies": { + "System.CodeDom": "7.0.0" + } + }, "dfe.checkperformancedata.application": { "type": "Project", "dependencies": { @@ -330,6 +494,19 @@ "resolved": "1.8.5", "contentHash": "BUgFIpmkjwMPi6QneHUHaprjUOGSXoWEF/xi/2seHCpnI8XMHACNiC09rn9qL8jbxrP8jWyJ3DnOjsGvXWNGmw==" }, + "DfeAnalytics.Core": { + "type": "CentralTransitive", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", + "dependencies": { + "Google.Apis.Auth": "1.71.0", + "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)", + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + } + }, "HtmlSanitizer": { "type": "CentralTransitive", "requested": "[9.2.1039, )", @@ -363,6 +540,20 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.13" } + }, + "Microsoft.Extensions.Http": { + "type": "CentralTransitive", + "requested": "[10.0.13, )", + "resolved": "10.0.9", + "contentHash": "5jdmuLRg1HO7x/v8McOf6ndhkMQWImkRBtJpXM8+xIocXNdLqCItyyFLKusdILc62TDzHuLlqaWoxtOA5FFOPg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9", + "Microsoft.Extensions.Diagnostics": "10.0.9", + "Microsoft.Extensions.Logging": "10.0.9", + "Microsoft.Extensions.Logging.Abstractions": "10.0.9", + "Microsoft.Extensions.Options": "10.0.9" + } } } } diff --git a/src/DfE.CheckPerformanceData.RulesEngineWorker/packages.lock.json b/src/DfE.CheckPerformanceData.RulesEngineWorker/packages.lock.json index ac8a5bc9a..f1fe4fcd7 100644 --- a/src/DfE.CheckPerformanceData.RulesEngineWorker/packages.lock.json +++ b/src/DfE.CheckPerformanceData.RulesEngineWorker/packages.lock.json @@ -347,6 +347,11 @@ "resolved": "7.0.0", "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" + }, "System.IO.Hashing": { "type": "Transitive", "resolved": "10.0.9", @@ -391,7 +396,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.Core": "[0.6.2, )", + "DfeAnalytics.Core": "[0.6.4, )", "GovukNotify": "[8.2.0, )", "Microsoft.AspNetCore.Authentication.OpenIdConnect": "[10.0.13, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", @@ -411,6 +416,7 @@ "dependencies": { "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", + "DfeAnalytics.EFCore": "[0.6.4, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", "Microsoft.EntityFrameworkCore.Relational": "[10.0.13, )", "Newtonsoft.Json": "[13.0.4, )", @@ -432,14 +438,26 @@ }, "DfeAnalytics.Core": { "type": "CentralTransitive", - "requested": "[0.6.2, )", - "resolved": "0.6.2", - "contentHash": "LIW1zpoLKWPt2017anc4xtmoPrsqV/EifFTJMhwA1/ZT3XJZp/AVj7KTsYcy3FJSCIbvPyAjpdfjFV53tIPd6g==", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", "dependencies": { "Google.Apis.Auth": "1.71.0", "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)" } }, + "DfeAnalytics.EFCore": { + "type": "CentralTransitive", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "GovukNotify": { "type": "CentralTransitive", "requested": "[8.2.0, )", diff --git a/src/DfE.CheckPerformanceData.Web/packages.lock.json b/src/DfE.CheckPerformanceData.Web/packages.lock.json index 7ff310fa9..3000f7995 100644 --- a/src/DfE.CheckPerformanceData.Web/packages.lock.json +++ b/src/DfE.CheckPerformanceData.Web/packages.lock.json @@ -23,11 +23,11 @@ }, "DfeAnalytics.AspNetCore": { "type": "Direct", - "requested": "[0.6.2, )", - "resolved": "0.6.2", - "contentHash": "mn6A8jAuiJ4O1HZure+HGgXReHK7sz0rDX6BhU9fqMcgQH+n68tbbbsPBg/bYLGF0KXFc1mWcKFjB3j2QyK9aA==", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "UlWDCeofbwz7FccSjwOxcKvOTQwTJtrrcGtL/49PZDX7QXRfB5RrCzlS9LsIOX+trZ6G133Wv3YrruPvnqw+TA==", "dependencies": { - "DfeAnalytics.Core": "0.6.2" + "DfeAnalytics.Core": "0.6.4" } }, "GovUk.Frontend.AspNetCore": { @@ -604,6 +604,11 @@ "resolved": "7.0.0", "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" + }, "System.Composition": { "type": "Transitive", "resolved": "9.0.0", @@ -701,7 +706,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.Core": "[0.6.2, )", + "DfeAnalytics.Core": "[0.6.4, )", "GovukNotify": "[8.2.0, )", "Microsoft.AspNetCore.Authentication.OpenIdConnect": "[10.0.13, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", @@ -721,6 +726,7 @@ "dependencies": { "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", + "DfeAnalytics.EFCore": "[0.6.4, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", "Microsoft.EntityFrameworkCore.Relational": "[10.0.13, )", "Newtonsoft.Json": "[13.0.4, )", @@ -763,14 +769,26 @@ }, "DfeAnalytics.Core": { "type": "CentralTransitive", - "requested": "[0.6.2, )", - "resolved": "0.6.2", - "contentHash": "LIW1zpoLKWPt2017anc4xtmoPrsqV/EifFTJMhwA1/ZT3XJZp/AVj7KTsYcy3FJSCIbvPyAjpdfjFV53tIPd6g==", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", "dependencies": { "Google.Apis.Auth": "1.71.0", "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)" } }, + "DfeAnalytics.EFCore": { + "type": "CentralTransitive", + "requested": "[0.6.4, )", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "GovukNotify": { "type": "CentralTransitive", "requested": "[8.2.0, )", diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index ff45c22a2..5fbf6ad7e 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -11,8 +11,6 @@ - - diff --git a/tests/DfE.CheckPerformanceData.IntegrationTests/packages.lock.json b/tests/DfE.CheckPerformanceData.IntegrationTests/packages.lock.json index 01bdb470f..b2bcfe074 100644 --- a/tests/DfE.CheckPerformanceData.IntegrationTests/packages.lock.json +++ b/tests/DfE.CheckPerformanceData.IntegrationTests/packages.lock.json @@ -177,21 +177,32 @@ }, "DfeAnalytics.AspNetCore": { "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "mn6A8jAuiJ4O1HZure+HGgXReHK7sz0rDX6BhU9fqMcgQH+n68tbbbsPBg/bYLGF0KXFc1mWcKFjB3j2QyK9aA==", + "resolved": "0.6.4", + "contentHash": "UlWDCeofbwz7FccSjwOxcKvOTQwTJtrrcGtL/49PZDX7QXRfB5RrCzlS9LsIOX+trZ6G133Wv3YrruPvnqw+TA==", "dependencies": { - "DfeAnalytics.Core": "0.6.2" + "DfeAnalytics.Core": "0.6.4" } }, "DfeAnalytics.Core": { "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "LIW1zpoLKWPt2017anc4xtmoPrsqV/EifFTJMhwA1/ZT3XJZp/AVj7KTsYcy3FJSCIbvPyAjpdfjFV53tIPd6g==", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", "dependencies": { "Google.Apis.Auth": "1.71.0", "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)" } }, + "DfeAnalytics.EFCore": { + "type": "Transitive", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "Docker.DotNet.Enhanced": { "type": "Transitive", "resolved": "4.3.3", @@ -814,6 +825,11 @@ "resolved": "7.0.0", "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "8.23.0", @@ -923,7 +939,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.Core": "[0.6.2, )", + "DfeAnalytics.Core": "[0.6.4, )", "GovukNotify": "[8.2.0, )", "Microsoft.AspNetCore.Authentication.OpenIdConnect": "[10.0.13, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", @@ -943,6 +959,7 @@ "dependencies": { "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", + "DfeAnalytics.EFCore": "[0.6.4, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", "Microsoft.EntityFrameworkCore.Relational": "[10.0.13, )", "Newtonsoft.Json": "[13.0.4, )", @@ -974,7 +991,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Infrastructure": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.AspNetCore": "[0.6.2, )", + "DfeAnalytics.AspNetCore": "[0.6.4, )", "GovUk.Frontend.AspNetCore": "[5.0.1, )", "Microsoft.Identity.Web": "[4.16.1, )", "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "[1.23.0, )", diff --git a/tests/DfE.CheckPerformanceData.UnitTests/packages.lock.json b/tests/DfE.CheckPerformanceData.UnitTests/packages.lock.json index c346c22da..9871c64e8 100644 --- a/tests/DfE.CheckPerformanceData.UnitTests/packages.lock.json +++ b/tests/DfE.CheckPerformanceData.UnitTests/packages.lock.json @@ -154,21 +154,32 @@ }, "DfeAnalytics.AspNetCore": { "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "mn6A8jAuiJ4O1HZure+HGgXReHK7sz0rDX6BhU9fqMcgQH+n68tbbbsPBg/bYLGF0KXFc1mWcKFjB3j2QyK9aA==", + "resolved": "0.6.4", + "contentHash": "UlWDCeofbwz7FccSjwOxcKvOTQwTJtrrcGtL/49PZDX7QXRfB5RrCzlS9LsIOX+trZ6G133Wv3YrruPvnqw+TA==", "dependencies": { - "DfeAnalytics.Core": "0.6.2" + "DfeAnalytics.Core": "0.6.4" } }, "DfeAnalytics.Core": { "type": "Transitive", - "resolved": "0.6.2", - "contentHash": "LIW1zpoLKWPt2017anc4xtmoPrsqV/EifFTJMhwA1/ZT3XJZp/AVj7KTsYcy3FJSCIbvPyAjpdfjFV53tIPd6g==", + "resolved": "0.6.4", + "contentHash": "LfmZAaetqxonAFkZSeY0M3udvzyc35QGEgDTm5ohXocTQZNOks/iqBs7tOQ7LOEw4B6cXp6aE1MGzbdsWOKIyQ==", "dependencies": { "Google.Apis.Auth": "1.71.0", "Google.Cloud.BigQuery.V2": "[3.0.0, 4.0.0)" } }, + "DfeAnalytics.EFCore": { + "type": "Transitive", + "resolved": "0.6.4", + "contentHash": "t4Rw5dqWcNNsKm6hTxoTdomrfDskb2SEt70Wo7dhnKixJqkmlmcjSpoueKZcES5fogTpg87cNKLLXLkh51Cqsg==", + "dependencies": { + "DfeAnalytics.Core": "0.6.4", + "Microsoft.EntityFrameworkCore": "10.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.0", + "System.CommandLine": "2.0.0" + } + }, "Google.Api.Gax": { "type": "Transitive", "resolved": "4.0.0", @@ -721,6 +732,11 @@ "resolved": "7.0.0", "contentHash": "GLltyqEsE5/3IE+zYRP5sNa1l44qKl9v+bfdMcwg+M9qnQf47wK3H0SUR/T+3N4JEQXF3vV4CSuuo0rsg+nq2A==" }, + "System.CommandLine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Bjklzc5NoxqAGFi7BcGlY2TWAdB06Bq3a5sfRr3ubMRU80Mf98eyq3Y2UgR6xRV0TLznZmfe5T7mUjOunRNcdA==" + }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", "resolved": "8.23.0", @@ -819,7 +835,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.Core": "[0.6.2, )", + "DfeAnalytics.Core": "[0.6.4, )", "GovukNotify": "[8.2.0, )", "Microsoft.AspNetCore.Authentication.OpenIdConnect": "[10.0.13, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", @@ -839,6 +855,7 @@ "dependencies": { "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Domain": "[1.0.0, )", + "DfeAnalytics.EFCore": "[0.6.4, )", "Microsoft.EntityFrameworkCore": "[10.0.13, )", "Microsoft.EntityFrameworkCore.Relational": "[10.0.13, )", "Newtonsoft.Json": "[13.0.4, )", @@ -870,7 +887,7 @@ "DfE.CheckPerformanceData.Application": "[1.0.0, )", "DfE.CheckPerformanceData.Infrastructure": "[1.0.0, )", "DfE.CheckPerformanceData.Persistence": "[1.0.0, )", - "DfeAnalytics.AspNetCore": "[0.6.2, )", + "DfeAnalytics.AspNetCore": "[0.6.4, )", "GovUk.Frontend.AspNetCore": "[5.0.1, )", "Microsoft.Identity.Web": "[4.16.1, )", "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "[1.23.0, )",