User Tools

Site Tools


yamms:yamms

This is an old revision of the document!


YaMMS - Yet another Medical Messaging System

Message Transport Procedure

Message IDs and logging

Message ids are based on two components; The capital letter 'Y' for YaMMS and a running serial number counting from 10000.
Each message is stored in a folder with the name generated from the generation date; [year]/[month].
When a new message id is to be generated the folder with the greatest year/month is opened and the file with the greatest serial number is identified. With this number as the base a new file is created with CREATE_EXCL increasing the counter as long as the creation fails.

Receiving

  • Message files drop into the inbox folder from ftp in regular intervals (ex. 10 minutes).
  • Each message file is parsed and receipts are put in the outbox.
  • Each message file is added to an index containing message metadata (ex. read/unread).
  • Bad messages (syntax errors, unknown types etc.) are marked as such.
  • Control messages are used to mark uploaded messages in the outbox-waiting-confirm folder.

Sending

  • Inotify on the outbox triggers the sending event.
  • Any newly written messages in the outbox is syntax checked and validated.
  • Errornous messages are stalled and a message is put in the inbox that the message could not be sent.
  • Validated messages are uploaded to the ftp server.
  • Each uploaded file is put in a outbox-waiting-confirm folder and marked as uploaded but not confirmed.
  • Each upload also makes a download.

Http protocol (client interface)

  • Get inbox contents (list of messages containing id, type and resume tupples)
  • Move message to [trash|archive|…]
  • (Delete message entirely?)
  • Send [hospitalreferral|…]
  • Mark message as [read|unread|handled|…]
  • Get address by id.
  • Edit address (by id).
  • Create address.
  • Delete address.

Internal Message Format

All internal messages are in UTF-8 encoding.
All address ids maps to address entries in database on server.

Read Format

Contains:

  • Message id
  • Sender address id
  • Receiver address id
  • Message title
  • Message status
  • Message times (sent/received/read etc)
  • Message body (server generated resume based on MedCom XML)
  • Original MedCom XML in base64.
<yamms>
  <message id="47720D608496E1" sender="123" receiver="124" status="unread">
    <title>Some title</title>
    <body>Dette er et eller andet smart.</body>
    <msg>IDUgbWcgMSoxIGZvciBibG9kdHJ5a2tldCAtIFRhYmwgTm9ydmFzYyA1IG1nIDEqMSBmb3IgYmxv
ZHRyeWtrZXQtIFRhYmwgQ2VudHlsIG0uIEtDbCAxIGRnbCAgZm9yIEJUIG9nIHZhbmRkcml2ZW5k
ZSAtIFRhYmwgS2FsZW9yaWQgMSBkZ2wga2FsaXVtdGlsc2t1ZCA8QnJlYWsvPjwvQWN0dWFsTWVk
aWNpbmU+CiAgICA8L1JlbGV2YW50Q2xpbmljYWxJbmZvcm1hdGlvbj4KICA8L0hvc3BpdGFsUmVm
ZXJyYWw+CjwvRW1lc3NhZ2U+Cg==</msg>
  </message>
  <message ...>
     .
     .
     .
  </message>
   .
   .
   .
</yamms>

Send Format

Contains:

  • Sender address id
  • Receiver address id
  • A list of required fields

VANS communication

Connections to the VANS ftp server are done by using libcURL.
A connection session consists of the following actions:

  • Connect
  • Get VANS-inbox directory listing.
  • Download VANS-inbox files to local inbox.
  • Delete VANS-inbox files.
  • Get local outbox directory listing.
  • Upload local outbox files to VANS-outbox.
  • Delete local outbox files (move to archive?).
  • Disconnect.

The procedure is activated either by a timer-timeout event (eg. every 10 minutes) or when a client request the sending of a message (a message is put in the outbox). A separate single shot timer may be introduced connecting 10 seconds after an upload has been made in order to check for immediate negative-VANS control messages.

yamms/yamms.1313760382.txt.gz · Last modified: 2011/08/19 15:26 by deva