2010-05-27 Developers Conference Call Transcript
Thanks to Jeff Rafter for this transcript!
10:38 k, bwolfe is doing the talking currently
10:38 bwolfe: now lets go find my test patient
10:38 bwolfe: and fill out this form
10:39 bwolfe: so now the patient came in yesterday
10:39 bwolfe: same provider
10:39 bwolfe: weight 51 kg
10:39 bwolfe: we noted their hair color was green
10:39 bwolfe: back on our encounters tab for the patient
10:39 bwolfe: there are two envounters listed and the one for yesterday is collecting a gereen hair color
10:40 bwolfe: the one from before did not have the har color collected so it is blank for that
10:40 bwolfe: the other way to view encounters is from the admin screen if you want to do retrspective
10:40 bwolfe: see all of the meta data here and the concepts
10:40 bwolfe: the weight concept has all of the metadata behind it
10:40 bwolfe: similar to the encounter (but it can be different)
10:40 bwolfe: If I want to change it I can, it should have been 52
10:41 bwolfe: and now it is stored as a value of 52
10:41 >> Shazin is this helping?
10:41 bwolfe: we should check the questions in IRC
10:41 paul: quick overview on concept sets?
10:41 Shazin: yes to some extent
10:42 paul: show the WHO concept sets
10:42 bwolfe: so this is a coded concept
10:42 paul: Click who..
10:42 bwolfe: so this concept is just a quesiton with answers
10:42 bwolfe: so its not really a set of anything
10:42 bwolfe: as paul pointed out the answers are a set
10:43 bwolfe: any answer can be an answer to another concept
10:43 bwolfe: this one is dual purpose
10:43 bwolfe: a concept set is a grouping of concepts
10:43 bwolfe: just a convienince step to show what all is involved
10:43 bwolfe: there can be any number of other concepts involved
10:43 paul: good examples of sets might be antibiotics
10:44 paul: it allows for multiple hierarchies for the pursposes of keeping the dictionary clean
10:44 glenn: are these used for clinical documentation only?
10:44 paul: it is actually used to drive the system and decision logic
10:44 pail: for example in order entry yyou might want groupings of all pain meds
10:45 paul: groupings and classes of drugs might be used for allergy checking
10:45 paul: by setting these up you can check that if someone is on penicillin and you want to know if a drug interacts with that we would check the set
10:46 >> downeym: if you or anyone else wants to add to the transcript no prob
10:46 >> short break rearranging things on the setup
10:46 downeym: not easy for me, my line isn't clear from kenya
10:46 bwolfe: any other questions?
10:46 downeym: no prob
10:46 paul: we should dive into the applications pieces and how they work before the techincal part
10:46 paul: show the administration page
10:47 pauk: we showed the concept dic. and the features of forms and how we get data into the system
10:47 paul: the peices that support that are user role and auth
10:47 paul: there are ways to manage your patients
10:47 paul: the person is the base class and patients and users extend that
10:47 p[aul: encounters are largely to date a form being entered
10:48 paul: that is going to evolve into a goupring of obs
10:48 paul: encounter is just an encounter between the health care person and the patinet
10:48 paul: could be orders, it could be someone made a phone call and talked to the patient so it is going to be broader over time
10:49 paul: obs are the crux where medical observataiotional data goes
10:49 paul: programs simple way to track people like a study or treatment program.. it is a state engine
10:49 paul: hl7 is an intl standard for how data is transmitted between different systems
10:49 paul: communication across diff systems
10:49 aul: for example a lab system might send dtaa to openmrs using hl7
10:50 paul: I have been fighting a battle to get us to not treat global properties like a windows registry
10:50 paul: lots of modules and pieces of openmrs uses global properties
10:50 paul: modular architecture
10:51 paul: sync is a way to sync bwetween systems, html form entry and form entry are multiple ways to get data into the system
10:51 paul: as modules are added a lot of them will add pieces into this adfmin page
10:51 paul: so it is really patient oriented but there is a lot of machinery for supporting that
10:51 paul: like users and locations
10:52 paul: we have modules that add a lot func like getting groups of patients and cohorts etc
10:52 paul: we would like to dive in now about how these are done under the hoodf
10:52 paul: any high level questions?
10:52 >> /me cracks knuckles...
10:52 dairus: you just downloaded a moduke from the repository and installed it?
10:53 paul: this interface is one of the projects... doing some improvedments to how the modules are managed
10:53 paul: a lot of the other projects are going to add modules here to perform their func
10:53 bwolfe: a little history
10:53 >> is that bwolfe talking?
10:54 bwolfe: now you can add a module and get your own code to make chanegs
10:54 bwolfe: they are very powerful and allow you to change any aspect of openmrs
10:54 paul: before we dive technically...
10:54 bwolfe: I loaded this reporting compat module
10:54 bwolfe: it is running on my system
10:54 bwolfe: I can stop it or trash it
10:55 bwolfe: it added this cohgort builder which gives me a fairly rich page to do some interesting queries
10:55 bwolfe: it shows me my patients and shows me the patients I just created
10:55 bwolfe: the module also created a large section on the admin page called reports
10:55 bwolfe: this allows me to create reports on data in my system
10:56 paul: >> talking about how umashantis question
10:56 downeym: A visit between doctor and patient is called encounter
10:56 downeym: within the encounter, there may be multiple observations
10:56 paul: I;m a doctor and I am seeing umashnti as a ptient
10:57 paul: the visit we have is an encounter
10:57 paul: if I sit with you and ask you how many cigarettes did you smoke in the past week
10:57 or how many children do you have
10:57 each one of those questions are observations
10:57 observations are represented by concepts
10:57 the concepts define the specifics of what I am asking
10:57 or you can use different datatypes to get the answer
10:57 does that make sense
10:58 yes an encounter has many obs
10:58 at ampath in kenya we have around 40 obs per encounter
10:58 what location they come to
10:58 what doctor they see
10:58 all of this is there as higher level data
10:58 different vitals and physical findings are all going to be data elements that goi in to the encounter
10:58 ---
10:59 we want to look at concept management
10:59 we want to see how concept are managed
10:59 once we get in and look at a concept and a manager edits it... there is some additional functionality that will be useful
10:59 approx date support is one of the things we want to be able to do
11:00 starting out patient says "I am 42 or 47 years old"
11:00 we want to track the estimated birth date more intelligental
11:00 concept proposal module we have a point in data entry module and they might run into a diagnosis like hair color that has never been put into the system
11:01 we allow for them to propose a concept into the system
11:01 they can record this rare thing and that shows up on a management screen
11:01 that really has only worked with the name of a diagnosis
11:01 we want to be able to do this for a full concept
11:01 there ois a project enahncing the full concepts and proposals system
11:02 remote data transfer is about transfering data between a system like this and a remote system at a clinic with no internet
11:02 de-dup module will sort ourt patients with duplicate identifiers
11:02 genome project is intgrating with another system
11:03 caching support for logic... logic allows us to create higher level or derived options between multiple observations (using calculations)
11:03 that project will make this faster
11:03 question: How to combine a module if the lib file is outdated
11:04 question: and eclipse says the lib file is outdated and there are missing lib files.. how do we deal with that
11:04 answer: in your lib folder you will see the openmrs 1 5 jar. Or in your reference library
11:04 answer: you will need to change that so that it points to the openmrs 1 6
11:05 question: so you are saying you need to modify this
11:05 darius: right click and go to properties and you can change the java build path
11:05 question: will that be okay if I change those lib files?
11:05 question: for example if the module was built for an early version for openrms?
11:06 aswer: you need to tell your module it needs to reference the more recent version (maybe in the config.xml?) you will definitely need to put in the more recent version
11:06 question: thank you
11:06 darius: most modules shoudl be divided in their code to work with diff versions
11:06 darius: that is the case with HTML form entry
11:06 darius: you would update the trunk to make the changes
11:07 darius: the 1.6.x branch would not be updated
11:07 darius: so it may be necessary to make changes like that
11:07 paul: we didn't get to all of the projects
11:07 paul: but they all fit into what we are showing right here
11:08 paul: I wanted folks to see that what they are working directly affect the people on the ground
11:08 paul: quesiton on IRC about how do we search all modules ?
11:08 regarding a recent ticket where we wanted to switch the HL7 constants
11:09 so we want to know which module are affected by moving constants
11:09 umashanthi: !logs
11:09 umashanthi: logs so far http://www.pastie.org/980048
11:10 Shazin: Seems like all of us from Sri Lanka facing the same problem
11:10 has anyone written a script to check all of the modules code doing a grep or something?
11:10 Shazin: :(
11:10 I am definitely missing some things... but trying to keep up
11:10 >> The current discussion is pretty ad hoc
11:10 umashanthi: Shazin: some overseas lines under sea got broken.
11:11 >> They are talking about where all of the modules have some specific code and how to find that
11:11 Shazin: umashanthi, Yeah possibly something like that
11:11 >> Talking about not deleting code but deprecating so that code can still be loaded
11:11 >> don't worry about finding references... you can't find them all
11:12 >> in eclipse you can find something like ordertype drug....
11:13 sorry, I transcribed that really bad
11:14 Shazin: njero, u r doing a great job
11:14 thanks :)
11:14 bwolfe: I wanted to a quick job to show a jsp page
11:14 bwolfe: and then the controller and actual jsp code
11:14 bwolfe: model view contorller paradigm is adhered to bery closely
11:15 bwolfe: this page is about showing the database canges that have been run
11:15 bwolfe: those are done with liquibase as changests
11:15 bwolfe: this is the jsp page
11:15 bwolfe: it is a set of rows and very simple
11:15 bwolfe: the controller behind that is datase_changes_info.list
11:15 bwolfe: so if I look up....
11:16 bwolfe: so we've done a pretty good naming things
11:16 bwolfe: we know this a controller because it has a mapping on it
11:16 bwolfe: we know it controls that page because we have put that in an attribute
11:16 bwolfe: everytime the database info page is displayed it calls our method
11:16 bwolfe: all this does is get the list of changes and make them avail
11:16 bwolfe: our jsp page can use this variable and create html from it
11:16 bwolfe: now if I want to look this up
11:17 bwolfe: ctrl+shift+R
11:17 bwolfe: this is the actual jsp codfe behind that page
11:17 bwolfe: theres common header and footer as just jsp includes
11:17 bwolfe: there is auth for the page
11:17 bwolfe: thaty requires the user to have the db changes provilige
11:17 bwolfe: otherise they get bumped bakc to the login page
11:17 bwolfe: there is a local header which you see here
11:18 bwolfe: you got the html to diplay things and we can see our for loop
11:18 bwolfe: that loops over our db change object and proints out info
11:18 bwolfe: more complicated pages will ave more jsp
11:18 bwolfe: the controllers will be more complicated and use more objects in the request
11:18 question: view on the step back the page just before this one
11:19 question: the controller
11:19 question: I am a little confused on solutions for my own situation
11:19 question: what you return from the contrller methods path, adfmin maintenance info
11:19 quesiton: is that the actual path you get in the browser or is it internal to tomcat
11:19 darius: it is internal to the web app
11:20 darius: in the openmrs_servlet.xml file there is a view resolves
11:20 *resolver
11:20 driaus: look in the spring documentation to see the full list of things you can return from the controller method
11:20 darius: in our spring config it means that file wil be looked up in the war
11:20 darius: you could have also had this be a void method and return nothing
11:21 darius: if you retyurn nothing it will use the url of the request_mapping annotation
11:21 to create the view
11:21 to look up the view
11:21 because those are the same in this case you could return voide
11:21 (a few lines up
11:21 you can also return a model and view object
11:21 since you can take the model as one of the params in the annotated contrller methods you can treat that as being implict
11:22 final thing (in openmrs 1.7) you can also return a pojo a Plain Java Object and have it converted to json or XML by spring
11:22 there is a chapter in the spring documentation about anotated controllers and their return types
11:22 question: I got stuck on that earlier in the week because it is so flexible..
11:23 question: the resolver that handles the string type, other stuff can happen and the options make it so that it doesn't always behave as you expect
11:23 darius: worth readin that chapter but for the most part, there is very little use of annotated controllers in the core... more in the modukes
11:24 darius: if you were to return a string with "redirect:" that will acutallly rediredct you to an actual url and not a view
11:24 question: maybe you want to show how to detect all of the contollers in the setup.xml in spring
11:25 (questions were from kenny/kinny?)
11:25 answer: web-inf/view
11:25 answer: when we set this up 5 years ago spring didn't redirect well... so we could put them .......
11:26 answer: so you can see admin maint, controller
11:26 database changes info
11:26 answer: if I load this page it is called patient.form....
11:27 answer: do action+l
11:27 answer: I can come over here and do alt+p
11:27 patient form controller
11:27 this is where the actual java controller
11:27 nowhere do you have an annotation that this works with that url
11:27 so we can look up our mapping file
11:27 openmrs-servlet.xml
11:28 standard spring mapping file
11:28 this is a massive file
11:28 in it is a mapping from all of the urls to another object in here
11:28 we can look for admin patients form...
11:28 this is the url that is being loaded
11:28 and there is another object further down called patientform
11:28 here is the definition of the patientform object
11:28 spring will instantiate this cvontollrer
11:29 any property you have it will call set command name with the patient string
11:29 it will call set form view
11:29 set success view
11:29 set validator with this validator object htat exists somewhere else in this xml
11:29 so if you want to figure it out
11:29 either come to this file and search for the actual string
11:29 url
11:30 and then look at the class that gets loaded
11:30 or you have to do a global search for that string in case it is used in any annotated controller
11:30 does that make snese?
11:30 that is the extent of what I wanted ot show
11:30 any interns have technical questions on openmrs/
11:30 >>> /me rests
11:31 "any interns still have blood in their veins"
11:31 kinny: yeah
11:31 docpaul:one!
11:31 any iterns have something that is keeping them from getting started?
11:31 docpaul: reads Shazins quesiton
11:32 docpaul: he needs to when someone clicks on a button say are you sure
11:32 docpaul: do we have a convention of rowser popsups
11:32 modal dialogs?
11:32 jquery?
11:32 javascript confirmation
11:32 bwolfe: the conventian has been a js alert, but we can change that
11:32 there are only like 5 places we use that
11:32 docpaul: I almost never use a javascript alert
11:32 docpaul: I think we need to rethink our UI
11:33 chopin: can you save this transcript and post it to the wiki?
11:33 darisu: are you sure you want to delete this? js confirm dialogs are good
11:33 >> chopin: yeah
11:34 docpaul: I was just saying alerts maybe need a better design
11:34 docpaul: Shazin is just looking for a convention and looking to follow it
11:35 docpaul: is there a way to do a js confirm with localization
11:35 burke: you do it the same way... the confirm is setup in HTML in the javascript
11:35 darius and you just do aspring tag and make sure you javascript_escape=true
11:35 >> I can't tell bwolfe and burke apart
11:36 >> bad skype!
11:36 docpaul: interestingly if we do browser based confirmation it means that the buttons may not be localized
11:36 docpaul: OK Cancel, yes no won't be localized based on openrms locale... maybe the browser will be set to the same thing
11:37 darius: the only jquerty popup in core is in trunk on the manage modules page
11:37 darius: modules.list
11:37 darius: module.list
11:37 diraus: modulelist.jsp
11:37 >> heh
11:37 darius: now that we are actually doing this in core we should encapsulate this in
11:38 docpaul [[ favoring the jquery version ]]
11:39 docpaul: Shazin-- use jquery dialog, make sure you localize
11:39 once we get four or five of those we can get a central thing
11:39 qurstion: any part of OpenMRS uses GWT currently?
11:39 answer: the XForms module
11:40 somebody had a question...
11:40 question: should we limit the size of notes added to objects
11:40 question: big text?
11:40 answer: can be any size
11:40 answer: don't want to be limited to 100 or 1000 characters
11:41 [[ discussing what to talk about next ]]
11:41 [[ 1.7 update then the other things... ]]
11:41 1.7: where ar we at?
11:42 1.7 road map in IRC a couple things changed
11:42 completed location hierarchy and location tagging
11:42 complete migrating boolean concept codes
11:42 the ____ user is completed ut we are still talking about sdecurity issues
11:42 windows installer is complete waiting review
11:42 two things left
11:42 problem list and allergy list
11:43 improved handling of concept tags
11:43 near completeion
11:43 allergy list active list is underway
11:43 code review in a couple days
11:43 docpaul: tickets waiting around?
11:43 only 5-6 that are out there
11:44 question: on the boolean.. can someone explain how the new booleans are going to be passed across to the form modules
11:44 answer: the form entry will be entirely unawatre that booleans are being stored different
11:44 booleans are still their own data type
11:45 we are just moving where they are stored
11:45 [[ lots of people discussing the ability to convert conepts to boolean concepts ish ]]
11:46 >> I am going to need to drop off soon
11:47 darius: this report is not so useful
11:47 it doen't show what is already being worked on
11:47 what report are we looking at
11:48 roadmap page below 1.7 roadmap
11:48 quick query to see all tickets
11:49 are still on target for July 1?
11:49 can we hit earlier?
11:49 sy: possible
11:49 sy: we wil strive to get everything into code review in 2 weeks
11:49 docpaul: put extra energy into those 9 tickets
11:50 docpaul: now is the time to contribute
11:50 >> there are some new topics, but I need to drop
11:51 On May 19th: handling imprecise lab results, later Ellen: different machines did the same test but it returned in different units
11:51 roger: are we moving to an action where we report lab results or num obs in general
11:52 roger: when should we discuss it
11:52 docpual: two issues, strucutred numerics
11:53 docpaul: like CD4 counts... there might be numeric answers for 100-infinity, but also report "Too few to count" for results less than 100
11:53 docpaul: another might be WEIGHT (KG) and WEIGHT (LBS)
11:53 what do we do in that case
11:53 you can create concepts for those different answers
11:53 do we do something more specific?
11:54 docpual: it is on the roadmap
11:54 maybe in the 1.9 range
11:54 this is a much longer discusssion
11:56 [[ call wrapping up ]]
11:57 docpaul: user property should be set for "deciding not to see a particular dialog"
11:57 chopin: that's ekrub speaking
11:57 ekrub: if we had a naming convention we could reset someone's reset dialogs
11:57 ekrub: do we care or do we have a convention
11:57 >> chopin: wow
11:58 >> chopin: I am sure I messed that up a lot
11:58 chopin: aha
11:58 ekrub: suppress_dialog.[module_name].[dialog_name]
11:58 darius: it would be great if there was a widget for it in core
11:59 ekrub: maybe we could push this to something other modules can use
11:59 ekrub: Shazin did you get that
11:59 ekrub: There will be a transcript for that
11:59 >> saying farewells
11:59 ekrub: anything we can do better on next weeks call"?
12:01 [[ wrapping up the agenda for next week ]]
12:01 Group 1: on next weeks call
12:01 [[Thanks, bye]]