???? AWS SNS Webhook — Further fix to the webhook endpoint so that Amazon's notifications complete reliably. The endpoint now runs on a lightweight handler that does not depend on administrator session initialization, which was producing intermittent server errors on incoming Amazon requests.
???? AWS SNS Webhook — Fixed an issue where the AWS SNS Subscription could not be auto-confirmed. The system's request protection was blocking incoming notifications from Amazon before they reached our handler, leaving the subscription stuck on "Pending confirmation". Amazon's webhook endpoint is now correctly recognised, so confirmations and Billing Statement notifications flow through immediately.
???? Unit Tab — Quick Edit — Added an editable Unit tab on the customer profile where staff can update every unit detail (tower, floor, prefix, number, block, SAP business, SAP customer reference, vacancy, inventory flag, under-construction flag, resident type, ownership type, developer turnover date and description) directly from the resident's profile, without leaving the page.
✨ File preview on the mapping screen — When mapping columns on the Regulatory Document Types import, the system now shows a small sample (the first 3 rows) of the data it actually read from your file. This makes it easy to confirm the spreadsheet was loaded correctly before you continue, even when your column names happen to match the system's field names.
???? Pending Approval Acknowledgement Email — When a resident submits a service request — whether from the resident portal, the mobile app, or directly by an administrator — they now receive an immediate acknowledgement email confirming receipt. The email lists the service name, transaction number, date, time, the resident's description of the requested work, payment method, sub-total, transaction fee and total amount due, and clearly states that the Property Management Office will review and assess the request shortly. The Email Templates editor's "Available Merge Fields" panel now also lists every supported placeholder for service-request templates so administrators can edit the copy with confidence.
✨ Unit import — The horizontal import section now matches the vertical layout, with separate template and instructions downloads clearly labeled for horizontal import only.
✨ Clearer feedback while importing — On the Regulatory Document Types import, the preview now lists every single row from the spreadsheet (instead of only the first 25) so the entire change can be reviewed before confirming. Clicking "Import" now shows a spinner and a progress message so it is obvious the system is working — and the back button is briefly disabled to prevent accidental double-imports.
???? AWS SNS Webhook — Corrected the function name the webhook uses to set its HTTP response codes; the previous name did not exist in this codebase, so the endpoint was returning a generic server error instead of the intended confirmation or validation messages back to Amazon.
✨ Cancelled & Rejected Emails Refreshed — The Amenity Booking Cancelled and Rejected emails now use the APMC-branded format, with the transaction number in the subject line, a clear statement of the action taken, the reason captured by the Property Manager, and (for cancellations) a note that the reversal of the initial charge will appear on the next billing statement. The body content of these two templates is fully editable from the Email Templates page with all the standard merge fields visible in the side panel.
✨ Approved Email Now Shows Booking Details + Merge Fields Helper — The Amenity Booking Approved email is now consistent with the new Pending Approval acknowledgement: it includes the event name, transaction number, date, time, attendees, payment method, and the full price breakdown (sub-total, transaction fee, total). The Email Templates editor's "Available Merge Fields" side panel now lists every supported placeholder for amenity-booking templates so administrators can edit the copy with confidence. Existing environments receive the new approved-email copy automatically through the standard "Database upgrade required" prompt.
✨ Improved Regulatory Document Types Import — The system now recognizes column headers automatically even when they are written in Portuguese, have accents, or use slightly different wording (for example "Tipo de Documento", "Situação", or "Permit Name (Long)"). You can also paste a Google Sheets link as the data source instead of uploading a file.
???? Fixed "Access denied" on Regulatory Document Types upload — On some properties, the upload step rejected files with an "Access denied" message even when the user had full permission and the Import Center module was activated. The upload step now uses the same access rules as the page that opens it, so anyone who can see the upload form can also submit a file.
???? Transaction Number & Line Item Text Aligned with Finance Spec — The Transaction Number shown to residents and staff on amenity bookings (in confirmation emails, request detail screens, and the mobile app) now follows the format defined in the signed Finance specification: Company Code, period (month and year), series and sequence — for example 0155-0526AM000495 for an amenity booked in May 2026. The line item written to the invoice for each approved amenity booking now also follows the spec format: the Transaction Number, the amenity name, and the booking date (e.g. 0155-0526AM000495 - Swimming Pool 01/05/2026). Add-on lines follow the same shape with "Add On:" before the add-on name (e.g. 0155-0526AM000495 - Add On: Floating Device 01/05/2026). These descriptions flow straight through to the Finance Transaction Report, so the Line Item Text column there now matches the spec. Existing invoices keep the descriptions they were created with.
???? Vertical property import — Added a second import option on the units list for Excel files laid out as Field and Value rows. Each file creates one Tower/Building/Phase record; tower breakdown details are stored separately without creating extra buildings. The original spreadsheet import remains available.
✨ Document Types Spreadsheet Works Everywhere — The "Export Template" button now always produces a true Excel (.xlsx) file, even on servers without the optional zip extension installed. The import accepts the same Excel files in return, so the round-trip workflow no longer falls back to plain CSV when the server is missing optional components.
✨ Better "Access denied" diagnostics on Regulatory Document Types import — When the upload is blocked, the system now returns a short code naming which check failed (module not active, missing bulk-import capability, or missing document-types permission) so support can pinpoint the cause without server access.
???? Fixed Import Center sidebar label — The "Others" sidebar shortcut to Import Center could appear with an untranslated code label instead of the proper name on some installations. The label is now refreshed automatically on the next page load so the menu reads "Import Center" everywhere.
✨ Approval, Cancellation and Rejection Emails — The approval, cancellation, and rejection emails sent to residents have been rewritten with a clearer, branded format that matches the new acknowledgement email. Each message now lists the service name, transaction number, date, time, and the resident's description of the requested work, and shows the payment method, sub-total, transaction fee and total amount due where relevant. The approval email explains that, because the payment type is Charge to Account, the total will appear on the next billing statement. The cancellation email surfaces the reason for cancellation and reminds the resident that the reversal of the initial charge will be reflected in the next billing statement. The rejection email surfaces the reason for rejection so the resident knows exactly why the request was declined. Administrators can still customise every line of these emails from the Email Templates editor, and the "Available Merge Fields" panel lists every supported placeholder.
✨ Document Types toggle in Import Center settings — The per-property Import Center settings page now includes a checkbox to show or hide the Regulatory Document Types import card on the dashboard, matching every other import flow.
???? Upgrade Database — Fixed an issue where the new service-request email templates could not be applied on existing environments through the Setup → Modules → Upgrade Database button. The button now picks up the new acknowledgement template and the rewritten approval, cancellation and rejection emails without requiring the module to be deactivated and reactivated.
✨ Unit import — Horizontal and vertical imports now share one page under Import Units, with a simpler layout and no separate import button on the units list.
???? Regulatory Document Types card on the Import Center dashboard — The Import Center main page now shows a new "Compliance" section with the Regulatory Document Types import, so it can be opened directly from the dashboard alongside the other import flows.
???? Vertical property import — Fixed utility contact fields (provider name, account number, and account officer details) mapping incorrectly during preview and import from Field/Value spreadsheets.
✨ Vertical property import — When a property sheet lists multiple towers, the vertical import now creates one Tower/Building/Phase record per tower instead of a single combined record.
✨ Unit import — Horizontal import now uses the same drag-and-drop spreadsheet upload as vertical import, without separate URL or file fields.
???? Pending Approval Acknowledgement Email — When a resident submits an amenity booking — whether from the resident portal, the mobile app, or directly by an administrator — they now receive an immediate acknowledgement email confirming receipt. The email lists the event name, amenity, transaction number, date, time, attendee count, payment method, sub-total, transaction fee and total amount due, and clearly states that the Property Management Office will review and assess the request shortly.
???? Transaction Number & Line Item Text Aligned with Finance Spec — The Transaction Number shown to residents and staff on service requests (in confirmation emails, request detail screens, and the mobile app) now follows the format defined in the signed Finance specification: Company Code, period (month and year), series and sequence — for example 0155-0526SR000495 for a service request submitted in May 2026. The line item written to the invoice for each approved service request now also follows the spec format: the Transaction Number, the service name, and the request date (e.g. 0155-0526SR000495 - Plumbing 01/05/2026). This description flows straight through to the Finance Transaction Report, so the Line Item Text column there now matches the spec. Existing invoices keep the descriptions they were created with.
???? AWS SNS Webhook — Further fix to the webhook endpoint so that Amazon's notifications complete reliably. The endpoint now runs on a lightweight handler that does not depend on administrator session initialization, which was producing intermittent server errors on incoming Amazon requests.
???? AWS SNS Webhook — Fixed an issue where the AWS SNS Subscription could not be auto-confirmed. The system's request protection was blocking incoming notifications from Amazon before they reached our handler, leaving the subscription stuck on "Pending confirmation". Amazon's webhook endpoint is now correctly recognised, so confirmations and Billing Statement notifications flow through immediately.
???? Unit Tab — Quick Edit — Added an editable Unit tab on the customer profile where staff can update every unit detail (tower, floor, prefix, number, block, SAP business, SAP customer reference, vacancy, inventory flag, under-construction flag, resident type, ownership type, developer turnover date and description) directly from the resident's profile, without leaving the page.
✨ File preview on the mapping screen — When mapping columns on the Regulatory Document Types import, the system now shows a small sample (the first 3 rows) of the data it actually read from your file. This makes it easy to confirm the spreadsheet was loaded correctly before you continue, even when your column names happen to match the system's field names.
???? Pending Approval Acknowledgement Email — When a resident submits a service request — whether from the resident portal, the mobile app, or directly by an administrator — they now receive an immediate acknowledgement email confirming receipt. The email lists the service name, transaction number, date, time, the resident's description of the requested work, payment method, sub-total, transaction fee and total amount due, and clearly states that the Property Management Office will review and assess the request shortly. The Email Templates editor's "Available Merge Fields" panel now also lists every supported placeholder for service-request templates so administrators can edit the copy with confidence.
✨ Unit import — The horizontal import section now matches the vertical layout, with separate template and instructions downloads clearly labeled for horizontal import only.
✨ Clearer feedback while importing — On the Regulatory Document Types import, the preview now lists every single row from the spreadsheet (instead of only the first 25) so the entire change can be reviewed before confirming. Clicking "Import" now shows a spinner and a progress message so it is obvious the system is working — and the back button is briefly disabled to prevent accidental double-imports.
???? AWS SNS Webhook — Corrected the function name the webhook uses to set its HTTP response codes; the previous name did not exist in this codebase, so the endpoint was returning a generic server error instead of the intended confirmation or validation messages back to Amazon.
✨ Cancelled & Rejected Emails Refreshed — The Amenity Booking Cancelled and Rejected emails now use the APMC-branded format, with the transaction number in the subject line, a clear statement of the action taken, the reason captured by the Property Manager, and (for cancellations) a note that the reversal of the initial charge will appear on the next billing statement. The body content of these two templates is fully editable from the Email Templates page with all the standard merge fields visible in the side panel.
✨ Approved Email Now Shows Booking Details + Merge Fields Helper — The Amenity Booking Approved email is now consistent with the new Pending Approval acknowledgement: it includes the event name, transaction number, date, time, attendees, payment method, and the full price breakdown (sub-total, transaction fee, total). The Email Templates editor's "Available Merge Fields" side panel now lists every supported placeholder for amenity-booking templates so administrators can edit the copy with confidence. Existing environments receive the new approved-email copy automatically through the standard "Database upgrade required" prompt.
✨ Improved Regulatory Document Types Import — The system now recognizes column headers automatically even when they are written in Portuguese, have accents, or use slightly different wording (for example "Tipo de Documento", "Situação", or "Permit Name (Long)"). You can also paste a Google Sheets link as the data source instead of uploading a file.
???? Fixed "Access denied" on Regulatory Document Types upload — On some properties, the upload step rejected files with an "Access denied" message even when the user had full permission and the Import Center module was activated. The upload step now uses the same access rules as the page that opens it, so anyone who can see the upload form can also submit a file.
???? Transaction Number & Line Item Text Aligned with Finance Spec — The Transaction Number shown to residents and staff on amenity bookings (in confirmation emails, request detail screens, and the mobile app) now follows the format defined in the signed Finance specification: Company Code, period (month and year), series and sequence — for example 0155-0526AM000495 for an amenity booked in May 2026. The line item written to the invoice for each approved amenity booking now also follows the spec format: the Transaction Number, the amenity name, and the booking date (e.g. 0155-0526AM000495 - Swimming Pool 01/05/2026). Add-on lines follow the same shape with "Add On:" before the add-on name (e.g. 0155-0526AM000495 - Add On: Floating Device 01/05/2026). These descriptions flow straight through to the Finance Transaction Report, so the Line Item Text column there now matches the spec. Existing invoices keep the descriptions they were created with.
???? Vertical property import — Added a second import option on the units list for Excel files laid out as Field and Value rows. Each file creates one Tower/Building/Phase record; tower breakdown details are stored separately without creating extra buildings. The original spreadsheet import remains available.
✨ Document Types Spreadsheet Works Everywhere — The "Export Template" button now always produces a true Excel (.xlsx) file, even on servers without the optional zip extension installed. The import accepts the same Excel files in return, so the round-trip workflow no longer falls back to plain CSV when the server is missing optional components.
✨ Better "Access denied" diagnostics on Regulatory Document Types import — When the upload is blocked, the system now returns a short code naming which check failed (module not active, missing bulk-import capability, or missing document-types permission) so support can pinpoint the cause without server access.
???? Fixed Import Center sidebar label — The "Others" sidebar shortcut to Import Center could appear with an untranslated code label instead of the proper name on some installations. The label is now refreshed automatically on the next page load so the menu reads "Import Center" everywhere.
✨ Approval, Cancellation and Rejection Emails — The approval, cancellation, and rejection emails sent to residents have been rewritten with a clearer, branded format that matches the new acknowledgement email. Each message now lists the service name, transaction number, date, time, and the resident's description of the requested work, and shows the payment method, sub-total, transaction fee and total amount due where relevant. The approval email explains that, because the payment type is Charge to Account, the total will appear on the next billing statement. The cancellation email surfaces the reason for cancellation and reminds the resident that the reversal of the initial charge will be reflected in the next billing statement. The rejection email surfaces the reason for rejection so the resident knows exactly why the request was declined. Administrators can still customise every line of these emails from the Email Templates editor, and the "Available Merge Fields" panel lists every supported placeholder.
✨ Document Types toggle in Import Center settings — The per-property Import Center settings page now includes a checkbox to show or hide the Regulatory Document Types import card on the dashboard, matching every other import flow.
???? Bulk Import & Export of Document Types — You can now download all regulatory document types as a spreadsheet, edit them in Excel, and re-upload to apply changes in bulk. Each upload shows a preview with how many entries will be created, updated, or left unchanged before you confirm. The list page also shows each document type's ID for easier identification when editing the spreadsheet. Every change is recorded in the activity log along with the user's IP address.
???? Permit & Certificate Tab — Added a new tab to the client profile that displays a list of their permits and certificates and allows requesting new ones using active templates.
???? Service Request Status Changes — Fixed an issue on the service request details page where approving, rejecting, or cancelling a request showed an "Error updating" message even though the new status had been saved correctly.
???? New Regulatory Document Types Import — Compliance teams can now update regulatory document types (and their active/inactive status) through a spreadsheet. The flow lets you map columns when headers don't match, see a row-by-row preview showing what will be created, updated or left unchanged, and confirm before any change is applied. Every import is logged with the user, date and IP address for full auditability.