library "Prognosi-MRC-by-eGFR-e-albumina" version '4' using FHIR version '4.0.0' include "FHIRHelpers" version '4.0.0' called FHIRHelpers codesystem "LOINC": 'http://loinc.org' valueset "Albumin in Blood, Plasma, or Serum VS": 'https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1222.151' code "Glomerular filtration rate/1.73 sq M.predicted code": 'LP31686-6' from "LOINC" display 'Glomerular filtration rate/1.73 sq M.predicted' code "Albumin [Mass/volume] in Serum or Plasma code": '1751-7' from "LOINC" display 'Albumin [Mass/volume] in Serum or Plasma' parameter MeasurementPeriod default Interval[@2013-01-01, @2023-01-01) context Patient // pinco pallo define "Albumina <30mg/g": QuantityValue(MostRecent([Observation: "Albumin in Blood, Plasma, or Serum VS"])) > 0 'mg/g' and QuantityValue(MostRecent([Observation: "Albumin in Blood, Plasma, or Serum VS"])) < 30 'mg/g' // commento albumina A2 define "baseElement Albumina >=30 e <=300": QuantityValue(MostRecent([Observation: "Albumin in Blood, Plasma, or Serum VS"])) >= 30 'mg/g' and QuantityValue(MostRecent([Observation: "Albumin in Blood, Plasma, or Serum VS"])) <= 300 'mg/g' // commento albumina A3 define "baseElement Albumina >300mg/g": QuantityValue(MostRecent([Observation: "Albumin in Blood, Plasma, or Serum VS"])) > 300 'mg/g' // commento egfr G1 define "baseElement Glomerular filtration rate/1.73 sq M.predicted >= 90": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) >= 90 'mL/min/m2' // commento egfr G2 define "baseElement Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) >= 60 'mL/min/m2' and QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) <= 89 'mL/min/m2' // commento egfr G3a define "baseElement Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) >= 45 'mL/min/m2' and QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) <= 59 'mL/min/m2' // commento egfr G3b define "baseElement Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) >= 30 'mL/min/m2' and QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) <= 44 'mL/min/m2' // commento egfr G4 define "baseElement Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) >= 15 'mL/min/m2' and QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) <= 29 'mL/min/m2' // commento egfr G5 define "baseElement Glomerular filtration rate/1.73 sq M.predicted <15": QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) > 0 'mL/min/m2' and QuantityValue(MostRecent([Observation: "Glomerular filtration rate/1.73 sq M.predicted code"])) < 15 'mL/min/m2' define "Albumin [Mass/volume] in Serum or Plasma (test)": QuantityValue(MostRecent([Observation: "Albumin [Mass/volume] in Serum or Plasma code"])) >= 0 'mg/g' and QuantityValue(MostRecent([Observation: "Albumin [Mass/volume] in Serum or Plasma code"])) <= 300 'mg/g' define "pm40": AgeInYears() >= 1 and AgeInYears() <= 39 define "Glomerular filtration rate/1.73 sq M.predicted >= 90": "baseElement Glomerular filtration rate/1.73 sq M.predicted >= 90" // pinco pallo define "baseElement Albumina <30mg/g": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89" // pinco pallo define "baseElement Albumina <30mg/g_1": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59" // pinco pallo define "baseElement Albumina <30mg/g_2": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44": "baseElement Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44" // pinco pallo define "baseElement Albumina <30mg/g_3": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29" // pinco pallo define "baseElement Albumina <30mg/g_4": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted <15": "baseElement Glomerular filtration rate/1.73 sq M.predicted <15" // pinco pallo define "baseElement Albumina <30mg/g_5": "Albumina <30mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >= 90_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted >= 90" define "Albumina >=30 e <=300": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89" define "Albumina >=30 e <=300_1": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59" define "Albumina >=30 e <=300_2": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44" define "Albumina >=30 e <=300_3": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29" define "Albumina >=30 e <=300_4": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted <15_1": "baseElement Glomerular filtration rate/1.73 sq M.predicted <15" define "Albumina >=30 e <=300_5": "baseElement Albumina >=30 e <=300" define "Glomerular filtration rate/1.73 sq M.predicted >= 90_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted >= 90" define "Albumina >300mg/g": "baseElement Albumina >300mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89" define "Albumina >300mg/g_1": "baseElement Albumina >300mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59" define "Albumina >300mg/g_2": "baseElement Albumina >300mg/g" define "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44" define "Albumina >300mg/g_3": "baseElement Albumina >300mg/g" define "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29" define "Albumina >300mg/g_4": "baseElement Albumina >300mg/g" define "Glomerular filtration rate/1.73 sq M.predicted <15_2": "baseElement Glomerular filtration rate/1.73 sq M.predicted <15" define "Albumina >300mg/g_5": "baseElement Albumina >300mg/g" define "MeetsInclusionCriteria": "Albumin [Mass/volume] in Serum or Plasma (test)" define "MeetsExclusionCriteria": "pm40" define "Verde G1-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >= 90" and "baseElement Albumina <30mg/g" define "Verde G2-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89" and "baseElement Albumina <30mg/g_1" define "Gialla G3a-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59" and "baseElement Albumina <30mg/g_2" define "Arancio G3b-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44" and "baseElement Albumina <30mg/g_3" define "Rosso G4-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29" and "baseElement Albumina <30mg/g_4" define "Rosso scuro G5-A1": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted <15" and "baseElement Albumina <30mg/g_5" define "Gialla G1-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >= 90_1" and "Albumina >=30 e <=300" define "Gialla G2-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89_1" and "Albumina >=30 e <=300_1" define "Arancio G3a-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59_1" and "Albumina >=30 e <=300_2" define "Rosso G3b-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44_1" and "Albumina >=30 e <=300_3" define "Rosso G4-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29_1" and "Albumina >=30 e <=300_4" define "Rosso scuro G5-A2": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted <15_1" and "Albumina >=30 e <=300_5" define "Arancio G1-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >= 90_2" and "Albumina >300mg/g" define "Arancio G2-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=60 e <=89_2" and "Albumina >300mg/g_1" define "Rosso G3a-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=45 e <=59_2" and "Albumina >300mg/g_2" define "Rosso G3b-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted>=30 e <=44_2" and "Albumina >300mg/g_3" define "Rosso G4-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted >=15 e <=29_2" and "Albumina >300mg/g_4" define "Rosso scuro G5-A3": if "InPopulation" is not true then null else "Glomerular filtration rate/1.73 sq M.predicted <15_2" and "Albumina >300mg/g_5" define "InPopulation": "MeetsInclusionCriteria" and not "MeetsExclusionCriteria" define "Recommendation": if "Verde G1-A1" then 'Controlli annuali (Normale G1-A1)' else if "Verde G2-A1" then 'Controlli annuali (Verde G2-A1)' else if "Gialla G1-A2" then 'Cautela e controlli almeno una volta all\'anno (Gialla G1-A2)' else if "Gialla G2-A2" then 'Cautela e controlli almeno una volta all\'anno (Gialla G2-A2)' else if "Gialla G3a-A1" then 'Cautela e controlli almeno una volta all anno (Gialla G3a-A1)' else if "Arancio G1-A3" then 'Controlli due volte all anno (Arancio G1-A3)' else if "Arancio G2-A3" then 'Controlli due volte all\'anno (Arancio G2-A3)' else if "Arancio G3a-A2" then 'Controlli due volte all anno (Arancio G3a-A2)' else if "Arancio G3b-A1" then 'Controlli due volte all anno (Arancio G3b-A1)' else if "Rosso G3a-A3" then 'Controlli fino a tre volte l anno (Rosso G3a-A3)' else if "Rosso G3b-A2" then 'Controlli fino a tre volte l anno (Rosso G3b-A2)' else if "Rosso G3b-A3" then 'Controlli fino a tre volte l anno (Rosso G3b-A3)' else if "Rosso G4-A1" then 'Controlli fino a tre volte l anno (Rosso G4-A1)' else if "Rosso G4-A2" then 'Controlli fino a tre volte l anno (Rosso G4-A2)' else if "Rosso G4-A3" then 'Controlli fino a tre volte l anno (Rosso G4-A3)' else if "Rosso scuro G5-A1" then 'Monitoraggio fino a 4 volte o più all anno (almeno ogni 1-3 mesi) (Rosso scuro G5-A1)' else if "Rosso scuro G5-A2" then 'Monitoraggio fino a 4 volte o più all anno (almeno ogni 1-3 mesi) (Rosso scuro G5-A2)' else if "Rosso scuro G5-A3" then 'Monitoraggio fino a 4 volte o più all anno (almeno ogni 1-3 mesi) (Rosso scuro G5-A3)' else null define "Rationale": if "Verde G1-A1" then null else if "Verde G2-A1" then null else if "Gialla G1-A2" then null else if "Gialla G2-A2" then null else if "Gialla G3a-A1" then null else if "Arancio G1-A3" then null else if "Arancio G2-A3" then null else if "Arancio G3a-A2" then null else if "Arancio G3b-A1" then null else if "Rosso G3a-A3" then null else if "Rosso G3b-A2" then null else if "Rosso G3b-A3" then null else if "Rosso G4-A1" then null else if "Rosso G4-A2" then null else if "Rosso G4-A3" then null else if "Rosso scuro G5-A1" then null else if "Rosso scuro G5-A2" then null else if "Rosso scuro G5-A3" then null else null define "Links": if "Verde G1-A1" then null else if "Verde G2-A1" then null else if "Gialla G1-A2" then null else if "Gialla G2-A2" then null else if "Gialla G3a-A1" then null else if "Arancio G1-A3" then null else if "Arancio G2-A3" then null else if "Arancio G3a-A2" then null else if "Arancio G3b-A1" then null else if "Rosso G3a-A3" then null else if "Rosso G3b-A2" then null else if "Rosso G3b-A3" then null else if "Rosso G4-A1" then null else if "Rosso G4-A2" then null else if "Rosso G4-A3" then null else if "Rosso scuro G5-A1" then null else if "Rosso scuro G5-A2" then null else if "Rosso scuro G5-A3" then null else null define "Errors": if "Recommendation" is null then {'Raccomandazione non trovata'} else {''} define function MostRecent(ObsList List): Last(ObsList O sort by Coalesce( (effective as FHIR.dateTime).value, (effective as FHIR.instant).value, (effective as FHIR.Period)."end".value, (effective as FHIR.Period)."start".value, issued.value) ) define function QuantityValue(Obs Observation): FHIRHelpers.ToQuantity(Obs.value as FHIR.Quantity)