Back

Maica Client Care V.0.46

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.

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.

Post Installation Steps - Maica Client Care V.0.46

🔴 Required: Data Migration

OEM-759: Incident Object Migration

Deprecated Fields (migrate data then delete):

  • Incident_Date__cIncident_Date_Time__c
  • Reporter__c (User) → Reported_By__c (Resource)

Deprecated Picklist Value:

  • Incident_Status: Investigation Ongoing removed → use Under Review or Escalated

Step 1 — Migrate Incident Date:

Please note, this step is only required if you currently use Incidients in Maica.

List<maica_cc__Incident__c> incidents = [
    SELECT Id, maica_cc__Incident_Date__c 
    FROM maica_cc__Incident__c 
    WHERE maica_cc__Incident_Date__c != null 
    AND maica_cc__Incident_Date_Time__c = null
];
for (maica_cc__Incident__c inc : incidents) {
    inc.maica_cc__Incident_Date_Time__c = DateTime.newInstance(
        inc.maica_cc__Incident_Date__c, 
        Time.newInstance(9, 0, 0, 0)
    );
}
if (!incidents.isEmpty()) {
    update incidents;
    System.debug('✅ Migrated ' + incidents.size() + ' Incident date records');
} else {
    System.debug('ℹ️ No Incidents to migrate');
}

List<maica_cc__Incident__c> incidents = [    SELECT Id, maica_cc__Incident_Date__c     FROM maica_cc__Incident__c     WHERE maica_cc__Incident_Date__c != null     AND maica_cc__Incident_Date_Time__c = null];for (maica_cc__Incident__c inc : incidents) {    inc.maica_cc__Incident_Date_Time__c = DateTime.newInstance(        inc.maica_cc__Incident_Date__c,         Time.newInstance(9, 0, 0, 0)    );}if (!incidents.isEmpty()) {    update incidents;    System.debug('✅ Migrated ' + incidents.size() + ' Incident date records');} else {    System.debug('ℹ️ No Incidents to migrate');}

Step 2 — Migrate Reporter to Reported By:

Map<Id, Id> userToResourceMap = new Map<Id, Id>();
for (maica_cc__Resource__c res : [
    SELECT Id, maica_cc__User__c 
    FROM maica_cc__Resource__c 
    WHERE maica_cc__User__c != null
]) {
    userToResourceMap.put(res.maica_cc__User__c, res.Id);
}
List<maica_cc__Incident__c> incidents = [
    SELECT Id, maica_cc__Reporter__c 
    FROM maica_cc__Incident__c 
    WHERE maica_cc__Reporter__c != null 
    AND maica_cc__Reported_By__c = null
];
List<maica_cc__Incident__c> toUpdate = new List<maica_cc__Incident__c>();
List<String> unmapped = new List<String>();
for (maica_cc__Incident__c inc : incidents) {
    if (userToResourceMap.containsKey(inc.maica_cc__Reporter__c)) {
        inc.maica_cc__Reported_By__c = userToResourceMap.get(inc.maica_cc__Reporter__c);
        toUpdate.add(inc);
    } else {
        unmapped.add(inc.Id + ' → User: ' + inc.maica_cc__Reporter__c);
    }
}
if (!toUpdate.isEmpty()) {
    update toUpdate;
    System.debug('✅ Migrated ' + toUpdate.size() + ' Reporter records');
}
if (!unmapped.isEmpty()) {
    System.debug('⚠️ UNMAPPED (no Resource for User):');
    for (String s : unmapped) System.debug('  ' + s);
}

Step 3 — Fix Incident Status:

List<maica_cc__Incident__c> incidents = [
    SELECT Id, maica_cc__Status__c 
    FROM maica_cc__Incident__c 
    WHERE maica_cc__Status__c = 'Investigation Ongoing'
];
for (maica_cc__Incident__c inc : incidents) {
    inc.maica_cc__Status__c = 'Under Review';
}
if (!incidents.isEmpty()) {
    update incidents;
    System.debug('✅ Updated ' + incidents.size() + ' Incidents status');
} else {
    System.debug('ℹ️ No Incidents with deprecated status');
}

Step 4 — Verify migration complete:

Integer oldDateCount = [
    SELECT COUNT() FROM maica_cc__Incident__c 
    WHERE maica_cc__Incident_Date__c != null 
    AND maica_cc__Incident_Date_Time__c = null
];
Integer oldReporterCount = [
    SELECT COUNT() FROM maica_cc__Incident__c 
    WHERE maica_cc__Reporter__c != null 
    AND maica_cc__Reported_By__c = null
];
Integer oldStatusCount = [
    SELECT COUNT() FROM maica_cc__Incident__c 
    WHERE maica_cc__Status__c = 'Investigation Ongoing'
];
System.debug('=== MIGRATION STATUS ===');
System.debug('Incident_Date__c not migrated: ' + oldDateCount);
System.debug('Reporter__c not migrated: ' + oldReporterCount);
System.debug('Investigation Ongoing status: ' + oldStatusCount);
if (oldDateCount == 0 && oldReporterCount == 0 && oldStatusCount == 0) {
    System.debug('✅ ALL CLEAR - safe to delete deprecated fields');
} else {
    System.debug('⚠️ MIGRATION INCOMPLETE - do not delete yet');
}

Step 5 — Delete deprecated fields:

After migration verified, delete via Setup → Object Manager → Incident → Fields:

  • maica_cc__Incident_Date__c
  • maica_cc__Reporter__c

Step 6 — Add additional fields:

After migration verified, add via Incidents → Edit Page → Fields:

  • Participant
  • Reported By
  • Appointment

🔴 Required: Deprecated Flow Cleanup

OEM-687: Flow Renamed

Deprecated: Maica - Funding Item Sync on Period EndNew: Maica - Funding Item Sync on Period StartAction:

  1. Setup → Flows
  2. Find Maica - Funding Item Sync on Period End
  3. Deactivate all versions
  4. Delete (optional)

🔴 Required: Appointment Resource Status Migration

OEM-677: Scheduling & Rostering Enhancements

Status Picklist Changes:

Old Values: Pending, Accepted, Completed

New Values: Pending, Accepted, Confirmed, Declined, Withdrawn

Migration Required:

  • CompletedConfirmed (value replaced)
  • AcceptedConfirmed (semantic change)
  • PendingAccepted (semantic change)

Step 1 — Migrate Setting Defaults:

maica_cc__Setting__c appSetting = [SELEcT Id, maica_cc__Default_Appointment_Resource_Status__c, maica_cc__Default_Shift_Resource_Status__c FROM maica_cc__Setting__c WHERE maica_cc__API_Name__c = 'Appointment_Setting'];

if (appSetting?.Id != null) {
    Boolean needsUpdate = false;
    
    if ('Accepted'.equalsIgnoreCase(appSetting.maica_cc__Default_Appointment_Resource_Status__c)) {
        appSetting.maica_cc__Default_Appointment_Resource_Status__c = 'Confirmed';
        needsUpdate = true;
    } else if ('Pending'.equalsIgnoreCase(appSetting.maica_cc__Default_Appointment_Resource_Status__c)) {
        appSetting.maica_cc__Default_Appointment_Resource_Status__c = 'Accepted';
        needsUpdate = true;
    }
    
    if ('Accepted'.equalsIgnoreCase(appSetting.maica_cc__Default_Shift_Resource_Status__c)) {
        appSetting.maica_cc__Default_Shift_Resource_Status__c = 'Confirmed';
        needsUpdate = true;
    } else if ('Pending'.equalsIgnoreCase(appSetting.maica_cc__Default_Shift_Resource_Status__c)) {
        appSetting.maica_cc__Default_Shift_Resource_Status__c = 'Accepted';
        needsUpdate = true;
    }
    
    if (needsUpdate) {
        update appSetting;
        System.debug('✅ Updated Appointment Setting defaults');
    } else {
        System.debug('ℹ️ No Setting updates required');
    }
}

Step 2 — Migrate Completed → Confirmed:

new maica_cc.UpdateRecordsBatch(
    new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Confirmed'), 
    new List<String>{'maica_cc__Status__c = \'Completed\''}
).setDisabledDomains(new Set<Type>{
    maica_cc.AppointmentResourceDefaults_MDTM.class,
    maica_cc.AppointmentResourceRollupTravel_MDTM.class,
    maica_cc.AppointmentResourceRollupType_MDTM.class,
    maica_cc.AppointmentResourceShift_MDTM.class,
    maica_cc.AppointmentResourcesRollup_MDTM.class
}).run();

Step 3 — Migrate Accepted → Confirmed (after Step 2 completes):

new UpdateRecordsBatch(
    new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Confirmed'), 
    new List<String>{'maica_cc__Status__c = \'Accepted\''}
).setDisabledDomains(new Set<Type>{
    AppointmentResourceDefaults_MDTM.class,
    AppointmentResourceRollupTravel_MDTM.class,
    AppointmentResourceRollupType_MDTM.class,
    AppointmentResourceShift_MDTM.class,
    AppointmentResourcesRollup_MDTM.class
}).run();

Step 4 — Migrate Pending → Accepted (after Step 3 completes):

new maica_cc.UpdateRecordsBatch(
    new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Accepted'), 
    new List<String>{'maica_cc__Status__c = \'Pending\''}
).setDisabledDomains(new Set<Type>{
    maica_cc.AppointmentResourceDefaults_MDTM.class,
    maica_cc.AppointmentResourceRollupTravel_MDTM.class,
    maica_cc.AppointmentResourceRollupType_MDTM.class,
    maica_cc.AppointmentResourceShift_MDTM.class,
    maica_cc.AppointmentResourcesRollup_MDTM.class
}).run();

Step 5 — Verify migration complete:

Integer completedCount = [
    SELECT COUNT() FROM maica_cc__Appointment_Resource__c 
    WHERE maica_cc__Status__c = 'Completed'
];

Integer oldAcceptedCount = [
    SELECT COUNT() FROM maica_cc__Appointment_Resource__c 
    WHERE maica_cc__Status__c = 'Accepted'
];

Integer oldPendingCount = [
    SELECT COUNT() FROM maica_cc__Appointment_Resource__c 
    WHERE maica_cc__Status__c = 'Pending'
];

System.debug('=== MIGRATION STATUS ===');
System.debug('Completed (should be 0): ' + completedCount);
System.debug('Accepted (should be 0 if full migration): ' + oldAcceptedCount);
System.debug('Pending (should be 0 if full migration): ' + oldPendingCount);

if (completedCount == 0) {
    System.debug('✅ Completed → Confirmed migration done');
} else {
    System.debug('⚠️ Still have Completed records');
}

🟢 New Features (No Action Required)

New Fields on Appointment__c:

  • Accepted_Resources__c — Roll-up count of resources with Accepted status
  • Pending_Resources__c — Roll-up count of resources with Pending status
  • Assigned_Resources__c — Now counts Confirmed status (was Accepted)

New Status Values on Appointment_Resource__c:

  • Declined — Resource declined the assignment
  • Withdrawn — Resource was withdrawn from the assignment

🟡 Manual Configuration

OEM-641: Total Committed Calculation

  1. Enable feature: Maica Settings → General → Enable Total Committed Calculation
  2. Schedule daily batch: Maica Settings → Scheduled Jobs → Total Committed Calculation
  • Default run time: 4:00 AM
  • Recalculates Total_Committed__c on all Agreement Items daily

OEM-757: Agenda View in Planner

Add Agenda to Maica Settings → Planner Management → Available Views (options, only if needed to be used/displayed for other others except Mobile CWs)

OEM-731: New Validation Rule

VAL_DELIVERY_ACTIVITY_0001 — blocks Quantity change on Completed Delivery Activities→ Notify users

OEM-734: Funding Admin Lookup Filter Removed

Lookup filter on Service Agreement → Funding Administrator removed→ No action required

🟡 Permission Sets

Re-assign after upgrade if users report access issues:

  • Maica_Incident_Create_Access
  • Maica_Incident_Edit_Access
  • Maica_Agreement_Item_Create_Access
  • Maica_Agreement_Item_Edit_Access
  • Maica_Delivery_Activity_Create_Access
  • Maica_Delivery_Activity_Edit_Access

New: Maica_PRODA_Debug — assign if debugging and only when debugging PRODA integration, don’t keep it assigned, otherwise it can cause Uncommitted work pending system error.

Post Installation Steps & Scripts

View Code

View Code

View Code