Thanks, 

I'm Health Connect 17.1 - so not too old . 

 It should run automatically as part of an Ensemble message purge. 

This is interesting as I already have Ens.Util.Tasks.Purge running daily to purge messages more than 30 days old.

I've raised a support call on this with WRC so I'll update soon.

Stephen

I *believe* I can safely do the following to my test and live instances command line;   

  1. login to terminal
  2. zn "PRODUCTION"
  3. do ##class(%SYS.Maint.Bitmap).OneClass("Ens.MessageHeader",1,0)

I'm checking with WRC

Thanks for the quick response!

Have you tried rebuilding the indexes from the SQL portal.  it seems achievable without downtime, but I worry about load.  

WRC recommended do ##class(%SYS.Maint.Bitmap).OneClass("Ens.MessageHeader",1,0), but suggested running it at a slower time of day because it would take 1 CPU out of action, and load a lot of data from disk into global buffers.  

I'm guessing rebuilding the indexes would add more load because it is less specific.  Probably not a huge deal in quiet times.

I'm doing some testing and will post my results.

Kind regards, 

Stephen

Added questions:

  • Should the foundation production be used as a Interoperability Production or a routing Production
  • Are Interoperability and Routing productions the same thing?
    • I am coming from ensemble where you build all your interfaces all in a single production. 

Thanks @Kenneth.Poindexter8571  that is helpful.

Should the foundation production be used as a routing Production, or should I keep them separate? 

This brings me back to what does a Foundation production do?

Unlike a HL7 routing production a Foundation Production only has  an Ens.Activity.Operation.Local operation.

While the HL7 routing production components are easily added manually, I'm reading their absence as an implied indication that HL7 routing is *intended* to be a separate production, in a separate namespace - assuming the one active production per namespace still applies.

Stephen

Thanks @Kurt Dawn 

I also contacted WRC and they were very helpful. 

To summarise; 

  • The 'Configure Foundation' option in the Installer Wizard;
    • creates a healthcare interoperability namespace and production 
    • adds this production to the register of productions on the Installer Wizard page
  • A Foundation Production is just an normal interoperability production
    • it is only critical in the sense that you need one to process messages in HSHC. 
    • it is the same as a HL7 routing production created with the Production Wizard except that it doesn't pre-populate with; HL7FileService, Ens.Alert, MsgRouter, BadMessageHandler,EMailAlert, HL7FileOperation and PagerAlert.
    • it does include a Ens.Activity.Operation.Local operation (see Monitoring Productions Monitoring Activity Volume)
  • HSHC 2019.1 also creates a Foundation Production and adds it to the list on the Installer Wizard page when you tick the 'enable names for interoperability productions' tickbox. (ticked by default in HSHC 2019.1)

Advice:

  • use the 'Configure Foundation' option in the Installer Wizard to create interoperability namespaces and their associated productions
  • manually create whatever you need from HL7FileService, Ens.Alert, MsgRouter, BadMessageHandler,EMailAlert, HL7FileOperation and PagerAlert  

Notes:

  • the old 'New production' dialog doesn't add your production to the list of configurations defined at  http://yourserver.etc:port/csp/healthshare/HS.HC.UI.Installer.Welcome.c…
  • The 'start all' button wont start your new production, it will start the foundation production created when you created your namespace, or throw an error if you deleted it. (hitting 'stop all' stops all productions even if the are not in the 'register')
  • WRC informed me that the Ens.Activity.Operation.Local operation will be removed in future versions. I don't know what that means for the Monitoring Productions Monitoring Activity Volume functionality?
     

Wishlist: 

  1. Creating HL7FileService, Ens.Alert, MsgRouter, BadMessageHandler,EMailAlert, HL7FileOperation, PagerAlert and Ens.Activity.Operation.Local should be an options in the 'Configure Foundation' option in the Installer Wizard dialog. (but the Ens.Activity.Operation.Local should be named ProductionActivityMonitor)
  2. More detail on the purpose of the foundation productions register on the installer wizard page
  3. an overview of the application architecture and clarify definitions of things like foundation productions 'register', HL7 routing production, interoperability production, and  Foundation Production.
  4. Change the Installer Wizard 'help' link in the portal to Installing and Activating a Foundation Production
  5. In the class reference 'Ens.Activity.Operation.Local' has the summary description 'This is a Business Operation class.': http://yourserver.etc:port/csp/documatic/%25CSP.Documatic.cls?PAGE=CLAS…  
  6. a pony. Just kidding. maybe.

Kind regards, 

Stephen

Hi, 

wrc just confirmed that externally created certificates can't be signed using the IPKI

If you need to sign a certificate request to create a client certificate, you can use openssl:

 openssl x509 -req -days 365 -in [client]request.crs –signkey YOUR-CAprivatekey.pem -out [client].cer

This uses your private key to sign their certificate request to create their client certificate.

 You should send your CA certificate (not the private key) and the signed client certificate back to the client.

Thanks

good point about SHA1 

- this is brilliant:

I:\Projects\certiificates>openssl x509 -text -in certsForStunnel.pem -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            af:0c:7a:b9:44:11:6c:e8
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C = GB, ST = West Somewhere, L = Town, O = XXX, OU = HL7, CN = VENDOR HL7 Messaging API
        Validity
            Not Before: Apr 13 10:48:24 2017 GMT
            Not After : Apr  7 10:48:24 2042 GMT
        Subject: C = UK, ST = London, L = London, O = LNWH NHS Trust, CN = TIE
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:e0:24:df:16:3d:d4:ed:1f:b0:4a:2b:6a:07:a7:

[truncated]

Suriya at WRC solved this for me

Where I went wrong: 

  1. I created context.pidSegment as EnsLib.HL7.Segment - which fails as an argument to the DTL <assign> statement)
  2. I forgot the (1) in {PIDgrp(1).PID}

The right way to copy a segment from one message to another is;

  1. create context variable as a string:  e.g. context.pidSegment as %String(MAXLEN=2500) 
  2. extract the segment as a string: context.k22.GetValueAt("PIDgrp(1).PID")
  3. use the DTL to set the right field: <assign value='context.pidSegment' property='target.{PIDgrp(1).PID}' action='set' />

Thanks go to Suriya at WRC

Stephen

As it stands there is no known way to specify the full class path to a utility function.

Alternatives are discussed in the other comments below.

Whitelist for Atelier.

  • *.eclipse.org
  • atelier.artifactoryonline.com  (soon to be retired)
  • atelier.jfrog.io  (new domain for *.artifactoryonline.com domains)

This might be help if (like me) you work at a hospital with very strict network security.  Without whitelisting these domains for my team, the proxy (Trend) detects the JVM binaries and automatically blocks traffic.

The kind staff at the WRC helped me with this question. (WRC staff are amazing)

The article Recommendations on installing the InterSystems Caché DBMS for production environment  has some code that does this.

My comment  has a class that only deletes old backups as a scheduled task.

Kind regards,

Stephen

Class App.PurgeOldBackupFiles Extends %SYS.Task.Definition{Property BackupsToKeep As %Integer(MAXVAL = 30, MINVAL = 1) [ InitialExpression = 30, Required ];Property BackupFolder As %String [ Required ];Property BackupFileType As %String [ Required ];Method OnTask() As %Status{//s BackupsToKeep = 2//s Folder = "c:\backupfolder"//s BackupFileType = "FullAllDatabases" // or "FullDBList"SortOrder = "DateModified"If ..BackupsToKeep<1 Quit $$$ERROR($$$GeneralError,"Invalid - Number of Backups to Keep must be greater than or equal to 1")If ..BackupFolder="" Quit $$$ERROR($$$GeneralError,"Invalid - BackupFolder - not supplied")if ..BackupFileType = "" Quit $$$ERROR($$$GeneralError,"Invalid - BackupFileType - not supplied")if (..BackupFileType '= "FullAllDatabases")&&(..BackupFileType '= "FullDBList") Quit $$$ERROR($$$GeneralError,"Invalid - BackupFileType")BackupCount=0     k zPurgeOldBackupFiles(..BackupFileType)     Set rs=##class(%ResultSet).%New("%Library.File:FileSet")     w !,"backuplist",!     s BackupFileWildcard = ..BackupFileType _ "*.cbk"     set status=rs.Execute(..BackupFolder, BackupFileWildcard, SortOrder)     WHILE rs.Next() {          Set FullFileName=rs.Data("Name")          Set FName=##class(%File).GetFilename(FullFileName)          Set FDateTime=##class(%File).GetFileDateModified(FullFileName)          w "File "_FName_" "_FDateTime,!          Set FDate=$PIECE(FDateTime,",")          Set CDate=$PIECE($H,",")          s BackupCount=$I(BackupCount)          s zPurgeOldBackupFiles(..BackupFileType, BackupCount)=FullFileName      }     s zPurgeOldBackupFiles(..BackupFileType, "BackupCount")=BackupCount     do rs.Close()     if BackupCount > ..BackupsToKeep {          for i=1:1:BackupCount-..BackupsToKeep {               s FullFileName = zPurgeOldBackupFiles(..BackupFileType, i)               d ##class(%File).Delete(FullFileName)               w "File Purged "_FullFileName_" Purged",!          }     }     q status}}

Hi

We use the gender codes M,F,U & I all the time in HL7v2, both on Ensemble, and since we migrated to HealthShare.  

The 'New Features in Health Connect 15.03' page of the documenation also mention that SDA has followed CDA and added 'BirthGender'(clinically relevant in some situations for care of LGBTQ+ patients).

Kind regards, 

Stephen

PS: I can't speak for TrakCare as we don't use that product.

I believe these are all the Cache based products

  • HealthShare Information Exchange  is latest version is 2018.1 
  • HealthShare Health Insight 2019.1
  • HealthShare Patient Index 2019.1
  • HealthShare Personal Community 2019.1
  • HealthShare Provider Directory 2019.1
  • HealthShare Unified Care Record 2019.1

https://wrc.intersystems.com/wrc/coDistHS.csp

These are the IRIS based products

  • InterSystems IRIS Health Connect 2019.1 
  • InterSystems IRIS for Health 2019.1

https://wrc.intersystems.com/wrc/coDistIRIS.csp

I  think you need to contact your sales engineer for an eval licence.

I believe these are all the Cache based products

  • HealthShare Information Exchange  is latest version is 2018.1 
  • HealthShare Health Insight 2019.1
  • HealthShare Patient Index 2019.1
  • HealthShare Personal Community 2019.1
  • HealthShare Provider Directory 2019.1
  • HealthShare Unified Care Record 2019.1

https://wrc.intersystems.com/wrc/coDistHS.csp

These are the IRIS based products

  • InterSystems IRIS Health Connect 2019.1 
  • InterSystems IRIS for Health 2019.1

https://wrc.intersystems.com/wrc/coDistIRIS.csp

I  think you need to contact your sales engineer for an eval licence.

A foundation production is an interoperability production.  The wizard creates the namespace and production and adds it to a register of healthshare productions visible on the wizard screen.

The Ens.Activity.Operation.Local operation is used to collect/monitor production activity. See Monitoring Productions Monitoring Activity Volume for details. 
 

To summarise; 

  • The 'Configure Foundation' option in the Installer Wizard;
    • creates a healthcare interoperability namespace and production 
    • adds this production to the register of productions on the Installer Wizard page
  • A Foundation Production is just an normal interoperability production
    • it is only critical in the sense that you need one to process messages in HSHC. 
    • it is the same as a HL7 routing production created with the Production Wizard except that it doesn't pre-populate with; HL7FileService, Ens.Alert, MsgRouter, BadMessageHandler,EMailAlert, HL7FileOperation and PagerAlert.
    • it does include a Ens.Activity.Operation.Local operation (see Monitoring Productions Monitoring Activity Volume)
  • HSHC 2019.1 also creates a Foundation Production and adds it to the list on the Installer Wizard page when you tick the 'enable names for interoperability productions' tickbox. (ticked by default in HSHC 2019.1)

Advice:

  • use the 'Configure Foundation' option in the Installer Wizard to create interoperability namespaces and their associated productions
  • manually create whatever you need from HL7FileService, Ens.Alert, MsgRouter, BadMessageHandler,EMailAlert, HL7FileOperation and PagerAlert  
  • don't manually create interoperability namespaces and productions. use the wizard.
     

Notes:

  • the old 'New production' dialog doesn't add your production to the list of configurations defined at  http://yourserver.etc:port/csp/healthshare/HS.HC.UI.Installer.Welcome.cls
  • The 'start all' button wont start your new production, it will start the foundation production created when you created your namespace, or throw an error if you deleted it. (hitting 'stop all' stops all productions even if the are not in the 'register')
  • WRC informed me that the Ens.Activity.Operation.Local operation will be removed in future versions. I don't know what that means for the Monitoring Productions Monitoring Activity Volume functionality?  

I meant any classes, including plain objectscript that are called by running code, but I'd like to include dtl's and 'standard' classes for business process, etc., routing rules and schema's

I'm just used to tools that identify unused methods and classes from other IDE's and I thought maybe I missed existing functionality?