Skip to content

feat(fhir): NASS-1871: Allow SENAITE to create reflex tests via the FHIR API#9119

Open
rohan-bes wants to merge 3 commits intomainfrom
feat/nass-1871-senaite-reflex-tests
Open

feat(fhir): NASS-1871: Allow SENAITE to create reflex tests via the FHIR API#9119
rohan-bes wants to merge 3 commits intomainfrom
feat/nass-1871-senaite-reflex-tests

Conversation

@rohan-bes
Copy link
Collaborator

@rohan-bes rohan-bes commented Feb 5, 2026

Changes

Pretty simple change here to instead of rejecting an Observation if it's code isn't in the LabRequest's tests already, just create a new test.

Deploys

  • Deploy to Tamanu Internal

Tests

  • Run E2E Tests

Remember to...

  • ...write or update tests
  • ...add UI screenshots and testing notes to the Linear issue
  • ...add any manual upgrade steps to the Linear issue
  • ...update the config reference, settings reference, or any relevant runbook(s)
  • ...call out additions or changes to config files for the deployment team to take note of

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @rohan-bes, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the FHIR API's capability to process laboratory observations by introducing support for 'reflex tests'. Previously, the system would reject observations if their codes did not match pre-existing tests in a LabRequest. Now, it intelligently creates new lab tests on the fly for such observations, streamlining the workflow for dynamic lab testing scenarios and improving data capture flexibility.

Highlights

  • Reflex Test Creation: The system now supports the creation of new 'reflex tests' via the FHIR API. If an incoming FHIR Observation's code does not correspond to an existing test within the associated LabRequest, a new LabTest entry will be created dynamically, provided a matching LabTestType exists.
  • FHIR Observation Processing Logic: The FhirObservation model's logic for retrieving or creating LabTests has been updated to accommodate reflex tests. It first attempts to find an existing LabTest, and if none is found, it searches for a matching LabTestType to create a new LabTest.
  • Lab Test Completion Date: When a LabTest result is updated via a FHIR Observation, the completedDate field of the LabTest is now automatically set to the current date.
  • Test Coverage: A new test case has been added to verify the successful creation of a reflex test when an Observation code is not initially part of the LabRequest. Existing error messages related to unmatched test codes have also been updated for clarity.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • packages/central-server/tests/hl7fhir/materialised/Observation.test.js
    • Added import for fakeTestTypes to support new test scenarios.
    • Introduced a new test case to validate the creation of a reflex test when an Observation code is not present in the original LabRequest.
    • Updated the expected error message for scenarios where an Observation code does not match any known test types.
  • packages/database/src/models/fhir/FhirObservation.ts
    • Imported getCurrentDateString utility function.
    • Modified the updateLabTest method to set the completedDate of a LabTest when its result is updated.
    • Changed the labTest variable declaration from const to let in getLabTestForObservation to allow re-assignment.
    • Implemented logic within getLabTestForObservation to first attempt to find an existing LabTest, and if not found, to search for a LabTestType and create a new LabTest (reflex test) for the associated LabRequest.
    • Updated the error message thrown when a LabTestType cannot be found for a potential reflex test.
Activity
  • No specific review comments or discussions have been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a valuable feature to handle reflex tests by creating new LabTest records for incoming FHIR Observations that don't correspond to existing tests in a LabRequest. The implementation is straightforward and the accompanying tests cover the new success path. I've identified a bug where an incorrect date function is used for completedDate, and I have a few suggestions to improve error messaging and test coverage for the new logic.

'$labTestType.id$': newTestType.id,
},
});
expect(labTest.result).toBe(result);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Since the logic for updating a LabTest now also sets the completedDate, it would be beneficial to add an assertion here to ensure it's being set correctly. This will improve the test coverage for the new functionality.

      expect(labTest.result).toBe(result);
      expect(labTest.completedDate).not.toBeNull();

@rohan-bes rohan-bes force-pushed the feat/nass-1871-senaite-reflex-tests branch from 5be8d68 to 4a59eb1 Compare February 6, 2026 03:25
Copy link
Contributor

@NavarroEmilioLuis NavarroEmilioLuis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Android builds 📱

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

🍹 up on tamanu-on-k8s/bes/tamanu-on-k8s/feat-nass-1871-senaite-reflex-tests

Pulumi report
   Updating (feat-nass-1871-senaite-reflex-tests)

View Live: https://app.pulumi.com/bes/tamanu-on-k8s/feat-nass-1871-senaite-reflex-tests/updates/2

Downloading plugin random-4.19.0: starting
Downloading plugin random-4.19.0: done
Installing plugin random-4.19.0: starting
@ Updating....
Installing plugin random-4.19.0: done

   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running 
@ Updating.....
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read pulumi:pulumi:StackReference bes/k8s-core/tamanu-internal-main
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read kubernetes:core/v1:Namespace tamanu-feat-nass-1871-senaite-reflex-tests
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Using tailscale proxy https://k8s-operator-tamanu-internal-main.tail53aef.ts.net
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read pulumi:pulumi:StackReference bes/k8s-core/tamanu-internal-main
@ Updating....
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read pulumi:pulumi:StackReference bes/core/tamanu-internal
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read pulumi:pulumi:StackReference bes/core/tamanu-internal
@ Updating....
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read kubernetes:core/v1:Namespace tamanu-feat-nass-1871-senaite-reflex-tests
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Waiting for central-db...
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Waiting for facility-1-db...
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Waiting for facility-2-db...
~  kubernetes:apps/v1:Deployment patient-portal-web updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-1-web updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-2-web updating (0s) [diff: ~spec]
@ Updating....
~  kubernetes:apps/v1:Deployment central-web updating (0s) [diff: ~spec]
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read kubernetes:core/v1:ConfigMap actual-provisioning
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Secret facility-1-db-superuser not found or not ready: Error: HTTP-Code: 404
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Message: Unknown API Status Code!
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"facility-1-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"facility-1-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Headers: {"audit-id":"bd86343a-fa9b-401e-b706-b168b96a521a","cache-control":"no-cache, private","connection":"close","content-length":"220","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Secret facility-2-db-superuser not found or not ready: Error: HTTP-Code: 404
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Message: Unknown API Status Code!
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"facility-2-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"facility-2-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Headers: {"audit-id":"fefda266-e041-461f-813b-c72bc1b5bc36","cache-control":"no-cache, private","connection":"close","content-length":"220","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Secret central-db-superuser not found or not ready: Error: HTTP-Code: 404
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Message: Unknown API Status Code!
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"central-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"central-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running Headers: {"audit-id":"fc901015-5fb1-4406-8fb0-4abe8bf2f67f","cache-control":"no-cache, private","connection":"close","content-length":"214","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}
++ kubernetes:batch/v1:Job central-migrator creating replacement (0s) [diff: ~spec]
@ Updating....
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests running read kubernetes:core/v1:ConfigMap actual-provisioning
++ kubernetes:batch/v1:Job central-migrator creating replacement (0s) [diff: ~spec]; 
@ Updating....
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (0s) [diff: ~spec]
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (0s) [diff: ~spec]
++ kubernetes:batch/v1:Job central-migrator creating replacement (1s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-migrator-41c1efd0" to start
++ kubernetes:batch/v1:Job central-migrator creating replacement (1s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-migrator-41c1efd0" to succeed (Active: 1 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (0s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (0s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-migrator-9cf39bea" to start
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (0s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-migrator-9cf39bea" to succeed (Active: 1 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (0s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (0s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-migrator-c23a2ca4" to start
@ Updating....
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (0s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-migrator-c23a2ca4" to succeed (Active: 1 | Succeeded: 0 | Failed: 0)
~  kubernetes:apps/v1:Deployment central-web updating (2s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment central-web updating (2s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-web updated (2s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment patient-portal-web updating (3s) [diff: ~spec]; Waiting for app ReplicaSet to be available (0/1 Pods available)
~  kubernetes:apps/v1:Deployment facility-2-web updating (3s) [diff: ~spec]; Waiting for app ReplicaSet to be available (0/1 Pods available)
~  kubernetes:apps/v1:Deployment facility-1-web updating (3s) [diff: ~spec]; Waiting for app ReplicaSet to be available (0/1 Pods available)
@ Updating.............
~  kubernetes:apps/v1:Deployment patient-portal-web updating (13s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/patient-portal-web-d738da86-565c4d69f9-rthx2]: containers with unready status: [http]
~  kubernetes:apps/v1:Deployment facility-2-web updating (13s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-web-d5a6cb45-5964968b47-49grm]: containers with unready status: [http]
~  kubernetes:apps/v1:Deployment facility-1-web updating (13s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-web-bdbc0881-786bd6f8b6-qhw4c]: containers with unready status: [http]
@ Updating....
~  kubernetes:apps/v1:Deployment patient-portal-web updating (14s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment patient-portal-web updating (14s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment patient-portal-web updated (14s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-web updating (15s) [diff: ~spec]; Waiting for app ReplicaSet to be available (1/2 Pods available)
@ Updating....
~  kubernetes:apps/v1:Deployment facility-1-web updating (16s) [diff: ~spec]; Waiting for app ReplicaSet to be available (1/2 Pods available)
@ Updating...........
~  kubernetes:apps/v1:Deployment facility-2-web updating (23s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-web-d5a6cb45-5964968b47-2zbsw]: containers with unready status: [http]
~  kubernetes:apps/v1:Deployment facility-1-web updating (23s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-web-bdbc0881-786bd6f8b6-p8kl4]: containers with unready status: [http]
@ Updating....
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (22s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-migrator-c23a2ca4-wghdn]: Container "migrator" completed with exit code 0
@ Updating.....
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (24s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-migrator-c23a2ca4" to succeed (Active: 0 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (24s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-2-migrator-c23a2ca4" to succeed (Active: 0 | Succeeded: 1 | Failed: 0)
++ kubernetes:batch/v1:Job facility-2-migrator creating replacement (24s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job facility-2-migrator created replacement (24s) [diff: ~spec]; 
+- kubernetes:batch/v1:Job facility-2-migrator replacing (0s) [diff: ~spec]; 
+- kubernetes:batch/v1:Job facility-2-migrator replaced (0.00s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-tasks updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-2-api updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-2-sync updating (0s) [diff: ~spec]
@ Updating....
~  kubernetes:apps/v1:Deployment facility-1-web updating (27s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-1-web updating (27s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-web updated (27s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-tasks updating (0s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-2-tasks updating (0s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-tasks updated (0.89s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-api updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-2-api updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-api updated (1s) [diff: ~spec]; 
@ Updating....
~  kubernetes:apps/v1:Deployment facility-2-sync updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-2-sync updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-sync updated (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-web updating (28s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-2-web updating (28s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-2-web updated (28s) [diff: ~spec]; 
@ Updating....
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (27s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-migrator-9cf39bea-kwgqp]: Container "migrator" completed with exit code 0
++ kubernetes:batch/v1:Job central-migrator creating replacement (29s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/central-migrator-41c1efd0-d5h88]: Container "migrator" completed with exit code 0
@ Updating.....
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (29s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-migrator-9cf39bea" to succeed (Active: 0 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job central-migrator creating replacement (31s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-migrator-41c1efd0" to succeed (Active: 0 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (29s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/facility-1-migrator-9cf39bea" to succeed (Active: 0 | Succeeded: 1 | Failed: 0)
++ kubernetes:batch/v1:Job facility-1-migrator creating replacement (29s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job facility-1-migrator created replacement (29s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-migrator creating replacement (31s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-migrator-41c1efd0" to succeed (Active: 0 | Succeeded: 1 | Failed: 0)
++ kubernetes:batch/v1:Job central-migrator creating replacement (31s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-migrator created replacement (31s) [diff: ~spec]; 
@ Updating....
+- kubernetes:batch/v1:Job facility-1-migrator replacing (0s) [diff: ~spec]; 
+- kubernetes:batch/v1:Job facility-1-migrator replaced (0.00s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-sync updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-1-tasks updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment facility-1-api updating (0s) [diff: ~spec]
+- kubernetes:batch/v1:Job central-migrator replacing (0s) [diff: ~spec]; 
+- kubernetes:batch/v1:Job central-migrator replaced (0.00s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-provisioner creating replacement (0s) [diff: ~spec]
@ Updating....
~  kubernetes:apps/v1:Deployment facility-1-sync updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-1-sync updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-sync updated (1s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-provisioner creating replacement (0s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-provisioner creating replacement (0s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-provisioner-dbac12fd" to start
++ kubernetes:batch/v1:Job central-provisioner creating replacement (1s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-provisioner-dbac12fd" to succeed (Active: 1 | Succeeded: 0 | Failed: 0)
~  kubernetes:apps/v1:Deployment facility-1-tasks updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-1-tasks updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-tasks updated (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-api updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment facility-1-api updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment facility-1-api updated (1s) [diff: ~spec]; 
@ Updating.........
++ kubernetes:batch/v1:Job central-provisioner creating replacement (7s) [diff: ~spec]; warning: [Pod tamanu-feat-nass-1871-senaite-reflex-tests/central-provisioner-dbac12fd-h7jhb]: Container "provisioner" completed with exit code 0
@ Updating.....
++ kubernetes:batch/v1:Job central-provisioner creating replacement (9s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-provisioner-dbac12fd" to succeed (Active: 0 | Succeeded: 0 | Failed: 0)
++ kubernetes:batch/v1:Job central-provisioner creating replacement (9s) [diff: ~spec]; Waiting for Job "tamanu-feat-nass-1871-senaite-reflex-tests/central-provisioner-dbac12fd" to succeed (Active: 0 | Succeeded: 1 | Failed: 0)
++ kubernetes:batch/v1:Job central-provisioner creating replacement (9s) [diff: ~spec]; 
++ kubernetes:batch/v1:Job central-provisioner created replacement (9s) [diff: ~spec]; 
@ Updating....
+- kubernetes:batch/v1:Job central-provisioner replacing (0s) [diff: ~spec]; 
+- kubernetes:batch/v1:Job central-provisioner replaced (0.00s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-fhir-refresh updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment central-tasks updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment central-fhir-resolver updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment central-api updating (0s) [diff: ~spec]
~  kubernetes:apps/v1:Deployment central-fhir-refresh updating (0s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment central-fhir-refresh updating (0s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-fhir-refresh updated (0.83s) [diff: ~spec]; 
@ Updating....
~  kubernetes:apps/v1:Deployment central-tasks updating (1s) [diff: ~spec]; warning: Replicas scaled to 0 for Deployment "central-tasks-1cc3b166"
~  kubernetes:apps/v1:Deployment central-tasks updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment central-tasks updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-tasks updated (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-fhir-resolver updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment central-fhir-resolver updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-fhir-resolver updated (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-api updating (1s) [diff: ~spec]; Deployment initialization complete
~  kubernetes:apps/v1:Deployment central-api updating (1s) [diff: ~spec]; 
~  kubernetes:apps/v1:Deployment central-api updated (1s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job central-provisioner deleting original (0s) [diff: ~spec]; 
@ Updating....
-- kubernetes:batch/v1:Job central-provisioner deleting original (0s) [diff: ~spec]; Resource scheduled for deletion
-- kubernetes:batch/v1:Job central-provisioner deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job central-provisioner deleted original (0.64s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job central-migrator deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job facility-1-migrator deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job facility-2-migrator deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job central-migrator deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job central-migrator deleted original (0.54s) [diff: ~spec]; 
@ Updating....
-- kubernetes:batch/v1:Job facility-1-migrator deleting original (0s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job facility-1-migrator deleted original (0.87s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job facility-2-migrator deleting original (1s) [diff: ~spec]; 
-- kubernetes:batch/v1:Job facility-2-migrator deleted original (1s) [diff: ~spec]; 
   pulumi:pulumi:Stack tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests  16 messages
Diagnostics:
 pulumi:pulumi:Stack (tamanu-on-k8s-feat-nass-1871-senaite-reflex-tests):
   Waiting for central-db...
   Waiting for facility-1-db...
   Waiting for facility-2-db...

   Using tailscale proxy https://k8s-operator-tamanu-internal-main.tail53aef.ts.net

   Secret facility-1-db-superuser not found or not ready: Error: HTTP-Code: 404
   Message: Unknown API Status Code!
   Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"facility-1-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"facility-1-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   Headers: {"audit-id":"bd86343a-fa9b-401e-b706-b168b96a521a","cache-control":"no-cache, private","connection":"close","content-length":"220","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}
   Secret facility-2-db-superuser not found or not ready: Error: HTTP-Code: 404
   Message: Unknown API Status Code!
   Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"facility-2-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"facility-2-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   Headers: {"audit-id":"fefda266-e041-461f-813b-c72bc1b5bc36","cache-control":"no-cache, private","connection":"close","content-length":"220","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}
   Secret central-db-superuser not found or not ready: Error: HTTP-Code: 404
   Message: Unknown API Status Code!
   Body: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"secrets \\\"central-db-superuser\\\" not found\",\"reason\":\"NotFound\",\"details\":{\"name\":\"central-db-superuser\",\"kind\":\"secrets\"},\"code\":404}
"
   Headers: {"audit-id":"fc901015-5fb1-4406-8fb0-4abe8bf2f67f","cache-control":"no-cache, private","connection":"close","content-length":"214","content-type":"application/json","date":"Tue, 10 Feb 2026 04:25:56 GMT","x-kubernetes-pf-flowschema-uid":"3fb296fc-e46b-45d1-9306-057e37ddd229","x-kubernetes-pf-prioritylevel-uid":"feccf24d-a074-4fa8-aa6f-db82477fc2f5"}

   [Pulumi Neo] Would you like help with these diagnostics?
   https://app.pulumi.com/bes/tamanu-on-k8s/feat-nass-1871-senaite-reflex-tests/updates/2?explainFailure

Outputs:
   urls: {
       Central      : "https://central.feat-nass-1871-senaite-reflex-tests.cd.tamanu.app"
       Facility- 1  : "https://facility-1.feat-nass-1871-senaite-reflex-tests.cd.tamanu.app"
       Facility- 2  : "https://facility-2.feat-nass-1871-senaite-reflex-tests.cd.tamanu.app"
       PatientPortal: "https://portal.feat-nass-1871-senaite-reflex-tests.cd.tamanu.app"
   }

Resources:
   ~ 14 updated
   +-4 replaced
   18 changes. 49 unchanged

Duration: 51s

   

Base automatically changed from epic-senaite-results to main February 10, 2026 03:08
@rohan-bes rohan-bes force-pushed the feat/nass-1871-senaite-reflex-tests branch from 4a59eb1 to 8eb4840 Compare February 10, 2026 03:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants