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]]