EMA-CO

 # -*- coding: utf-8 -*-

print("EMACO para neoplasias trofoblásticas gestacionales de alto riesgo, y coriocarcinomas")

Talla = input("Estatura en centímetros?>>")

Talla = float(Talla)

Peso = input("Peso en kilogramos?>>")

Peso = float(Peso)

def unidades(x):

    if x == 0:

        unidad = "cero"

    if x == 1:

        unidad = "un"

    if x == 2:

        unidad = "dos"

    if x == 3:

        unidad = "tres"

    if x == 4:

        unidad = "cuatro"

    if x == 5:

        unidad = "cinco"

    if x == 6:

        unidad = "seis"

    if x == 7:

        unidad = "siete"

    if x == 8:

        unidad = "ocho"

    if x == 9:

        unidad = "nueve"

    return unidad


def teens(x):

    if x == 0:

        teenname = "diez"

    if x == 1:

        teenname = "once"

    if x == 2:

        teenname = "doce"

    if x == 3:

        teenname = "trece"

    if x == 4:

        teenname = "catorce"

    if x == 5:

        teenname = "quince"

    return teenname



def tens(x):

    if x == 1:

        tensname = "diez"

    if x == 2:

        tensname = "veinte"

    if x == 3:

        tensname = "treinta"

    if x == 4:

        tensname = "cuarenta"

    if x == 5:

        tensname = "cincuenta"

    if x == 6:

        tensname = "sesenta"

    if x == 7:

        tensname = "setenta"

    if x == 8:

        tensname = "ochenta"

    if x == 9:

        tensname = "noventa"

    return tensname


def tercia(num):

    numero=str(num)

    if len(numero) == 1:

        numero='00'+numero

    if len(numero) == 2:

        numero='0'+numero

    a=int(numero[0])

    b=int(numero[1])

    c=int(numero[2])

#       print a, b, c

    if a == 0:

        if b == 0:

            resultado=unidades(c)

            return resultado

        elif b == 1:

            if c >= 0 and c <= 5:

                resultado = teens(c)

                return resultado

            elif c >= 6 and c <= 9:

                resultado = tens(b)+' y '+unidades(c)

                return resultado

        elif b == 2:

            if c == 0:

                resultado = 'veinte'

                return resultado

            elif c > 0 and c <= 9:

                resultado ='veinti '+unidades(c)

                return resultado

        elif b >=3 and b <= 9:

            if c == 0:

                resultado = tens(b)

                return resultado

            if c >= 1 and c <= 9:

                resultado = tens(b)+' y '+unidades(c)

                return resultado

    if a == 1:

        if b == 0:

            if c == 0:

                resultado = 'cien'

                return resultado

            elif c > 0 and c <= 9:

                resultado ='ciento '+unidades(c)

                return resultado

        elif  b == 1:

            if c >= 0 and c <= 5:

                resultado = 'ciento '+teens(c)

                return resultado

            elif c >= 6 and c <= 9:

                resultado = 'ciento '+tens(b)+' y '+unidades(c)

                return resultado

        elif b == 2:

            if c == 0:

                resultado = 'ciento veinte'

                return resultado

            elif c > 0 and c <= 9:

                resultado ='ciento veinti '+unidades(c)

                return resultado

        elif b >= 3 and b <= 9:

            if c == 0:

                resultado = 'ciento '+tens(b)

                return resultado

            elif c > 0 and c <= 9:

                resultado = 'ciento '+tens(b)+ ' y '+unidades(c

)

                return resultado


    elif a >= 2 and a <= 9:

        if a == 5:

            prefix='quinientos '

        elif a == 7:

            prefix='setecientos '

        elif a == 9:

            prefix='novecientos '

        else:

            prefix=unidades(a)+' cientos '

        if b == 0:

            if c == 0:

                resultado = prefix

                return resultado

            elif c > 0 and c <= 9:

                resultado = prefix+unidades(c)

                return resultado

        elif b == 1:

            if c >= 0 and c <= 5:

                resultado = prefix+teens(c)

                return resultado

            elif c >= 6 and c <= 9:

                resultado = prefix+tens(b)+' y '+unidades(c)

                return resultado

        elif b == 2:

            if c == 0:

                resultado = prefix+' veinte'

                return resultado

            elif c > 0 and c <= 9:

                resultado = prefix+' veinti '+unidades(c)

                return resultado

        elif b >= 3 and b <= 9:

            if c == 0:

                resultado = prefix+tens(b)

                return resultado

            elif c > 0 and c <= 9:

                resultado = prefix+tens(b)+' y '+unidades(c)

                return resultado

def main(num):

    result=''

    numero=str(num)

    if len(numero) == 1:

        numero='00000000'+numero

    if len(numero) == 2:

        numero='0000000'+numero

    if len(numero) == 3:

        numero='000000'+numero

    if len(numero) == 4:

        numero='00000'+numero

    if len(numero) == 5:

        numero='0000'+numero

    if len(numero) == 6:

        numero='000'+numero

    if len(numero) == 7:

        numero='00'+numero

    if len(numero) == 8:

        numero='0'+numero

    posicion=1

    for i in [0,3,6]:

        var=numero[i]+numero[i+1]+numero[i+2]

        if int(var) != 0:

            res=tercia(var)

            if i == 0:

                result=res+" millones "

            elif i == 3:

                result=result+res+" mil "

            elif i == 6:

                result=result+res

    return result 


# Superficie corporal (BSA)

def f_BSA(Ta, Pe):

    # Calculo de la superficie corporal utilizando

    # de estatura en cms, y kg de peso

    BSA = (0.007184 * ((Ta)**0.725)) * (Pe ** (0.425))

    return BSA


def f_dosis_BSA(Dosis, BSA, Porcentaje):

    # Calculo de la dosis por m2 de superficie corporal,

    # e intensidad relativa en porcentaje

    f_dosis_BSA = Dosis * BSA * (Porcentaje/100)

    return f_dosis_BSA


def f_dosis_Kg(Dosis, Peso, Porcentaje):

    # Calculo de la dosis por m2 de superficie corporal,

    # e intensidad relativa en porcentaje

    f_dosis_Kg = Dosis * Peso * (Porcentaje/100)  

    return f_dosis_Kg


def f_numero_ampollas (Presentacion, DosisTotal, NumeroDeAplicacionesCiclo):

    # NTAA = numerototaldeampollasrequerida

    NTAA = float (DosisTotal/Presentacion)

    if int(NTAA) != NTAA:

        NTAA = int(NTAA)+1

    NTAA = NTAA * NumeroDeAplicacionesCiclo

    return NTAA


def f_protocolo_droga_BSA (Droga1, DiaAdministracion1, ViaAdministracion1, Posologia1, Unidades1, Dosis1, PorcentajeDosis1, NumeroDeAplicacionesCiclo1, Presentacion1, Comentario1):

    DosisTotal1 = f_dosis_BSA(Dosis1, SuperficieCorporal , PorcentajeDosis1)

    DosisTotal1 = round(DosisTotal1,2)

  

    NumeroDeAmpollasCiclo1 = f_numero_ampollas (Presentacion1, DosisTotal1, NumeroDeAplicacionesCiclo1)

    StrDroga1 = Droga1 + " " + Posologia1 + " " + str(Presentacion1)+ " " + Unidades1 + " "

    StrDroga1 = StrDroga1 + "# " + str(int(NumeroDeAmpollasCiclo1)) + " (" + main(str(int(NumeroDeAmpollasCiclo1))) + ") " + Posologia1 + ": " + str(DosisTotal1) + " " + str(Unidades1) + " " + " "

    StrDroga1 = StrDroga1 + ViaAdministracion1 

    print(StrDroga1)

    print(Comentario1)


def f_protocolo_droga_ABSOLUTO (Droga1, DiaAdministracion1, ViaAdministracion1, Posologia1, Unidades1, Dosis1, PorcentajeDosis1, NumeroDeAplicacionesCiclo1, Presentacion1, Comentario1):

    DosisTotal1 = Dosis1

    NumeroDeAmpollasCiclo1 = f_numero_ampollas (Presentacion1, DosisTotal1, NumeroDeAplicacionesCiclo1)

    if int(NumeroDeAmpollasCiclo1) ==0:

        NumeroDeAmpollasCiclo1 = 1

    StrDroga1 = Droga1 + " " + Posologia1 + " " + str(Presentacion1)+ " " + Unidades1 + " "

    StrDroga1 = StrDroga1 + "# " + str(int(NumeroDeAmpollasCiclo1)) + " (" + main(str(int(NumeroDeAmpollasCiclo1))) + ") " + Posologia1 +  ": " + str(DosisTotal1) + " " + str(Unidades1) + " " + " "

    StrDroga1 = StrDroga1 + ViaAdministracion1 

    print(StrDroga1)

    print(Comentario1)


def f_protocolo_droga_Kg (Droga1, DiaAdministracion1, ViaAdministracion1, Posologia1, Unidades1, Dosis1, PorcentajeDosis1, NumeroDeAplicacionesCiclo1, Presentacion1, Comentario1):

    DosisTotal1 = f_dosis_Kg(Dosis1, Peso , PorcentajeDosis1)

    NumeroDeAmpollasCiclo1 = f_numero_ampollas (Presentacion1, DosisTotal1, NumeroDeAplicacionesCiclo1)

    StrDroga1 = Droga1 + " " + Posologia1 + " " + str(Presentacion1)+ " " + Unidades1 + " "

    StrDroga1 = StrDroga1 + "# " + str(int(NumeroDeAmpollasCiclo1)) + " (" + main(str(int(NumeroDeAmpollasCiclo1))) + ") " + Posologia1 +  ": " + str(int(DosisTotal1)) + " " + str(Unidades1) + " " + " "

    StrDroga1 = StrDroga1 + ViaAdministracion1 

    print(StrDroga1)

    print(Comentario1)

SuperficieCorporal = f_BSA(Talla, Peso)


print("Los efectos adversos relacionados con el tratamiento son: náuseas y vómito, debilidad y fatiga, dolores en manos y piés por afectación de los nervios, inflamación de las mucosas caída de cabello, disminución de las defensas con riesgo de infección y muerte. La quimioterapia interfiere con la cicatrización, y se puede asociar a riesgo de sangrado, trombosis o coágulos.  La quimioterapia puede causar infertilidad transitoria o permanente. Además, se debe evitar el embarazo durante la quimioterapia pues puede causar malformaciones en el feto.\nLa mortalidad estimada por el tratamiento se estima en 1 por cada 100 pacientes tratados. \n La explicación de los efectos adversos asociados a la quimioterapia, y algunas estrategias de cómo mitigarlos es complementada por enfermería oncológica, con la enfermera oncóloga Mónica Ríos. Favor consultar por urgencias en caso de fiebre mayor de 38.5 grados o mayor de 38 grados por más de una hora; También consultar por urgencias si: convulsiones; vómito o diarrea con sangre; más de 10 episodios de vomito en menos de 24 horas; más de 10 episodios de diarrea en 24 horas; pérdida del conocimiento; caída de la presion con caída (por debajo de 90/60);  letargo (no se despierta a pesar de que lo estimulen) o cambios en el comportamiento, visión doble; pérdida de la fuerza de alguna extremidad que le impida o dificulte moverla; edema o hinchazón en una pierna o brazo que sea muy notoria; dificultad para respirar; tos con sangre de reciente aparición; desaturación (saturación de oxigeno menor de 90%) en paciente sin historia de problemas cardiopulmonares; hinchazón y distensión abdominal que le impidan comer o respirar; dolor abdominal con vómito de materia fecal, dolor abdominal con paro de gases y fecales; dolor abdominal tan severo que impida que le toquen el abdomen; claramente amarillo (ictericia) de reciente aparicion. \n Los teléfonos de contacto son: 511 5791 (responden Claudia o Natalia), en dias habiles de 8 am a 4 pm. Para los días no habiles, llamar al 3137431031 (se prefieren mensajes por Whatsapp). Pueden esperar respuesta el mismo dia si el mensaje se envía antes de las 9 pm (en días hábiles). En caso de emergencia que requiera de respuesta inmediata o en horario distinto, consultar por urgencias sin esperar respuesta. \n En caso de consulta de urgencias, favor ir a las urgencias de la Clinica SOMA, con su historia clinica, los exámenes, y la lista de medicamentos que toma. Debe llevar tambien identificación y los documentos necesarios para que verifiquen que se puede atender por su seguro. Informe que es paciente del doctor Mauricio Lema. En caso de ser hospitalizado en SOMA sera atendido durante su hospitalizacion por los médicos del servicio. Ellos hacen parte del equipo y tienen a su cargo el velar por la salud de mis pacientes durante la hospitalizacion, y se comunican en forma continua con el doctor Lema. \n En caso de consulta de urgencias, favor ir a las urgencias que le indique su asegurador (o de su preferencia si esta no incluye a la clinica SOMA). No olvide llevar su historia clínica, los exámenes, y la lista de medicamentos que toma. Debe llevar tambien identificación y los documentos necesarios para que verifiquen que se puede atender por su seguro. Las decisiones de manejo que se instauren en cualquier institución distinta a SOMA son responsabilidad de dicha institución. Si los médicos tratantes de esa institucion desean contactarme, pueden hacerlo llamando a mi consultorio en días habiles entre las 8 am y 4 pm (al 5115791), o por mensaje al 3137431031 (hasta las 9 pm).\n \n \n")


print("Protocolo: EMACO")

print("Día 1: Actinomycin D 0.5 mg i.v. bolo, Etoposido 100 mg/m2 iv. Metotrexate 300 mg/m2 i.v. Día 2: Actinomycin D 0.5 mg i.v. bolo, Etoposido 100 mg/m2 i.v. Folinato 100 mg intravenoso x4 las horas 24, 30, 48 y 58 después de iniciada la infusión de metotrexate. Día 8: Vincristina 1 mg/m2 i.v. bolo (max. 2mg), Ciclofosfamida 600 mg/m2 i.v.")

print("Se repite ciclo cada 14 días.")

print("Peso: " + str(Peso) + " kg.")

print("Talla: " + str(Talla) + " cms.")

print("Superficie corporal (m2): ")

print(round(f_BSA(Talla, Peso),2))

print()

print("Hidratar con Solución Salina 1000 mL en infusión de 2 horas, días 1 y 2.")

print("Ondansetron ampollas 8 miligramos #8 (ocho): administrar 16 miligramos intravenosos dias 1, 2, 3 y 8")

print("Fosaprepitant ampollas 150 miligramos #2 (dos): administrar 150 miligramos intravenosos dias 1 y 8.")

print("Dexametasona ampollas 4 miligramos #15 (quince): administrar 20 miligramos intravenosos dia 1, 2 y 8.")

print("Dactinomicina ampollas 0.5 miligramos No. 2 (dos): Administrar 0.5 mg intravenoso, en bolo, días 1 y 2")

f_protocolo_droga_BSA("Etopósido", "por 2 dosis / ciclo", "Intravenoso", "ampollas" , "miligramos", 100, 100, 2, 100, "Administrar intravenoso, infusión de 1 hora, dias 1 y 2.")

f_protocolo_droga_BSA("Metotrexate", "por 1 dosis / ciclo", "Intravenoso", "ampollas" , "miligramos", 300, 100, 1, 50, "Administrar intravenoso en 500 mL de Dextrosa en Agua Destilada al 5%, infusión de 12 horas, día 1.")

print("Folinato de calcio, ampollas de 50 miligramos No. 8 (ocho): 100 miligramos intravenosos por 4 dosis así: dosis 1: empezando exactamente a las 24 horas de iniciada la infusión de metotrexate (día 2 en la mañana); dosis 2: repetir a las 4 pm de ese mismo día (día 2 en la tarde); dosis 3: exactamente a las 48 horas de iniciado metotrexate (día 3 en la mañana); dosis 4: a las 4 pm de ese mismo día (día 3 en la tarde) .")

print("Pegfilgrastim ampollas 6 miligramos No. 1 (una): administrar 6 miligramos subcutáneos, día 3.")

print("")

if SuperficieCorporal < 2:

  f_protocolo_droga_BSA("Vincristina", "por 1 dosis / ciclo", "Intravenoso", "ampollas" , "miligramos", 1, 100, 1, 1, "Administrar intravenoso, infusión de 1 hora, dia 1.")

if SuperficieCorporal >= 2:

  print("Vincristina ampollas 1 miligramos No. 2 (dos): Administrar 2 mg intravenoso, día 8")

f_protocolo_droga_BSA("Ciclofosfamida", "por 1 dosis / ciclo", "Intravenoso", "ampollas" , "miligramos", 600, 100, 1, 500, "Administrar intravenoso, día 8.")

print("\n")

print("Ondansetron tabletas 8 miligramos #60 (sesenta): tomar 8 miligramos via oral, cada 12 horas (para nauseas y vomito).")

print("")

print("")

print("Hemograma, creatinina, beta hCG cuantitativa, antes de cada ciclo.")

print("")

print("Pautas de atenuación de dosis")

print("Realizar hemograma antes de día 1: dosis completa si ANC y plaquetas mayor de 1k/mm3 y 100k/mm3, respectivamente. Si ANC entre 0.7k/mm3 y 1k/mm3 o plaquetas entre 75k/mm3 y 100k/mm3: atenuar actinomicina D al 66% de la dosis, otras permanecen igual. Si ANC menor de 0.7k/mm3 o plaquetas menor de 75k/mm3, administrar etopósido 50 mg/m2, día 1, suspender la dactinomicina del ciclo. En el ciclo siguiente se reinicia con al 66% de la dosis inicial")

print("Si hay estomatitis grado 3, atenuar dosis de dactinomicina a 0.4 mg (o la dosis más baja que se calcule basada en el acumulado de toxicidades")

print("En caso de neuropatía, se atenúa la dosis de vincristina al 66% si hay dificultad para abotonarse o escribir, al 50% si hay compromiso motor aparente, y se suspende si el compromiso motor interfiere con la locomoción")

Comentarios