You can download the full release notes as a PDF above for detailed information on all updates and fixes included in this version.
If there are any post-install steps required, they will be listed below. In V.0.40, more detailed information on the Post Installation steps of the new Mobile Care Worker Experience and Support at Home Data Model are listed directly below in a seperate section.
Maica - Photo
component with prefix Photo and variant container-filled so the mobile photo card renders properly.
Maica - Global - Check In/Out on behalf of Others
Maica - Global - Manage Incidents
Maica - Global - Manage Own Incidents
Maica - Incident - Create Access
Maica - Incident - Delete Access
Maica - Incident - Edit Access
Maica - Incident - Read Only Access
Maica - Incident Team Member - Create Access
Maica - Incident Team Member - Delete Access
Maica - Incident Team Member - Edit Access
Maica - Incident Team Member - Read Access
Maica - Planner - Support Available
Distribute historic appointment-level travel totals across accepted Appointment Resources so the new rollups preserve existing figures. Run in smaller batches if needed.
/**
* Anonymous Apex: redistribute appointment-level travel metrics to accepted Appointment Resources.
*/
List<maica_cc__Appointment__c> appointments = [
SELECT Id, maica_cc__Travel_mins__c, maica_cc__Travel_kms__c, maica_cc__Travel_Proportion__c, maica_cc__Travel_Proportion_kms__c,
(SELECT Id, maica_cc__Status__c FROM maica_cc__Appointment_Resources__r)
FROM maica_cc__Appointment__c
WHERE maica_cc__Travel_mins__c != null
OR maica_cc__Travel_kms__c != null
OR maica_cc__Travel_Proportion__c != null
OR maica_cc__Travel_Proportion_kms__c != null
];
List<maica_cc__Appointment_Resource__c> resourcesToUpdate = new List<maica_cc__Appointment_Resource__c>();
for (maica_cc__Appointment__c appointment : appointments) {
List<maica_cc__Appointment_Resource__c> accepted = new List<maica_cc__Appointment_Resource__c>();
for (maica_cc__Appointment_Resource__c resource : appointment.maica_cc__Appointment_Resources__r) {
if ('Accepted'.equals(resource.maica_cc__Status__c)) {
accepted.add(resource);
}
}
if (accepted.isEmpty()) {
System.debug(LoggingLevel.WARN,
'Appointment ' + appointment.Id + ' has travel totals but no accepted Appointment Resources.');
continue;
}
Integer count = accepted.size();
Decimal totalMins = appointment.maica_cc__Travel_mins__c;
Decimal totalKms = appointment.maica_cc__Travel_kms__c;
Decimal totalPropMins = appointment.maica_cc__Travel_Proportion__c;
Decimal totalPropKms = appointment.maica_cc__Travel_Proportion_kms__c;
Decimal shareMins = totalMins == null ? null
: (totalMins / count).setScale(0, System.RoundingMode.DOWN);
Decimal shareKms = totalKms == null ? null
: (totalKms / count).setScale(2, System.RoundingMode.DOWN);
Decimal sharePropMins = totalPropMins == null ? null
: (totalPropMins / count).setScale(0, System.RoundingMode.DOWN);
Decimal sharePropKms = totalPropKms == null ? null
: (totalPropKms / count).setScale(2, System.RoundingMode.DOWN);
Decimal distributedMins = 0, distributedKms = 0, distributedPropMins = 0, distributedPropKms = 0;
for (Integer i = 0; i < accepted.size(); i++) {
maica_cc__Appointment_Resource__c updateRec = new maica_cc__Appointment_Resource__c(Id = accepted[i].Id);
Boolean touched = false;
if (totalMins != null) {
Decimal value = (i == accepted.size() - 1)
? (totalMins - distributedMins)
: shareMins;
value = value.setScale(0, System.RoundingMode.HALF_UP);
distributedMins += value;
updateRec.maica_cc__Travel_mins__c = value;
touched = true;
}
if (totalKms != null) {
Decimal value = (i == accepted.size() - 1)
? (totalKms - distributedKms)
: shareKms;
value = value.setScale(2, System.RoundingMode.HALF_UP);
distributedKms += value;
updateRec.maica_cc__Travel_kms__c = value;
touched = true;
}
if (totalPropMins != null) {
Decimal value = (i == accepted.size() - 1)
? (totalPropMins - distributedPropMins)
: sharePropMins;
value = value.setScale(0, System.RoundingMode.HALF_UP);
distributedPropMins += value;
updateRec.maica_cc__Travel_Proportion_mins__c = value;
touched = true;
}
if (totalPropKms != null) {
Decimal value = (i == accepted.size() - 1)
? (totalPropKms - distributedPropKms)
: sharePropKms;
value = value.setScale(2, System.RoundingMode.HALF_UP);
distributedPropKms += value;
updateRec.maica_cc__Travel_Proportion_kms__c = value;
touched = true;
}
if (touched) {
updateRec.maica_cc__Travel_Approved__c = true;
resourcesToUpdate.add(updateRec);
}
}
}
if (!resourcesToUpdate.isEmpty()) {
update resourcesToUpdate;
}
Run the block via Developer Console (Execute Anonymous). Adjust filtering or batching if your org has a large appointment volume.
If you require assistance or have any question around the above, please contact Maica Support for guidance.
Add the new Support at Home funding source and synchronise dependent picklists. Add “Support at Home” to the Funding Source global value set, then extend the dependent picklists (Support Item Quantity Unit of Measure, Support Item Type, and Service Agreement Funding Type) so the new source exposes the Item/Hours/etc. options and the “Support at Home” funding type choice.
Rename WRAP claim type labels. Update the Claim Type global value set so each WRAP-00X value carries its new descriptive label (e.g. “Set up (WRAP‑001)“).
Expose the Support Item override number. Place the new unique “Support Item Number Override” field on every Support Item layout used for data entry so teams can populate the external reference, and keep the revised related list that surfaces parent/child items.
Update key layouts for the Support at Home model listed below:
Re-activate Lightning record pages affected by Support at Home. Publish the updated Lightning pages (Funding, Service Agreement, Support Item, Invoice, Invoice Line Item, and Unavailability) so the new Support at Home facets and fields become visible, and assign the brand-new “Maica Entitlement Record Page” override for Entitlement records.