All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.imsweb.algorithms.napiia.NapiiaAlgorithm Maven / Gradle / Ivy

/*
 * Copyright (C) 2020 Information Management Services, Inc.
 */
package com.imsweb.algorithms.napiia;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.imsweb.algorithms.AbstractAlgorithm;
import com.imsweb.algorithms.AlgorithmInput;
import com.imsweb.algorithms.AlgorithmOutput;
import com.imsweb.algorithms.Algorithms;
import com.imsweb.algorithms.internal.Utils;

import static com.imsweb.algorithms.Algorithms.FIELD_COUNTRY_BIRTH;
import static com.imsweb.algorithms.Algorithms.FIELD_NAME_BIRTH_SURNAME;
import static com.imsweb.algorithms.Algorithms.FIELD_NAME_FIRST;
import static com.imsweb.algorithms.Algorithms.FIELD_NAME_LAST;
import static com.imsweb.algorithms.Algorithms.FIELD_NAPIIA;
import static com.imsweb.algorithms.Algorithms.FIELD_NAPIIA_NEEDS_REVIEW;
import static com.imsweb.algorithms.Algorithms.FIELD_NAPIIA_REVIEW_REASON;
import static com.imsweb.algorithms.Algorithms.FIELD_RACE1;
import static com.imsweb.algorithms.Algorithms.FIELD_RACE2;
import static com.imsweb.algorithms.Algorithms.FIELD_RACE3;
import static com.imsweb.algorithms.Algorithms.FIELD_RACE4;
import static com.imsweb.algorithms.Algorithms.FIELD_RACE5;
import static com.imsweb.algorithms.Algorithms.FIELD_SEX;
import static com.imsweb.algorithms.Algorithms.FIELD_SPAN_HISP_OR;

public class NapiiaAlgorithm extends AbstractAlgorithm {

    public NapiiaAlgorithm() {
        super(Algorithms.ALG_NAPIIA, NapiiaUtils.ALG_NAME, NapiiaUtils.ALG_VERSION);

        _url = "https://www.naaccr.org/analysis-and-data-improvement-tools/#NHAPIIA";

        _inputFields.add(Algorithms.getField(FIELD_SPAN_HISP_OR));
        _inputFields.add(Algorithms.getField(FIELD_NAME_LAST));
        _inputFields.add(Algorithms.getField(FIELD_NAME_BIRTH_SURNAME));
        _inputFields.add(Algorithms.getField(FIELD_NAME_FIRST));
        _inputFields.add(Algorithms.getField(FIELD_COUNTRY_BIRTH));
        _inputFields.add(Algorithms.getField(FIELD_RACE1));
        _inputFields.add(Algorithms.getField(FIELD_RACE2));
        _inputFields.add(Algorithms.getField(FIELD_RACE3));
        _inputFields.add(Algorithms.getField(FIELD_RACE4));
        _inputFields.add(Algorithms.getField(FIELD_RACE5));
        _inputFields.add(Algorithms.getField(FIELD_SEX));

        _outputFields.add(Algorithms.getField(FIELD_NAPIIA));
        _outputFields.add(Algorithms.getField(FIELD_NAPIIA_NEEDS_REVIEW));
        _outputFields.add(Algorithms.getField(FIELD_NAPIIA_REVIEW_REASON));
    }

    @Override
    public AlgorithmOutput execute(AlgorithmInput input) {
        NapiiaInputPatientDto inputDto = new NapiiaInputPatientDto();
        inputDto.setNapiiaInputPatientDtoList(new ArrayList<>());

        Map patientMap = Utils.extractPatient(input);
        for (int i = 0; i < Utils.extractTumors(patientMap, true).size(); i++) {
            NapiiaInputRecordDto dto = new NapiiaInputRecordDto();
            dto.setSpanishHispanicOrigin((String)patientMap.get(FIELD_SPAN_HISP_OR));
            dto.setBirthplaceCountry((String)patientMap.get(FIELD_COUNTRY_BIRTH));
            dto.setSex((String)patientMap.get(FIELD_SEX));
            dto.setRace1((String)patientMap.get(FIELD_RACE1));
            dto.setRace2((String)patientMap.get(FIELD_RACE2));
            dto.setRace3((String)patientMap.get(FIELD_RACE3));
            dto.setRace4((String)patientMap.get(FIELD_RACE4));
            dto.setRace5((String)patientMap.get(FIELD_RACE5));
            dto.setNameLast((String)patientMap.get(FIELD_NAME_LAST));
            dto.setNameBirthSurname((String)patientMap.get(FIELD_NAME_BIRTH_SURNAME));
            dto.setNameFirst((String)patientMap.get(FIELD_NAME_FIRST));
            inputDto.getNapiiaInputPatientDtoList().add(dto);
        }

        NapiiaResultsDto result = NapiiaUtils.computeNapiia(inputDto);

        Map outputPatient = new HashMap<>();
        outputPatient.put(FIELD_NAPIIA, result.getNapiiaValue());
        outputPatient.put(FIELD_NAPIIA_NEEDS_REVIEW, Boolean.TRUE.equals(result.getNeedsHumanReview()) ? "1" : "0");
        outputPatient.put(FIELD_NAPIIA_REVIEW_REASON, result.getReasonForReview());

        return AlgorithmOutput.of(outputPatient);

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy