2014-10-31 10 views
5

le seguenti dipendenze vengono utilizzati dalla repository centrale Maven in questo esempio:Come modificare le regole di convalida HAPI per i numeri di telefono?

<!-- provides HAPI library --> 
<dependency> 
    <groupId>ca.uhn.hapi</groupId> 
    <artifactId>hapi-base</artifactId> 
    <version>2.2</version> 
</dependency> 
<!-- provides HAPI library message version --> 
<dependency> 
    <groupId>ca.uhn.hapi</groupId> 
    <artifactId>hapi-structures-v22</artifactId> 
    <version>2.2</version> 
</dependency> 

<!-- provides ByteString --> 
<dependency> 
    <groupId>com.typesafe.akka</groupId> 
    <artifactId>akka-actor_2.10</artifactId> 
    <version>2.3.3</version> 
</dependency> 

Ecco un esempio del mio codice di analisi, scritto in scala:

import akka.util.ByteString 
    import ca.uhn.hl7v2.model.Message 
    import ca.uhn.hl7v2.model.v22.datatype.{CM_PAT_ID, ST, TN, TSComponentOne} 
    import ca.uhn.hl7v2.model.v22.segment.{EVN, MRG, PID} 
    import ca.uhn.hl7v2.parser.CanonicalModelClassFactory 
    import ca.uhn.hl7v2.{DefaultHapiContext, ErrorCode, HL7Exception} 

    lazy val parser = { 
    val context = new DefaultHapiContext() 
    context.setModelClassFactory(new CanonicalModelClassFactory("2.2")) 
    context.getGenericParser 
    } 

    def parseHL7Message(message: ByteString) = Try[Message] { 
    val msg: String = message.utf8String.trim 
    parser.parse(msg) 
    } 

Questo codice può analizzare correttamente il seguendo il messaggio HL7.

"MSH|^~\\&|XXXX|S|XXXXXX|S|201410280931||ADT^A31|123456|P|2.2\r" + 
"EVN|A31|201410280930\r" + 
"PID|||9999999^^^S^MR~88888888^^^^PI||xxxx^xxxxxxxxx||11111111||||||(123)456-7890\r" + 
"PV1\r" 

Tuttavia, quando un numero di telefono con un'estensione viene fornito nel messaggio, il parser Hapi non riesce a analizzare il messaggio. Ecco un esempio del messaggio di input che sto cercando di analizzare con un'estensione del numero di telefono:

"MSH|^~\\&|XXXX|S|XXXXXX|S|201410280931||ADT^A31|123456|P|2.2\r" + 
"EVN|A31|201410280930\r" + 
"PID|||9999999^^^S^MR~88888888^^^^PI||xxxx^xxxxxxxxx||11111111||||||(123)456-7890 1\r" + 
"PV1\r" 

Cercando di analizzare questo messaggio non riesce con il seguente messaggio di errore:

ca.uhn. hl7v2.validation.ValidationException: convalida non riuscita: valore di base '(123)456-7890 1' richiede di essere vuoto o un telefono US numero alla PID-13

ho letto tutto quello che ho potuto trovare a 012.327 362489119642per cercare la documentazione su come modificare le regole di convalida ma non hanno trovato nulla di utile.

Un esempio sarebbe più apprezzato, ma anche indicando la documentazione corretta, o un semplice esempio di lavoro sarà sufficiente.

Come possono essere configurate le regole di convalida utilizzate dal parser HAPI per consentire l'inclusione di un numero di telefono in un numero di telefono statunitense valido nel campo PID-13?

EDIT

Con un po 'di più cercando, attraverso questo Hapi sviluppatore mailing list thread, ho capito come disattivare la convalida del tutto. Ecco un esempio:

lazy val parser = { 
    val context = new DefaultHapiContext() 
    context.setModelClassFactory(new CanonicalModelClassFactory("2.2")) 
    context.setValidationContext(new NoValidation) 
    context.getGenericParser 
    } 

Ma se possibile, vorrei continuare a convalidare i messaggi. Se devo disabilitare la convalida, suppongo che dovrà funzionare, ma preferirei specificare che la convalida rimane attiva, ma che i numeri di telefono possono includere estensioni.

risposta

3

Devo lavorare con il servizio di terze parti e questo servizio mi invia telefoni non validi. Sfortunatamente, non riesco a capire, come farlo come "best practice". Ma ho trovato un trucco:

@PostConstruct 
public void postConstruct() { 
    List<RuleBinding<PrimitiveTypeRule>> rules = ((ValidationContextImpl)applicationRouter.getParser().getHapiContext().getValidationContext()).getPrimitiveRuleBindings(); 
    //initially was published with this line, but think it was mistake 
    //for(int i = rules.size() - 1; i > 0; i--) { 
    for(int i = rules.size() - 1; i >= 0; i--) { 
     RuleBinding<PrimitiveTypeRule> item = rules.get(i); 
     if("TN".equals(item.getScope())){ 
      rules.remove(i); 
     } 
    } 
} 

Se qualcuno saprà più buon modo per risolverlo, si prega di scrivere.

2

I numeri di telefono possono includere le estensioni. Il problema è che hai l'estensione nel formato sbagliato. Vedere lo HL7 Messaging Standard Version 2.2, sezione 2.8.10.9. I numeri di telefono devono essere nel seguente formato.

[NN] [(999)]999-9999[X99999][B99999][C any text] 

Inserire l'estensione dopo la "X".

+0

Mentre questa risposta è piacevole avere informazioni. Non abbiamo accesso per modificare l'estensione. Il messaggio HL7 viene inviato per essere utilizzato da una terza parte. – axiopisty

+0

Se l'applicazione di invio è difettosa, sarà necessario scrivere un codice personalizzato per ripulire i dati non validi. L'HAPI non può risolvere questo problema per te. –

+0

concordato. Tuttavia, la nostra applicazione non è la fonte della verità per questi dati. Anche se non è responsabilità di HAPI risolvere il problema, sarebbe bello se HAPI giocasse bene con giocatori cattivi. Sono curioso di sapere se è possibile abilitare una convalida personalizzata per questo scenario, anche se non è un formato di messaggio HL7 valido. – axiopisty

Problemi correlati