diff --git a/assessments/KRAssessment/.gitignore b/assessments/KRAssessment/.gitignore new file mode 100644 index 00000000..be1bff77 --- /dev/null +++ b/assessments/KRAssessment/.gitignore @@ -0,0 +1,2 @@ +.jsonl +run.csv diff --git a/assessments/KRAssessment/README.md b/assessments/KRAssessment/README.md new file mode 100644 index 00000000..d649f464 --- /dev/null +++ b/assessments/KRAssessment/README.md @@ -0,0 +1,61 @@ +# Assessment Details + +## Assessment Identifier(s) +- KRA (the name of the assessment) + +## Assessment Family +- None yet + +## Assessment Score Method Descriptors +- uri://ed.sc.gov/assessmentReportingMethodDescriptor#ScaleScore +- uri://ed.sc.gov/assessmentReportingMethodDescriptor#PerformanceLevel + +# Hierarchy +![alt text](image.png) + +## StudentAssessmentEducationOrganizationAssociation +-SchoolCode is mapped for this entity. + +## Reasoning +The kindergarten readiness assessment is a composite assessment with objectives such as: +- Social Foundation mapping to Social Foundations academic subject +- Language and Literacy mapping to English/Language Arts academic subject +- Mathematics mapping to Mathematics academic subject +- Physical Well-Being and Motor Development mapping to Physical Well-Being academic subject +in the North Carolina Academic subject name space . + +## Summary of Descriptor Fields and Mappings + +### assessmentCategoryDescriptor: +- **assessments.jsont**: `uri://ed-fi.org/assessmentCategoryDescriptor#{{assessmentCategoryDescriptor}}` +- **assessments.csv**: kindergarten Readiness + +### academicSubjectDescriptor: +- **assessments.jsont**: `uri://ed.sc.gov/AcademicSubjectDescriptor#{{academicSubjectDescriptor}}` +- **assessments.csv**: Composite + +### assessmentReportingMethodDescriptor: +- **assessments.jsont**: `{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore` +- **objectiveAssessments.jsont**: `{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore` +- **studentAssessments.jsont**: `{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore` +- **studentAssessments.jsont (within studentObjectiveAssessments)**: `{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore` +- here the namespace is : `uri://ed.sc.gov/KRA` +### resultDatatypeTypeDescriptor: +- **assessments.jsont**: `uri://ed-fi.org/ResultDatatypeTypeDescriptor#Integer` +- **objectiveAssessments.jsont**: `uri://ed-fi.org/ResultDatatypeTypeDescriptor#Integer` +- **studentAssessments.jsont**: `uri://ed-fi.org/ResultDatatypeTypeDescriptor#Integer` +- **studentAssessments.jsont (within studentObjectiveAssessments)**: `uri://ed-fi.org/ResultDatatypeTypeDescriptor#Integer` + +### performanceLevelDescriptor: +- **studentAssessments.jsont**: `{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevelDescriptor}}` +- **studentAssessments.jsont (within studentObjectiveAssessments)**: `{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevel_SFScore}}, {{PerformanceLevel_LLScore}}, {{PerformanceLevel_MAScore}}, {{PerformanceLevel_PDScore}}` +-Here the performance level descriptors match the top level values :Demonstrating Readiness, Emerging Readiness and Approaching Readiness +### whenAssessedGradeLevelDescriptor: +- **studentAssessments.jsont**: `{{whenAssessedGradeLevelDescriptor}}` +-Here there is an assumption made the exam is taken by prekindergarten/preschool students : uri://ed-fi.org/GradeLevelDescriptor#Prekindergarten/Preschool +### educationOrganizationAssociationTypeDescriptor: +- **educationOrganizationAssociationTypeDescriptor**: `uri://ed-fi.org/EducationOrganizationAssociationTypeDescriptor#Administration` + +### Other mapping decisions +- using **DistrictCode** vs **SchoolCode** for the studentAssessmentEducationOrganizationAssociation entity. + diff --git a/assessments/KRAssessment/data/KRA_dictionary.csv b/assessments/KRAssessment/data/KRA_dictionary.csv new file mode 100644 index 00000000..030d8a99 --- /dev/null +++ b/assessments/KRAssessment/data/KRA_dictionary.csv @@ -0,0 +1,37 @@ +Field,Definition,Possible Values (or info about values),Further explanation of value(s) +SchoolYear,This year identifies the school year during which the testing occurred. ,Will most likely be a year from 2015 up through 2023,"For school year 2022-2023, 2023 will be the value displayed." +DistrictCode,"This is the district's four-digit code. Depending on how the data are formatted, leading zeros may or may not be present.",Values only go up to four digits and never include alpha characters., +SchoolCode,School number that is unique for schools within a district,Typically a number that is up to three digits (alpha characters are never present).,"Note that in Ed-Fi, when school numbers/codes in South Carolina are places with district codes, leading zeros on the school numbers are included. So for example, if a school's code is 22 for district 3333, then if these two codes are ever combined, the new code would be 3333022." +Assessment,"Name of the assessment (in this case ""KRA"")",KRA,The full name of the KRA is the Kindergarten Readiness Assessment. Context on this assessment is available on this SC Department of Education web page: https://ed.sc.gov/tests/elementary/kindergarten-readiness-assessment-kra/ +PS_StudentID,This is a district-specific ID for the student. It is unique for the student within a district but is not unique within the state.,Alpha characters will never be included,This identifier can be used to identify a unique student within a district. +StudentSUNS,This is a state-specific ID for the student. It is unique for ths student within the state.,Alpha characters will never be included,This is the best identifier for matching students across the state. +FirstName,Student's First Name,Some names may include special characters, +LastName,Student's Last Name,Some names may include special characters, +MiddleName,Student's Middle Name,"Some names may include special characters. Also, note that there may be quite a few NULL values.", +DOB,Student's Date of Birth,, +ManuallyEntered,This is presumably indicating information about how scores were notated. This field may not be needed but is being included for now.,, +DateTaken,This is the date the assessment was taken.,, +TestAdministration,This is the calendar year during which the test was administered.,Will most likely be a year from 2014 up through 2023.,"For school year 2022-2023, the Test Administration year could be either 2022 or 2023 but will most likely be 2022 for KRA." +OverallScore,This is the overall scale score that determines a student's performance level.,any value from 202 to 298 with the minimum score being 202 and the maximum score being 298,"The θ scale is centered at 0 and extends in both positive and negative directions. Applying a linear transformation to the θ scale is desirable because it allows for a scale that is more easily understood by stakeholders and that does not include negative values. The θ scores determined by IRT scaling are converted using a linear transformation such that the scale score = 12* θ + 250. The KRA scale is truncated at θ scores of ±4, which results in minimum and maximum scale scores of 202 and 298, respectively. " +,,270-298,corresponds to the Performance Level of Demonstrating Readiness +,,258-269,corresponds to the Performance Level of Approaching Readiness +,,202-257,corresponds to the Performance Level of Emerging Readiness +PerformanceLevelDescriptor,A value determined by the KRA overall scale score.,, +,,Demonstrating Readiness,"A student demonstrates foundational skills and +behaviors that prepare him/her for a curriculum +based on kindergarten standards." +,,Approaching Readiness,"A student demonstrates some foundational +skills and behaviors that prepare him/her for a +curriculum based on kindergarten standards." +,,Emerging Readiness,"A student demonstrates minimal foundational +skills and behaviors that prepare him/her for a +curriculum based on kindergarten standards." +Status,Completion status,, +,,Complete,All assessment items were completed +,,Some items were not complete,Some assessment items were not completed +,,Complete with NS,All assessment items were completed although there was a no show +,,All items are not complete,Not all assessment items were completed +SFScore,Social Foundations Score,Scale Score range of 202-298,"The domain scale scores are reported using the same scale as the overall score. Caution must be taken when interpreting domain scores, as these scores are determined by a subset of the items that compose the entire KRA, meaning that they provide a less-precise measure of ability." +LLScore,Language and Literacy Score,Scale Score range of 202-298,"The domain scale scores are reported using the same scale as the overall score. Caution must be taken when interpreting domain scores, as these scores are determined by a subset of the items that compose the entire KRA, meaning that they provide a less-precise measure of ability." +MAScore,Mathematics Score,Scale Score range of 202-298,"The domain scale scores are reported using the same scale as the overall score. Caution must be taken when interpreting domain scores, as these scores are determined by a subset of the items that compose the entire KRA, meaning that they provide a less-precise measure of ability." +PDScore,Physical Well-Being and Motor Development Score,Scale Score range of 202-298,"The domain scale scores are reported using the same scale as the overall score. Caution must be taken when interpreting domain scores, as these scores are determined by a subset of the items that compose the entire KRA, meaning that they provide a less-precise measure of ability." diff --git a/assessments/KRAssessment/data/KRA_sample_file_deidentified.csv b/assessments/KRAssessment/data/KRA_sample_file_deidentified.csv new file mode 100644 index 00000000..f661238c --- /dev/null +++ b/assessments/KRAssessment/data/KRA_sample_file_deidentified.csv @@ -0,0 +1,29 @@ +SchoolYear,DistrictCode,SchoolCode,Assessment,PS_StudentID,StudentSUNS,FirstName,LastName,MiddleName,DOB,ManuallyEntered,DateTaken,TestAdministration,OverallScore,PerformanceLevelDescriptor,Status,SFScore,LLScore,MAScore,PDScore,,,,, +2023,8881,23,KRA ,114501,2847365761,FirstName_01,LastName_01,MiddleName_01,7/28/2017,0,8/15/2022,2022,264,Approaching Readiness,Complete,272,261,259,278,,,,, +2023,8881,33,KRA ,114502,2847365762,FirstName_02,LastName_02,MiddleName_02,10/27/2016,0,8/15/2022,2022,288,Demonstrating Readiness,Complete,298,286,277,293,,,,, +2023,8881,33,KRA ,114503,2847365763,FirstName_03,LastName_03,MiddleName_03,11/4/2016,0,8/15/2022,2022,270,Demonstrating Readiness,Complete,268,280,264,263,,,,, +2023,8881,39,KRA ,114504,2847365764,FirstName_04,LastName_04,MiddleName_04,2/22/2017,0,8/15/2022,2022,268,Approaching Readiness,Complete,265,269,264,293,,,,, +2023,8881,24,KRA ,114505,2847365765,FirstName_05,LastName_05,MiddleName_05,11/28/2016,0,8/15/2022,2022,272,Demonstrating Readiness,Complete,298,267,264,293,,,,, +2023,8881,17,KRA ,114506,2847365766,FirstName_06,LastName_06,MiddleName_06,7/10/2017,0,8/15/2022,2022,257,Emerging Readiness,Complete,262,258,255,255,,,,, +2023,8881,17,KRA ,114507,2847365767,FirstName_07,LastName_07,MiddleName_07,5/13/2017,0,8/15/2022,2022,211,Emerging Readiness,Complete,202,202,225,216,,,,, +2023,8881,17,KRA ,114508,2847365768,FirstName_08,LastName_08,MiddleName_08,3/2/2017,0,8/15/2022,2022,262,Approaching Readiness,Complete,278,255,257,293,,,,, +2023,8881,53,KRA ,114509,2847365769,FirstName_09,LastName_09,MiddleName_09,10/22/2016,1,8/15/2022,2022,265,Approaching Readiness,Complete,278,256,264,293,,,,, +2023,8881,11,KRA ,114510,2847365770,FirstName_10,LastName_10,MiddleName_10,4/7/2017,0,8/15/2022,2022,245,Emerging Readiness,Complete,249,248,234,248,,,,, +2023,8881,40,KRA ,114511,2847365771,FirstName_11,LastName_11,MiddleName_11,6/3/2017,0,8/15/2022,2022,261,Approaching Readiness,Complete,268,261,253,278,,,,, +2023,8881,45,KRA ,114512,2847365772,FirstName_12,LastName_12,MiddleName_12,7/25/2017,0,8/15/2022,2022,256,Emerging Readiness,Complete,272,252,247,269,,,,, +2023,8881,30,KRA ,114513,2847365773,FirstName_13,LastName_13,MiddleName_13,3/14/2017,0,8/15/2022,2022,263,Approaching Readiness,Complete,298,256,255,293,,,,, +2023,8881,36,KRA ,114514,2847365774,FirstName_14,LastName_14,MiddleName_14,8/31/2017,0,8/15/2022,2022,268,Approaching Readiness,Complete,287,269,259,269,,,,, +2023,8881,16,KRA ,114515,2847365775,FirstName_15,LastName_15,MiddleName_15,8/9/2017,0,8/15/2022,2022,296,Demonstrating Readiness,Complete,298,294,286,293,,,,, +2023,8881,24,KRA ,114516,2847365776,FirstName_16,LastName_16,MiddleName_16,4/5/2017,0,8/15/2022,2022,270,Demonstrating Readiness,Complete,262,271,277,278,,,,, +2023,8881,36,KRA ,114517,2847365777,FirstName_17,LastName_17,MiddleName_17,1/25/2017,0,8/15/2022,2022,277,Demonstrating Readiness,Complete,298,277,264,293,,,,, +2023,8881,15,KRA ,114518,2847365778,FirstName_18,LastName_18,MiddleName_18,8/16/2017,0,8/15/2022,2022,255,Emerging Readiness,Complete,242,264,257,251,,,,, +2023,8881,46,KRA ,114519,2847365779,FirstName_19,LastName_19,MiddleName_19,9/18/2016,0,8/15/2022,2022,247,Emerging Readiness,Complete,249,249,247,240,,,,, +2023,8881,44,KRA ,114520,2847365780,FirstName_20,LastName_20,MiddleName_20,9/8/2016,0,8/15/2022,2022,247,Emerging Readiness,Complete,262,222,243,269,,,,, +2023,8881,57,KRA ,114521,2847365781,FirstName_21,LastName_21,MiddleName_21,5/4/2017,1,8/15/2022,2022,277,Demonstrating Readiness,Complete,298,269,277,293,,,,, +2023,8881,57,KRA ,114522,2847365782,FirstName_22,LastName_22,MiddleName_22,4/8/2017,0,8/15/2022,2022,271,Demonstrating Readiness,Complete,287,269,267,269,,,,, +2023,8881,14,KRA ,114523,2847365783,FirstName_23,LastName_23,MiddleName_23,11/22/2016,0,8/15/2022,2022,271,Demonstrating Readiness,Complete,298,269,262,278,,,,, +2023,8881,44,KRA ,114524,2847365784,FirstName_24,LastName_24,MiddleName_24,9/24/2016,0,8/15/2022,2022,277,Demonstrating Readiness,Complete,268,294,277,269,,,,, +2023,8881,58,KRA ,114525,2847365785,FirstName_25,LastName_25,MiddleName_25,2/18/2017,0,8/15/2022,2022,261,Approaching Readiness,Complete,262,259,257,293,,,,, +2023,8881,45,KRA ,114526,2847365786,FirstName_26,LastName_26,MiddleName_26,8/9/2017,0,8/15/2022,2022,259,Approaching Readiness,Some items were not complete,269,253,255,289,,,,, +2023,8881,6,KRA ,114527,2847365787,FirstName_27,LastName_27,MiddleName_27,4/5/2017,0,8/15/2022,2022,202,Emerging Readiness,Complete with NS,202,202,202,202,,,,, +2023,8881,20,KRA ,114528,2847365788,FirstName_28,LastName_28,MiddleName_28,1/25/2017,0,8/15/2022,2022,NULL,Did Not Participate,All items are not complete,NULL,NULL,NULL,NULL,,,,, diff --git a/assessments/KRAssessment/earthmover.yml b/assessments/KRAssessment/earthmover.yml new file mode 100644 index 00000000..392db391 --- /dev/null +++ b/assessments/KRAssessment/earthmover.yml @@ -0,0 +1,289 @@ +version: 2 +config: + output_dir: ${OUTPUT_DIR} + memory_limit: 1GB + state_file: ./runs.csv + show_graph: False + show_stacktrace: true + parameter_defaults: + STUDENT_ID_NAME: 'edFi_studentUniqueID' # default to the column added by the apply_xwalk package of student ID xwalking feature edFi_studentUniqueID + POSSIBLE_STUDENT_ID_COLUMNS: 'PS_StudentID,StudentSUNS' + DESCRIPTOR_NAMESPACE: uri://ed-fi.org + +sources: + input: + file: ${INPUT_FILE} + header_rows: 1 + assessments: + file: ./seeds/assessments.csv + header_rows: 1 + objectiveAssessments: + file: ./seeds/objectiveAssessments.csv + header_rows: 1 + assessmentReportingMethodDescriptors: + file: ./seeds/assessmentReportingMethodDescriptors.csv + header_rows: 1 + + gradeLevelDescriptors: + file: ./seeds/gradeLevelDescriptors.csv + header_rows: 1 + performanceLevelDescriptors: + file: ./seeds/performanceLevelDescriptors.csv + header_rows: 1 + assessmentCategoryDescriptors: + file: ./seeds/assessmentCategoryDescriptors.csv + header_rows: 1 + +transformations: + input: + source: $sources.input + operations: [] + + + performance_level_descriptors: + source: $sources.performanceLevelDescriptors + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + - operation: keep_columns + columns: + - assessmentIdentifier + - namespace + - codeValue + - minimumScore + - maximumScore + performance_levels: + + source: $sources.performanceLevelDescriptors + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + - operation: keep_columns + columns: + - assessmentIdentifier + - codeValue + - namespace + - minimumScore + - maximumScore + - operation: add_columns + columns: + performance_json: > + {%raw-%} + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#PerformanceLevel", + "performanceLevelDescriptor": "{{ namespace }}/PerformanceLevelDescriptor#{{ codeValue }}", + "minimumScore": "{{ minimumScore | string }}", + "maximumScore": "{{ maximumScore | string }}" + } + {%-endraw%} + - operation: modify_columns + columns: + performance_json: "{%raw%}{{performance_json | replace('\n', '')-}}{%endraw%}" + - operation: group_by + group_by_columns: + - assessmentIdentifier + create_columns: + performance_json: agg(performance_json,,) + + + performance_level_max_min_score: + + source: $sources.performanceLevelDescriptors + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + - operation: keep_columns + columns: + - assessmentIdentifier + - minimumScore + - maximumScore + - operation: group_by + group_by_columns: + - assessmentIdentifier + create_columns: + maximumScore: max(maximumScore) + minimumScore: min(minimumScore) + + grade_level_descriptors: + source: $sources.gradeLevelDescriptors + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + - operation: add_columns + columns: + grade_json: > + {%raw-%} + { + "gradeLevelDescriptor": "{{namespace}}#{{codeValue}}" + } + {%-endraw%} + - operation: modify_columns + columns: + grade_json: "{%raw%}{{grade_json | replace('\n', '')-}}{%endraw%}" + - operation: group_by + group_by_columns: + - assessmentIdentifier + create_columns: + grade_json: agg(grade_json,,) + + + + stage_assessments: + source: $sources.assessments + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + + prepare_assessments: + source: $transformations.stage_assessments + operations: + - operation: join + sources: + - $transformations.grade_level_descriptors + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: join + sources: + - $transformations.performance_levels + + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: join + sources: + - $transformations.performance_level_max_min_score + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: add_columns + columns: + descriptorNamespace: ${DESCRIPTOR_NAMESPACE} + + + prepare_objective_assessments: + source: $sources.objectiveAssessments + operations: + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + - operation: join + sources: + - $transformations.performance_levels + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: join + sources: + - $transformations.performance_level_max_min_score + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: add_columns + columns: + descriptorNamespace: ${DESCRIPTOR_NAMESPACE} + + + + prepare_student_assessments: + source: $transformations.input + operations: + - operation: duplicate_columns + columns: + ${STUDENT_ID_NAME}: studentUniqueId + + - operation: rename_columns + columns: + SchoolCode: schoolId + - operation: add_columns + columns: + assessmentIdentifier: "KRA" + administrationDate: "{%raw%}{{ DateTaken }}{%endraw%}" + descriptorNamespace: ${DESCRIPTOR_NAMESPACE} + - operation: join + sources: + - $transformations.stage_assessments + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + + - operation: add_columns + columns: + studentAssessmentIdentifier: "{% raw %}{{ md5(assessmentIdentifier ~ '-' ~ studentUniqueId ~ '-' ~ DateTaken) }}{% endraw %}" + - operation: join + sources: + - $transformations.performance_level_descriptors + join_type: inner + left_key: assessmentIdentifier + right_key: assessmentIdentifier + - operation: add_columns + columns: + PerformanceLevel_SFScore: "{%raw%}{% if SFScore >= minimumScore and SFScore <= maximumScore %}{{ codeValue }}{% endif %}{%endraw%}" + PerformanceLevel_LLScore: "{%raw%}{% if LLScore >= minimumScore and LLScore <= maximumScore %}{{ codeValue }}{% endif %}{%endraw%}" + PerformanceLevel_MAScore: "{%raw%}{% if MAScore >= minimumScore and MAScore <= maximumScore %}{{ codeValue }}{% endif %}{%endraw%}" + PerformanceLevel_PDScore: "{%raw%}{% if PDScore >= minimumScore and PDScore <= maximumScore %}{{ codeValue }}{% endif %}{%endraw%}" + - operation: filter_rows + query: "(PerformanceLevel_SFScore != 'Unknown' ) or (PerformanceLevel_LLScore != 'Unknown') or (PerformanceLevel_MAScore != 'Unknown') or (PerformanceLevel_PDScore != 'Unknown' )" + behavior: include + - operation: rename_columns + columns: + namespace_x: namespace + - operation: group_by + group_by_columns: + - studentAssessmentIdentifier + - assessmentIdentifier + - studentUniqueId + - administrationDate + - SchoolYear + - namespace + - whenAssessedGradeLevelDescriptor + - OverallScore + - PerformanceLevelDescriptor + - SFScore + - LLScore + - MAScore + - PDScore + - schoolId + - descriptorNamespace + create_columns: + PerformanceLevel_SFScore: agg(PerformanceLevel_SFScore,) + PerformanceLevel_LLScore: agg(PerformanceLevel_LLScore,) + PerformanceLevel_MAScore: agg(PerformanceLevel_MAScore,) + PerformanceLevel_PDScore: agg(PerformanceLevel_PDScore,) + + + +destinations: + assessments: + source: $transformations.prepare_assessments + template: ./templates/assessments.jsont + extension: jsonl + objectiveAssessments: + source: $transformations.prepare_objective_assessments + template: ./templates/objectiveAssessments.jsont + extension: jsonl + studentAssessments: + source: $transformations.prepare_student_assessments + template: ./templates/studentAssessments.jsont + extension: jsonl + studentAssessmentEducationOrganizationAssociations: + source: $transformations.prepare_student_assessments + template: ./templates/studentAssessmentEducationOrganizationAssociations.jsont + extension: jsonl + assessmentReportingMethodDescriptors: + source: $sources.assessmentReportingMethodDescriptors + template: ./templates/assessmentReportingMethodDescriptors.jsont + extension: jsonl + performanceLevelDescriptors: + source: $sources.performanceLevelDescriptors + template: ./templates/performanceLevelDescriptors.jsont + extension: jsonl + assessmentCategoryDescriptors: + source: $sources.assessmentCategoryDescriptors + template: ./templates/assessmentCategoryDescriptors.jsont + extension: jsonl \ No newline at end of file diff --git a/assessments/KRAssessment/image.png b/assessments/KRAssessment/image.png new file mode 100644 index 00000000..d5142776 Binary files /dev/null and b/assessments/KRAssessment/image.png differ diff --git a/assessments/KRAssessment/lightbeam.yml b/assessments/KRAssessment/lightbeam.yml new file mode 100644 index 00000000..9a0f82f8 --- /dev/null +++ b/assessments/KRAssessment/lightbeam.yml @@ -0,0 +1,29 @@ +state_dir: ~/.lightbeam/ +data_dir: ./output/ +edfi_api: + base_url: ${EDFI_API_BASE_URL} + version: 3 + mode: district_specific + year: ${API_YEAR} + client_id: ${EDFI_API_CLIENT_ID} + client_secret: ${EDFI_API_CLIENT_SECRET} +connection: + pool_size: 8 + timeout: 60 + num_retries: 10 + backoff_factor: 1.5 + retry_statuses: [429, 500, 502, 503, 504] + verify_ssl: True +count: + separator: \, +fetch: + page_size: 100 +validate: + methods: + - schema # checks that payloads conform to the Swagger definitions from the API + - descriptors # checks that descriptor values are either locally-defined or exist in the remote API + - uniqueness # checks that local payloads are unique by the required property values + #- references # checks that references resolve, either locally or in the remote API +force_delete: True +log_level: INFO +show_stacktrace: True \ No newline at end of file diff --git a/assessments/KRAssessment/output/.gitkeep b/assessments/KRAssessment/output/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/assessments/KRAssessment/seeds/assessmentCategoryDescriptors.csv b/assessments/KRAssessment/seeds/assessmentCategoryDescriptors.csv new file mode 100644 index 00000000..e8abe58e --- /dev/null +++ b/assessments/KRAssessment/seeds/assessmentCategoryDescriptors.csv @@ -0,0 +1,2 @@ +codeValue,description,namespace,shortDescription +Readiness,Assessment designed to measure readiness for a particular grade or subject.,uri://ed.sc.gov/KRA/AssessmentCategoryDescriptor,Readiness \ No newline at end of file diff --git a/assessments/KRAssessment/seeds/assessmentReportingMethodDescriptors.csv b/assessments/KRAssessment/seeds/assessmentReportingMethodDescriptors.csv new file mode 100644 index 00000000..399be931 --- /dev/null +++ b/assessments/KRAssessment/seeds/assessmentReportingMethodDescriptors.csv @@ -0,0 +1,3 @@ +codeValue,description,namespace,shortDescription +ScaleScore,The assessment is reported using a scale score.,uri://ed.sc.gov/KRA,Scale Score +PerformanceLevel,The assessment is reported using performance levels.,uri://ed.sc.gov/KRA,Performance Level \ No newline at end of file diff --git a/assessments/KRAssessment/seeds/assessments.csv b/assessments/KRAssessment/seeds/assessments.csv new file mode 100644 index 00000000..b5bb315a --- /dev/null +++ b/assessments/KRAssessment/seeds/assessments.csv @@ -0,0 +1,2 @@ +assessmentIdentifier,assessmentTitle,namespace,assessmentCategoryDescriptor,academicSubjectDescriptor,whenAssessedGradeLevelDescriptor +KRA,Kindergarten Readiness Assessment,uri://ed.sc.gov/KRA,uri://ed.sc.gov/KRA/AssessmentCategoryDescriptor#Readiness,uri://ed.sc.gov/AcademicSubjectDescriptor#Composite,uri://ed.sc.gov/GradeLevelDescriptor#0 \ No newline at end of file diff --git a/assessments/KRAssessment/seeds/gradeLevelDescriptors.csv b/assessments/KRAssessment/seeds/gradeLevelDescriptors.csv new file mode 100644 index 00000000..90495e23 --- /dev/null +++ b/assessments/KRAssessment/seeds/gradeLevelDescriptors.csv @@ -0,0 +1,2 @@ +codeValue,description,namespace,shortDescription +0,Kindergarten,uri://ed.sc.gov/GradeLevelDescriptor,Kindergarten \ No newline at end of file diff --git a/assessments/KRAssessment/seeds/objectiveAssessments.csv b/assessments/KRAssessment/seeds/objectiveAssessments.csv new file mode 100644 index 00000000..953f333a --- /dev/null +++ b/assessments/KRAssessment/seeds/objectiveAssessments.csv @@ -0,0 +1,5 @@ +identificationCode,assessmentIdentifier,namespace,description,codeValue +SFScore,KRA,uri://ed.sc.gov,Social Foundations,Social Foundations +LLScore,KRA,uri://ed.sc.gov,Language and Literacy,English/Language Arts +MAScore,KRA,uri://ed.sc.gov,Mathematics,Mathematics +PDScore,KRA,uri://ed.sc.gov,Physical Well-Being and Motor Development,Physical Well-Being \ No newline at end of file diff --git a/assessments/KRAssessment/seeds/performanceLevelDescriptors.csv b/assessments/KRAssessment/seeds/performanceLevelDescriptors.csv new file mode 100644 index 00000000..199dc4e7 --- /dev/null +++ b/assessments/KRAssessment/seeds/performanceLevelDescriptors.csv @@ -0,0 +1,4 @@ +codeValue,description,namespace,shortDescription,minimumScore,maximumScore +Demonstrating Readiness,A student demonstrates foundational skills and behaviors that prepare him/her for a curriculum based on kindergarten standards.,uri://ed.sc.gov/KRA,Demonstrating Readiness,270,298 +Approaching Readiness,A student demonstrates some foundational skills and behaviors that prepare him/her for a curriculum based on kindergarten standards.,uri://ed.sc.gov/KRA,Approaching Readiness,258,269 +Emerging Readiness,A student demonstrates minimal foundational skills and behaviors that prepare him/her for a curriculum based on kindergarten standards.,uri://ed.sc.gov/KRA,Emerging Readiness,202,257 \ No newline at end of file diff --git a/assessments/KRAssessment/templates/assessmentCategoryDescriptors.jsont b/assessments/KRAssessment/templates/assessmentCategoryDescriptors.jsont new file mode 100644 index 00000000..3b14f627 --- /dev/null +++ b/assessments/KRAssessment/templates/assessmentCategoryDescriptors.jsont @@ -0,0 +1,6 @@ +{ + "codeValue": "{{codeValue}}", + "description": "{{description}}", + "namespace": "{{namespace}}", + "shortDescription": "{{shortDescription}}" + } \ No newline at end of file diff --git a/assessments/KRAssessment/templates/assessmentReportingMethodDescriptors.jsont b/assessments/KRAssessment/templates/assessmentReportingMethodDescriptors.jsont new file mode 100644 index 00000000..17d4e930 --- /dev/null +++ b/assessments/KRAssessment/templates/assessmentReportingMethodDescriptors.jsont @@ -0,0 +1,6 @@ +{ + "codeValue": "{{codeValue}}", + "description": "{{description}}", + "namespace": "{{namespace}}/AssessmentReportingMethodDescriptor", + "shortDescription": "{{shortDescription}}" + } \ No newline at end of file diff --git a/assessments/KRAssessment/templates/assessments.jsont b/assessments/KRAssessment/templates/assessments.jsont new file mode 100644 index 00000000..9cb43aac --- /dev/null +++ b/assessments/KRAssessment/templates/assessments.jsont @@ -0,0 +1,20 @@ +{ + "assessmentIdentifier": "{{assessmentIdentifier}}", + "assessmentTitle": "{{assessmentTitle}}", + "assessmentFamily": "{{assessmentIdentifier}}", + "namespace": "{{namespace}}", + "assessedGradeLevels": [{{grade_json}}], + "assessmentCategoryDescriptor": "{{assessmentCategoryDescriptor}}", + "academicSubjects": [ {"academicSubjectDescriptor":"{{academicSubjectDescriptor}}"}], + "scores": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "uri://{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "minimumScore":"{{ minimumScore }}", + "maximumScore":"{{ maximumScore }}" + } + ], + "performanceLevels": [ + {{ performance_json }} + ] +} \ No newline at end of file diff --git a/assessments/KRAssessment/templates/objectiveAssessments.jsont b/assessments/KRAssessment/templates/objectiveAssessments.jsont new file mode 100644 index 00000000..cd75b816 --- /dev/null +++ b/assessments/KRAssessment/templates/objectiveAssessments.jsont @@ -0,0 +1,22 @@ +{ + "identificationCode": "{{identificationCode}}", + + "assessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "namespace": "{{namespace}}" + }, + "description": "{{description}}", + "academicSubjectDescriptor": "{{namespace}}/AcademicSubjectDescriptor#{{codeValue}}", + "scores": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/KRA/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "minimumScore":"{{ minimumScore | string }}", + "maximumScore":"{{ maximumScore | string}}" + } + ], + "performanceLevels": [ + {{ performance_json }} + + ] + } \ No newline at end of file diff --git a/assessments/KRAssessment/templates/performanceLevelDescriptors.jsont b/assessments/KRAssessment/templates/performanceLevelDescriptors.jsont new file mode 100644 index 00000000..5b054061 --- /dev/null +++ b/assessments/KRAssessment/templates/performanceLevelDescriptors.jsont @@ -0,0 +1,6 @@ +{ + "codeValue": "{{codeValue}}", + "description": "{{description}}", + "namespace": "{{namespace}}/PerformanceLevelDescriptor", + "shortDescription": "{{shortDescription}}" + } \ No newline at end of file diff --git a/assessments/KRAssessment/templates/studentAssessmentEducationOrganizationAssociations.jsont b/assessments/KRAssessment/templates/studentAssessmentEducationOrganizationAssociations.jsont new file mode 100644 index 00000000..5ff535e5 --- /dev/null +++ b/assessments/KRAssessment/templates/studentAssessmentEducationOrganizationAssociations.jsont @@ -0,0 +1,15 @@ + { + "educationOrganizationAssociationTypeDescriptor": "{{descriptorNamespace}}/EducationOrganizationAssociationTypeDescriptor#Administration", + "educationOrganizationReference": { + "educationOrganizationId": {{ schoolId }} + }, + "schoolYearTypeReference": { + "schoolYear": {{SchoolYear}} + }, + "studentAssessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier }}", + "namespace": "{{ namespace }}", + "studentAssessmentIdentifier": "{{ studentAssessmentIdentifier }}", + "studentUniqueId": "{{ studentUniqueId }}" + } + } \ No newline at end of file diff --git a/assessments/KRAssessment/templates/studentAssessments.jsont b/assessments/KRAssessment/templates/studentAssessments.jsont new file mode 100644 index 00000000..031f270c --- /dev/null +++ b/assessments/KRAssessment/templates/studentAssessments.jsont @@ -0,0 +1,132 @@ + {% if OverallScore is not none and OverallScore | length %} +{ + "studentAssessmentIdentifier": "{{studentAssessmentIdentifier}}", + "assessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "namespace": "{{namespace}}" + }, + "reportedSchoolReference": { + "schoolId": {{schoolId}} + + }, + "schoolYearTypeReference": { + "schoolYear": {{SchoolYear | int}} + }, + "studentReference": { + "studentUniqueId": "{{studentUniqueId}}" + }, + "administrationDate": "{{administrationDate}}", + "whenAssessedGradeLevelDescriptor": "{{whenAssessedGradeLevelDescriptor}}", + "scoreResults": [ + {% if OverallScore is not none and OverallScore | length %} + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "result": "{{OverallScore}}" + } + {% endif %} + ], + "performanceLevels": [ + {% set perf_levels = [] %} + + {% if PerformanceLevelDescriptor is not none and PerformanceLevelDescriptor | length %} + {% set _ = perf_levels.append([PerformanceLevelDescriptor, 'PerformanceLevel']) %} + {% endif %} + + + {% for perf_level in perf_levels %} + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#{{perf_level[1]}}", + "performanceLevelDescriptor": "{{namespace}}/PerformanceLevelDescriptor#{{perf_level[0]}}", + "performanceLevelMet": true + } {% if not loop.last %},{% endif %} + {% endfor %} + ], + "studentObjectiveAssessments": [ + + { + "objectiveAssessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "identificationCode": "SFScore", + "namespace": "{{namespace}}" + }, + "scoreResults": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "result": "{{ SFScore }}" + } + ], + "performanceLevels": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#PerformanceLevel", + "performanceLevelDescriptor": "{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevel_SFScore}}", + "performanceLevelMet": true + } + ] + }, + { + "objectiveAssessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "identificationCode": "LLScore", + "namespace": "{{namespace}}" + }, + "scoreResults": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "result": "{{ LLScore }}" + } + ], + "performanceLevels": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#PerformanceLevel", + "performanceLevelDescriptor": "{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevel_LLScore}}", + "performanceLevelMet": true + } + ] + }, + { + "objectiveAssessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "identificationCode": "MAScore", + "namespace": "{{namespace}}" + }, + "scoreResults": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "result": "{{ MAScore }}" + } + ], + "performanceLevels": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#PerformanceLevel", + "performanceLevelDescriptor": "{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevel_MAScore}}", + "performanceLevelMet": true + } + ] + }, + { + "objectiveAssessmentReference": { + "assessmentIdentifier": "{{assessmentIdentifier}}", + "identificationCode": "PDScore", + "namespace": "{{namespace}}" + }, + "scoreResults": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#ScaleScore", + "resultDatatypeTypeDescriptor": "{{descriptorNamespace}}/ResultDatatypeTypeDescriptor#Integer", + "result": "{{ PDScore }}" + } + ], + "performanceLevels": [ + { + "assessmentReportingMethodDescriptor": "{{namespace}}/AssessmentReportingMethodDescriptor#PerformanceLevel", + "performanceLevelDescriptor": "{{namespace}}/PerformanceLevelDescriptor#{{PerformanceLevel_PDScore}}", + "performanceLevelMet": true + } + ] + } ] +} +{% endif %} \ No newline at end of file