 Okay everybody, we're trying to start the next session. Yeah, okay everybody, welcome. Big welcome to what Ula called the hottest of the hottest sessions. The app's been named. So this is the time where we talk about all the cool things that we've been building over the last year. Yeah, okay, ready? Okay everybody, welcome to this session where we're gonna talk about all of the nice new features that we've been building over the last year. So we're gonna spread it out by products. So we're gonna talk about all the wonderful new things in the Android application. We're gonna have Martha covering that. Then we're shifting over to Tracker. We're gonna have Marcus, who is the technical lead and also product manager for the Tracker team to talk us through all of the nice things we've been building there. We're gonna have Scopters Patrick explain to us all the nice and cool visualizations and analytics features that we've been building. And then finally it's gonna be me talking a bit about what we've been doing at the platform team. So with that, I'll leave it over to you, to your Martha to take it off. Okay. Hello, can you hear me well? Yes, thank you. Thank you Lars. So just as Lars said, we are gonna go through the last two versions of the Android application that were released since our last conference. I am Martha Villa, I'm the product manager of the Android team representing the whole team here to show you the work that we have done during the last year. I would like to start by explaining something that we have not doing anymore, which is to support Android 4.4. I think you remember that we have tried to delay this decision as much as possible, just to allow all devices to keep working with the app, but technology evolves and Google is not supporting some of the libraries. So out of security and other technical concerns, we have to stop the support for 4.4. I'm saying this because if you have very old devices in your implementations before upgrading to the last versions, please try to find those that might run Android 4.4. It's only 300 devices out of 75,000. So it's a 0.43 or 45% 43. It's very little, but for those 300 can be broken. So we just wanted to make sure we announced that properly. And then let's go to the last features of the Android app. Multi-user account, this was a very big thing. It was highly requested by the community. And what it means is that you can have different users working now in the same application while being offline, or you can have one person working in different servers. So you can switch your servers without having internet connection. Obviously, the first login requires internet as before, but now you can store up to three. And when you need a fourth one, you will need to delete one of the first three. If the community asks for more accounts, we can enable more accounts in the future. It's just a matter of spacing the phone, but we thought we would give it a try with three and then see if that works. So I wanna show you that quickly. This is how the login screen looks now if you have more than one account. It's just that. And the login is the same. So I'm gonna log into one only now for the sake of time, but you will have here out of three. So let me do that. And I don't have internet connection right now. So I'm gonna connect to the previous session. So let's move to the user interface. The search flow. We have changed the way the search is open and also the way the search works in the background. So first thing we have added a search button, a big search bar on top of the screen calling for action is usually the first thing that users want to do. So it was very small. It was like here, it was a lens. I don't know if you remember. So now we have a big search box that will open the search form that you already know. Another thing that we have done is to separate the offline and online results. For the user is the same, but what we were doing before was to search in the phone locally for a patient or a TEI, search in the server and then wait for those two results, combine them and then show it to the user. It made sense from a data completion point of view in about the display of results in most cases because internet is slow in most cases, while also in most cases, the patient is in the local device because belongs to the facility. So we have separated that. And now the moment we have the local results which are super fast, they are displayed to the user. Then we tell the user we're still loading and what we are doing is actually bring the data from the server. So as the user scrolls down, data will keep on appearing. And it's transparent for the user but we are managing now in two steps and it's more dynamic, the user experience. And when all results are listed, when the user reaches the end, we are asking, would you like to search outside the program? So if you are using more than one program, if you have tracked entity instances or patients that you enable the user to search by configuration, then the user will be able to search as well attract entity instance, even if it's not enrolled in the program. So I think I'm gonna move back a little bit. I know, this is a bit change. I think you all know that we were making the search mandatory before creating a TEI. So the create button wasn't there. It wasn't visible when the user opened that screen. They had to search. But again, that was in theory, a good idea. We were trying to avoid duplicates and creating TEIs or patients constantly without searching. But it didn't work that well. We got many requests that it was confusing for the user. Sometimes it's not a problem. So what we are done now is to make it configurable. So you can decide per program if you want to enable users to create attract entity instance or patient or whatever it is without searching first. So now you decide based on your implementation if you want to do that. And yes, now I'm gonna, we're gonna search a patient. We're gonna demo some of this by working in our reproductive maternal care program. So we want to search for a patient. You know already how the search works. I want to search using filters today. So you see we are in a multi-lingual academy. So this form is displaying some things in Spanish. So today I'm gonna search by event date. I want to see, let's say I'm a worker, I want to see the patients that have an appointment today. So I'm gonna filter by event date, feta de vento, event date, and I'm gonna say today. So obviously I had this prepared. We have one patient, we have one pregnant woman with a visit schedule today. So let's visit her, make that visit. There is nothing new actually in the patient dashboard. So you already know this screen, we have the visits, et cetera. Oh, I have the filter still applying. Let me remove that. Okay, so let's create a visit for her. Okay, so there is nothing new in the form. You will know we have rendering here. We are rendering here the different value types, program rules, et cetera. These are the sections. But I wanna go to the pharmacy. To demo something new. We have been rendering QR codes and barcodes for some years now, but what is new this year is that the app will now understand if a QR code is following a GS1 data metrics format. So when we read a code, a QR code with that format, which is used for labeling items in logistics in general, very useful for us for medicines, vaccines, et cetera. Pharmacy stock in this example. So the difference is that now when we render, sorry, sorry, that was very fast. When we read the code, the app is actually processing parts in the screen, the string, and finding information like the expiration date, G-thin value, load number, serial number, which is useful for logistics and for tracking pharmacy stock. There is a program rule running in the background to do this and Marcus will tell us later a bit more about that. So another thing we have improved is the safe and complete flow and the management of saving and coming in and out of an event. So for example, we made that visit now and if the user goes back by mistake, we have this new menu that pops up all the time and the first thing we say always is, is data saved or not? So in this case, it's not saved. And we hope it's very clear. So what we have done with the designs I'm gonna show now, we have tried to make simple messages and action-oriented answers. So it's not okay or back. Now it's, what do you want to do? So here we're saying if you exit now, all the information in the form will be discarded. So you wanna keep editing or you wanna discard changes. So we are gonna keep editing because what I should have done is to save. So now it's telling me guardado, which means saved but the error message have also been improved and integrated here. We hope we made it a bit more easy to read. So we are saying some fields need your attention. You wanna review the form and then this one is ongoing or initiated ARB is mandatory and you didn't complete it. So what do you wanna do? You wanna review the form. So yes, I'm going to review the form. I have this little attention bubble here telling me that that data element is in this section and then the field itself is in red. So hopefully the users can find where is the problem I'm gonna complete it now. And then I should be able to save now. So again, it's saved. It was saved before as well. And now we are asking, do you also want to complete? We know saving and complete is sometimes confusing for the users. We are trying to simplify it but those concepts are important in the HIS for analytics purposes afterwards. So we hope where with this flow works a bit better now and then I'm offered to schedule the new event. This program is planned to have visits every month. So there it is. We have our event programmed. So I think that was the demo for data entry. There are other things that we have implemented. For example, I mean, the visual or the icon data entry is not new, which we have only redesigned the way the icons render, but we have enabled it now in registration. So for the track entity instance attributes you can now use the icons as well. It wasn't there before. We are enabling to change the calendar view. We only had the spinner before, but some users feel more comfortable seeing a calendar or sometimes you need to know the day of the week when you are planning the visit. So now they can switch changing view and they will remember the last choice. So the next time they open a calendar it will offer the last choice they made when they entered a date. We have implemented break the glass feature which it's a tracker feature that allows to protect data in programs that are sensitive. So now you can use Android as well in this protected programs. It's just replicating the behavior offline. So protecting access to records that are outside of your facility. If you configure it you can use it now in Android as well. And we have improved in general the user experience in maps. We think we still have a lot to do here. So feedback is welcome. And we keep on integrating navigation. As you know, you can connect to Google Maps directly from the map. And now you can also position this button. This is new. And offline analytics. This is some changing out to the last big chunk of features that I want to show you. Offline analytics is something that we knew we had to do from the very beginning in 2017. But we have been coping with data entry first. And then last year we were able to do offline analytics. So right now what it means is that you can display in the Android app your pivot tables, column line by radar charts and single values. You configure them using data visualizer that you already know. But now they will be displayed in the app. You can display analytics in your home screen or in the program screen or in a dataset screen. So everywhere. You can decide where you want to put the data to be analyzed. And the important thing is that the values are calculated offline. So what we get from the visualizer is the configuration of the table, the data elements, the periods, the units, et cetera. But the values and the calculations are offline. So you can be collecting data and check your analytics just like that or at the end of the day. And I wanted to say something that I just forgot. It will come. But yeah, there is a limited selection of analytical objects and a limited selection of options. You know, data visualizer is a very mature and big tool that we are not trying to reproduce in the phone. We are starting simple. And let's see with your feedback how much we need to grow. I know what I wanted to say. So the objects that are compatible, there is a documentation on this but the main idea is that they have to be configured as a user or unit and with relative periods. So there is no absolute selection or for units or periods. We are basing things in last three months, last three weeks, last 12. So those two are the main things to remember. You can group your chats. You would say, oh, this is like a dashboard. Yes, but we are calling it groups. We don't want to confuse dashboards in the server, use data from the server from all our units always updated. This is only showing you what you have in your device now. So it can be different. So you can group based on topics and then you can filter, we will see in a minute by period or by or unit. You can switch also the views and in the tables, since the last version, we are also rendering legends. So all this is using the DHS to configuration, nothing special for Android. So it will render the legends that you have configured in the web. This is all made through the Android settings web app but before going there. So where are the analytics? In my configuration for this demo, they are in the home screen and that's why we have this icon here. So this is how the analytics look like. These are the groups I was mentioning. You can group. For topic, I'm mixing information from different programs here in the home screen. That's the purpose of bringing them here. So these are, here you see a table with legends and then the different chart types. So let's play with this one. What we can do here is we can change the view. We can see the values as table, bar chart or lines as they were. And then we can play with the filters. So I can filter. This one is monthly, last 12 months. So I could say, you see this is what I meant with relative periods. So you choose which kind of, so daily we will offer. I know this data is collected monthly so I will use monthly filters. But these are the options that you get for playing. So let's change to last three months. So you know that, sorry? But I have 20 minutes, I'm counting my time. But I can speed up. So in this case, for example, I said last three months we don't have much data. So maybe now it makes more sense to make it like this. But let's remove the tables and see. So I want you to see the biggest number we have here is a 50. So I'm gonna enter some data now for 2022. I'm gonna say instead of two visits, we had 200. So in our analytics now, you see already here, 2022 for here. So it doesn't need to go to the server, right? It's updating constantly. Obviously it's way smaller, the data that you keep here. So that makes it simpler. And quickly I wanna show you how this is made. You configure this in the Android settings web app and this is not where I wanna be. I wanna be here. So if you don't know the Android settings web app, please have a look, it should be your best friend if you have an Android implementation. There are a few important things here. I wanna move to the new ones. You can decide because you saw before that we have many filters in the app, right? Like, sorry. So you can decide which filters you are gonna show. I'm showing here a lot of filters, but maybe in my program, I know they only use search by event date. So I don't need to show all this and confuse them or search by follow up. So that can be changed per program by saying, okay, I don't want to see this. I'm not going to sync now because we don't have time, but this will affect on the number of filters that you showed to the app. It will simplify the menu and this is a very important one. Here is where you say you can create TEIs without searching per program. And another very important feature that I don't wanna forget is this one. So until last version, the Android app would not enable users to take screenshots or share screen that's been painful for all of you supporting implementations in the field. So now you can decide again if you want to enable that feature or not by ticking this click. As I'm doing now, I'm using the production version during all this demo and during this new feature. So two more slides and I'm done, Christine. Analytics. We have an expert's launch on Wednesday on how to configure and use analytics. Nancy will give us a super master class. So please join if you plan to use analytics or you are interested on learning a bit more, please use, please join this session. And then we will have an expert launch tomorrow with Jaime and the rest of the team. Do we have two nice or one nice feature that we added to the app now, which is a configuration troubleshooting. So you can play with the language. You can change the UI directly here without having to go to the user. You can check if the language that you want is complete. If things make sense in place because translations are sometimes challenging. And then you have a program rule validation checker. So you can run that and per program it will tell you which ones of your program rules are maybe not well configured and causing misbehaviors in the phone. But Jaime will tell us more about this. And then the last one, this is how the app, I mean, you know this chart, we have been presenting this for many years now. We all know that when the app was starting to take on COVID came and then this is the vaccination campaign. It looks like we are now in unstable growing trends. I don't know, let's see what can we show next year. We usually open with this just to say, hey, look how the app is growing. We want to close with it this year because actually we think this is you, these are your implementations. This is you implementing training users, giving us feedback is what is making this grow. So we want to close with this just to say thank you. And please. Sorry. We will talk a little bit about working list enhancements in the capture app. Did you ask me to unmute? No, I'm good. Okay, thanks. We have now started delivering the capture app with continuous delivery, which is exciting. We'll get back to that in the end. And we have some new functionalities that you can try in your 238 server. You can opt in and test better tests some new functionalities including tracker in the capture app. So a little bit about stability and performance first. This is a little bit of things that happens under the hood. So I just have one slide and here are some numbers from the COVAX, from one COVAX instance. And COVID vaccination campaigns has really pushed us on tracker. And we have enhanced the code. We have made new guidelines. We have learned a lot through these big vaccination campaigns and we have strengthened the software. And the thing I want to stress for you guys is make sure to stay up to date because later versions are always better than older versions. And a newer point version might contain important performance fixes for the main year version that you're on. We would advise anyone that's doing a large scale tracker to stay on at least 235, but ideally as close to 238 as possible. There is a document that has been created for guiding you very practically on how to get the best performance out of your tracker installation. And there's a session later this afternoon that is going through these guidelines. This document is really good, it's short and concise and it is based on hard learnings over the last year. So this is a very good resource. There's a link in the slides. Okay, over to some working list enhancements. This is one of the features we have been building over the last year. And the first one is called working lists across organets and I will do a short demo. Now it's possible to, instead of selecting an organet if you're logged in with the user that has access to data across many organets, a lab worker for example, you now have the option down here to see all records accessible to you. So clicking that button will actually show you everything you can access, not only from one single organet like you would have to before. Right, the next thing I want to show you briefly is the assigned to filter. It's now possible to make working lists there that draws on the power of the assignment of events. So logged in with John Traor, I can make a working list that shows every child that has anything assigned to me. Or maybe I want to make a list that shows everything that is not assigned to anyone. This could be a working list for the one responsible for assigning work, for example. Right, the next big movement on the working list front is the tracker working list. So now I can actually store this working list in tracker programs as well and share it with other users. So I can save this one with a new name. Before I do, I would like to draw some attention to the three standard working lists. These are the three working lists you always had in tracker, right? This is the three buttons that was always in the old tracker capture app. They are still here, but as soon as I save this to be assigned, save this list, you can observe that the three standard lists are removed. We think that once you start using the working lists, it's useful to only have your own lists, not these three standard lists. It's easy to go back to the list with everything in it if that's what you wanted. And once you have made some working lists, this might be more useful to see only your own working lists. Speaking of your own lists, if I make a new list here called assigned to me, to me, I can, right now, this is a list that only I see, but I can share this list with other users just as you can for single event programs. So I could share it with the entire child health tracker, for example, make sure that they can view the list. And now anyone looking in with the access to the child health tracker would see the working list that I just created and shared. We know that this is normally a central process. There is someone smart that makes up the working lists that also knows the working procedures, SOPs. Okay, so over to some program rule enhancements. I am gonna talk briefly about three enhancements in specifically. The first one is the data value type for calculated values. And this is a little bit technical, but for those who has made program rules with sub-calculations and used a calculated value data type, you will now have to select a data type for these variables. The data type is needed for validation and service side parsing. And it will affect the functionality somewhat. There is a difference between adding two and two if they're numeric and adding two and two if they're strings. Okay. Another enhancement has been the GS1 data matrix. And Marta showed this on Android briefly. I'm gonna briefly show it on web here. I'm gonna open one of these records that this is a modified version of the child program. Where if you have a BCG dose, we are entering the BCG D-TIN number, which is one of the properties from the vaccine. This can be entered manually if you have it, like so. But we know that if you have an Android phone and you have a use case where you are able to scan the code on your phone, you will be able to enter the data matrix. Right now I'm pasting it, but this data matrix text is really the QR codes that Marta would scan on the Android phone. When I pasted it here, you can see that there's a program rule that automatically extracts the D-TIN number from this code. The code doesn't make much sense, but of course it's being scanned on Android normally. So the D-TIN number is extracted by a program rule. The program rule is looking like this. We have made a simple rule that checks whether the BCG data matrix, which is the field here, contains a value. If it contains a value, then we are running the new function for extracting data matrix values. And the first parameter to this function is what we want to extract. So we can, from the same code, we can extract many things and populate many fields, which is very smart if you have a phone and can scan the code. All right. So the last enhancement to program rule so I'm gonna show off is the program rule validation, which some parts of the program rule validation was there from before, but this year we have added the last part, which is program rule action validation. So right now I'm defining a program rule action here and if I make a change, the validation is triggered. I changed one letter in the variable name here so that it's no longer valid and you can therefore see the validation error message at the bottom. If I fix it, you will see the valid message. We hope this will make it easier to avoid these little like small mistakes that might take long to figure out. Okay. Yes. One thing to mention is that we now have the option of sending notifications in the form of these HTTP calls. I'm not gonna go deeply into this, but this is an integration opportunity that has been useful in many places. So you can make a program rule or you can make a program notification and make sure to send a call to a webhook somewhere else to trigger some functionality or hook on to DHS too. Very small one. I'm gonna briefly mention that we now have, screenshot wasn't great, but this description now shows up as a small information icon in the data and reforms everywhere. So if there is a description of the data element or track that the attribute, you will see it like this. Then to the bigger news, the capture app is now in continuous release, which means that the app can be updated separately from the core. And we are very excited about this. It means we can deliver fixes and features much faster when there is no backend, when there is no backend connection, then we can give you guys new features and fixes on our own schedule. So I'm gonna briefly show you how this looks. I'm gonna go to the app management app here. And this is standard 238. So this will be the same on your machine if you try this at your own 238 instance. You can see that the core apps with the updates available is capture mentioned at the top. And here you will see the different versions of the capture app. You can install older versions of course. The install up here will install the latest one. So I was a little bit afraid this morning when I was gonna do the demo and I saw that there was a new version of the app this morning. But I tested it right before going on stage. So it was fine. We are making, the test regime is a bit different now. So we're making much more tests on the branch before it's released. So each of these changes should be well tested. It's also easy to roll back a version or two if you need that. So I'm just gonna take the latest one. And there we can see that it's installed. If I now open the capture app, there, this is now loading the new app. It took a second because the app is actually redownloaded. And of course, there is one new feature at the top here that I'm excited to show you. This is the opt-in functionality and it's only available if you upgrade from the standard 238.0, from 238.1, this will actually be in the app that's delivered already. But there's an opt-in option here for trying capture, well, tracker in the capture app. This is an option that's only visible to the admin users, to any user that could make changes to the program metadata or a super user. Only these users will see the opt-in option. If you click it, then this means that we will start using the new capture app for this program instead of the old one. The opt-in is currently for all users. We have had some interesting discussions the last days about other ways of opting in only for a user group or a smaller group. But right now, clicking this button means opting in for all users. There is an option for opting in for only one or specific users. Contact me if you're interested in that and I can help you. Clicking opt-in will produce an information message about this functionality that you're now turning on is still being tested and how to behave if you find any bugs or have any feedback. So I'm just going to go ahead. The opt-out again is at the bottom of the screen now. So it won't be just as visible, but any administrator can opt-out and go back. So clicking anything, clicking a track entry instance in the list now takes up the new capture app dashboard, as you can see now. So this is a dashboard that captures functionality from the old tracker capture app dashboard. You can, for example, see the profile here. We can view or change the date, the attributes. There's an enrollment widget down here which contains a sort of overview of the enrollment and a button to interact with the statuses, change the enrollment. And this is the overview of stages and events that looks a lot like the old tabular entry in the tracker capture app. I'm going to open the first stage that we have already seen in the old tracker capture app and you can see when you open an event here, it's not directly going into edit mode. I have to click the edit button to explicitly go in and change the form. You can see here that the program rule runs on the older app and everything should work the same. All right, so I'm going to go back to stages and events and show you guys adding and scheduling a new event as well. So there's some quick actions at the top here that's meant to contain the actions that you are most likely to take next. The scheduling event is available because we haven't scheduled the postnatal stage yet. So I'm opening the new scheduling screen and here there is a few things I want to point out to you guys. We now have a little bit of info about the date you have for the suggested scheduling. So right now, the standard interval suggests the third of June, not the third of June, the sixth of March. And I can't change this, but then I'm informed about the change down here. So I am allowed to select the later date, but I'm informed that this is later than the actual suggested schedule date. And here we are going to add some functionality for setting this date based on program rules so that there is more intelligence into this decision on when to schedule the next date. And therefore it might be important to try to stay as close as the scheduled, suggested schedule date as possible. We also have this other information here about the number of scheduled day events that is in the org unit you're scheduling in already. So this can help you avoid scheduling too many people on the same day, for example. We also added comments at the bottom. So you can schedule and also add a comment right away, which might be useful to add some extra information, for example, for when scheduling a visit and there's some information that you would like to give to or add to this scheduling event, then you can add a comment. At the top here we can switch between report and schedule. So there's sort of two ways of adding an event. We can schedule it like we were just about to, or I can switch to report, which will take me to the full form for entering data in the event. If I just quickly enter some values here, there is one thing to point out with a new capture app and that's that we are not sending anything to the server yet. You can click and put data into the fields, but nothing is sent to the server field by field like it was in the old tracker capture app. And this was one of the biggest performance problems in using the old tracker capture app that every time you entered something into a field, there would be a call to the server that would save the value right away. So here nothing is saved until we come to the bottom of the page. And for saving, we also have to make the choice between completing the event or saving without completing. So once I click one of these two buttons, then we will send everything to the server in one call, much more efficient than the old tracker capture. We also hope that the data quality for your complete status is gonna be much better because now we're sort of forcing the user to make the selection between completing or saving without completing. So I'm gonna complete now. And we can see the event here and this completes my part of the session. So thanks everyone. You can hear me? Awesome. I am gonna have to speak very quickly because we're running short on time but you all have read the release notes anyway. So this is just review, right? Okay. The analytics team has been really busy for the last two releases. So we'll just jump right into it. The first thing that I wanna talk about is offline dashboards. And so we have extended dashboards to your cell phones. That was released last year. So hopefully you remember that. Dashboards is optimized to render on a cell phone screen. But now what you're also able to do is you're able to download that dashboard in your cell phone or on your PC web browser and then you're able to take it offline. So this is a really useful feature if you're going out and doing like remote field support to community health workers or you're going out to a clinic that has poor internet connection, you can still take your data with you, right? You can share your data, you can have conversations around your data. When you're offline, two functionalities don't exist, filtering and interpretations. But everything else is there. So let's just demo this quickly here. You don't see what I see. What is my sharing? Technical help. I think ours is better. Nope, should be there. I'm a DHS2 expert, not a Zoom expert. Okay, there we go. Okay, so now we're looking at my cell phone. So please know when send me any messages. And I am going to, here's the dashboard. I'm going to choose make available offline. And you're seeing it's going to load the dashboard now. And you can see that there's a little icon next to the antenatal care dashboard name that shows that it's been saved. And if I go make myself offline, you see that now it's telling me that I'm offline. And if I go to another dashboard, can't see it, didn't save it. If I go back to any natal care, you see the dashboard still there. Okay. All right, so let's go on. Another big feature that we had was cascading dashboard sharing. So in previous versions of DHS2, you had to, in order to share a dashboard, say you're making a dashboard at national level and you want everyone at district level to see that dashboard, right? What you had to do was you had to make sure everyone at district level had the right sharing settings for data elements, the indicators that made up those data elements, the charts that showed those indicators, and then also the dashboard. Very difficult to manage. So what we've done with cascade sharing is that with basically one click, you cascade the sharing all the way down for all those view permissions for all of those different levels. So you share the settings for the dashboard items, the charts, the indicators, the data elements in one click essentially. So it makes it very easy to make sure everyone who needs to see the dashboard has the right sharing settings to be able to view it. Another feature that we have is default dashboard layout. So we built a lot of flexibility into how you're able to build a dashboard, but essentially we've been told that we put too much flexibility, that it became very easy to make a very poor looking dashboard as opposed to making a very good looking dashboard. And so now we have a couple of default dashboard layout functionalities that hopefully make it a little bit easier to make a nice organized dashboard. And I'll demo those for you now. Okay, so the first thing to do is let's just make a dashboard real quick. So I'm gonna go up here and you see that now this looks a little bit different than it did previously. So we have this layout field. And in this layout field, I can change the layout and I can say free flow, which is the default or I can switch over to fixed columns. Let's say I wanna add four fixed columns, save the layout. And now let's add some stuff. So I'm just gonna choose the first four things that I see here, all A and C of course, because it's alphabetical. And you see that they added to the end of the dashboard. Of course, I could add them to this. If I went over, I could add them to the start of the dashboard. So let's just add another thing here. And you see that that's loading here now at the front of the dashboard. All right. So let's just give this a title, save my dashboard. All right. So now I'm gonna go into the sharing settings and demo the cascade sharing for you. So I am going to share this with a group. I am going to give the administrators a view and edit, give access. And now I'm going to toggle over to this apply cascade sharing to the dashboard items. And what you see is it's telling me here that there are five dashboard items that need extended sharing permissions. Those are the five I've just added. So I'm just going to say apply dashboard sharing items. And well, it's right in this situation for the demo it's telling me that nothing was updated because those items that I made were already public but it would then share all the dashboard, the additional sharing settings to all the dashboard items. All right. Hopefully that makes life a little bit easier. Some additional features and I won't be able to demo these for the sake of time but we have added indicator types for single values. So if you have a data, you have an indicator that is say percentage per thousand, per 10,000, per 100,000 then if you add that single value item or indicator to a single value item chart, excuse me then you will also see the indicator type. So it'll show up as a percentage or it'll say per 10,000, et cetera. We also now have org unit drill down for bar and column chart. So if you have a bar column chart and your data visualizer on your dashboard if you have your org units in the filter dimension then you will be able to click on that bar and drill down. You're looking at district performance of some kind of indicator, KPI and you see that one district's not performing well. You click on that district, that bar, you click drill down and then you see all the facilities. And so it makes the workflow a lot easier to go down through the hierarchy quickly and drill down into those problem areas that you need to address. We also have fixed row and column headers for pivot tables that's very much similar to Excel. So it's pretty self-explanatory. We've added last 10 relative periods. You epidemiologists told us that you needed last 10 periods so we put it in. And just to point out that we can add relative periods quite easily. So different types of periods that you need this is quite simple for us to add those. So just let us know. And then finally, we have legends applied to the dashboard. So if you have a dashboard or sorry if you have a chart type, bar, column, gauge, single value pivot tables where you can apply a legend to it then you can show that legend and that legend will also show up on the dashboard just like the bottom screenshot you see here. Maps. Maps has made a lot of progress over the last year. We're really focusing on maps for a couple of key use cases population on seeing where populations are as well supporting projects like vaccine distribution, mass immunization campaigns. The two big features that came out for maps among many are the ability to add multiple geometries to a map. So the practical application for this that we're working with right now is to add catchment areas for facilities. So a facility is a point, a facility is also a shape, right? The shape represents all the people who go to that facility the point is where the facility is. And now using some partners tools specifically partners like grid three and cross cut you are able to draw catchment areas using their systems and then you're able to use those catchment areas in DHIs too. You cannot draw the catchment area in DHIs too yet but cross cut has made an app for DHIs too where you're actually able to very seamlessly integrate their catchment area software where they compute the catchment areas and drag it into DHIs too. And spoiler alert the cross cut app will be in the app competition on Friday. It's pretty cool. It's on the app hub already. And then the other one is that we have dragged in Google streets sorry Google Earth and buildings and structures layer. So Google, they have been going around the world and figuring out where all the buildings are using various means, satellite photography, remote sensing, that kind of thing. And they have a public access layer for this and then we've now made extended DHIs too to be able to drag that into the maps. So you're able to see all the building footprints. It's about 516 million buildings across Africa. So it's quite extensive. Let me just demo these for you. All right, so I'm just gonna go to the maps app. That's right here. I'm gonna add my layer. And you see there's a couple of layers here that maybe you haven't seen in the past. In previous releases to 236, we added a population layer. We had population by age and gender. And then we also have the building footprints. I'm gonna turn on a population layer. I am going to select the say male and female under fives. And you're wondering where this data is coming from. It's not coming from census data. It's coming from grid three and world pops population projections. So this is not your census data. This is coming from an external database. I'm just going to show the sum. I'm gonna skip over to my org units. I'm gonna turn on Bo just for the sake of demonstration. I don't wanna load the whole country. I'm gonna turn on facility. And now you also see this use associated geometry. And I'm going to go down and select catchment. The associated geometry is where you define any additional geometries that you want. And you can do more than just catchments. You can add as many of these as you want actually. But catchment areas is the most in demand. I'm really excited to see what other use cases you guys come up for this. All right, I'm gonna add that layer. It's gonna take a second to load because we're doing a live demo. Here it comes. All right, so here's our facility catchment. So you see a point and you also see the facility catchment shape. I can click on one of those and it will give me say what world pop projects as the population for under five in that facility catchment. And this facility catchment is factoring in things like vegetation, walking distance, land cover, road conditions, lots of various factors. Different models have different approaches. So grid three and cross cut have slightly different approaches, but suffice to say that they are both being heavily used and we think that they're very good, very good complementers to these functions. All right, then let's just quickly show the building footprints. Same process. So I'm gonna add the building footprints layer. I'm going to just show facility. Let's show just bow district. Let's go down to catchment area again, add that one. I'm gonna turn off my population so that we can see it a bit better. And so here come all the building footprints. So not only are we able to drag in where people live essentially or where people are from the buildings, but we're also able to put a layer of population above that. So we can do things like for outreach campaigns, planning supervision support visits, that kind of stuff. Hopefully this is a useful tool. All right, I'll jump back to the PowerPoint. A really quick note on some improvements to the indicator calculation engine, not specifically a analytics functionality. And honestly for most of us, not a terribly sexy thing to talk about, but for those data geeks out there like myself, I wanted to point out that we have made a lot of improvements to the DHIS2 ability to calculate some indicators. A few things I'll just highlight here now. The first one is that we have aggregation type override for indicator expressions now. So let's say you wanna make an indicator that and include a data element that is set to sum as is default aggregation type. But in this indicator, I want that data element to be count. So in the expression now I can say specifically, I want this data element in this indicator to be count instead of sum. Okay, hopefully that's useful for you. The other one is indicator sub expressions. This one has been a long time coming and it's a first start, but essentially this gives you the ability to make an indicator that counts the number of org units that fit some specific criteria. For example, I can say I want to count the number of health facilities that have over 100 cases of malaria. Right, so I can say sub expression if malaria case is positive, greater than 100. If then count one, if else count zero. So essentially that gives me the ability to say, any facility that has over 100 cases, I'm gonna be able to make an indicator that just counts the number of them, okay? The last one to mention is indicator date, min date and max date. So we know that many of you, your indicators definitions are changing over time, right? So, and we're following WHO guidelines, WHO guidelines change over time as well. So you can't, in the past, you've had to make multiple indicators for different definitions, right? And those again, those definitions or what definitions to use is time bound. And what this functionality enables you to do is it allows you to specify for this period range, I want to use this definition of the indicator, but for another period range, I want to use this definition of the indicator and it makes one indicator. So you see one line, one bar, instead of having to turn on multiple indicators that represent different periods. Yeah, this one was from Petfar. I see you guys clapping in the back. So thanks. All right, yeah. Appreciate it. The last but not least is the new line listing app. So we have been working really hard on making a new line listing app. All of you have been struggling with the event reports app for years. And we wanted to build the anticipation, we wanted to stretch that struggle out as long as we possibly could. And I think we got there. Now we have a new line listing app. Essentially this has all of the line listing functionalities of the older event reports app, but a whole new much improved user experience and a lot of new functionalities. Specifically the new functionalities that I just want to highlight, you'll see a lot, but the ones that are worth talking about are visualizing multiple repeating events. So if you have a program that has many events and they're repeating over and over again, you can view data from all of those. You're able to have tracker specific period dimensions or time dimensions. I'll show you those like registration date. Soon we'll have scheduled date and due date. And then we also have created by and last updated by. So this will actually show you the specific user who created the event or the track or the enrollment and who last updated those. So let me just jump into this. Okay. All right. Oh, and then one thing I forgot to mention is this app is being officially released in 238.2. So that will technically be next month. You can play with it now on the demo sites. You could even download it and start to use it, but the full dashboard support for this won't be out until 238.2. And then from there we'll have continuous release just like the trap that Marcus, yeah, pointed out. All right. So I'm gonna go to the line list. So here's our new icon. Let me just quickly make a line list. So the first thing I have to do is choose your input. We have either event or enrollment. This is just like the old event reports application. You had to choose this as well, but in a much worse user experience. So I'm gonna choose enrollment. We will be adding more to this. So we'll have in the future versions of the app we'll have relationship derived line list and we'll have tracked entity and since derived line list. Relationships obviously showing your relationship. The tracked entity will show you data across programs. So that'll be big when we get there, but we have to build a whole new backend for it. So I'm gonna choose enrollment and then I'm gonna go into choose my program dimensions. I have to choose a program first of course. So I'm gonna choose Kovac and then I'm going to turn on some program attributes. And so hopefully you see that all of this is a very different user experience. I'm gonna add given name. And when I click on a data dimension to add to it, it's going to prompt me with this do you want to set conditions for it? And the condition is essentially a filter to apply to each data dimension. So because I've turned on a text attribute, I'm seeing these predefined different condition types to be able to add to it. I don't want to add any. So I'm just going to say add to columns. Let's add family name as well, add that to columns. And then let's say data birth, let's add that. Data birth is a date type attribute. So my conditions changed based upon the attribute based upon the value type that I'm adding that to columns. And then let's just turn on a data element for the sake of demonstration. We're gonna turn on vaccine name. And so again, vaccine here is an option set. So we're seeing all of the options in the option set based on the conditions. I'll just leave them all by not selecting any. I'm basically saying show me all of them. And then you'll see that I just toggled over to repeating events. This is the new thing where you're able to show. So this vaccine, so people are getting multiple vaccines of course, hopefully you all have as well. And this enables me to see in that event that where they're receiving a vaccine, the various different data values that have been reported. So let me just show you, we have only right now the ability to show most recent events or oldest events. In the future, you'll be able to select the date range for this. So let's just say last three, add that to columns. And then I have program status. I'm not gonna turn it on, but you see I can filter by program status. I have created by and last updated by. These are just dimensions that you can only turn on. You cannot filter by them yet. So you cannot filter by a specific user, which I know is highly requested. We're working on that, but as it is right now in this first version of this app, that's not a functionality. And then we have our time dimension. So you see the various time dimensions that are available. So in this particular program, we have like dose given, date of registration, incident date and last updated on. In the future, to this app, we'll be adding scheduled date and due date as well, but not in the first version. So I'm gonna say last 12 months, add that to columns, click update. And now I've got a line list. And you see just, these are the order which I added them to the columns is the order of the data items that you're seeing here. And you see that we have the most recent vaccination in this column here. And then we have the most recent minus one and most recent minus two. It's a little tricky to communicate like what is the most recent and what's the previous ones. If you have ideas, suggestions on what's a better way to communicate this, we're all ears, but this is what we have in this version of the app. And again, we're doing continuous app release. So if you have many immediate feedback, we can implement that in the next patch release. I don't like it that my date registration is over here. So what I'm gonna do just is drag it up and I'm gonna put it right after my birth date. Hopefully you saw how I drag things around in the columns, click update again. So now my order is rearranged. And let's just say I want to, let's add Covaq vaccine. And I'm gonna drag that over to filter. And I'm gonna say, I just wanna see those that were given the AstraZeneca. So update again. So I'm not seeing my vaccines anymore because I put that in the filter, but I'm seeing those individuals who just received the AstraZeneca vaccination. And I highly encourage you to go in, play with this app. It's brand new. Please give us your feedback. And I think that is all. I'll just hand it back now over to Lars. Thanks very much. Thanks, Scott. I really hate presenting after you, Scott. I can only go one way from here, unfortunately. All right, so I'm Lars. I'm gonna talk to you a little bit about the improvements that we've done on the platform team. So as you probably know, the platform team is working on foundational pieces of the HS2, like the infrastructure, libraries, input, export, security, and so on and so on. We're also working on a number of apps that we host sort of within this team. So the first thing I'm gonna show you is the new data approval app. So back in the old days, the previous app was really based around having to sort of approve dataset by datasets and time period by time period. In the new app, we're approving by something called data approval workflows, which some of you might know. And the data approval workflow is basically spanning multiple datasets. So you can approve many datasets at the same time. We have an independent period type so that you can have, let's say, the workflow be quarterly, even though the datasets can be like monthly or weekly. And you can only include, you can include specific organed levels in the workflow so that you can focus on like the districts and the provinces but not the facilities and so on. And finally allows you to view the status of the approval of each organ in the hierarchy. So as you can see here, we have a top bar where you can choose the workflow and you can select one of them. We have a period selector that allows you to select, in the case, the quarters. And then we have the org hierarchy in which you can see the status of the approval for every organ it. So I'm just gonna show you this super quick. Just gonna get some out of the way. And then we go to data approval. We're gonna select a workflow, in this case, the child health. We're gonna choose a period, a quarter, and then an organ it. And the nice thing here is that we can actually see the status of every organ it in the hierarchy as opposed to having to go click one by one as we had to do in the old days. So we can select one. And then we can also choose multiple data sets here. So we can display data. As you can see, this workflow contains two data sets, the epi stock and the child health. So we can select one of them. We can view the data, we can go down, we can say approve. This gives you a nice overview of which data sets you're approving and then we can say approve. And of course we can also go in and approve if you wanna do that and so forth. So yeah, a much more effective way of approving data basically. Okay. So facility registry and MFL is something that we've been working on for a long time. The problem with MFL is always that it means very different things to different people. So it's always about trying to understand the different use cases, the different features that's necessary. So we are kind of approaching this from a piecemeal approach where we're trying to build things which are useful to the community. So some of the things we did for the last two releases. First of all, we allowed now the ability to upload an image for an organets. So you can go to the maintenance app, you can upload an image, typically have a facility to show like a facility photo and so on. We also added something called the organet profile. So there's now a profile that you can define for all organets. And the profile contains fixed information like fixed properties like name, short name, descriptions and these things, but also metadata attributes. So you can have those organic metadata attributes to sort of capture arbitrary information. Then there's organic group sets in which we can display the selected group. And then it's the indicators, the element reporting rates and so on that they can include to show aggregated data within the profile. So this is a nice way to build kind of a facility profile or a district profile that we see in many of these MFL systems. And of course, all of this is integrated in the maps applications. We can go there and have a look. Just a small detail. So we also added two system settings for defining basically which organet level is considered to be the facility level in the system because these are very flexible. There's no way for us to know exactly which level is the facility level. So now we can configure that in the settings application. So once you've done that, you can go to the maps application and you can open the facility map. So there's now a dedicated layer for facilities or MFL as we call it. And the purpose here is that we want to make it very easy without a single click to basically give you kind of a quick look at all the facilities and the different profile for each one. So let me show you how this works. So we're going to the maps application. You can see you've seen this before. Then we're going to add layer. We're going to now go to facilities. As you can see here, the facility is already selected as a level. So there's nothing we need to do. We can just go and click add layer. That will give us a nice overview of all the facilities in this country. We can zoom in. We can also go and say show data tables that I can search. We're going to search for the world famous Nigelohun clinic. And as you can see here, right now we have a nice photo of the clinic. I don't think this is the Nigelohun, but I have to pick something from the internet. And then we have, as you can see here, fixed information. There's facility ownership, this type, there's codes, these different things, latitude, latitude, ID, et cetera. And down here, we can also see aggregate data for from 2022. So we can see things like expected pregnancies, total population, population of the one, childbearing age, even of childbearing age and so on. So these kind of key statistics that we would like to see. So this is a nice way where we're trying to take DHS2 in the direction of becoming kind of a native MFL system. Stealing this a bit from you, Scott, so thanks for that. Okay, so switching gears a little bit. We're also working on data quality. So as you probably know, we have a data quality application in DHS2. And in this one, we have a way to do outside detection. So in 226, we added support for SET scores. In 237, we added support for what they call modified SET scores, which if someone here is statistically interested, that will be a method that's based on the values distant from the median and not mean, which makes this method less vulnerable to outliers and data sets. So if you have a small data set with potentially a lot of outliers, we do recommend that you use the modified SET score. So I think this is actually an underused feature in DHS2, it's quite effective, maybe except for seasonal data. It's a very nice way of detecting outliers in a data set. So we recommend that you go and have a look at this one. Okay, so switching over to security. So as you know, we have a dedicated security team now at DHS2 and we're spending a lot of energy on building security related features, we're fixing security vulnerabilities. We also building different features that will make DHS2 a more secure system. So one thing we added for 238 would be what we call personal access tokens. Some people call this API keys, some call them API tokens, they're the same thing. So this is basically now a token, which is a new authentication method designed for integration services like server to server integration, typically someone building an integration service or some kind of script to move data. And of course also for web applications. So if you're building a web app and you don't want to rely on that cookie-based authentication, we can also use this one. Web portal is another key one. So I know a lot of you guys are interested in building web portals. So you have, you know, you flash your web portal on your ministry website or your NGO website and now you want to pull data from DHS2. The access tokens is a very effective way of getting data from DHS2 in a fairly secure way. So the access tokens is now what we think is more secure than what we call basic authentication. Some of you guys know what that is. The access tokens have an expiration date, meaning it will expire after a number of days. If you want so, it can be restricted to specific IPs and HTTP methods. So you can say that we only accept requests from this particular web portal, this particular system and this particular IP. It can be revoked without revoking the online user account. So you can, if this one gets compromised, you can revoke it without having to change the online user account. And it only gives you access to the API, no user interface access. So when you're building this kind of integration services, web portals and so on, we really recommend that you use the personal access tokens as opposed to hard coding, something like the username and password in your system. Yeah, so let's have a quick look on how this works. So to start, to create a token, you can go to accounts and then we can go to personal access token. We can say generate new. We can choose between server script context and browser context. This is for web apps. This is for more integration services. And then we can set the expiration days. We can set the allowed IP addresses. So you should try to restrict this as much as possible. If you only need to read data, you should select get and not post, which means people would not be able to create things which should then improve security. You click generate token. Oh, interesting. It worked this morning. Famous last word. Okay, interesting. Let me, let me, let me, I swear it worked this morning. All right, good thing I have the slides. All right, let's move on. So, okay, so we also, and this is something you see in most systems. We also added the ability to send a reset password email by email with a secure link. So before this, if someone lost their password, as I know people do all the time, you had to send people their password in plain text using email or WhatsApp or whatever, which of course is not very secure. So what you can do now is that you can go to the user module. You can click, for every user you can click reset password. You can send reset. That means the secure link is gonna be emailed now to that person. You can click on the link, go to secure form, enter a new password, click save and then update. So that is of course more secure than sending these passwords in clear text. So this should be a nice addition to improve security. Something you find in most systems. So it was about time that we did it. All right. We also added the ability to send email notifications when a user is about to expire. So if you have this job, if you're familiar with the scheduling app, we have a job where you can go and basically disable users that haven't logged in for a certain number of months. So we see that in many systems that some user accounts just get stale. Some people leave, they lose interest, so they forget their password or whatever else, and they don't log in for a year. And you do wanna kind of tidy up those users. And so we have a job now where you can basically automatically disable those users which haven't logged in in a configurable number of months. You also now have the option for sending an email before the account is expired so that the people haven't a chance to do something before their account is invalidated. So if you go to the job, there's a small field down there called reminder days before that allows you to basically set the number of days before you're supposed to send that email. Okay, yeah, quick one. So in these two now, we have support for icons for all the metadata. So all the elements, datasets, and so on can have an icon. This is mostly surfacing in the Android application. We added a new icon set now. We're working with a group called the healthicons.org which is a non-profit sort of open source group that gives out these icons. The app hub, as you've probably seen, also has a completely new design now, completely redesigned, much nicer, easier to navigate, easy to find apps. So you can go here, you can search, you can click on them, you can view the screenshots, you can view information, and then so on. So we do recommend, there's a growing number of apps now on the app hub, and we do recommend that you have a look there before you build your own app, at least. Go there and have a look and see if something exists and then potentially use that app instead of building your own. There's a lot of useful stuff now coming there. So we do recommend that you have a look at the app hub. We also added the, we also gave a new design to the app management app now in DHS2. So within DHS2, we have, of course, an app that allows you to install customer applications, core applications, and so on. So there's core apps, and you can see here, we now have this continuous release system where you do release some of the apps continuously on the app hub. So that means you should go here and then you can actually see if there's core applications which have updates available as Marcus touched on in his presentation. So that means if you are on 238 or 37, you might be able to receive upgrades to the apps without having to upgrade your DHS2 installation, which is great because that means less testing, less kind of pain as part of the upgrade, we can quickly upgrade to the apps you need. Okay, of course, you can upload your customer applications and you also have integration with the app hub. So you can go here and you can basically select applications straight from the app hub without even going to the app hub. So this is now integrated within DHS2 itself. So you can go here, you can click on it, install it, and then get new apps even without leaving your DHS2 installation. Okay, so I don't know how many CIS admins are in the group in the room, but I'm gonna be super quick with a few updates to the CIS admins space. So one kind of major problem that we see in the community is that people tend to often not upgrade, right? So here we are working hard on new releases to give out security fixes, patch releases with bug fixes. And we see that many people don't upgrade. So that is something we're trying to improve. And we think that one of the issues behind this is that the lack of information, people might not be aware of the new versions that are coming out. So what we decided to do to kind of fix that or help on that is be implemented a new system that we call the version update notifications that is now integrated within DHS2. So the point of this system is that you will receive, at least as its admins in your DHS2 installation, will now receive messages for every time there's a new patch release, every time there's a new major release. And importantly, every time there's a new security half fix available. So you will get a message straight in your inbox in the normal DHS2 messaging system. And the message will contain information about what is available and what you should do. So this is enabled by default for people with the famous all authority. And then there's also a user group now called system notification recipients, which you can configure in the settings app. And then determine which exact users are supposed to receive these notifications. So again, we do recommend that you turn this on for people who should receive these things. And of course, make sure you upgrade. So again, there's a system setting now in the settings app. There's something called system update notification recipients. This is a user group that you can configure. And then this is how it looks. So this is the normal messaging app in DHS2. There's a system category on the left. And then we'll get notifications saying things like there's a new patch release available, patches contain bugs and security fixes. And then the link to actually go and download that more file and so on. So once again, we're trying to kind of push you guys gently to keep up to date, at least keep up to date within your major version of the DHS2 so you can receive these security fixes and so on. Okay, I'm going to be super quick. You're also making, so I know that performance is a major concern for all of you, right? So there's growing data volumes, more and more data coming in, tracker data is flowing in. We know that from COVID-19, people are registering their entire country. And so the data volume is growing, the number of users is growing. And so keeping up with all this massive growth of data is a big concern for us. So we're always thinking about performance and scaling. So how can we scale DHS2 in a more effective way? Even if you don't know what this is, the key takeaway here is that it's easy now to use multiple installations of DHS2 to host a single instance, right? So you can have multiple Tomcat servers running, serving the same kind of logical instance of DHS2. So before 238, you had to do kind of cumbersome configuration DHSConf. You basically had to enumerate all your instances. This now goes away. So if this is automatic, be listening to the database instead, so that you can now actually add more Tomcat instances to your DHS2 and it will just be picked up as part of the cluster. And this is also a bit forward thinking in the sense that we also are moving to the world of containers and Kubernetes and container orchestration tools and so on. And we wanna make it as easy as possible for you guys to adopt things like Kubernetes. We also have a DevOps team now at DHS2. You have two excellent engineers who are working on setting up and kind of making DHS2 even more friendly for things like Kubernetes. So making things more container orchestration friendlies, also something you're working hard on. Okay, super quick. So sometimes when you run into this kind of corner case issues in DHS2, you often would like to increase or reduce the log level. It may be go to something like debug. Before 238, you had to change the war file. You had to maybe fiddle with log for jd configuration files. We now made it possible to change the logging level directly in DHSConf just by a few lines like this. And then the system will start to produce more logs. So this is again, nice for sys admins that they can get more insights into the system in a simple way. All right, so for my last slides, I'm gonna talk from a web developer perspective. So for some time, we've been having something called a data store API in DHS2. So the data store is basically a general purpose data store that you can use for arbitrary needs for persistence, storage and data retrieval. Was fairly limited though. So in 238, we made a whole bunch of improvements to it so that it's now considered kind of a fully fledged data store that developers can use for their custom app needs. So that means if you're building a web app, it has the needs just for storing data and also retrieving data in a fairly complex way. You can now use a data store as your persistence for those apps. So yeah, I'm gonna be quick here. We added a couple of things. First of all, what we call field filtering. So if you have a hypothetical namespace called commodities, we can now say slash commodities, slash fields, ID name, brand batch, ID name, whatever you have in that document. So that gives you exactly the fields you need. The added paging, so you can do, if you have a lot of items in your namespace, you can then do a page response and say page number and page size and so forth. We also added logical entry filtering, which means you can filter for whatever item you have in your data store. So you can say, okay, I only want the item that has ID one, two, three. And finally, we also added sorting, so that you can say, I would like to sort the items in my namespace by any property in ascending or descending order. So this is actually quite nice. It works in this exact same way as the normal metadata APIs in DHS2, the data elements and organists and all those things. Same syntax is quite powerful because here you can put basically anything. So whatever need your custom app has, you can put that in the data store and use it in the same way as you use for the other stuff. Thank you. The developers are cheering, at least that's good. All right, last slide. So on the platform team, you also, the backend team is actually working fast and the backend team is a little bit ahead of the frontend team. Just want to mention that we have, I know it's complicated on the frontend, so no, I'm not talking about the frontend team, but we have a couple of things which are available in the backend. So if you are web app developers who wants to build apps for these things, you can check out the API documentation. So we added things like splitting and merging organets. I know that's a highly requested feature and this stuff takes care of things like merging the metadata, merging the data, tracker data, messages, everything is actually being merged and split according to different rules. So if you have that need, you can use the API or you can build your own app. We're also working on something called metadata proposal. So again, this is part of the MFL theme of the HS2. So the metadata proposal is about someone can approve, sorry, propose, then someone can approve or reject changes to metadata. So this is about creating a kind of internal flow for metadata changes within the HS2 without having to go out of band and rely on things like email or meetings. You can then have third party applications, submit changes to organets, for instance, and then there can be a central group that can basically then approve or reject or oppose or give feedback to those changes. So that's a way for creating this kind of integrated way of managing changes to metadata. So we will provide UI for this quite soon. So this API, which is scalable metadata API, if you have a new patch API that allows you to do partial updates and finally we can also now cancel jobs for things like analytics tables. All right, that was pretty much on time. I think that was it. So on behalf of the developer team, thanks a lot for listening.