sween · Mar 8, 2024 go to post

Great discussion/question...

Disadvantages that come to mind:

  • support of $all operation is on the patient resource
  • yet another resource to consider for merges and outside of newer ops like $merge
  • "RelatedPerson" is built on a codified Relationship type you should ensure meets the use case.
  • Patient has a relationship that rolls up to the Account object (guarantor), Person does not.

In general on the mapping of known classifications implemented in our practices:
Account = Guarantor
Patient = A "Person" with at least one: visit or encounter or claim or social need/fulfillment.
Person = Established identity with no visits or encounter, used for proxy access to records, not tied to the account , but exists for oauth2 scopes.
RelatedPersons = known children or persons without workload relevance. (use this in SDOH heavily)

As an example of our lastest use case of the Person resources:
Social needs web wizard, that collected QuestionairreResource responses and tied them to a "Person" as the identity was not proofed until contact was met with the "Person" by the Social Navigator.  Upon contact, a more formal "Patient" record was created to attach the ServiceRequest to.
hope some of that helps, mostly brain dumping here...

sween · Mar 22, 2024 go to post

Michael, if you drop the generated token into https://jwt.io, does Okta have the the list of scopes in an `scp` parameter?
I recall having to do something like this in an Interaction Strategy to get ValidateToken() to work with Okta, wondering if the same is necessary for ValidateJWT().
 

		Do JWTObj.%Set("client_id", OktaJWTObj.cid)
        Do JWTObj.%Set("scope",OktaJWTObj.scp)
sween · May 16, 2024 go to post

I use these globals to take a peak at the calls:

zn"YOURFHIRNAMESPACE"Set^FSLogChannel("all")=1zn"%SYS"Kill^%ISCLOGKill^ISCLOGSet^%ISCLOG=5Set^%ISCLOG("Category","HSFHIR")=5Set^%ISCLOG("Category","HSFHIRServer")=5Set^%ISCLOG("Category","OAuth2")=5Set^%ISCLOG("Category","OAuth2Server")=5

then
 

zw^FSLOG

in the fhir namespace.

Shows the route, params and helpful with oauth2/SMART where the route has to match the patientid in the token.
 

sween · Jun 4, 2024 go to post

Reduced the backup list to mvd  for a quick test...

*** The time is: 2024-06-0416:03:43 ***

              InterSystems IRIS Backup Utility
              --------------------------------
Performing a Full backup.
Backing up to device: /media/FullDBList_20240604_001.cbk
Description
Full backup of all databases that are in the backup database list.

WARNING - the following directories could not be backed up
 /data/IRIS/mgr/mvd/ Multi-volume database not supported


Nothing to Backup

I agree its a big feature with a lot of edges

sween · Jun 4, 2024 go to post

Thanks Alexander, this is good feedback/info, glad I poked the bear.

sween · Jul 29, 2024 go to post

Hi Adam,

Consider setting up a rule in your pipeline, so that it only executes if you merge to a particular branch.  I know your use case seems to be "PR approval" not merge, but the below rule will only execute on merges to main.
There are other free variables in the pipeline to maybe accomplish what you want.
 

  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'`

This is a very good post on the subject that is exhaustive you may want to checkout:
https://community.intersystems.com/post/continuous-delivery-your-inters…

variables:
  SESSION_NAME:
    value: "IRIS"
  NAMESPACE:
    value: "ACME"

stages:
  - deploy

deploy main:
  stage: deploy
  tags:
    - dev
  before_script:
    - export WORKING_DIR=$(pwd)
  script:
    - echo"Initializing ACME CI/CD Build DEV..."
    - echo"Deploying code ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} branch to instance..."
    - |
      /usr/bin/irissession ${SESSION_NAME} <<EODEPLOY
      ${IrisUser}${IrisPass}
      zn "${NAMESPACE}"
      w ##class(%SYSTEM.OBJ).LoadDir("${WORKING_DIR}/src","ck",,1)set sc = ##class(Ens.Director).UpdateProduction()
      EOFDEPLOY
  rules:
    # only runs if merged to main
    - if: '$CI_COMMIT_BRANCH == "main"'
sween · Sep 18, 2024 go to post

Ive used the reverse method like this, in a BP, converting a CCDA to SDA, then SDA to FHIR...
 

set fhir=##class(HS.FHIR.DTL.Util.API.Transform.SDA3ToFHIR).TransformStream(sdaStream,"HS.SDA3.Container","R4")


It has a counterpart that does what you are asking for in HS.FHIR.DTL.Util.API.Transform.FHIRToSDA3 which may be the method you need in a business process.
 

sween · Oct 21, 2024 go to post

Hi Luca,
Admittedly I am swimming in a pretty good amount of Kool Aid at the moment (by design) as I am attracted to solutions that check a lot of boxes in one full swoop (much like IRIS!), but one of the things I was attracted to in the eBPF space is the promise that it is more "lightweight" on resources and the promise was the "Death of the Sidecar" 
A: My pre answer with a little hand waving is, more efficient with the network stuff.
Layer 5 downloadward, less resource intensive.
Layer 7, more resource intensive... sidecar did not die here.
eBPF less intensive than Kube Proxy (iptables) uses sequential processing (isovalent benched this and stands by it).
Wish I could have looked over your shoulder in the Sysdig eval to see what you were experiencing, if you could paraphrase it and send it my way, Ill take it to the booth.
Will circle back to this after KubeCon next month and see if I can get you a real answer backed with my own evaluation, Im a meeting or two away from Tetragon Enterprise eval too, and setup on bare metal so Ill add it to the take aways to get my moneys worth.
 

sween · Mar 3 go to post

Thank you for getting this out there, has been super frustrating understanding some of these errors while using these drivers with the promise of DB-API.  At least the distribution has gone public with maven, pypi, etc as a step in the right direction and hopefully will help things, especially with the drivers being the "front door" to alot of the cloud offerings.
The alchemy workaround for compatibility is especially great.

sween · Apr 1 go to post

from the screenshot, looks lke you need MTC_88* in the BlobNamePattern field, not the prefix.  The prefix is essentially a key (folder), and the BlobNames are the objects.
currently you are looking in s3://MTCbucket/MTC_88/

sween · Jul 20 go to post

I use this one quite a bit...

Set tSC=##Class(Security.Users).Create("user","%SQL","pass","NAMESPACE","","","",0,1,,,,,,1,1)