Skip to content

AUDIT: ErgoMoCap REBA Calculator

date: 2026-05-26 (ISO-8601)

As of now 5/6 body_parts files have some issue to fix that is altering the normal result of REBA score..

and starting from the main REBA_calculator.py file:

inside the calculate_frame_reba_from_degs() function

    # TODO adjust for load score
    # If load < 11 lbs. : +0
    # If load 11 to 22 lbs. : +1
    # If load > 22 lbs.: +2
    # Adjust: If shock or rapid build up of force: add +1


    # TODO adjust for coupling/activity score
    # Coupling/Activity Score Adjustments (to be added to Score B):
    # Well fitting Handle and mid rang power grip, good: +0
    # Acceptable but not ideal hand hold or coupling
    # acceptable with another body part, fair: +1
    # Hand hold not acceptable but possible, poor: +2
    # No handles, awkward, unsafe with any body part,
    # Unacceptable: +3
    coupling_score = 0  # Placeholder for coupling/activity score (to be integrated with actual task data)
    adjusted_score_b = score_b + coupling_score

neck_reba.py

Apparently no issues.

legs_reba.py

Balance Check

As of now the balance is not checked and count as always stable. BIAS: UNDERESTIMATION OF RISK

TODOs

| TODO | /calculators/reba_calculator/body_parts/leg_reba.py:68 | remove with REBA FIX #1 | | TODO | /calculators/reba_calculator/body_parts/leg_reba.py:70 | implement a way to chek legs balance | | TODO | /calculators/reba_calculator/body_parts/leg_reba.py:89 | REBA FIX #1 implement logic here for leg score Balanced/Unbalanced! |

trunk_reba.py

Torsion Score is always 0

    trunk_torsion_score = 0

    total: int = trunk_flex_score + trunk_side_score + trunk_torsion_score

As of now the trunk_torsion_score is ALWAYS 0. BIAS: UNDERESTIMATION OF RISK

TODOs

    trunk_torsion_degree = trunk_degrees[
            2
        ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES

Because in the freemocap_adapter generated degrees # SPINE_ROTATION_TORSION = 0 and thats because FreeMoCap spine rotation isn't always in base CSV (joint_angles.csv), so it default to 0 check freemocap_adapter.py for implementation

    trunk_torsion_score = 0  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES

| TODO | /calculators/reba_calculator/body_parts/trunk_reba.py:71 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/trunk_reba.py:76 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/trunk_reba.py:99 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/trunk_reba.py:116 | REBA FIX #2 Find a way to calculate the trunk_torsion_degree or ALERT USER ABOUT THIS.. |

lower_arm_reba.py

write tests but seems to be working

TODOs

| TODO | /calculators/reba_calculator/body_parts/lower_arm_reba.py:42 | test numba and activate | | TODO | /calculators/reba_calculator/body_parts/lower_arm_reba.py:60 | remove or implement this chekc if works with numba | | TODO | /calculators/reba_calculator/body_parts/lower_arm_reba.py:71 | important test for the degrees as this are calculated from a saggital perspective and the sign can be inconsistent based on the direction of movement or sensor placement. |

upper_arm_reba.py

Shoulder Rise Penalty

As of now the shoulder rise degree is always zero, so NO Penalty for shoulder rise > 90° BIAS: UNDERESTIMATION OF RISK

Also person_leaning and arm_supported are ALWAYS 0 so the Arm Supported/ Leaning Penalty is 0 BIAS: UNDERESTIMATION OF RISK

    # R/L Shoulder rise usually mapped from abduction or separate landmarks
    # degs[12] = 0
    # degs[13] = 0


    right_shoulder_rise = upper_arm_degrees[
        4
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
    left_shoulder_rise = upper_arm_degrees[
        5
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES

    arm_supported: bool = False  # TODO EFFECTIVELY ALWAYS FALSE !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
    person_leaning: bool = False  # TODO EFFECTIVELY ALWAYS FALSE !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES


    # Arm Supported/ Leaning Penalty
    if arm_supported or person_leaning:
        # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
        support_leaning_score = -1


        # Shoulder Rise Penalty
    if right_shoulder_rise > 90.0 or left_shoulder_rise > 90.0:
        # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
        upper_arm_shoulder_rise = 1

TODOs

| TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:78 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:81 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:90 | this is almost all WRONG! should check the degrees, now it consider normal position at 0 | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:122 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:125 | EFFECTIVELY ALWAYS FALSE !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:126 | EFFECTIVELY ALWAYS FALSE !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:130 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/upper_arm_reba.py:154 | REBA FIX #3 FIX ALL THIS FILE IS A MESS OF COURSE IS THE ONE CAUSING THE MOST PORBLEMS IN MY CALCULATOR!! |

wrist_reba.py

Wrist score is MAX 2 (not max 3)

2 scores: wrist_side_bend_score + wrist_torsion_score ARE ALWAYS 0!

    total: int = wrist_flex_score + wrist_side_bend_score + wrist_torsion_score
    wrist_reba_score = min(total, 3)  # Capped at 3 for wrist (as per REBA guidelines)

As of now only the wrist_flex_score is changing the basic score from starting value of 1. BIAS: UNDERESTIMATION OF RISK

    right_side = wrist_degrees[
        2
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
    left_side = wrist_degrees[
        3
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
    right_twist = wrist_degrees[
        4
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
    left_twist = wrist_degrees[
        5
    ]  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES



    # Side Bending (Deviation) Penalty
    if (
        right_side != 0.0 or left_side != 0.0
    ):  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
        wrist_side_bend_score = 1

    # Torsion (Twist) Penalty
    if (
        right_twist != 0.0 or left_twist != 0.0
    ):  # TODO EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES
        wrist_torsion_score = 1

    total: int = wrist_flex_score + wrist_side_bend_score + wrist_torsion_score
    wrist_reba_score = min(total, 3)  # Capped at 3 for wrist (as per REBA guidelines)

SHOULD NOTIFY THE USER THAT IS NOT GREATAT WRIST ANGLE CALCULATION.. BUT IT SHOULD BE SIMPLER TO IJMPL;EMNT USING THE HOLISITC MODELS:.

TODOs

| TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:74 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:77 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:80 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:83 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:105 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:111 | EFFECTIVELY ALWAYS 0 !! MUST IMPLEMENT IN FMC ADAPTER TO GET REAL VALUES | | TODO | /calculators/reba_calculator/body_parts/wrist_reba.py:128 | SHOULD NOTIFY THE USER THAT IS NOT GREATAT WRIST ANGLE CALCULATION.. BUT IT SHOULD |


For development timelines and feature tracking, please refer to the global project roadmap.