Lasse Studion cb5e81077e Fix
2023-03-29 11:39:37 +02:00

86 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import tabula
import re
import streamlit as st
def get_substance(x):
'Returns the substance of the drug.'
l = x.split('\r')
s = re.search(r'\w+', l[-1]).group()
return s.lower()
# Title and explainer.
st.title('Medicinkollen 🕵️')
st.markdown('''
🧑‍⚕️ *Läkare ska ha koll på dina recept så att inga mediciner "krockar" men
ibland finns inte den tiden i sjukvården.*
💊 *Det finns rapporter om att exempelvis äldre människor ibland har en lång
lista med läkemedel där inte alla kombinationer är bra.*
🧑‍💻 *Genom att logga in på [1177.se](https://1177.se)
och gå till läkemedelstjänster kan du ladda hem en PDF där det syns vilka
läkemedel du har.*
🔎 *Den PDF\:en kan du sedan ladda upp här för att få information från
[Janusmed](https://janusmed.se) - som drivs av bl.a. Region Stockholm med eventuella
varningar.*
😌 *Ingen information sparas i den här tjänsten.*
''')
show_example = st.button('Visa exempel på hur din PDF ska se ut')
if show_example:
st.image('example_list.jpg', 'Exempel på läkemedelslista.')
# Get the pdf with prescriptions from the user.
pdf = st.file_uploader(label='Ladda upp din läkemedelslista', type='pdf')
if pdf:
substances = []
drugs = []
# Extract table from prescription pdf.
area = [111, 20, 528, 822] # Coordinates for the corners (up, left, down, right).
df_list = tabula.read_pdf(pdf, pages='all', area=area, lattice=True)
for df in df_list:
if len(df.columns) != 6:
continue
df.columns = ['Uthämtat datum', 'Uthämtat läkemedel', 'Användning', 'Förskrivet av', 'Uthämtad mängd', 'Läkemedelsgrupp']
df.dropna(axis=0, inplace=True)
df['substance'] = df['Uthämtat läkemedel'].apply(lambda x: get_substance(x))
df['Uthämtat läkemedel'] = df['Uthämtat läkemedel'].apply(lambda x: x.split('\r')[0])
# Create list of precripted substances.
substances += df.substance.tolist()
drugs += df['Uthämtat läkemedel'].tolist()
# Show the list of drugs.
text_drugs = '''
De här läkemedlen hittar vi i din PDF. Om du saknar något kan du lägga till det genom att
följa länken till Janusmed nedan eller direkt i förhandsvisningen.\n '''
for i in drugs:
text_drugs += f'+ **{i}**\n '
st.markdown(text_drugs)
# Create list of substance ids.
substances_id_list = []
for substance in substances:
# Get data for the substance.
data = requests.get(f'https://janusmed.se/api/search/input/{substance}').json()
data = data[0] # Only first is interesting(?) when searching on substances.
# Add the substance ID to the list of substances.
substance_id = data['nslId'] #TODO Kan finnas flera!?
substances_id_list.append(substance_id)
# Create URL for janusmed.se
substances_id_url_list = '&nslIds='.join(substances_id_list)
url = 'https://janusmed.se/interaktioner?nslIds=' + substances_id_url_list
# Show text with URL to janusmed.se.
st.markdown(f'''
Följ [den här länken]({url}) för att se om dina
läkemedel går bra ihop eller om det kan finnas något
du skulle kunna prata med din läkare om. Nedan kan du se en förhandsvisning.
*Observera att sökningen är gjord på de aktiva substanserna i dina läkemedel så namnen
stämmer kanske inte överens med läkemedelsnamnen i listan ovan.*
''')
# Preview janusmed.se in an iframe.
st.components.v1.iframe(url, height=600, scrolling=True)