 Okay, so hi everyone. Good morning or good afternoon evening, depends on where you are. So yeah, we are going to go through what is new in the DHS2 version to 38, having published it like a couple of weeks ago, and also what is new in the Android version to 6. Okay, so we are going to be talking product by product as usual, starting with the Android and then we move through the tracker, platform and analytics. So, okay, let's then move to what is new in Android 2.6, what are the new features that has been implemented, developed during the last six months. A big thank to the Android team for their amazing job as always. So let's start and then, so we have several improvements that hopefully it can have an impact in the way that Android is implementation the country supports. And first of them is something that has been requested by the community for a long time now that is the support for multiple users using the same Android application, right? So we have several use cases, probably the most common one is the one that we have a server that is for tracker configuration and in the same orientation there is a server that is hosting like aggregated data, right? And probably the Android user needs to send data, needs to synchronize data with both. And is there a way that we can improve the user experience when he or she needs to start switching to the servers instead of logging out or logging in all the time. So it's something that we have, something that we have been working on this version. And then other use cases, for instance, if the Android application is being shared between the different people, right? So let's see how this looks like. So if I'm clicking on this menu over here, so I'm clicking in the logout, okay? So now we can see that this is having like one user that is trying to secret, that has an account linked to a different servers under current and 236. And also this is the same user, but also we have another user, right, pointed to the other current server. So we have three accounts. Something that I wanted to mention at the beginning is like we have like a maximum number of accounts allowed per application of three, okay? So if you see that this button over here, the other account is like disabled because we have reached the maximum. So now if I click on Android, so it's going to, of course, it's going to show me the password. I need to fill the password in order to log in with the server. And I have this button over here, also the managed accounts, that basically this bottom allows me to navigate the different user Android accounts that I have. So let's click on this button. And then I'm going to select this one. Okay, I'm going to select this one. And I'm going to, he's asking for the password. So I'm going to introduce my password. There's 2022. Okay. And something that is important is like so far till now, anytime that the user needs to log in, the user needs to be in no-line mode, right? But now as anytime that the user is logging the system, so the credentials are being stored in the local database. So now that needs to happen, that doesn't need to happen anymore. So basically, let me show you how it looks like if I am disconnecting my device from the internet. Okay. And now I can click, I can't log it anyway. So I can click on the login button. Continue. Okay. And without internet connection, now I can like, I can have access to the application. Of course, in the case that the user has access to the internet, then it will synchronize the metadata and the data right away as usual. Okay. And also there is a new button over here in the menu. If I click on the, on this menu, there is a new feature, the delete account. Okay. As I said before, there is a maximum of three Android accounts. So if you want, you can like, remove the current account. And then if you click here, after you confirm, it will remove that account that will like redirect you to the login screen. And then you have to again, introduce the username, a password as usual. Okay. So I'm going to cancel it and I'm going to connect because I'm going to need it for the demo again, my device to the Wi-Fi. Okay. The next implementation support feature that we have is the configuration travel shooting. This is a new as a feature that you can find it here in under this, the main menu here. Basically, we are intended for the admin users. This is, this menu is not mainly for the, for the end-under users, but I would say for the admin users in order to check any potential issues with the configuration. And we have in this case, and probably these options are going to increase as we are like a publishing more Android applications, more versions. But for instance, we have here the two of them, the one is the language. Okay. If I click on this button, so basically with this, the user can select the language that he or she would like for the Android application to render. So if I click on French, everything is being translated to French. Of course, when the Android user and the regular Android user, he or she wants to change the language, the device, he or she, they can go to the web and then to the access to web and then change the switch to the under the user profile switch to the language that he or she would like to render in the application. This is more for admin users in order to see, okay, what are the, all the terms are being translated properly to the language that I am interested in, are there still some terms that are not translated or this kind of checking, right? So let me, I don't speak French, so let me move again back to English. So the next one, I think that is very, very relevant is how the program validations. And we have seen in many implementations, like people complaining that the workflows of the data entry forms are not, are kind of weird, they are not working as expected. And many times it's because there is an issue with the program configuration. So now it's possible also to check what the issues are, okay? So if you click here on this, on this button, on this option, so it's validating all the program rules that has misconfiguration issue and all those programs are being grouped by program. So if I click on the, on the first problem, the WHO tracker. So I can see the name of the program rules and the issue that each of one is having. So there is a program rule that is called check mobile number and we see that there is a, the condition of the program rule to trigger is empty, the same as this one, check the address is on valid format, condition is empty. So we have several in this server which the condition is empty. And of course there are other potential issues, like this one that this expression contains some syntax error in the, in the expression. So this is a way for the admin also to check for a particular user what is going on in with the program rules and try to solve the problems before rolling out the Android devices to the field, okay? So hopefully this is going to be very relevant for the implement, for the implementers. Also more new features that we have is, we have improved a lot the, the, the performance in the, in the, in the, in the search for tracker instances to entity instances, because now we are separating the offline and the online search flows. In this version, when we are using, when a Android user is searching for a particular TI, putting some data in some attributes. So first it's going to look in the search in the local database in all the TI's that has been stored in my, in my device. But then in a transparent way to the user is going to also try to search if the user is online, try to search for the TI's that has been registered on a roll under the, or you need search scope, okay? This is going to be completely transparent for the user and the performance has really increased in this version. And also something that is new to this version is like now, even if you have selected a program, you are able to search outside the program, like this means globally. And for that, of course, we are like using the track entity type, not that program attributes, but the track entity type attributes to search across programs. I'm going to do a demo in a moment, but first let me also go with the, with the new, with the next feature that is the break the glass and basically in two six, we have finally implemented break the glass. So basically now when we have a program that is protected. And also when the user is searching for a TI's that are not under his or her or you need to capture the scope, then it will show up, the application will show up a dialogue asking for a reason. Why do you need to access to this information? So when the user, the user needs to specify the details of the reason, click on accept, and it will gain the ownership of the TI for a temporarily. I think that temporary is about two hours if I am not wrong. Okay. So let's see how this looks like. So for instance, I have also my user, a web user here. So in this case, this user has access to all the programs and all the TI's in the server. So what happens if let me go through the child program here. I am under both. I'm going to select this particular unit and I have all these persons here, all the entities. So now let's say that I am my Android user that doesn't have access to the child program. Okay. But let's say that the Android user will like to search to enroll a new patient under this WHO tracker. So I click on this one. Okay. So I'm going to click on the search. Okay. And then let's see that I am interested in Sandra Stewart. Okay. So I write there Sandra and here is Stewart. Okay. Let's see if everything is correct with the not typos here. Okay. So now if I click on the search button, okay, it disappears that, okay, this person doesn't exist in my program. And with this, when I click on this button, what is happening is like, it's searching in my local database. And if I am online, it's also searching on my or unit search scope for this particular program. Okay. But now as I said before, in this version, we have the possibility of searching outside this program. So if I click on this one, okay, I can see that I have access to this tracker TTT with the first name is Sandra, the last name is Stewart, and I see that this enroll in this particular region. Okay. So now, of course, and this is possible because I am using for searching the tracker TTT type attributes. So now if I click in on this particular one is as the program is protected, it's going to ask me for a reason. Right. So I can specify here any reason. I click on accept. And then it works as usual. So I need to select our units for the enrollment date. Okay. I can continue with the enrollment of this person. Okay. So let's go back. Okay. So break the glass and also something that is new in this version is like now the TI search, you know, is configurable. So far, you know, when any time that the user needs to like add a new TI, create a new TI in the Android mobile, first is mandatory to search. Okay. And this is, I would say, the full behavior, the most common behavior. But also we have heard from the community of the use cases that they are not required to search for doing a TI search before the creation of a TI. Okay. So for them, for those implementations, this has been like an extra tip that could be stupid. Right. So now we have that as configurable. So we can like change this behavior using the Android settings web app, the default behavior, and the one that we recommended in most cases is still search before creating. Okay. Just in order to avoid duplicates that is very, as you say, as you know, very, very important. But also if you want them to have this possibility of like having the TI search like configurable. So then you can use the Android settings web app, which last version was published last week. So if I'm going to the server again, and I can ask for the, can I, I can look for my Android settings web app. Okay. And under appearance, I can see here, this needs to be program specific. So I can like add the program settings here and look for the, for the program W2 tracker. And we can see here that there is a new checkbox that is allowed the user to create a TI without searching. So I'm going to click on this one. I'm going to save it. I'm going to save it here. Okay. And now if I go back, I need to synchronize the, synchronize my metadata again in the configuration. Okay. It's taking a little bit. Okay, it's done. So now I'm going to my home. I'm going to navigate an A again to my program. Okay. And now I can see this button. Now if I want, I can create a new TI right away. Okay. Without search. Again, I would recommend it always use cases like search first and then create. But if you have interimplementation use cases where this is not needed, you can use this functionality as well, of course. Okay. So let's move on with the new features. Also, now we are going to the TI entry piece. And this is something that was very important for us. And it was like a lot of hard work. But I think committee worth it is, you know, that we have been supported the QR data elements and attributes for a long time now. But also, in this version, we are supporting just one data matrix QR codes. These are like special QR codes which are matrix representation that allows to store more information as the regular QR codes. And this is widely used in many applications, especially for the ones that need to identify like internal products as the logistics management. And one of the most important use cases that we are having this year that we would like to support is like using the Android application to support basic LMAs, basic logistic management information system. Right. So the way that this is working is like when we are scanning this QR matrix code, it can be the information contained in the QR code can be saved in different attributes or data elements. Okay. And in this case, the way that this is working is for the logistic part, the logistic piece is saving the QR code, the different tokens in attributes or data elements that represents the serial number of a product that represents the expired date of a product that represents the product number and so forth. So I'm going to show you how it looks like from an Android perspective, from an user perspective. And then my colleague, Marcos, is going to explain how you can configure this in the server side in order to have this functionality in Android as well. So we have a program here that is called DS1 program. And here in this program, we are collecting the different products. Right. So I'm going to open a product for you to see how it looks like. It's very simple. It doesn't contain even events. But if I click on the details in the product data, I can see that there is a QR code that this is one and then a serial number. This is coming from the QR code, a lot number, an expiration date and a GTI that I think this is a product number. Right. So in my end of now, my use case is like I am receiving a product that it contains a QR code. It's a stick to the product. And then I would like to know if that product exists in my inventory. Right. So let's do it. So I'm going to say this one. So and for that, I have this screenshot. Okay. Basically, this screenshot represents a sticker with the QR code. And this QR code contains information about the serial number, about the product code, about this code, the tone code, I think is being called, and the spire date, hours of 2020. Right. So let's see if this exists first. So I'm clicking here on the search. And now I can search by the QR code. Clicking here. So I need to read that one. Okay. So now I'm clicking on the search button to see if that product exists or not. Okay. There are no results for this search. So now I can create a new one. Okay. I need to specify, of course, the enrollment of the unit and the date. Okay. And now if I open the product data, I have here all this information. I have the QR code. Okay. Here, but also you can see the serial number that is this serial number over here. You have also the lot number, this number over here. You have also the spire date that has a different format, but basically represents also the date of August 2020. Okay. And the product code that is this one. Okay. So hopefully this is going to be very useful for the implementations related to a logistic management. Okay. Let's move on. I'm not going to say this. Okay. Also, something that we have improved is the refresh data. Now this icon now is presented in almost everywhere, every spring of the application. Okay. This as you probably most of you know, this icon means that you're going to refresh the data. You're going to sequence the data. And we have that now available in many different screens, represent different contexts. So if for instance, I click here on this button over here, it will refresh all the data for the programs and datasets that I have access to. But then I can navigate to any program. So if I navigate into this one and then I click on this button, it will refresh all the data of the TI's that are coming from this particular program, only the TI's from this particular program. Or I can go to a particular TI and then if I click here, it will refresh all the data for this particular TI. Right. The same is happening for but I'm not going to demonstrate it, but the same is happening for events and the same is happening for datasets as well. Okay. This is new in 2.6. So also rendered icons in enrollment forms. As you know, this has been the pictorial data entry has been a feature supported by Android from the very beginning, from the very first version, but it was only happening in the programming stages. So now if this also is possible during the enrollment. So now you have in enrollment program sections or enrollment sections and then inside of the enrollment section, you have an attribute that is linked to an option set and every option of the option set is linked to an icon. Now it's possible to render this kind of data entry layout when entering data. Okay. So new in 2.6. What else improves safe and complete flow in events? I think that we have improved this quite a bit as well. So now I hope this, we hope this is more intuitive. So for instance, if I open the tracker program and I select in this one. So I see that there is an event here and probably this event, yeah, it's not completed. So I click on this one. So the way that it works now, the new workflow is like you just scroll all the way down till you see the safe button. You click on the safe button and then this new menu is going to appear. So it's giving you the information that is safe in the local database. And then do you want to mark this format as complete that you can click not now or complete? So I'm going to click not now. Okay. And to leave it as it was. And then also if the user has the authority of uncompletion events or enrollments, you can also reopen an event or an enrollment if you go to the details of the enrollment or event. And I have, these users have that authority, so I cannot like go through that, but it's also now possible using this new layout. Okay. And something that we think that can also improve the user experience is like now having a summary screen with all errors during the time. So if, for instance, I am like creating a new TI now in this program that I can create before searching. So I create new TI, click on accept the enrollment date. And now let's say that, okay, I am not adding any more data, I am just click on the safe button. So then a new menu show up here with all the problems that has been encountered. In this case, we have problems with a lot of mandatory fields that hasn't been filled like the unique ID, the first name, the last name, the per date. And then also you can have warnings that you have implemented this with the program rules that basically the birth date says that the woman's age is outside the normal range. With the birth date entered, the age would be zero. Okay, so it says that, okay, be careful because based on a program rule, you shouldn't have like an age that they are zero. You just have about greater than zero one and so forth. So all the issues, errors with the mandatory errors that are coming from the program rules or conflicts or issues that are coming from the warnings that are coming from the program rules, it can be, it will be related here. If you click on review, this will mark the ones having the issues in the, with this red label, this field is mandatory, this field is mandatory, and also this field is mandatory here for the choosing date. Okay, let's continue. Other features that are smaller, it's improved design for the asset column span. So now you can like increase or decrease the column size for a particular asset. Let me go with an example in this one. Okay, now you have these arrows over here that basically are fixed in the top left of the screen. So you can reduce the size of the column where the labels are, clicking on this button. Okay, just in order if you have like a small text for that element, so you need more space for the name of that element. Okay, so you can play with this now. Also a short hint of UI selected when opening the, the our unit hierarchy. In the case, this is not the case, but in the case that the mind that you have had 2000, hopefully not, but hundreds of our units. So now if you are like filtering, if you are opening here in the filter, like the or unit three, okay, so I'm opening unit three because I like to fill to do some filtering here. Okay, so I'm sitting here. So now I can like see this, this action is going to show what are the parents or units. Okay, in the case that I want to navigate to a part of the parent or unit sub three and so forth. So hopefully this can be useful as well for implementation containing many, many organization units. Sorry. What else? A high side shape button, a form is not editable. This is also new. So I'm not going to demo this, but in mind that you have like a form that an event that has been completed and the configuration in your server is like to not allow to any addition when in an event has been already completed. So now if that is the configuration case, so the user is not going to see the any shape button. So the user can could only see what is in that particular event or in that particular environment, but they couldn't change or update anything clicking on that button. And then at the end also we have now aligned the events navigation button bar. Now everything looks like the same in events in single events and then in tracker. So if I click in a particular program, event program, so opening an event. So now everything here is also homogeneous with tracker, especially this one that was missing the details of a particular event. Okay. And I think the last issue, the last feature that we would like to present today is the offline analytics. You know what offline analytics is has been a legends for offline analytics. Offline analytics has been in the under applications since the last version and we are like trying every version to add more and more functionality. So in this version what we have added is the legends. So now if I am, this is for instance the program, so now if a visualizer that has been defined with a data visualizer app in the server, if it contains legends, that is going to be also showing the, in the other application as well. Okay. As you can see here. So basically this table is coming, of course it's coming from the server side and it contains a legend for that, depending on the different values of the the data elements or indicators, it will show up a different color in the table sets. Okay. This is also new into six. And I think that that's all from my side, from the Android side. I don't know if it's time now for questions or maybe going for the next presenter that I think is Marcos. So I must stop sharing then. Thanks Jose. Can you see my presentation? Yes. All right. So I'm going to talk about features we are delivering in 238 from the tracker team. And as always, the full set of features can be found on the release notes. So have a look at the release notes for the complete picture and also for links to the documentation and different other information about the features I'll go through today. So for 238, the tracker has been about data matrix codes. And I'm going to get a little bit more into the data matrix codes, not giving it the proper full explanation of how it works in the LMS logistics use case that I would defer to Breno and George who is setting up a demo that will be much more complete and informative about how to use DHS for data matrix codes. But I will mention a little bit about how to build them and what functionality we have introduced. I'm not going to get much into the performance improvements and features in this demo. But we have been working hard on improving the performance of DHS once again. Some features going into 238 only and some benefiting also elder versions. One of the main benefits in 238 when it comes to performance is that the new tracker importer is is now being used wider. It's being used by the capture app for importing events and tracker data. And we think that will have a positive performance impact. We're also building a new feature that wasn't quite ready for release in 238. That would help building indexes on the database. But we have added some documentation on how this feature can be used from the back end in the documentation about running the high volume tracker implementations. We have also now added support for tracker working lists. Full support for tracker working lists in the capture app. And one of the things we are most excited to show you is that the capture app is now available in continuous release. And you can install the latest version of the capture app from the app management app to always stay up to date with fixes and features. This is possible only after upgrading to 238. One of the main features, one of the things we are most excited about in this new app is that after you upgrade you will have access to trying the new version of the capture that also contains tracker functionality. This is an opt-in that you can turn on in the capture app after upgrading. And it's a way of testing the new functionality on your configuration and giving us feedback about what works and what might need improvement or fixing from our side. So I'll get into all of these things later. First of all, we're going to have a look at the data matrix from the web perspective. The data matrix codes are supported with program rules and they are supported throughout our data entry apps and also on the back end. And if I have a quick look here in the capture app and I open a modified version of the child program that you might know, we can have a look at this guy called Anthony and his BCG status. Right now it's crossed off that it did not get the BCG status but let's change that to yes. And now you can see that there are some new fields that shows up here under the BCG dose. A GT number is sort of a product number that we can add to explain what sort of product this has been and it can be manually entered as you can see. But what can be a better use case and what Jose showed us is that you can on an Android phone you can scan a data matrix code and put its text into this field here and our program rule will dig the GT number out of this two-dimensional QR code. I'm now going to just paste the same text that would have been scanned on Android to show you how it works on the web and you can see that the field for BCG GTEN was automatically updated. This is one part of this big cryptic string up here and there's also other pieces of information in this string that could be extracted and entered into different fields. So a quick look at how this actually is set up. It's quite simple really. We have a program rule called assign GS1 data matrix values to single fields with a very simple expression. It checks whether BCG data matrix has a value. This is the field that we see up here with the cryptic string inside and then for actions we would have one action per field that we want to dig out and right now I have only one of these actions but this is also pretty simple. We have the assign value type for it. We're assigning the value to the BCG GTEN field and we are running this program rule function called extract data matrix value providing what field we want to extract and providing the full string that was scanned or entered into the system. This same rule would when built it would work the same way on Android, on web and also on the backend on the import. So continuing ahead we have now support for working lists and I will go back here and the child program is as you know a tracker program. When we are working with a tracker program we always have these three standard working lists at the top for active enrollments, completed enrollments and cancelled enrollments which has been inherited from the old tracker capture. Now that we have the opportunity of making our own working lists so this will be replaced when you make your own working lists. If I make one now listing children born this month for example and maybe adding the gender column and making sure that we are ordering based on last name. I can save this view and this month with a name and as you see this view will take the place of the three standard lists. So once you start using the working lists they will take the place of these three standard lists and if you need any of them as well you would have to add them in addition. In this list there's a preset configuration of the order of the columns and also of the filters that has been stored. This list can be shared as you would be expecting from the way this works for a single event program. You could share this with another program and allow the users to see this list automatically without having to add it themselves. So this is useful when working with the use case where you know of a good working list that could be shared with everyone. The list can of course be deleted again and if I do that we are back at the three standard working lists here in the tracker program. One feature that I want to mention that I'm not going to really demo is that calculated values in program rules is now saved with a type. This is useful. The calculated values used to be stored as text always but to be able to validate the expressions properly and Jose showed us some of this validation in the Android app and the same validation will happen on the maintenance app when you enter the program rules. It will also be possible to trigger from the data administration app. These validations are relying on the fact that we know what type each of the variables are. As you know when you link a variable to a field or to either a data element or a track entity attribute, the value type will be inferred from this linked element. If you use a calculated value, however, then this would be where you can now add a type and explicitly say that this calculated value is a number, for example. There is a difference at both the validation level and also on how these are evaluated at run time when you run the program rule. If you end up adding two and two together and those are both numbers, then this would result in the number four. If you add the string two to the string two, then that would instead end up as 22, which might or might not be what you wanted. Make sure in your existing instances to have a look at the value type for your program rule variables. There might be some program rule variables in your setups that now have been defaulted to text, but you want to change the number. Another small one we have now are the descriptions under the information icon. You can now see to the left here that we have the WHO MCH hemoglobin value field. Whatever is added as the description will now again be visible if you hover this information icon. The information icon tells us that there is a description behind if you hover over it. This is useful to provide input to the user that's entering data so that they can know more about how to enter the correct value into the field. Then over to one of the bigger updates that we are coming out with in 238. I'm going to show you this. We are now looking at the standard bundled capture app that was bundled with 238. But after installing 238, you will also have the opportunity to upgrade to a newer version than the bundled version. If we go to the app management app here, we are now informed that there is a new version of the capture app. You can see here core apps with the updates available. Opening this page, we can see that there has been two more recent versions than the stable, than the one that would be released with your folder file when you install DHS. To install it, it's very simple really. We just click the install button up here. You can now see information about the installed version under this button. If we now simply open the capture app, we will be directed to the updated capture app and not the one we were looking at a moment ago. There is one visible difference when we now open the child program and look at the original Galihun. One very visible difference on the top of the screen above the working list. We are offered to opt in to use the new enrollment dashboard for the child program. As you might remember when I opened Anthony's record, I was directed to the old tracker app and I would still be after upgrading the capture app to the latest version. But now, certain users would be offered the opportunity of opting in and testing the new enrollment dashboard. To see this message, you would have to log in with a super user. You would have to have access to metadata right for the program child program. This will not be visible to a regular user unless they have one of these privileges. I'll try to click here for you and here's a little bit more information about the testing and the fact that this is a testing of a product that we are not totally finished with. There is some functionality that's not built yet. We know that when exposed to the world, there will be configurations that contain things that we had not anticipated. So it's very, very useful for us. If you can go and opt in and test the capture app with your own configuration and let us know when you find anything that looks not to work like you expect with your configuration. Right now, I'm going to go ahead and opt in. As you can see, the opt-in message on the top disappeared. Instead, we have an opt-out message at the bottom. What happened now that I clicked the opt-in message is that for the child program, any user that would use the capture app would be directed to the new enrollment dashboard that I'm about to show you in a second. So the opt-in message is only visible to certain admin users. But if opting in, it would affect all the users. We also have a backdoor opportunity for opting in just for one user. If that is relevant, you can reach out to us and we will help you on how you would do that if you wanted to opt in for just one user. But just know that opting in here means all users. So I'm going to now click Anthony GS1 again. And we're going to see that we're not directed to the old tracker anymore. We are now seeing the new enrollment dashboard with an overview over stages and events to the left here. We see the birth on post-natal stages. We have widgets to the right for comments, for indicators, for the profile or tracking instance information, and for the enrollment. In this page, I can also edit the profile, for example, adding, changing the name if that's necessary. And program rules would of course be running in this form as well. We have the enrollment widget down here that allows us to do some of the common enrollment operations, manipulations. And we are building this widget out with some new functionality also as we go through the continuous release in 238. We're now going to have a look at the birth stage and the event that we just saw in the data matrix test. As you can see, we are now in the same view state that you would be used to from the single event programs. So when opening the event, you will see the full event with all the data. You will see widgets on the side with information about the event. For example, the event comments at the top here. And indicators. And you would also see which person this belongs to. You don't have the option of editing the profile from this page, but you would see the name and see who it belongs to. And the enrollment actions would also be available in this page. You can notice that on top, we now have a context that will tell the user where she is in the process in the navigation tree that contains the program and organize like we would be used to. It also contains the person, the enrollment, the stage and also which event we are looking at. To make a change to an event, we would have to click edit here. This would take us into edit mode. Being able to edit anything that we wanted to do except for the GT number, which is assigned by a program rule based on the QR code that we have entered into the data matrix above here. Going back to the enrollment overview, we have the opportunity of adding the post-natal event, which is not yet added for this child by clicking the plus button down here or by the quick actions on top of the screen. In the quick actions, we also have the opportunity of scheduling a new event. I'm going to show you this briefly. As you can see, we can't add another birth event. That's a non-repeatable event, and we already had one, but we have the post-natal and we can schedule the post-natal events for this baby. As you would be used to, the due date would be suggested here in the dialogue, and it would be based on the configuration of the program. It is possible to change the due date. If I do, I know that on Mondays, there are no post-natal services in the clinic, so I will change it to Wednesday. This is perfectly allowed. I am also informed that this is two days after the suggested date, originally suggested date. There is a feature that we have also almost built, which would allow suggesting this scheduled date based on program rules. Although this suggested date right now is based on the standard intervals that you configure on the program stages, we have a feature on the way for setting a dynamic date based on program rules. In case you know something about the data, tell us something about when the suggested date should be, and the program rule could set this date. Another new feature that we are excited to give to you and hear what you think about is the next sentence here, telling us that there are no other schedule events in Gellehun on that day, but if there were both other schedule events, we would actually get to know how many. This is meant to be a help for anyone that would try to balance how many patients to schedule on the same day. We also have the event comments down here, so you can add the comment to a scheduled event. No service on Mondays scheduling or web instead. This was always supported by the beta model, but it was not supported in the old track and capture as you were adding a scheduled event, and it was identified as one of the things that would be useful from our requirements gathering here. Right now though, I'm not going to schedule this event. I'm instead going to report it. There's a tab up here that lets me switch between scheduling and reporting, so I'll go back to reporting the event and adding the date and any data that would be collected to be added. We also have the same update to the workflow as Jose was showing us on Android. Here in the web web form for adding an event, at the bottom we have two options for saving. Either you complete, which is highlighted as the main action, or if you're not ready to complete, you would click the button beside it for save without completing, and you would have to click on one of these buttons to make the choice to either complete or not complete when you save. So we wanted it to be more explicit if you wanted to save without completing. Another thing that is worth mentioning here is that once we start using this form instead of the old track and capture, there will be much less traffic on the server. This form here would not be stored while clicking through it. All the changes would only be here in the client until I make one of the two choices down here. When I do click complete, then there is only one call sent to the server, whereas in the old track and capture we were storing between every ref field. When we updated one field, that value would immediately be sent to the server, meaning that if this was all track and capture, I would have already made six calls to the server, whereas here in the new capture app, I'll only make one when I click complete here. Here you can see now on the overview that we have our completed event. All right. So I think I have covered everything I have planned and that was everything from the tractor for this release. I can see that we have Scott now turning on this camera. So I will stop sharing and give it over to Scott. Yeah, thanks, Marcus. All right, let me just make sure I get the correct screen shared here. Can you see my screen? Yes, thanks. Okay, so now is the fun part to talk about the analytics features that have come out for DHS 2.38. I'm going to cover three features here briefly, and then I'm going to go into a demo of each one of them. So 2.38 was actually a really big release for the analytics team, and on two fronts really. The first one is that we have released an entirely brand new DHS 2 line listing app. So that's the first thing, first bullet you see listed there. This app, much like the capture app that Marcus was just describing, is on a continuous release on the DHS 2 app hub. So the app is now, as of this morning, actually published on the app hub. You can go there, you can download it. There are still some features that we're working out specifically with how the analytics or the line this show on the dashboard. And so we expect to have everything packaged up and done by 2.38.1, which will be coming out probably in the mid-June or so, very similar, maybe aligned with the annual conference. But going forward, all of any new features in that application, any bug fixes will be released continuously through the app hub. So as you, just as Marcus was pointing out, as you, when you go to the app hub, take a look at what version of the app there is. There'll be multiple versions there. You can grab the latest one, and there'll be notes and updates, information about each one of these releases. So the whole point is that you don't have to wait for six months or even a year for new features to come out in an app that you need. We can continuously release those to you, and you just need to go to the app hub, download the latest version of the application, install it, and then you'll have access to those features without having to go from big DHS 2 version to version. So this app has several major new features. So essentially what it does is it is building off of the line listing functionality that is in the event reports app. So the event reports app, highly used app, but it has a lot of limitations that many of you are very aware of. And so what we did was we started to go down an entirely new application that replicates all of the same line listing functionalities that is in the event reports app, presents it to you in a much easier, more intuitive user-friendly way. And then we also have several new features in this app as well that are not in the event reports application. For example, we're able to see now a line list of repeating events. We're also able to bring in all of our tracker-specific period dimensions that were not previously available in the event reports app. We're also able to get some additional information by having like created by columns and last updated columns. These will essentially show you the username of the person who either created the tracked entity or created the event or last updated it. Again, I'll show you an example of that in a minute. Going on to maps. Maps was a really big release because we are able to bring in support for multiple org unit geometries. And essentially what that means is every org unit in DHIS2 now can have multiple either shapes or points or polygons. And from a practical implementation perspective, the implementation that is driving this is the need to have catchment areas for health facilities or even schools as well. And now we're able to have a point for the facility, but we're also able to draw a shape around the facility representing its catchment area. And we at DHIS2 do not produce the catchment areas, but we work very closely with two partners, RID3 and Crosscut. They are organizations that are able to work with you, your country, your implementation project, and draw those catchment areas. And they both employ advanced algorithms and processes and different methodologies to actually draw those catchment areas. And of course, once the catchment areas are kind of calculated, they're editables, especially with Crosscut where they actually have a tool where you're able to go in and redraw catchment areas if the automatically generated one is not exact. Then once you have those catchment areas, you're able to import them into DHIS2 and visualize them on a map. And again, I'll show you an example of that in just a second. The last thing that I'm going to talk about is some new functionality to the indicator expression. We have a new functionality called sub expressions. These sub expressions allow you to count the number of org units that fall within a certain parameter that you define. So it's long been requested that we need DHIS2 to count the number of org units for different scenarios, count the number of org units that have a stock out, count the number of org units that have more than X number of cases of some disease or count the number of org units that have high dropout rates or something like that. We just want to know the total number of facilities that have something going on. And this sub expression allows us to do that. So I'll do a quick demo of that as well. So let me just exit out of here, and I'll jump straight into the line listing now. So when you look at DHIS2 38.1, you're going to see a new app in the app menu. It's the line listing app that looks like this. It'll probably become an icon that many of you are very familiar with. You can, of course, search by it too, and it will show up. So I'm in the new line listing app now, and I'm going to just give you a quick tour of it, not going into a lot of detail. We have supporting documentation that goes into covers every click that's here in the app, but just a quick overview. So you see this app looks very similar to our data visualizer application, and that's very much by design. So on the left side, we have our data item selection panel or dimensions panel, and this is obviously where you turn on the different data that you want to see. Then along the top, you see that we have now a columns, we have a columns area, and we also have a filter area. And so this is a dramatic improvement over the previous line listing app, or sorry, the event reports application, where you really weren't able to organize your columns very easily. So in this, you can see that I have all of these columns. These are all different data items that have turned on in the columns, and you can actually see that I can drag them around very easily, see, like move it around, and to change the order of my columns. Now the filter dimension is there in case you want to filter your line list by some additional criteria. So let's just start a new one. I'll just give you a, I'll just make one for you here to highlight all the new functionality and the workflow of using the application. So the very first thing I have to do with this application is I have to define my input. I have two input options. I have event or enrollment. Event is so that you can see individual data, event data from a tracker program stage or event program. The enrollment is to see data from multiple program stages in a single tracker program. Okay, so I'm going to stick on enrollment. And then I can, and when I check on enrollment, you see that my domain dimensions and time dimensions are starting to update. But let's go in now. It's like our program dimensions. So first I can choose a program. I'm going to choose COVAX. So this is a COVID vaccination program. And so I can, so when I choose my program, I see now all data items available in this program. You see that this program has quite a lot of data items. I can of course search within the, within the, all the data items. So that's, that's program indicators, that's program attributes, that's data elements. So, but I can search for something like name. And you see the name comes up. So let's add family name. When I, when I click on family name here, you see that what pops up is what we call our condition definition or condition selection box or window. And here I'm able to add a condition. And what a condition is essentially a filtering criteria for the data that you want to show. So I can click here, say no conditions are here. And I want to add a condition. So because family name is defined as a text field, my conditions that are available to me are here. So exact is not contains, does not contain. And you see that we have is empty stroke null and is not empty stroke, not null. And you'll see that these are available for all different data types. No matter what you turn on, you'll have is empty is not empty. I'm not going to add anything now. I'm just going to add it to column. So it's there. And then if I'll just go ahead and add given name as well. And then I can also remove this search. And let's say I want to add just some data elements. So you see here, I can go into my filtering and add specific data elements, program attributes, program indicators, categories, or category options. So they're all there. I'm just going to choose data elements. And let's just come down and choose vaccine name. Here's all my different vaccine names. Very simple. I'm just going to use the double arrow button to select all of those. And you see here at the top, I have another tab. And this is defined to define my repeatable events. So in this tracker program, we have multiple repeating events for every time someone is being vaccinated or receiving a COVID vaccine. So I want to see the last two vaccines that they were given. Again, this data is entered into the same program. It's just two different events, or entered into the same stage. It's just two different events. So I'm going to click on my repeated events. And you see here that I can select my most recent events or my oldest events. And you just simply put the number that you want. So I'm going to say I just want my most, my two most recent events. So I'll add this to columns as well. The last thing that I need to do is to define a time dimension. So we've been referring to DHIs to time dimensions as periods for a long time. And we're starting to move a little bit away from saying periods and starting just saying time dimensions, because we have different types of time dimensions available to us in Tracker. So let's look at, we have those given, but that's not applicable to the program enrollments. We have data registration. So let's just turn on data registration. Let's go to yearly. Now you'll see here that the period selector here is the same period selector that we have in our other applications. But we can also define a start and end dates as well. Let's just say this year, let's add that to columns. And then let's just add a last updated on. I'm not going to, I'm not going to, to add any additional criteria here. I just want to see what the last updated was. I don't really like this order. So I'm just going to move it around so that I have my last name first. I'm sorry, not my family name first, given name. Last updated on. Let's just add data registration and then or unit and then my data. It looks like I am not returning any data. That's fine. Let's just double check. I have everything. All right. Well, good news is I did this before, so I'm going to open. I'm just going to go to go back enrollment. All right. Now I'm going to remove vaccine name. I'm going to go to my repeatable events, add that to the update. It's going to take a second. So if I scroll over now, you'll see that I have multiple, I have the same data element coming from two different events here. So I have vaccine name, vaccination, most recent. And then I have vaccine name, vaccination, most recent minus one. So this is the most recent vaccine they were given. This was the one before that. And so you can see that it's clear here in the column that I have the same data element coming from two different events that were captured in a repeatable stage. Okay. Now let's say I want to add an additional filter here. Let's say that I only want to add those, see those tried entities, each one of you representing a tried entity, of course. I only want to see those tried entities that have a cardiovascular disease. And so I'm going to say, I'm going to click on cardiovascular disease. I'm going to click on yes. And then the update. And now my line list is going to filter by just those that have cardiovascular disease. If I don't want to see that particular data element in my line list here, I can find cardiovascular disease. And I'm going to try it over to filter. So now it's the same line list, but I'm just filtering by all of those who have cardiovascular disease. You can see here that you can add a lot of columns. So you can make very long or very large line list. And you can simply expand your area to continue to add columns as you need. You can also filter by program status. So we have program status over here on the left side. So I can filter by active, complete or cancel. And I can turn on my created by or last updated by. When I click on created by, you'll actually see that this is not a filterable dimension, meaning I cannot search for an individual user and set that as the criteria to only see those line lists or those tried entities that that user had created. We don't have that functionality yet. It's something that we're exploring and trying to organize and how we would be able to achieve that, but it's not available in this release of this application. So I can add this to my column as well. I can even add last updated by. Now, because this is a demo instance, it's not going to show any names here because this was just imported data, but had an actual user put this data in, you would see that username here and they created by or last updated by columns. What else? So hopefully you appreciated that we can turn on all of our different time dimensions. So in the previous event reports application, you only had one time dimension. Now you have all of the time dimensions that are applicable for the tracker program, for the data that you're looking at, and you can turn all of them on. You only have to define one of them to which the would would would be the or unit or sorry, not for the time dimension in which the line list would then be created All right, of course, you know, the options just to kind of give you quick overview, you can you can change the size of the different of the data that's being displayed some split density font size, you have options for that there, download, you have all of your various different download options, plain text, Excel, CSV, etc. And your file option menu here is just the exact same as it is on a data visualizer application. So save open new All right, so this is the first version of this application, and we will be making new versions of this application for the next several releases. So we know there's a lot of functionality here that has been requested that is well, there's a lot of requests that we have not completed yet. And we feel like this is a very good start. This is a really I think everyone appreciate this is a massive improvement from how people are making line list currently in the event reports application. But just that you know that we're not done, we have a lot more to add here. And you can take a look at dhs2.org backslash roadmap to see specifically what we have scheduled for this application in the next in the coming releases. All right, so if you have any questions or issues with this application, again, this is the first version. We feel quite caught we have done extensive testing on it, we feel quite confident in its ability and performance. Of course, you're deploying dhs, you know, you have many different ways in which you're using and deploying dhs to many different configurations that we are not able to test against. And so we do highly encourage you to download the application, test it, and please do give us any feedback. One thing to point out here is that this application will not override your previous saved line list in the old event reports application, meaning that if you you can open line lists that were saved in the old event reports application here, but you have to save them by a new name. And the reason is that we don't want to override those previous line lists because this one has new functionality. And so if you change the layout, change the look of it, I mean, add something like repeatable events to it and save it by the same name, then it wouldn't be you could not open it in the old event reports application. And that may be very detrimental to some users that are still working in that application. Okay, what else? Let's move on to the maps app and take a look at these catchments. So again, like I was saying, we don't make the catchments in dhs too. These are made externally by our partners grid three or cross cut, and you are able to import those via the API into dhs too. So I'm going to turn on population by age layer again, the population by age layers coming from Google Earth Engine. This was a feature we released in the in the previous version of dhs too. So that's been there for a little while. I am going to turn on my under five population for male and female. I am going to go to my ordinance tab. And now what you see in the ordinance tab is this thing called associated geometries, this option here. And I'm going to open that dropdown box and choose catchment area. And I'm going to select bow just so I'm not making a huge map and add layer. I need to select the level to facility and not district. Okay, let's try that again. All right, so now you see your catchment areas have shown, and I click on catchment area. This represents a single facility, and I can see the under five population as world pop Google Earth is defined it or has projected it as for this particular facility 2422. You can also see that I can see the sum for each one of these sex and age disaggregations. All right, so I mean essentially that is it. It's just in all of the layers that you have here. When you go to the org units, you have this option for associated geometries. And again, it doesn't have to just be catchments. Catchment seems to be the driving use case for why we develop this feature, but it could be any number of other associated geometries. There's really no limit to it. And so I'm only able to apply this catchment area shapes to a facility level. You could of course have other geometries for different levels. So something that may be for district or something for national. It's really, there's a lot of flexibility here. So it's not it's not confined just to catchment areas, but catchment areas seems to be again the use case that is most required. I'll just make a quick point about the this catchment area just to show you another example. It of course is not confined to just the health sector. So this could be broadly applied to any sector which GHI is being used. And here we're looking at a map of the Gambia. And you can actually see that we have developed catchment areas for each school in the Gambia. And so if I click on a catchment area for a school, you can see that I have the school age population for that school catchment. And again, you can have if you have different types of schools, for example, say maybe you have a basic like basic education or secondary education schools, maybe these have different types of catchments, right? So right now this is showing that all schools are the same essentially, but we know in real life all schools are not the same or all facilities are not the same. So you could have different catchment areas for different programs or different school types. And again, you can show you can have all of those available to you as options. You're not limited to just one. You can have a catchment area for basic secondary schools or catchment area for referral hospitals and then a separate catchment area for health facilities or catchment area for facilities that are providing special ice treatment for like HIV, AIDS and some other facilities are not. So that means that those catchment areas are bigger. They cover some area that may be covered by another facility for some other health program. Hopefully that makes sense to you. But I do also want to stress that we are very eager to support and experience anyone using this functionality. We are keen to continue to develop it to continue to improve it. So if you have any questions or issues about using catchment areas, do reach out to us in the community practice. We will definitely get a response to you and try to help you out. If you have any suggestions on how we can continue to improve it, please do also reach out to us through the community practice. We're very happy to hear your thoughts and suggestions. That being said, I do think it would be great if everyone could look at the websites for our partner organizations, Crosscut and Grid 3. They have some really exciting functionality coming out specifically. Crosscut has developed an application within DHIs to support the development and import of these catchment areas that's connected to their own software. So the point is that we're just trying to work with multiple partners to make it as easy as possible for you all to have access to these multiple geometries specifically to the facility or school catchments. All right. The last thing that I am going to show you is the sub expressions. So I'm here to make this up. I'm going to go to indicators and I'm going to just click on an indicator that I had made previously just to show you what this looks like. So I'm going to scroll down to the numerator. I'm not going to go over how to make an indicator here for the sake of time, but I'm just going to go to the numerator. And for those of you who do know how to make indicators, then this hopefully will make a lot of sense to you. And you can see here that I've typed sub expression and then I've nested it within an F statement. And essentially what this is being translated is is showing me is counting all of the facilities for all of the war units in which we have an inpatient malaria cases is greater than 10. And if inpatient cases are greater than 10, then it's going to count a one. And if else, if not, then it's going to count zero. And so in the release notes, we have links to some fairly fairly thorough documentation on this and its limitations. There are some specific limitations here, meaning that the biggest one is that you can only do this for data elements. You cannot do this for indicators. So don't put an indicator in this sub expression. Okay, because it won't work. You can't also do more complex math. It's a very simple functionality. It's just one simple logic statement. So you won't be able to do like addition or multiplication or division within this expression. It simply won't work right now. We are continuing to explore ways to improve the functionality expanded. There are some potential pathways there, but it's not available yet. So in this first release of this functionality, you have to just make it very simple logic statements like is equal to less than greater than that kind of thing. All right. I think that is all I want to share. So I will hand it over. I think to Lars who will take us through the new functionalities for the platform team. Great. Thanks a lot, Scott. Very good. Cool. Can you see my screen by now? Yep. Let's see it. All right. Thanks a lot, Scott. So yeah, from the platform side of things, we are going to give you a quick update on what we've been doing for 238. So the first version you're going to talk about or the first feature you're going to talk about is what we call the version update notification. So a recurring problem that we've seen is that a lot of implementations and countries have struggled to kind of keep up to date with new releases and new versions coming out. In particular, when new patch releases are coming out, meaning those minor versions like 237.8 and so on, come out, we know that many countries sort of struggle to keep up and upgrade in time. And that has been problematic in terms of bug fixes, but also security vulnerabilities that we fixed. So to sort of ensure that your implementation is up to date and contains the latest security fixes and so on, it's very important that implementations actually upgrade. So to raise the awareness of these new releases coming out, we decided to build this kind of integrated system for showing version updates. So from 238 enabled by default, you can actually now receive messages in the inbox, in your sort of message inbox, when a new major release or a new patch release are made available from the DHS2 core team. So that means every time we release something new, then the system administrators of an instance will basically get a message about these new versions becoming available. We also raised sort of the awareness when there's an important security fix being available, like if there's a critical security vulnerability, then we also send out messages and kind of ask people to upgrade their installations to keep their system safe and then up to date. And so this is enabled by default and messages will be sent to users that have the famous all authority, meaning people that have full access to the system. And there's also a system setting called system update notifications recipients, which is a user group that you can configure. And that means that also members of that group will receive messages for these updates. So it's very simple to use. As you can see here, we have just integrated into the normal inbox or the messaging application that's already there in DHS2. And the messages will appear under the system tab or inbox on the left there. And you will get these messages. And you will also get notifications in the top right corner, the little green dot there, which indicates that and new messages there. So this is something to watch out for, for all of the implementations out there. Excuse me. And we recommend that people sort of pay attention to this and make sure they upgrade. There's been a range of security issues lately. And so it's very important that people actually react to this and update their systems. Yeah. And then some other sort of smaller features, disable account email notifications. So we have a, we've been having a system job in DHS2 for quite some time that basically sends out messages, sorry, that basically allows you to disable accounts for people that haven't logged in for a specific number of months. So as an example, you can set a job that activates users that haven't logged in for the last three months, for instance. And now the system can also send you email notifications to kind of warn you about accounts being disabled, so that people get a chance to log in. We saw that in many cases, people just didn't know about this, this kind of restriction. And then a lot of people's accounts got disabled inadvertently without people having the chance to react. And the number of days before the lockout will happen, can also be configured in the job under the reminder days before field there, as you can see on the left. Okay. And this is more for the system administrators. So we also now have a way to set the logging levels for DHS2. So logging levels basically means which sort of level of logging, how detailed logging you would like to see in the output logs of DHS2. And the point of this is that sometimes when you're going to debug tricky issues, which are hard to understand, then you might want to have more detailed logging than what is available in DHS2 by default. So the levels are typically like debug, info, warn, and error. And now you can set it even by package. So you can set a property in DHSConf, as you can see here on the slide, to indicate like the logging level. And debug is where often what you want to see, info is the default. So this is a nice way to change the logging levels without having to actually change the DHS2 source code itself. This can be done purely in DHSConf. Okay. So let's talk about some various features that we have from the platform side of things. So one feature we released in 238 is what we call automatic flush of the analytics API cache. So previously you had to set the expiration, meaning that you had to set it to something like six o'clock in the morning the next day, or to a certain number of hours, like, you know, for six hours or 12 hours or 24 hours. Now the analytics API cache will be automatically flushed when the analytics tables are being updated. So that means the cache will be in sync with the online tables. Every time you run this analytics tables, then it will also flush the cache. This is nice because now it means you won't get stale data to the same degree as you did before. You can keep them perfectly in sync. One feature which is highly requested, but for now it's only API only. We will add it to the UI soon. It's the ability to cancel jobs running. So in particular, the analytics table update job sometimes can run for very long. And so until 238, there wasn't a way to basically cancel those jobs before they completed. So now this is added in the API. So it will soon add it to the user interface as well. The added input identifier schemes for data value set. What this means in practice is that you can now use codes like metadata codes for things like the elements and arguments, and then import through the normal data value set API. And that is sometimes handy for integration purposes when you want to integrate and receive data from third party systems, which don't necessarily use the UIDs of DHS2. The ADX format, aggregate data exchange format, which we support in DHS2, is now available in the input export app. So you can use the UI now to import those files. Another thing which is API only for now is the ability to have metadata workflows. So this will also create a new UI for soon. But for now, it's available in the API. So this is a way to basically set up workflows around metadata changes. So it allows you to propose, accept, oppose, adjusts, and rejects changes to metadata. So those will be the steps in the workflow. And this is very useful for metadata such as organets and use cases like facility registry, MFL, and so on, where you need to have this kind of distributed workflow or process for maintaining and updating and making changes to the list of organets, say. So for example, if you have many different stakeholders or many different systems that would like to propose changes to the facility list, then we can now do this in a programmatic way through the API, as opposed to doing it in an out of bad mechanism like email or something else. So more about this later, it's coming more, they're coming a UI for this soon, and it'll be more documentation and guidance. Okay. Continuing on the API side, so in 238, we really improved what we call the Datastore API. So the Datastore API is really the internal kind of Datastore for GitHub, which is available in the API. So the Datastore is typically used by web applications, web apps, web app developers, who develop apps on top of this. So you need a way to do kind of flexible, customizable lightweight data storage. So that could be saving different types of data models, preferences, settings, and so on for the app. The problem was that the Datastore API was fairly limited up to now. There wasn't really a way to filter and have large amounts of data and so on. So in 238, we added a bunch of features to make it more of a fully fledged data storage that cannot really be used for more complex data storage needs, more complex data models, which need persistence from a map perspective. So the features we added were what we call field filtering. So with the field filtering, you can then basically define which fields to return in the response on the API. This is a bit technical, this is more for app developers. So this works now very much in the same way as the normal metadata API. So it allows you to define which fields in the JSON object you would like to return in the response using the fields parameter. So if you, for instance, have a hypothetical commodities namespace in the API, they can now define that they won't like to have the ID name, brand, batch, and so on in the response. We also added paging. So now you can return entries in the Datastore in Pages. So you can set the page number and also the page size in the URL using the page and page size query parameters. This is of course very useful if you have a large volume of data. So if you have, you know, hundreds of thousands of entries in a namespace, then it's not really practical to retrieve all of it. Instead, you would like to to do it in Pages. And this is exactly the same way as it works in the normal metadata API. We also added filtering so you can say, you can filter on any property. So if you would like to say filter on, let's say the ID, or you would like to do a like filter on the name and so on, then you can also use the filter parameter in the API. And this is very useful for, let's say, web applications that would like to show lists of some kind of entity, and then the filtering to find the relevant entities in the Datastore. And we also added sorting. So now you can sort the entries in the namespace by a configurable property. So you can say things like order equals name, descending or ascending. So that allows you to again, like if you want to have a predefined order in the list, it's very handy now to do this on the server as opposed to having to pull out all in the client side of the filter. So this was a bit technical, but the main takeaway here is that now the Datastore is a much more feature-rich store and can be used for much more complex use cases from an app development perspective. Yeah. All right. And that was actually it from the platform side. So thanks a lot for listening. I think the questions you can ask on the community of practice. And then we will do our best to answer from the community side.