# Build a Medical Data Validator - Step 44

**URL:** <https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316>\
**Category:** Curriculum Help\
**Tags:** python\
**Created:** [May 30, 2026, 10:14pm UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316 "2026-05-30T22:14:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![kareenajethwani](https://avatars.discourse-cdn.com/v4/letter/k/5f8ce5/32.png) [@kareenajethwani](https://forum.freecodecamp.org/u/kareenajethwani)\
**Post date:** [May 30, 2026, 10:14pm UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316/1 "2026-05-30T22:14:35Z")

</div>

### Tell us what’s happening:

in validate medical records there are no errors at last step yet is says to check terminal

### Your code so far

```py
import re

medical_records = [
    {
        'patient_id': 'P1001',
        'age': 34,
        'gender': 'Female',
        'diagnosis': 'Hypertension',
        'medications': ['Lisinopril'],
        'last_visit_id': 'V2301',
    },
    {
        'patient_id': 'p1002',
        'age': 47,
        'gender': 'male',
        'diagnosis': 'Type 2 Diabetes',
        'medications': ['Metformin', 'Insulin'],
        'last_visit_id': 'v2302',
    },
    {
        'patient_id': 'P1003',
        'age': 29,
        'gender': 'female',
        'diagnosis': 'Asthma',
        'medications': ['Albuterol'],
        'last_visit_id': 'v2303',
    },
    {
        'patient_id': 'p1004',
        'age': 56,
        'gender': 'Male',
        'diagnosis': 'Chronic Back Pain',
        'medications': ['Ibuprofen', 'Physical Therapy'],
        'last_visit_id': 'V2304',
    }
]

def find_invalid_records(
    patient_id, age, gender, diagnosis, medications, last_visit_id
):
    constraints = {
        'patient_id': isinstance(patient_id, str)
        and re.fullmatch('p\d+', patient_id, re.IGNORECASE),
        'age': isinstance(age, int) and age >= 18,
        'gender': isinstance(gender, str) and gender.lower() in ('male', 'female'),
        'diagnosis': isinstance(diagnosis, str) or diagnosis is None,
        'medications': isinstance(medications, list)
        and all([isinstance(i, str) for i in medications]),
        'last_visit_id': isinstance(last_visit_id, str)
        and re.fullmatch('v\d+', last_visit_id, re.IGNORECASE)
    }
    return [key for key, value in constraints.items() if not value]

def validate(data):
    is_sequence = isinstance(data, (list, tuple))

    if not is_sequence:
        print('Invalid format: expected a list or tuple.')
        return False
        
    is_invalid = False
    key_set = set(
        ['patient_id', 'age', 'gender', 'diagnosis', 'medications', 'last_visit_id']
    )

    for index, dictionary in enumerate(data):
        if not isinstance(dictionary, dict):
            print(f'Invalid format: expected a dictionary at position {index}.')
            is_invalid = True
            continue

        if set(dictionary.keys()) != key_set:
            print(
                f'Invalid format: {dictionary} at position {index} has missing and/or invalid keys.'
            )
            is_invalid = True
            continue

        invalid_records = find_invalid_records(**dictionary)

# User Editable Region

        
        for key in invalid_records:
            print(f"Unexpected format '{key}: {val}' at position {index}.")
            is_invalid = True

# User Editable Region

    if is_invalid:
        return False
    print('Valid format.')
    return True

validate(medical_records)

```

### Your browser information:

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36`

### Challenge Information:

Build a Medical Data Validator - Step 44

> **[freeCodeCamp.org](https://www.freecodecamp.org/learn/python-v9/workshop-medical-data-validator/step-44)**
>
> Learn to Code — For Free

GitHub Link: [freeCodeCamp/curriculum/challenges/english/blocks/workshop-medical-data-validator/68529fb26c581f13e901de3a.md at main · freeCodeCamp/freeCodeCamp · GitHub](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/challenges/english/blocks/workshop-medical-data-validator/68529fb26c581f13e901de3a.md)

---

<div class="post-metadata">

**Author:** ![dhess](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/dhess/32/406235_2.png) [@dhess](https://forum.freecodecamp.org/u/dhess)\
**Post date:** [May 30, 2026, 10:20pm UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316/2 "2026-05-30T22:20:54Z")

</div>

Hi @kareenajethwani,

Whenever you see the error, “Your code raised an error before any tests could run.”, check your browser’s console. There you will see this error message: `NameError: name 'val' is not defined`

Happy coding

---

<div class="post-metadata">

**Author:** ![MarcoRosselDev](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/marcorosseldev/32/392322_2.png) [@MarcoRosselDev](https://forum.freecodecamp.org/u/MarcoRosselDev)\
**Post date:** [June 16, 2026, 7:44am UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316/3 "2026-06-16T07:44:08Z")

</div>

You need to iterate through the key elements of the elements that return invalid values.  
Since you already have the index from the chained iteration, you only need the value, or val in this case.  
For val, we need to access the dictionary[kay] using square bracket notation.  
I hope this helps.

```python
code removed by moderator

```

---

<div class="post-metadata">

**Author:** ![ILM](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/ilm/32/363239_2.png) [@ILM](https://forum.freecodecamp.org/u/ILM)\
**Post date:** [June 16, 2026, 9:17am UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316/4 "2026-06-16T09:17:38Z")

</div>

hi @MarcoRosselDev

It is great that you solved the challenge, but instead of posting your full working solution, it is best to stay focused on answering the original poster’s question(s) and help guide them with hints and suggestions to solve their own issues with the challenge. [How to Help Someone with Their Code Using the Socratic Method](https://www.freecodecamp.org/news/how-to-help-someone-with-their-code-using-the-socratic-method/)

We are trying to cut back on the number of spoiler solutions found on the forum and instead focus on helping other campers with their questions and definitely not posting full working solutions.

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/freecodecamp/original/3X/e/1/e1c433102e34b46dfaa3e15d13ab9a514b127078.svg) [@system](https://forum.freecodecamp.org/u/system)\
**Post date:** [July 14, 2026, 9:18am UTC](https://forum.freecodecamp.org/t/build-a-medical-data-validator-step-44/790316/5 "2026-07-14T09:18:29Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
