Input:
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.dataformat.xml.annotation.*;
import com.hubsante.model.emsi.Context;
import com.hubsante.model.emsi.Event;
import com.hubsante.model.emsi.Mission;
import com.hubsante.model.emsi.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

Context:
src/main/java/com/hubsante/model/emsi/Emsi.java
/**
 * Copyright © 2023-2024 Agence du Numerique en Sante (ANS)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 *
 *
 *
 *
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator
 * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
 * the class manually.
 */

package com.hubsante.model.emsi;

/**
 * Emsi
 */
@JsonPropertyOrder(
    {Emsi.JSON_PROPERTY_C_O_N_T_E_X_T, Emsi.JSON_PROPERTY_E_V_E_N_T,
     Emsi.JSON_PROPERTY_M_I_S_S_I_O_N, Emsi.JSON_PROPERTY_R_E_S_O_U_R_C_E})
@JsonTypeName("emsi")
@JsonInclude(JsonInclude.Include.NON_EMPTY)

public class Emsi {
  public static final String JSON_PROPERTY_C_O_N_T_E_X_T = "CONTEXT";
  private Context CONTEXT;

  public static final String JSON_PROPERTY_E_V_E_N_T = "EVENT";
  private Event EVENT;

  public static final String JSON_PROPERTY_M_I_S_S_I_O_N = "MISSION";
  private List<Mission> MISSION;

  public static final String JSON_PROPERTY_R_E_S_O_U_R_C_E = "RESOURCE";
  private List<Resource> RESOURCE;

  public Emsi() {}

  public Emsi CONTEXT(Context CONTEXT) {

    this.CONTEXT = CONTEXT;
    return this;
  }

  /**
   * Get CONTEXT
   * @return CONTEXT
   **/
  @JsonProperty(JSON_PROPERTY_C_O_N_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public Context getCONTEXT() {
    return CONTEXT;
  }

  @JsonProperty(JSON_PROPERTY_C_O_N_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setCONTEXT(Context CONTEXT) {
    this.CONTEXT = CONTEXT;
  }

  public Emsi EVENT(Event EVENT) {

    this.EVENT = EVENT;
    return this;
  }

  /**
   * Get EVENT
   * @return EVENT
   **/
  @JsonProperty(JSON_PROPERTY_E_V_E_N_T)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public Event getEVENT() {
    return EVENT;
  }

  @JsonProperty(JSON_PROPERTY_E_V_E_N_T)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setEVENT(Event EVENT) {

src/main/java/com/hubsante/model/emsi/Resource.java
@JsonPropertyOrder(
    {Resource.JSON_PROPERTY_R_T_Y_P_E, Resource.JSON_PROPERTY_I_D,
     Resource.JSON_PROPERTY_O_R_G_I_D, Resource.JSON_PROPERTY_N_A_M_E,
     Resource.JSON_PROPERTY_F_R_E_E_T_E_X_T, Resource.JSON_PROPERTY_R_G_E_O,
     Resource.JSON_PROPERTY_Q_U_A_N_T_I_T_Y, Resource.JSON_PROPERTY_U_M,
     Resource.JSON_PROPERTY_S_T_A_T_U_S,
     Resource.JSON_PROPERTY_N_A_T_I_O_N_A_L_I_T_Y,
     Resource.JSON_PROPERTY_C_O_N_T_A_C_T_S})
@JsonTypeName("resource")
@JsonInclude(JsonInclude.Include.NON_EMPTY)

public class Resource {
  public static final String JSON_PROPERTY_R_T_Y_P_E = "RTYPE";
  private Rtype RTYPE;

  public static final String JSON_PROPERTY_I_D = "ID";
  private String ID;

  public static final String JSON_PROPERTY_O_R_G_I_D = "ORG_ID";
  private String ORG_ID;

  public static final String JSON_PROPERTY_N_A_M_E = "NAME";
  private String NAME;

  public static final String JSON_PROPERTY_F_R_E_E_T_E_X_T = "FREETEXT";
  private String FREETEXT;

  public static final String JSON_PROPERTY_R_G_E_O = "RGEO";
  private List<Rgeo> RGEO;

  public static final String JSON_PROPERTY_Q_U_A_N_T_I_T_Y = "QUANTITY";
  private BigDecimal QUANTITY;

  /**
   * Dans le cadre d'un échange d'opération, optionnel. Unité de mesure
   * pour des ressources consommables
   */
  public enum UMEnum {
    LSV("LSV"),

    OTH("OTH"),

    PKG("PKG"),

    TIM("TIM"),

    WGT("WGT"),

    LSV_CM("LSV/CM"),

    LSV_CMH("LSV/CMH"),

    LSV_CNTLTR("LSV/CNTLTR"),

    LSV_DEG("LSV/DEG"),

    LSV_HCTLTR("LSV/HCTLTR"),

    LSV_HCTMTR("LSV/HCTMTR"),

    LSV_KM("LSV/KM"),

    LSV_KPH("LSV/KPH"),

    LSV_LI("LSV/LI"),

    LSV_LTPRHR("LSV/LTPRHR"),

    LSV_LTPRMN("LSV/LTPRMN"),

    LSV_METRE("LSV/METRE"),

    LSV_MILLTR("LSV/MILLTR"),

    LSV_MILMTR("LSV/MILMTR"),

    LSV_SMH("LSV/SMH"),

    LSV_SQM("LSV/SQM"),

    OTH_COIL("OTH/COIL"),

    OTH_DOZEN("OTH/DOZEN"),

    OTH_EA("OTH/EA"),

    OTH_GROSS("OTH/GROSS"),

    OTH_MANHUR("OTH/MANHUR"),

    OTH_MHPRHR("OTH/MHPRHR"),

    PKG_BALE("PKG/BALE"),

    PKG_BARREL("PKG/BARREL"),

    PKG_BLK("PKG/BLK"),

    PKG_BOX("PKG/BOX"),

    PKG_CASE("PKG/CASE"),

    PKG_CONTNR("PKG/CONTNR"),

    PKG_CRATE("PKG/CRATE"),

    PKG_DRM("PKG/DRM"),

    PKG_JERCAN("PKG/JERCAN"),

    PKG_PAK("PKG/PAK"),

    PKG_PAL("PKG/PAL"),

    PKG_RATION("PKG/RATION"),

    TIM_DAY("TIM/DAY"),

    TIM_HR("TIM/HR"),

    TIM_MINUTE("TIM/MINUTE"),

    TIM_MON("TIM/MON"),

    TIM_SECOND("TIM/SECOND"),

    TIM_WEK("TIM/WEK"),

    TIM_YEA("TIM/YEA"),

    WGT_CNTGRM("WGT/CNTGRM"),

    WGT_GRAM("WGT/GRAM"),

    WGT_KG("WGT/KG"),

    WGT_KGH("WGT/KGH");

    private String value;

    UMEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static UMEnum fromValue(String value) {
      for (UMEnum b : UMEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_U_M = "UM";
  private UMEnum UM;

  /**
   * Définit le statut de disponibilité d'une ressource. - AVAILB :
   * Lorsqu'une mission est terminée, une ressource redevient disponible -
   * RESRVD : Lorsque la ressource est réservée pour intervenir sur
   * l'affaire mais pas encore engagée dans l'opération. Par exemple :
   * un SMUR termine un autre transfert patient/victime avant de rejoindre une
   * autre intervention : il est alors RESRVD - IN_USE/MOBILE : à utiliser pour
   * les véhicules et le personnel lorsqu'ils se déplaces - IN_USE/ON_SCENE
   * : à utiliser pour les véhicules et le personnel lorsqu'ils sont sur les
   * lieux de l'affaire
   */
  public enum STATUSEnum {
    AVAILB("AVAILB"),

    UNAV("UNAV"),

    MAINTC("MAINTC"),

    RESRVD("RESRVD"),

    VIRTUAL("VIRTUAL"),

    IN_USE_MOBILE("IN_USE/MOBILE"),

    IN_USE_ON_SCENE("IN_USE/ON_SCENE");

    private String value;

    STATUSEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static STATUSEnum fromValue(String value) {
      for (STATUSEnum b : STATUSEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_T_A_T_U_S = "STATUS";
  private STATUSEnum STATUS;

  public static final String JSON_PROPERTY_N_A_T_I_O_N_A_L_I_T_Y =
      "NATIONALITY";
  private String NATIONALITY;

  public static final String JSON_PROPERTY_C_O_N_T_A_C_T_S = "CONTACTS";
  private List<Contact> CONTACTS;

  public Resource() {}

  public Resource RTYPE(Rtype RTYPE) {

    this.RTYPE = RTYPE;
    return this;
  }

  /**
   * Get RTYPE
   * @return RTYPE
   **/
  @JsonProperty(JSON_PROPERTY_R_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public Rtype getRTYPE() {
    return RTYPE;
  }

  @JsonProperty(JSON_PROPERTY_R_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setRTYPE(Rtype RTYPE) {
    this.RTYPE = RTYPE;
  }

  public Resource ID(String ID) {

    this.ID = ID;
    return this;
  }

  /**
   * Identifiant unique de la ressource  dans le système du partenaire
   *propriétaire. Les systèmes sont garants de l'unicité et de
   *l'invariablité des ids de véhicule dans le temps. Ils peuvent se servir
   *des ids dans les référentiels existants si ils sont uniques et stables. Dans
   *le cas d'un véhicule agrégé par un LRM (comme un SMUR), l'ID doit
   *être valorisé avec son immatriculation. Dans le cas d'un véhicule agrégé
   *par NexSIS, l'ID fournit peut ne pas correspondre à une immatriculation.
   * @return ID
   **/
  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getID() {
    return ID;
  }

  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setID(String ID) {
    this.ID = ID;
  }

  public Resource ORG_ID(String ORG_ID) {

    this.ORG_ID = ORG_ID;
    return this;
  }

  /**
   * Identifiant de l'organisation à laquelle la ressource est rattachée
   *(caserne, SAMU etc). Se référer au DSF pour la structure normée des
   *organisations Le format est le suivant {pays}.{domaine}.{code
   *département}.{organisation}.{structure interne}*.{unité fonctionnelle}*.
   *Dans le cas où le LRM/NexSIS sert d'aggrégateur pour des véhicules
   *appartenant à un partenaire tiers (type ambulance privée), l'identifiant
   *d'organisation permet d'identifier ce tiers A constituer par le
   *rédacteur du présent EMSI pour être unique, identique à
   *<CONTEXT><ORIGIN><ORG_ID>
   * @return ORG_ID
   **/
  @JsonProperty(JSON_PROPERTY_O_R_G_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getORGID() {
    return ORG_ID;
  }

  @JsonProperty(JSON_PROPERTY_O_R_G_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setORGID(String ORG_ID) {
    this.ORG_ID = ORG_ID;
  }

  public Resource NAME(String NAME) {

    this.NAME = NAME;
    return this;
  }

  /**
   * Nom donné à la ressource par le partenaire. L'immatriculation peut être
   *utilisée dans le nom courant des véhicules. Dans le cas pompier, les
   *véhicules sont nommés Dans le cas d'équipier, cela peut être leur nom
   * @return NAME
   **/
  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getNAME() {
    return NAME;
  }

  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNAME(String NAME) {
    this.NAME = NAME;
  }

  public Resource FREETEXT(String FREETEXT) {

    this.FREETEXT = FREETEXT;
    return this;
  }

  /**
   * Texte libre permettant de décrire la ressource où d'ajouter des
   *précisions sur son engagement. Permet aussi notamment de décrire des
   *attributs librement pour la ressource. Par exemple, pour un véhicule, sa
   *plaque d'immatriculation.
   * @return FREETEXT
   **/
  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getFREETEXT() {
    return FREETEXT;
  }

  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFREETEXT(String FREETEXT) {
    this.FREETEXT = FREETEXT;
  }

  public Resource RGEO(List<Rgeo> RGEO) {

    this.RGEO = RGEO;
    return this;
  }

  public Resource addRGEOItem(Rgeo RGEOItem) {
    if (this.RGEO == null) {
      this.RGEO = new ArrayList<>();
    }
    this.RGEO.add(RGEOItem);
    return this;
  }

  /**
   * Get RGEO
   * @return RGEO
   **/
  @JsonProperty(JSON_PROPERTY_R_G_E_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Rgeo> getRGEO() {
    return RGEO;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_R_G_E_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setRGEO(List<Rgeo> RGEO) {
    if (RGEO == null) {
      return;
    }
    if (this.RGEO == null) {
      this.RGEO = new ArrayList<>();
    }
    this.RGEO.addAll(RGEO);
  }

  public Resource QUANTITY(BigDecimal QUANTITY) {

    this.QUANTITY = QUANTITY;
    return this;
  }

  /**
   * Dans le cadre d'un échange d'opération, optionnel. Permet de
   *quantifier une ressource : - à ne pas utiliser pour les véhicules ni le
   *personnel - utilisable pour du matériel - utilisable pour des consommables
   *(dans le cas de consommable, à compléter avec le champ UM)
   * @return QUANTITY
   **/
  @JsonProperty(JSON_PROPERTY_Q_U_A_N_T_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public BigDecimal getQUANTITY() {
    return QUANTITY;
  }

  @JsonProperty(JSON_PROPERTY_Q_U_A_N_T_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setQUANTITY(BigDecimal QUANTITY) {
    this.QUANTITY = QUANTITY;
  }

  public Resource UM(UMEnum UM) {

    this.UM = UM;
    return this;
  }

  /**
   * Dans le cadre d'un échange d'opération, optionnel. Unité de mesure
   *pour des ressources consommables
   * @return UM
   **/
  @JsonProperty(JSON_PROPERTY_U_M)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public UMEnum getUM() {
    return UM;
  }

  @JsonProperty(JSON_PROPERTY_U_M)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setUM(UMEnum UM) {
    this.UM = UM;
  }

  public Resource STATUS(STATUSEnum STATUS) {

    this.STATUS = STATUS;
    return this;
  }

  /**
   * Définit le statut de disponibilité d'une ressource. - AVAILB :
   *Lorsqu'une mission est terminée, une ressource redevient disponible -
   *RESRVD : Lorsque la ressource est réservée pour intervenir sur l'affaire
   *mais pas encore engagée dans l'opération. Par exemple : un SMUR termine
   *un autre transfert patient/victime avant de rejoindre une autre intervention
   *: il est alors RESRVD - IN_USE/MOBILE : à utiliser pour les véhicules et le
   *personnel lorsqu'ils se déplaces - IN_USE/ON_SCENE : à utiliser pour les
   *véhicules et le personnel lorsqu'ils sont sur les lieux de l'affaire
   * @return STATUS
   **/
  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public STATUSEnum getSTATUS() {
    return STATUS;
  }

  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSTATUS(STATUSEnum STATUS) {
    this.STATUS = STATUS;
  }

  public Resource NATIONALITY(String NATIONALITY) {

    this.NATIONALITY = NATIONALITY;
    return this;
  }

  /**
   * Nationalité d'une ressource, réemployer ISO 3166-1-alpha-2 code
   *elements.
   * @return NATIONALITY
   **/
  @JsonProperty(JSON_PROPERTY_N_A_T_I_O_N_A_L_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getNATIONALITY() {
    return NATIONALITY;
  }

  @JsonProperty(JSON_PROPERTY_N_A_T_I_O_N_A_L_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNATIONALITY(String NATIONALITY) {
    this.NATIONALITY = NATIONALITY;
  }

  public Resource CONTACTS(List<Contact> CONTACTS) {

    this.CONTACTS = CONTACTS;
    return this;
  }

  public Resource addCONTACTSItem(Contact CONTACTSItem) {
    if (this.CONTACTS == null) {
      this.CONTACTS = new ArrayList<>();
    }
    this.CONTACTS.add(CONTACTSItem);
    return this;
  }

  /**
   * Get CONTACTS
   * @return CONTACTS
   **/
  @JsonProperty(JSON_PROPERTY_C_O_N_T_A_C_T_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Contact> getCONTACTS() {
    return CONTACTS;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_C_O_N_T_A_C_T_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCONTACTS(List<Contact> CONTACTS) {
    if (CONTACTS == null) {
      return;
    }
    if (this.CONTACTS == null) {
      this.CONTACTS = new ArrayList<>();
    }
    this.CONTACTS.addAll(CONTACTS);
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Resource resource = (Resource)o;
    return Objects.equals(this.RTYPE, resource.RTYPE) &&
        Objects.equals(this.ID, resource.ID) &&
        Objects.equals(this.ORG_ID, resource.ORG_ID) &&
        Objects.equals(this.NAME, resource.NAME) &&
        Objects.equals(this.FREETEXT, resource.FREETEXT) &&
        Objects.equals(this.RGEO, resource.RGEO) &&
        Objects.equals(this.QUANTITY, resource.QUANTITY) &&
        Objects.equals(this.UM, resource.UM) &&
        Objects.equals(this.STATUS, resource.STATUS) &&
        Objects.equals(this.NATIONALITY, resource.NATIONALITY) &&
        Objects.equals(this.CONTACTS, resource.CONTACTS);
  }

  @Override
  public int hashCode() {
    return Objects.hash(RTYPE, ID, ORG_ID, NAME, FREETEXT, RGEO, QUANTITY, UM,
                        STATUS, NATIONALITY, CONTACTS);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Resource {\n");
    sb.append("    RTYPE: ").append(toIndentedString(RTYPE)).append("\n");
    sb.append("    ID: ").append(toIndentedString(ID)).append("\n");
    sb.append("    ORG_ID: ").append(toIndentedString(ORG_ID)).append("\n");
    sb.append("    NAME: ").append(toIndentedString(NAME)).append("\n");
    sb.append("    FREETEXT: ").append(toIndentedString(FREETEXT)).append("\n");
    sb.append("    RGEO: ").append(toIndentedString(RGEO)).append("\n");
    sb.append("    QUANTITY: ").append(toIndentedString(QUANTITY)).append("\n");
    sb.append("    UM: ").append(toIndentedString(UM)).append("\n");
    sb.append("    STATUS: ").append(toIndentedString(STATUS)).append("\n");
    sb.append("    NATIONALITY: ")
        .append(toIndentedString(NATIONALITY))
        .append("\n");
    sb.append("    CONTACTS: ").append(toIndentedString(CONTACTS)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

src/main/java/com/hubsante/model/emsi/Event.java
@JsonPropertyOrder(
    {Event.JSON_PROPERTY_I_D, Event.JSON_PROPERTY_N_A_M_E,
     Event.JSON_PROPERTY_M_A_I_N_E_V_E_N_T_I_D, Event.JSON_PROPERTY_E_T_Y_P_E,
     Event.JSON_PROPERTY_S_O_U_R_C_E, Event.JSON_PROPERTY_S_C_A_L_E,
     Event.JSON_PROPERTY_C_E_R_T_A_I_N_T_Y,
     Event.JSON_PROPERTY_D_E_C_L_D_A_T_I_M_E,
     Event.JSON_PROPERTY_O_C_C_D_A_T_I_M_E,
     Event.JSON_PROPERTY_O_B_S_D_A_T_I_M_E, Event.JSON_PROPERTY_S_T_A_T_U_S,
     Event.JSON_PROPERTY_R_I_S_K_A_S_S_E_S_M_E_N_T,
     Event.JSON_PROPERTY_R_E_F_E_R_E_N_C_E,
     Event.JSON_PROPERTY_C_A_S_U_A_L_T_I_E_S, Event.JSON_PROPERTY_E_V_A_C,
     Event.JSON_PROPERTY_E_G_E_O, Event.JSON_PROPERTY_C_A_U_S_E,
     Event.JSON_PROPERTY_F_R_E_E_T_E_X_T})
@JsonTypeName("event")
@JsonInclude(JsonInclude.Include.NON_EMPTY)

public class Event {
  public static final String JSON_PROPERTY_I_D = "ID";
  private String ID;

  public static final String JSON_PROPERTY_N_A_M_E = "NAME";
  private String NAME;

  public static final String JSON_PROPERTY_M_A_I_N_E_V_E_N_T_I_D =
      "MAIN_EVENT_ID";
  private String MAIN_EVENT_ID;

  public static final String JSON_PROPERTY_E_T_Y_P_E = "ETYPE";
  private Etype ETYPE;

  /**
   * Optionnel
   */
  public enum SOURCEEnum {
    COMFOR("COMFOR"),

    HUMDED("HUMDED"),

    HUMOBS("HUMOBS"),

    SENSOR("SENSOR");

    private String value;

    SOURCEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static SOURCEEnum fromValue(String value) {
      for (SOURCEEnum b : SOURCEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_O_U_R_C_E = "SOURCE";
  private SOURCEEnum SOURCE;

  /**
   * Optionnel, Niveau de criticité de l'opération
   */
  public enum SCALEEnum {
    _1("1"),

    _2("2"),

    _3("3"),

    _4("4"),

    _5("5");

    private String value;

    SCALEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static SCALEEnum fromValue(String value) {
      for (SCALEEnum b : SCALEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_C_A_L_E = "SCALE";
  private SCALEEnum SCALE;

  public static final String JSON_PROPERTY_C_E_R_T_A_I_N_T_Y = "CERTAINTY";
  private Integer CERTAINTY;

  public static final String JSON_PROPERTY_D_E_C_L_D_A_T_I_M_E = "DECL_DATIME";
  private OffsetDateTime DECL_DATIME;

  public static final String JSON_PROPERTY_O_C_C_D_A_T_I_M_E = "OCC_DATIME";
  private OffsetDateTime OCC_DATIME;

  public static final String JSON_PROPERTY_O_B_S_D_A_T_I_M_E = "OBS_DATIME";
  private OffsetDateTime OBS_DATIME;

  /**
   * Permet de décrire le status de l'affaire en cours. Ce champ suit une
   * nomenclature EMSI. (COM = event complete, IPR = event in
   * progress, NST = event not started, STOP = STOP = event under
   * control, no need for additional resource) Dans le cadre d'une opération
   * : - si l'opération est encore en cours : rensigner 'IPR', - si
   * le dispatching de moyens est encore en cours ou que seulement des
   * qualifications d'alertes ont été échangées sans aucune décision de
   * régulation 'NST', - si l'opération est en pause/veille :
   * 'STOP' - si le message d'échange opérationnel décrit une fin
   * d'opération, à renseigner avec 'COM' Un message EMSI-EO sans
   * RESSOURCE ni
   */
  public enum STATUSEnum {
    COM("COM"),

    IPR("IPR"),

    NST("NST"),

    STOP("STOP");

    private String value;

    STATUSEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static STATUSEnum fromValue(String value) {
      for (STATUSEnum b : STATUSEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_T_A_T_U_S = "STATUS";
  private STATUSEnum STATUS;

  /**
   * Optionnel
   */
  public enum RISKASSESMENTEnum {
    NCREA("NCREA"),

    DECREA("DECREA"),

    STABLE("STABLE");

    private String value;

    RISKASSESMENTEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static RISKASSESMENTEnum fromValue(String value) {
      for (RISKASSESMENTEnum b : RISKASSESMENTEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_R_I_S_K_A_S_S_E_S_M_E_N_T =
      "RISK_ASSESMENT";
  private RISKASSESMENTEnum RISK_ASSESMENT;

  public static final String JSON_PROPERTY_R_E_F_E_R_E_N_C_E = "REFERENCE";
  private List<Reference> REFERENCE;

  public static final String JSON_PROPERTY_C_A_S_U_A_L_T_I_E_S = "CASUALTIES";
  private List<Casualties> CASUALTIES;

  public static final String JSON_PROPERTY_E_V_A_C = "EVAC";
  private List<Evac> EVAC;

  public static final String JSON_PROPERTY_E_G_E_O = "EGEO";
  private List<Egeo> EGEO;

  /**
   * Optionnel
   */
  public enum CAUSEEnum {
    ACC("ACC"),

    DEL("DEL"),

    NAT("NAT");

    private String value;

    CAUSEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static CAUSEEnum fromValue(String value) {
      for (CAUSEEnum b : CAUSEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_C_A_U_S_E = "CAUSE";
  private CAUSEEnum CAUSE;

  public static final String JSON_PROPERTY_F_R_E_E_T_E_X_T = "FREETEXT";
  private String FREETEXT;

  public Event() {}

  public Event ID(String ID) {

    this.ID = ID;
    return this;
  }

  /**
   * Identifiant local de l'affaire dans le système du partenaire emetteur
   * @return ID
   **/
  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public String getID() {
    return ID;
  }

  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setID(String ID) {
    this.ID = ID;
  }

  public Event NAME(String NAME) {

    this.NAME = NAME;
    return this;
  }

  /**
   * Optionnel Dans nexSIS; [libelle NF 1 métier] & \" - \" &
   *[libelle TL 1 métier] & \" - \" & [libellé commune]
   * @return NAME
   **/
  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getNAME() {
    return NAME;
  }

  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNAME(String NAME) {
    this.NAME = NAME;
  }

  public Event MAIN_EVENT_ID(String MAIN_EVENT_ID) {

    this.MAIN_EVENT_ID = MAIN_EVENT_ID;
    return this;
  }

  /**
   * Identifiant d’affaire partagé issu du message RC-EDA transmis en amont NB :
   *Dans le cas d’un partage initié par un SAMU, on peut avoir EVENT.ID =
   *EVENT.MAIN_EVENT_ID
   * @return MAIN_EVENT_ID
   **/
  @JsonProperty(JSON_PROPERTY_M_A_I_N_E_V_E_N_T_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getMAINEVENTID() {
    return MAIN_EVENT_ID;
  }

  @JsonProperty(JSON_PROPERTY_M_A_I_N_E_V_E_N_T_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setMAINEVENTID(String MAIN_EVENT_ID) {
    this.MAIN_EVENT_ID = MAIN_EVENT_ID;
  }

  public Event ETYPE(Etype ETYPE) {

    this.ETYPE = ETYPE;
    return this;
  }

  /**
   * Get ETYPE
   * @return ETYPE
   **/
  @JsonProperty(JSON_PROPERTY_E_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Etype getETYPE() {
    return ETYPE;
  }

  @JsonProperty(JSON_PROPERTY_E_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setETYPE(Etype ETYPE) {
    this.ETYPE = ETYPE;
  }

  public Event SOURCE(SOURCEEnum SOURCE) {

    this.SOURCE = SOURCE;
    return this;
  }

  /**
   * Optionnel
   * @return SOURCE
   **/
  @JsonProperty(JSON_PROPERTY_S_O_U_R_C_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public SOURCEEnum getSOURCE() {
    return SOURCE;
  }

  @JsonProperty(JSON_PROPERTY_S_O_U_R_C_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSOURCE(SOURCEEnum SOURCE) {
    this.SOURCE = SOURCE;
  }

  public Event SCALE(SCALEEnum SCALE) {

    this.SCALE = SCALE;
    return this;
  }

  /**
   * Optionnel, Niveau de criticité de l'opération
   * @return SCALE
   **/
  @JsonProperty(JSON_PROPERTY_S_C_A_L_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public SCALEEnum getSCALE() {
    return SCALE;
  }

  @JsonProperty(JSON_PROPERTY_S_C_A_L_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSCALE(SCALEEnum SCALE) {
    this.SCALE = SCALE;
  }

  public Event CERTAINTY(Integer CERTAINTY) {

    this.CERTAINTY = CERTAINTY;
    return this;
  }

  /**
   * Prend une valeur entière entre 0 et 100, et décrit à quel point
   *l'alerte associée à l'événement est fiable Optionnel
   * @return CERTAINTY
   **/
  @JsonProperty(JSON_PROPERTY_C_E_R_T_A_I_N_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Integer getCERTAINTY() {
    return CERTAINTY;
  }

  @JsonProperty(JSON_PROPERTY_C_E_R_T_A_I_N_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCERTAINTY(Integer CERTAINTY) {
    this.CERTAINTY = CERTAINTY;
  }

  public Event DECL_DATIME(OffsetDateTime DECL_DATIME) {

    this.DECL_DATIME = DECL_DATIME;
    return this;
  }

  /**
   * Dans le cadre d'une demande de concours, ce champ est valorisé avec la
   *date/heure de création de l'affaire ou de l'opération. NexSIS
   *transmettra la date/heure de création de l'opération dans ses systèmes
   *(qui peut diverger de la date/heure de création de l'affaire)
   * @return DECL_DATIME
   **/
  @JsonProperty(JSON_PROPERTY_D_E_C_L_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getDECLDATIME() {
    return DECL_DATIME;
  }

  @JsonProperty(JSON_PROPERTY_D_E_C_L_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setDECLDATIME(OffsetDateTime DECL_DATIME) {
    this.DECL_DATIME = DECL_DATIME;
  }

  public Event OCC_DATIME(OffsetDateTime OCC_DATIME) {

    this.OCC_DATIME = OCC_DATIME;
    return this;
  }

  /**
   * Dans le cadre d'une demande de concours, ce champ est valorisé avec la
   *date de la première alerte ou la date évaluée de début de la situation
   *d'urgence. Par exemple : Si un incendie est déclaré est 9h02, il a pu
   *démarré à 8h55 par exemple. NB : temporairement, NexSIS renseignera ce champ
   *avec la date de réception de l'alerte initiale
   * @return OCC_DATIME
   **/
  @JsonProperty(JSON_PROPERTY_O_C_C_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getOCCDATIME() {
    return OCC_DATIME;
  }

  @JsonProperty(JSON_PROPERTY_O_C_C_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setOCCDATIME(OffsetDateTime OCC_DATIME) {
    this.OCC_DATIME = OCC_DATIME;
  }

  public Event OBS_DATIME(OffsetDateTime OBS_DATIME) {

    this.OBS_DATIME = OBS_DATIME;
    return this;
  }

  /**
   * Ce champ est idéalement à valoriser avec la date/heure à laquelle
   *l'observation de la situation d'urgence de l'affaire la plus
   *récente a été réalisée. NexSIS transmettra la date/heure d'envoi de la
   *demande de concours dans son système. NB : temporairement, NexSIS
   *renseignera ce champ avec la date de réception de l'alerte initiale
   * @return OBS_DATIME
   **/
  @JsonProperty(JSON_PROPERTY_O_B_S_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getOBSDATIME() {
    return OBS_DATIME;
  }

  @JsonProperty(JSON_PROPERTY_O_B_S_D_A_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setOBSDATIME(OffsetDateTime OBS_DATIME) {
    this.OBS_DATIME = OBS_DATIME;
  }

  public Event STATUS(STATUSEnum STATUS) {

    this.STATUS = STATUS;
    return this;
  }

  /**
   * Permet de décrire le status de l'affaire en cours. Ce champ suit une
   *nomenclature EMSI. (COM = event complete, IPR = event in progress,
   *NST = event not started, STOP = STOP = event under control,
   *no need for additional resource) Dans le cadre d'une opération : - si
   *l'opération est encore en cours : rensigner 'IPR', - si le
   *dispatching de moyens est encore en cours ou que seulement des
   *qualifications d'alertes ont été échangées sans aucune décision de
   *régulation 'NST', - si l'opération est en pause/veille :
   *'STOP' - si le message d'échange opérationnel décrit une fin
   *d'opération, à renseigner avec 'COM' Un message EMSI-EO sans
   *RESSOURCE ni
   * @return STATUS
   **/
  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public STATUSEnum getSTATUS() {
    return STATUS;
  }

  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSTATUS(STATUSEnum STATUS) {
    this.STATUS = STATUS;
  }

  public Event RISK_ASSESMENT(RISKASSESMENTEnum RISK_ASSESMENT) {

    this.RISK_ASSESMENT = RISK_ASSESMENT;
    return this;
  }

  /**
   * Optionnel
   * @return RISK_ASSESMENT
   **/
  @JsonProperty(JSON_PROPERTY_R_I_S_K_A_S_S_E_S_M_E_N_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public RISKASSESMENTEnum getRISKASSESMENT() {
    return RISK_ASSESMENT;
  }

  @JsonProperty(JSON_PROPERTY_R_I_S_K_A_S_S_E_S_M_E_N_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setRISKASSESMENT(RISKASSESMENTEnum RISK_ASSESMENT) {
    this.RISK_ASSESMENT = RISK_ASSESMENT;
  }

  public Event REFERENCE(List<Reference> REFERENCE) {

    this.REFERENCE = REFERENCE;
    return this;
  }

  public Event addREFERENCEItem(Reference REFERENCEItem) {
    if (this.REFERENCE == null) {
      this.REFERENCE = new ArrayList<>();
    }
    this.REFERENCE.add(REFERENCEItem);
    return this;
  }

  /**
   * Get REFERENCE
   * @return REFERENCE
   **/
  @JsonProperty(JSON_PROPERTY_R_E_F_E_R_E_N_C_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Reference> getREFERENCE() {
    return REFERENCE;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_R_E_F_E_R_E_N_C_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setREFERENCE(List<Reference> REFERENCE) {
    if (REFERENCE == null) {
      return;
    }
    if (this.REFERENCE == null) {
      this.REFERENCE = new ArrayList<>();
    }
    this.REFERENCE.addAll(REFERENCE);
  }

  public Event CASUALTIES(List<Casualties> CASUALTIES) {

    this.CASUALTIES = CASUALTIES;
    return this;
  }

  public Event addCASUALTIESItem(Casualties CASUALTIESItem) {
    if (this.CASUALTIES == null) {
      this.CASUALTIES = new ArrayList<>();
    }
    this.CASUALTIES.add(CASUALTIESItem);
    return this;
  }

  /**
   * Get CASUALTIES
   * @return CASUALTIES
   **/
  @JsonProperty(JSON_PROPERTY_C_A_S_U_A_L_T_I_E_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Casualties> getCASUALTIES() {
    return CASUALTIES;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_C_A_S_U_A_L_T_I_E_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCASUALTIES(List<Casualties> CASUALTIES) {
    if (CASUALTIES == null) {
      return;
    }
    if (this.CASUALTIES == null) {
      this.CASUALTIES = new ArrayList<>();
    }
    this.CASUALTIES.addAll(CASUALTIES);
  }

  public Event EVAC(List<Evac> EVAC) {

    this.EVAC = EVAC;
    return this;
  }

  public Event addEVACItem(Evac EVACItem) {
    if (this.EVAC == null) {
      this.EVAC = new ArrayList<>();
    }
    this.EVAC.add(EVACItem);
    return this;
  }

  /**
   * Get EVAC
   * @return EVAC
   **/
  @JsonProperty(JSON_PROPERTY_E_V_A_C)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Evac> getEVAC() {
    return EVAC;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_E_V_A_C)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setEVAC(List<Evac> EVAC) {
    if (EVAC == null) {
      return;
    }
    if (this.EVAC == null) {
      this.EVAC = new ArrayList<>();
    }
    this.EVAC.addAll(EVAC);
  }

  public Event EGEO(List<Egeo> EGEO) {

    this.EGEO = EGEO;
    return this;
  }

  public Event addEGEOItem(Egeo EGEOItem) {
    if (this.EGEO == null) {
      this.EGEO = new ArrayList<>();
    }
    this.EGEO.add(EGEOItem);
    return this;
  }

  /**
   * Get EGEO
   * @return EGEO
   **/
  @JsonProperty(JSON_PROPERTY_E_G_E_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Egeo> getEGEO() {
    return EGEO;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_E_G_E_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setEGEO(List<Egeo> EGEO) {
    if (EGEO == null) {
      return;
    }
    if (this.EGEO == null) {
      this.EGEO = new ArrayList<>();
    }
    this.EGEO.addAll(EGEO);
  }

  public Event CAUSE(CAUSEEnum CAUSE) {

    this.CAUSE = CAUSE;
    return this;
  }

  /**
   * Optionnel
   * @return CAUSE
   **/
  @JsonProperty(JSON_PROPERTY_C_A_U_S_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public CAUSEEnum getCAUSE() {
    return CAUSE;
  }

  @JsonProperty(JSON_PROPERTY_C_A_U_S_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCAUSE(CAUSEEnum CAUSE) {
    this.CAUSE = CAUSE;
  }

  public Event FREETEXT(String FREETEXT) {

    this.FREETEXT = FREETEXT;
    return this;
  }

  /**
   * Optionnel
   * @return FREETEXT
   **/
  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getFREETEXT() {
    return FREETEXT;
  }

  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFREETEXT(String FREETEXT) {
    this.FREETEXT = FREETEXT;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Event event = (Event)o;
    return Objects.equals(this.ID, event.ID) &&
        Objects.equals(this.NAME, event.NAME) &&
        Objects.equals(this.MAIN_EVENT_ID, event.MAIN_EVENT_ID) &&
        Objects.equals(this.ETYPE, event.ETYPE) &&
        Objects.equals(this.SOURCE, event.SOURCE) &&
        Objects.equals(this.SCALE, event.SCALE) &&
        Objects.equals(this.CERTAINTY, event.CERTAINTY) &&
        Objects.equals(this.DECL_DATIME, event.DECL_DATIME) &&
        Objects.equals(this.OCC_DATIME, event.OCC_DATIME) &&
        Objects.equals(this.OBS_DATIME, event.OBS_DATIME) &&
        Objects.equals(this.STATUS, event.STATUS) &&
        Objects.equals(this.RISK_ASSESMENT, event.RISK_ASSESMENT) &&
        Objects.equals(this.REFERENCE, event.REFERENCE) &&
        Objects.equals(this.CASUALTIES, event.CASUALTIES) &&
        Objects.equals(this.EVAC, event.EVAC) &&
        Objects.equals(this.EGEO, event.EGEO) &&
        Objects.equals(this.CAUSE, event.CAUSE) &&
        Objects.equals(this.FREETEXT, event.FREETEXT);
  }

  @Override
  public int hashCode() {
    return Objects.hash(ID, NAME, MAIN_EVENT_ID, ETYPE, SOURCE, SCALE,
                        CERTAINTY, DECL_DATIME, OCC_DATIME, OBS_DATIME, STATUS,
                        RISK_ASSESMENT, REFERENCE, CASUALTIES, EVAC, EGEO,
                        CAUSE, FREETEXT);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Event {\n");
    sb.append("    ID: ").append(toIndentedString(ID)).append("\n");
    sb.append("    NAME: ").append(toIndentedString(NAME)).append("\n");
    sb.append("    MAIN_EVENT_ID: ")
        .append(toIndentedString(MAIN_EVENT_ID))
        .append("\n");
    sb.append("    ETYPE: ").append(toIndentedString(ETYPE)).append("\n");
    sb.append("    SOURCE: ").append(toIndentedString(SOURCE)).append("\n");
    sb.append("    SCALE: ").append(toIndentedString(SCALE)).append("\n");
    sb.append("    CERTAINTY: ")
        .append(toIndentedString(CERTAINTY))
        .append("\n");
    sb.append("    DECL_DATIME: ")
        .append(toIndentedString(DECL_DATIME))
        .append("\n");
    sb.append("    OCC_DATIME: ")
        .append(toIndentedString(OCC_DATIME))
        .append("\n");
    sb.append("    OBS_DATIME: ")
        .append(toIndentedString(OBS_DATIME))
        .append("\n");
    sb.append("    STATUS: ").append(toIndentedString(STATUS)).append("\n");
    sb.append("    RISK_ASSESMENT: ")
        .append(toIndentedString(RISK_ASSESMENT))
        .append("\n");
    sb.append("    REFERENCE: ")
        .append(toIndentedString(REFERENCE))
        .append("\n");
    sb.append("    CASUALTIES: ")
        .append(toIndentedString(CASUALTIES))
        .append("\n");
    sb.append("    EVAC: ").append(toIndentedString(EVAC)).append("\n");
    sb.append("    EGEO: ").append(toIndentedString(EGEO)).append("\n");
    sb.append("    CAUSE: ").append(toIndentedString(CAUSE)).append("\n");
    sb.append("    FREETEXT: ").append(toIndentedString(FREETEXT)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

src/main/java/com/hubsante/model/emsi/Context.java
@JsonPropertyOrder(
    {Context.JSON_PROPERTY_I_D, Context.JSON_PROPERTY_M_O_D_E,
     Context.JSON_PROPERTY_M_S_G_T_Y_P_E, Context.JSON_PROPERTY_C_R_E_A_T_I_O_N,
     Context.JSON_PROPERTY_L_I_N_K, Context.JSON_PROPERTY_L_E_V_E_L,
     Context.JSON_PROPERTY_S_E_C_L_A_S_S, Context.JSON_PROPERTY_F_R_E_E_T_E_X_T,
     Context.JSON_PROPERTY_O_R_I_G_I_N,
     Context.JSON_PROPERTY_E_X_T_E_R_N_A_L_I_N_F_O,
     Context.JSON_PROPERTY_U_R_G_E_N_C_Y})
@JsonTypeName("context")
@JsonInclude(JsonInclude.Include.NON_EMPTY)

public class Context {
  public static final String JSON_PROPERTY_I_D = "ID";
  private String ID;

  /**
   * Valeur constante dans le cadre des échanges LRM-NexSIS : ACTUAL
   */
  public enum MODEEnum {
    ACTUAL("ACTUAL"),

    EXERCS("EXERCS"),

    SYSTEM("SYSTEM"),

    TEST("TEST");

    private String value;

    MODEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static MODEEnum fromValue(String value) {
      for (MODEEnum b : MODEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_M_O_D_E = "MODE";
  private MODEEnum MODE;

  /**
   * - A valoriser avec la valeur \"ALERT\" lors du premier échange
   * entre systèmes. - A valoriser avec la valeur constante \"UPDATE\"
   * ensuite. Peut ne pas être interprété par les LRM.
   */
  public enum MSGTYPEEnum {
    ACK("ACK"),

    ALERT("ALERT"),

    CANCEL("CANCEL"),

    ERROR("ERROR"),

    UPDATE("UPDATE");

    private String value;

    MSGTYPEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static MSGTYPEEnum fromValue(String value) {
      for (MSGTYPEEnum b : MSGTYPEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_M_S_G_T_Y_P_E = "MSGTYPE";
  private MSGTYPEEnum MSGTYPE;

  public static final String JSON_PROPERTY_C_R_E_A_T_I_O_N = "CREATION";
  private OffsetDateTime CREATION;

  public static final String JSON_PROPERTY_L_I_N_K = "LINK";
  private List<Link> LINK;

  /**
   * A valoriser avec la valeur constante \"OPR\" dans le cadre du
   * message EMSI-EO
   */
  public enum LEVELEnum {
    STRTGC("STRTGC"),

    OPR("OPR"),

    TACTCL("TACTCL");

    private String value;

    LEVELEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static LEVELEnum fromValue(String value) {
      for (LEVELEnum b : LEVELEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_L_E_V_E_L = "LEVEL";
  private LEVELEnum LEVEL;

  /**
   * Optionnel  Dans NexSIS ;  Les messages transmis par NexSIS auront un champ
   * valorisé avec systématiquement le même code:
   * \"RESTRC\"=restricted Les LRM doivent également renseigner
   * la valeur \"RESTRC\"
   */
  public enum SECLASSEnum {
    CONFID("CONFID"),

    RESTRC("RESTRC"),

    SECRET("SECRET"),

    TOPSRT("TOPSRT"),

    UNCLAS("UNCLAS"),

    UNMARK("UNMARK");

    private String value;

    SECLASSEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static SECLASSEnum fromValue(String value) {
      for (SECLASSEnum b : SECLASSEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_E_C_L_A_S_S = "SECLASS";
  private SECLASSEnum SECLASS;

  public static final String JSON_PROPERTY_F_R_E_E_T_E_X_T = "FREETEXT";
  private String FREETEXT;

  public static final String JSON_PROPERTY_O_R_I_G_I_N = "ORIGIN";
  private Origin ORIGIN;

  public static final String JSON_PROPERTY_E_X_T_E_R_N_A_L_I_N_F_O =
      "EXTERNAL_INFO";
  private List<ExternalInfo> EXTERNAL_INFO;

  /**
   * Niveau d'urgence pour l'affaire en cours Dans le cadre des échanges
   * LRM-NexSIS, optionnel
   */
  public enum URGENCYEnum {
    URGENT("URGENT"),

    NOT_URGENT("NOT_URGENT");

    private String value;

    URGENCYEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static URGENCYEnum fromValue(String value) {
      for (URGENCYEnum b : URGENCYEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_U_R_G_E_N_C_Y = "URGENCY";
  private URGENCYEnum URGENCY;

  public Context() {}

  public Context ID(String ID) {

    this.ID = ID;
    return this;
  }

  /**
   * A constituer par le rédacteur du présent EMSI pour être unique, il est
   *préconisé de reprendre la valeur du champ messageId de l'entête RC-DE.
   * @return ID
   **/
  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public String getID() {
    return ID;
  }

  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setID(String ID) {
    this.ID = ID;
  }

  public Context MODE(MODEEnum MODE) {

    this.MODE = MODE;
    return this;
  }

  /**
   * Valeur constante dans le cadre des échanges LRM-NexSIS : ACTUAL
   * @return MODE
   **/
  @JsonProperty(JSON_PROPERTY_M_O_D_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public MODEEnum getMODE() {
    return MODE;
  }

  @JsonProperty(JSON_PROPERTY_M_O_D_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setMODE(MODEEnum MODE) {
    this.MODE = MODE;
  }

  public Context MSGTYPE(MSGTYPEEnum MSGTYPE) {

    this.MSGTYPE = MSGTYPE;
    return this;
  }

  /**
   * - A valoriser avec la valeur \"ALERT\" lors du premier échange
   *entre systèmes. - A valoriser avec la valeur constante \"UPDATE\"
   *ensuite. Peut ne pas être interprété par les LRM.
   * @return MSGTYPE
   **/
  @JsonProperty(JSON_PROPERTY_M_S_G_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public MSGTYPEEnum getMSGTYPE() {
    return MSGTYPE;
  }

  @JsonProperty(JSON_PROPERTY_M_S_G_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setMSGTYPE(MSGTYPEEnum MSGTYPE) {
    this.MSGTYPE = MSGTYPE;
  }

  public Context CREATION(OffsetDateTime CREATION) {

    this.CREATION = CREATION;
    return this;
  }

  /**
   * Obligatoire dans le cadre d'une demande de concours, contient la date
   *de création de la demande de concours dans le système du partenaire
   *requérant. A valoriser avec le même horaire que dateTimeSent dans le message
   *RC-DE associé. Dans le cadre d'une demande de concours, obligatoire. Ce
   *champ est valorisée avec l'heure de création de la demande de concours
   *chez le partenaire emetteur. L'heure d'envoi du message peut être
   *obtenue via l'enveloppe EDXL-DE (se référer au DST)
   * @return CREATION
   **/
  @JsonProperty(JSON_PROPERTY_C_R_E_A_T_I_O_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getCREATION() {
    return CREATION;
  }

  @JsonProperty(JSON_PROPERTY_C_R_E_A_T_I_O_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCREATION(OffsetDateTime CREATION) {
    this.CREATION = CREATION;
  }

  public Context LINK(List<Link> LINK) {

    this.LINK = LINK;
    return this;
  }

  public Context addLINKItem(Link LINKItem) {
    if (this.LINK == null) {
      this.LINK = new ArrayList<>();
    }
    this.LINK.add(LINKItem);
    return this;
  }

  /**
   * Get LINK
   * @return LINK
   **/
  @JsonProperty(JSON_PROPERTY_L_I_N_K)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<Link> getLINK() {
    return LINK;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_L_I_N_K)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setLINK(List<Link> LINK) {
    if (LINK == null) {
      return;
    }
    if (this.LINK == null) {
      this.LINK = new ArrayList<>();
    }
    this.LINK.addAll(LINK);
  }

  public Context LEVEL(LEVELEnum LEVEL) {

    this.LEVEL = LEVEL;
    return this;
  }

  /**
   * A valoriser avec la valeur constante \"OPR\" dans le cadre du
   *message EMSI-EO
   * @return LEVEL
   **/
  @JsonProperty(JSON_PROPERTY_L_E_V_E_L)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public LEVELEnum getLEVEL() {
    return LEVEL;
  }

  @JsonProperty(JSON_PROPERTY_L_E_V_E_L)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setLEVEL(LEVELEnum LEVEL) {
    this.LEVEL = LEVEL;
  }

  public Context SECLASS(SECLASSEnum SECLASS) {

    this.SECLASS = SECLASS;
    return this;
  }

  /**
   * Optionnel  Dans NexSIS ;  Les messages transmis par NexSIS auront un champ
   *valorisé avec systématiquement le même code:
   *\"RESTRC\"=restricted Les LRM doivent également renseigner la
   *valeur \"RESTRC\"
   * @return SECLASS
   **/
  @JsonProperty(JSON_PROPERTY_S_E_C_L_A_S_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public SECLASSEnum getSECLASS() {
    return SECLASS;
  }

  @JsonProperty(JSON_PROPERTY_S_E_C_L_A_S_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSECLASS(SECLASSEnum SECLASS) {
    this.SECLASS = SECLASS;
  }

  public Context FREETEXT(String FREETEXT) {

    this.FREETEXT = FREETEXT;
    return this;
  }

  /**
   * Texte libre, optionnel  Dans NexSIS;  Fonction de l'événement
   *générateur RG 1 : la valeur de <context><freetext> reste à
   *'Création d'un événement opérationnel EMSI' & version &
   *'suite à réception d'une affaire*' dans le cadre de la création
   *d'une opération commune (conforme RG 2 de NEXSIS-6618) RG 3 : les
   *événements générateurs sont ceux définis au sein de NEXSIS-6619 RG 1 de
   *traçabilité  ( input = <Evenement à l'origine> =
   *CREATION_OPERATION / MAJ_MODIFICATION_ETAT_OPERATION / AJOUT_RESSOURCE /
   *RETRAIT_RESSOURCE / MAJ_ETAT_SITUATION_RESSOURCE / MAJ_LOCALISATION_ADRESSE)
   *auxquels seront ajoutés  les éventuels événements à venir.
   * @return FREETEXT
   **/
  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getFREETEXT() {
    return FREETEXT;
  }

  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFREETEXT(String FREETEXT) {
    this.FREETEXT = FREETEXT;
  }

  public Context ORIGIN(Origin ORIGIN) {

    this.ORIGIN = ORIGIN;
    return this;
  }

  /**
   * Get ORIGIN
   * @return ORIGIN
   **/
  @JsonProperty(JSON_PROPERTY_O_R_I_G_I_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Origin getORIGIN() {
    return ORIGIN;
  }

  @JsonProperty(JSON_PROPERTY_O_R_I_G_I_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setORIGIN(Origin ORIGIN) {
    this.ORIGIN = ORIGIN;
  }

  public Context EXTERNAL_INFO(List<ExternalInfo> EXTERNAL_INFO) {

    this.EXTERNAL_INFO = EXTERNAL_INFO;
    return this;
  }

  public Context addEXTERNALINFOItem(ExternalInfo EXTERNAL_INFOItem) {
    if (this.EXTERNAL_INFO == null) {
      this.EXTERNAL_INFO = new ArrayList<>();
    }
    this.EXTERNAL_INFO.add(EXTERNAL_INFOItem);
    return this;
  }

  /**
   * Get EXTERNAL_INFO
   * @return EXTERNAL_INFO
   **/
  @JsonProperty(JSON_PROPERTY_E_X_T_E_R_N_A_L_I_N_F_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<ExternalInfo> getEXTERNALINFO() {
    return EXTERNAL_INFO;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_E_X_T_E_R_N_A_L_I_N_F_O)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setEXTERNALINFO(List<ExternalInfo> EXTERNAL_INFO) {
    if (EXTERNAL_INFO == null) {
      return;
    }
    if (this.EXTERNAL_INFO == null) {
      this.EXTERNAL_INFO = new ArrayList<>();
    }
    this.EXTERNAL_INFO.addAll(EXTERNAL_INFO);
  }

  public Context URGENCY(URGENCYEnum URGENCY) {

    this.URGENCY = URGENCY;
    return this;
  }

  /**
   * Niveau d'urgence pour l'affaire en cours Dans le cadre des échanges
   *LRM-NexSIS, optionnel
   * @return URGENCY
   **/
  @JsonProperty(JSON_PROPERTY_U_R_G_E_N_C_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public URGENCYEnum getURGENCY() {
    return URGENCY;
  }

  @JsonProperty(JSON_PROPERTY_U_R_G_E_N_C_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setURGENCY(URGENCYEnum URGENCY) {
    this.URGENCY = URGENCY;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Context context = (Context)o;
    return Objects.equals(this.ID, context.ID) &&
        Objects.equals(this.MODE, context.MODE) &&
        Objects.equals(this.MSGTYPE, context.MSGTYPE) &&
        Objects.equals(this.CREATION, context.CREATION) &&
        Objects.equals(this.LINK, context.LINK) &&
        Objects.equals(this.LEVEL, context.LEVEL) &&
        Objects.equals(this.SECLASS, context.SECLASS) &&
        Objects.equals(this.FREETEXT, context.FREETEXT) &&
        Objects.equals(this.ORIGIN, context.ORIGIN) &&
        Objects.equals(this.EXTERNAL_INFO, context.EXTERNAL_INFO) &&
        Objects.equals(this.URGENCY, context.URGENCY);
  }

  @Override
  public int hashCode() {
    return Objects.hash(ID, MODE, MSGTYPE, CREATION, LINK, LEVEL, SECLASS,
                        FREETEXT, ORIGIN, EXTERNAL_INFO, URGENCY);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Context {\n");
    sb.append("    ID: ").append(toIndentedString(ID)).append("\n");
    sb.append("    MODE: ").append(toIndentedString(MODE)).append("\n");
    sb.append("    MSGTYPE: ").append(toIndentedString(MSGTYPE)).append("\n");
    sb.append("    CREATION: ").append(toIndentedString(CREATION)).append("\n");
    sb.append("    LINK: ").append(toIndentedString(LINK)).append("\n");
    sb.append("    LEVEL: ").append(toIndentedString(LEVEL)).append("\n");
    sb.append("    SECLASS: ").append(toIndentedString(SECLASS)).append("\n");
    sb.append("    FREETEXT: ").append(toIndentedString(FREETEXT)).append("\n");
    sb.append("    ORIGIN: ").append(toIndentedString(ORIGIN)).append("\n");
    sb.append("    EXTERNAL_INFO: ")
        .append(toIndentedString(EXTERNAL_INFO))
        .append("\n");
    sb.append("    URGENCY: ").append(toIndentedString(URGENCY)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

src/main/java/com/hubsante/model/emsi/Mission.java
@JsonPropertyOrder(
    {Mission.JSON_PROPERTY_T_Y_P_E, Mission.JSON_PROPERTY_F_R_E_E_T_E_X_T,
     Mission.JSON_PROPERTY_I_D, Mission.JSON_PROPERTY_O_R_G_I_D,
     Mission.JSON_PROPERTY_N_A_M_E, Mission.JSON_PROPERTY_S_T_A_T_U_S,
     Mission.JSON_PROPERTY_S_T_A_R_T_T_I_M_E,
     Mission.JSON_PROPERTY_E_N_D_T_I_M_E,
     Mission.JSON_PROPERTY_R_E_S_O_U_R_C_E_I_D,
     Mission.JSON_PROPERTY_P_A_R_E_N_T_M_I_S_S_I_O_N_I_D,
     Mission.JSON_PROPERTY_C_H_I_L_D_M_I_S_S_I_O_N_I_D,
     Mission.JSON_PROPERTY_M_A_I_N_M_I_S_S_I_O_N_I_D,
     Mission.JSON_PROPERTY_P_O_S_I_T_I_O_N,
     Mission.JSON_PROPERTY_P_R_I_O_R_I_T_Y})
@JsonTypeName("mission")
@JsonInclude(JsonInclude.Include.NON_EMPTY)

public class Mission {

  /**
   * Le champ MISSION TYPE permet d'identifier l'effet à obtenir
   * souhaité à partir de la combinaison du code ACTOR et du code TYPE.
   * => La table de transcodage permettant d'identifier les
   * concourants et les effets à obtenir à partir d'un code EMSI est fournie
   * en annexe \"Référentiel Effets à Obtenir - correspondance EMSI\".
   * Dans le cadre d'une réponse à DC : - reprendre le type de la DC si le
   * code réponse choisi est vien \"VALIDE\" Dans le cadre d'une
   * mission décrivant les opérations en cours : - reprendre la nomenclature
   * EMSI pour caractériser la mission en cours.
   */
  public enum TYPEEnum {
    C2("C2"),

    CBRN("CBRN"),

    FF("FF"),

    FSTT("FSTT"),

    GEN("GEN"),

    INT("INT"),

    MAC("MAC"),

    MIL("MIL"),

    NET("NET"),

    OPR("OPR"),

    POL("POL"),

    REC("REC"),

    RSC("RSC"),

    SAV("SAV"),

    SCS("SCS"),

    SOC("SOC"),

    C2_DEBRIF("C2/DEBRIF"),

    C2_DNRSKA("C2/DNRSKA"),

    C2_INASSM("C2/INASSM"),

    C2_OIC("C2/OIC"),

    C2_POA("C2/POA"),

    C2_THRTAS("C2/THRTAS"),

    CBRN_CBRNCH("CBRN/CBRNCH"),

    CBRN_CBRNDC("CBRN/CBRNDC"),

    CBRN_NTRCH("CBRN/NTRCH"),

    CBRN_NUCWS("CBRN/NUCWS"),

    FF_IN("FF/IN"),

    FF_OA("FF/OA"),

    FF_SALVAG("FF/SALVAG"),

    FF_STR("FF/STR"),

    FF_TRP("FF/TRP"),

    FSTT_DI("FSTT/DI"),

    FSTT_RRHAZ("FSTT/RRHAZ"),

    FSTT_TA("FSTT/TA"),

    GEN_AIRLAU("GEN/AIRLAU"),

    GEN_ASSMBL("GEN/ASSMBL"),

    GEN_CRWDCT("GEN/CRWDCT"),

    GEN_DEMO("GEN/DEMO"),

    GEN_DEPLOY("GEN/DEPLOY"),

    GEN_DSTRBT("GEN/DSTRBT"),

    GEN_FINANC("GEN/FINANC"),

    GEN_MARKNG("GEN/MARKNG"),

    GEN_MOVE("GEN/MOVE"),

    GEN_RECVRN("GEN/RECVRN"),

    GEN_RECVRY("GEN/RECVRY"),

    GEN_REDPLN("GEN/REDPLN"),

    GEN_REORGN("GEN/REORGN"),

    GEN_REPAIR("GEN/REPAIR"),

    GEN_RESPLN("GEN/RESPLN"),

    GEN_RESTNG("GEN/RESTNG"),

    GEN_RETIRE("GEN/RETIRE"),

    GEN_RLFPLC("GEN/RLFPLC"),

    GEN_RNDZVS("GEN/RNDZVS"),

    GEN_SCNMNG("GEN/SCNMNG"),

    GEN_SECRNG("GEN/SECRNG"),

    GEN_STNGUP("GEN/STNGUP"),

    GEN_SUPRTN("GEN/SUPRTN"),

    GEN_TRNSPN("GEN/TRNSPN"),

    INT_BIOSMP("INT/BIOSMP"),

    INT_CHMSMP("INT/CHMSMP"),

    INT_IDENT("INT/IDENT"),

    INT_ILLUMN("INT/ILLUMN"),

    INT_LOCTNG("INT/LOCTNG"),

    INT_NUCSMP("INT/NUCSMP"),

    INT_OBSRNG("INT/OBSRNG"),

    INT_PLUMOD("INT/PLUMOD"),

    INT_PTRLNG("INT/PTRLNG"),

    INT_RECCE("INT/RECCE"),

    INT_SRVMET("INT/SRVMET"),

    INT_SRVSEN("INT/SRVSEN"),

    INT_WITNSN("INT/WITNSN"),

    MAC_AII("MAC/AII"),

    MAC_COL("MAC/COL"),

    MIL_BCESC("MIL/BCESC"),

    MIL_BLOCKN("MIL/BLOCKN"),

    MIL_BOMBNG("MIL/BOMBNG"),

    MIL_CAPTUR("MIL/CAPTUR"),

    MIL_CTRATK("MIL/CTRATK"),

    MIL_DEFEND("MIL/DEFEND"),

    MIL_DISENG("MIL/DISENG"),

    MIL_DIVRSN("MIL/DIVRSN"),

    MIL_DLBATK("MIL/DLBATK"),

    MIL_DSRPTN("MIL/DSRPTN"),

    MIL_ENVLPN("MIL/ENVLPN"),

    MIL_FIX("MIL/FIX"),

    MIL_HARASS("MIL/HARASS"),

    MIL_HIDE("MIL/HIDE"),

    MIL_HLDDEF("MIL/HLDDEF"),

    MIL_HLDOFF("MIL/HLDOFF"),

    MIL_INFLTN("MIL/INFLTN"),

    MIL_INTCPN("MIL/INTCPN"),

    MIL_INTDCT("MIL/INTDCT"),

    MIL_MASFOR("MIL/MASFOR"),

    MIL_MIL("MIL/MIL"),

    MIL_WPNFIR("MIL/WPNFIR"),

    NET_COMDEA("NET/COMDEA"),

    NET_DATTRF("NET/DATTRF"),

    NET_NETJAM("NET/NETJAM"),

    NET_NETSEI("NET/NETSEI"),

    NET_SGNC("NET/SGNC"),

    NET_SGNLE("NET/SGNLE"),

    POL_NTRCOM("POL/NTRCOM"),

    POL_NTREXP("POL/NTREXP"),

    POL_SCNMNG("POL/SCNMNG"),

    POL_SCNPRS("POL/SCNPRS"),

    POL_SHELTR("POL/SHELTR"),

    POL_SUSHOS("POL/SUSHOS"),

    POL_WITDRL("POL/WITDRL"),

    REC_CLROBS("REC/CLROBS"),

    REC_COMACT("REC/COMACT"),

    REC_COMRES("REC/COMRES"),

    REC_CONSTN("REC/CONSTN"),

    REC_ENGCN("REC/ENGCN"),

    REC_ENGCNN("REC/ENGCNN"),

    REC_PROCUR("REC/PROCUR"),

    REC_PRVACC("REC/PRVACC"),

    REC_PRVAGR("REC/PRVAGR"),

    REC_PRVBDD("REC/PRVBDD"),

    REC_PRVCMP("REC/PRVCMP"),

    REC_PRVCNS("REC/PRVCNS"),

    REC_PRVDCN("REC/PRVDCN"),

    REC_PRVEDU("REC/PRVEDU"),

    REC_PRVHLT("REC/PRVHLT"),

    REC_PRVHSN("REC/PRVHSN"),

    REC_PRVINF("REC/PRVINF"),

    REC_PRVLND("REC/PRVLND"),

    REC_PRVRPR("REC/PRVRPR"),

    REC_PRVSCY("REC/PRVSCY"),

    REC_PRVSHL("REC/PRVSHL"),

    REC_PRVSTG("REC/PRVSTG"),

    REC_PRVTRS("REC/PRVTRS"),

    REC_PSO("REC/PSO"),

    REC_SPLLDB("REC/SPLLDB"),

    REC_SPLWAT("REC/SPLWAT"),

    REC_UTILTY("REC/UTILTY"),

    REC_WATER("REC/WATER"),

    RSC_COVERN("RSC/COVERN"),

    RSC_FRFGTN("RSC/FRFGTN"),

    RSC_MEDEVC("RSC/MEDEVC"),

    RSC_SAR("RSC/SAR"),

    SAV_AR("SAV/AR"),

    SAV_ASC("SAV/ASC"),

    SAV_RHD("SAV/RHD"),

    SAV_RTA("SAV/RTA"),

    SAV_SARCSL("SAV/SARCSL"),

    SAV_SARHHA("SAV/SARHHA"),

    SAV_SRW("SAV/SRW"),

    SAV_USAR("SAV/USAR"),

    SAV_UW("SAV/UW"),

    SCS_EDU("SCS/EDU"),

    SOC_CNDCNF("SOC/CNDCNF"),

    SOC_CNDMED("SOC/CNDMED"),

    SOC_CNDRCR("SOC/CNDRCR"),

    SOC_CNDSCL("SOC/CNDSCL"),

    SOC_CNDSPT("SOC/CNDSPT"),

    SOC_ISSMDA("SOC/ISSMDA"),

    SOC_ISSMDD("SOC/ISSMDD"),

    SOC_ISSPRS("SOC/ISSPRS"),

    SOC_MN("SOC/MN"),

    SOC_PUBMDA("SOC/PUBMDA"),

    SOC_PUBMDD("SOC/PUBMDD"),

    SOC_PUBPRS("SOC/PUBPRS");

    private String value;

    TYPEEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static TYPEEnum fromValue(String value) {
      for (TYPEEnum b : TYPEEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_T_Y_P_E = "TYPE";
  private TYPEEnum TYPE;

  public static final String JSON_PROPERTY_F_R_E_E_T_E_X_T = "FREETEXT";
  private String FREETEXT;

  public static final String JSON_PROPERTY_I_D = "ID";
  private String ID;

  public static final String JSON_PROPERTY_O_R_G_I_D = "ORG_ID";
  private String ORG_ID;

  public static final String JSON_PROPERTY_N_A_M_E = "NAME";
  private String NAME;

  /**
   * Les valeurs possibles avec lesquelles valoriser ce champ sont détaillées au
   * sein d'une nomenclature EMSI - ABO : mission refusée (ABOrted) - CANCLD
   * : mission annulée (CANCeLeD)** - NST : mission non débuté pour le métier
   * (Not STarted) - IPR :  mission débuté pour le métier (In PRogress). la
   * valeur IPR peut être suivi d'une valeur numérique de 00 à 100 (IPRnn)
   * spécifiant le degré d'avancement de la mission. Ce principe n'est
   * pas retenu au sein de NexSIS qui ne transmettra pas d'indication sur le
   * degré d'avancement de la mission via ce champ. - PAU : événement
   * arrêté, en pause pour métier, pas de besoin supplémentaire - COM :
   * événement terminé pour le métier (COMplete) Le status de la mission et
   * celui des RESSOURCE associées doit être cohérent et transcodable avec un
   * status ANTARES (voir DSF)  Dans le cas d'un objet MISSION générique de
   * réponse à demande de concours, le champ doit être valorisé à
   * \"NST\"
   */
  public enum STATUSEnum {
    ABO("ABO"),

    NST("NST"),

    CANCLD("CANCLD"),

    COM("COM"),

    IPR("IPR"),

    PAU("PAU");

    private String value;

    STATUSEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static STATUSEnum fromValue(String value) {
      for (STATUSEnum b : STATUSEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_S_T_A_T_U_S = "STATUS";
  private STATUSEnum STATUS;

  public static final String JSON_PROPERTY_S_T_A_R_T_T_I_M_E = "START_TIME";
  private OffsetDateTime START_TIME;

  public static final String JSON_PROPERTY_E_N_D_T_I_M_E = "END_TIME";
  private OffsetDateTime END_TIME;

  public static final String JSON_PROPERTY_R_E_S_O_U_R_C_E_I_D = "RESOURCE_ID";
  private List<String> RESOURCE_ID;

  public static final String JSON_PROPERTY_P_A_R_E_N_T_M_I_S_S_I_O_N_I_D =
      "PARENT_MISSION_ID";
  private List<String> PARENT_MISSION_ID;

  public static final String JSON_PROPERTY_C_H_I_L_D_M_I_S_S_I_O_N_I_D =
      "CHILD_MISSION_ID";
  private List<String> CHILD_MISSION_ID;

  public static final String JSON_PROPERTY_M_A_I_N_M_I_S_S_I_O_N_I_D =
      "MAIN_MISSION_ID";
  private String MAIN_MISSION_ID;

  public static final String JSON_PROPERTY_P_O_S_I_T_I_O_N = "POSITION";
  private Position POSITION;

  /**
   * Indique une échelle de priorité pour la demande de concours. Dans le cadre
   * du standard EMSI, cette échelle doit être comprise entre 0 et 5. Ce champ
   * peut ne pas être interprété ni alimenté par les LRMs. Dans le cadre
   * d'un échange des opérations, optionnel. Le champ peut ne pas être émis
   * ni interprété.
   */
  public enum PRIORITYEnum {
    _0("0"),

    _1("1"),

    _2("2"),

    _3("3"),

    _4("4"),

    _5("5");

    private String value;

    PRIORITYEnum(String value) { this.value = value; }

    @JsonValue
    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    @JsonCreator
    public static PRIORITYEnum fromValue(String value) {
      for (PRIORITYEnum b : PRIORITYEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
  }

  public static final String JSON_PROPERTY_P_R_I_O_R_I_T_Y = "PRIORITY";
  private PRIORITYEnum PRIORITY;

  public Mission() {}

  public Mission TYPE(TYPEEnum TYPE) {

    this.TYPE = TYPE;
    return this;
  }

  /**
   * Le champ MISSION TYPE permet d'identifier l'effet à obtenir
   *souhaité à partir de la combinaison du code ACTOR et du code TYPE.
   *=> La table de transcodage permettant d'identifier les
   *concourants et les effets à obtenir à partir d'un code EMSI est fournie
   *en annexe \"Référentiel Effets à Obtenir - correspondance EMSI\".
   *Dans le cadre d'une réponse à DC : - reprendre le type de la DC si le
   *code réponse choisi est vien \"VALIDE\" Dans le cadre d'une
   *mission décrivant les opérations en cours : - reprendre la nomenclature EMSI
   *pour caractériser la mission en cours.
   * @return TYPE
   **/
  @JsonProperty(JSON_PROPERTY_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public TYPEEnum getTYPE() {
    return TYPE;
  }

  @JsonProperty(JSON_PROPERTY_T_Y_P_E)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)
  public void setTYPE(TYPEEnum TYPE) {
    this.TYPE = TYPE;
  }

  public Mission FREETEXT(String FREETEXT) {

    this.FREETEXT = FREETEXT;
    return this;
  }

  /**
   * Contient des commentaires relatifs aux objectifs et  moyens sollicités dans
   *le cadre de la demande de concours. Les équipements supplémentaires
   *souhaités ou le nom/ prénom des patients à prendre en charge peuvent être
   *explicitement indiqués ici.
   * @return FREETEXT
   **/
  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getFREETEXT() {
    return FREETEXT;
  }

  @JsonProperty(JSON_PROPERTY_F_R_E_E_T_E_X_T)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setFREETEXT(String FREETEXT) {
    this.FREETEXT = FREETEXT;
  }

  public Mission ID(String ID) {

    this.ID = ID;
    return this;
  }

  /**
   * Contient un identifiant de demande de concours unique. Cet identifiant sera
   *réutilisable par le partenaire pour répondre à cette demande. Identifiant
   *unique de la mission dans le système du partenaire la conduisant.
   * @return ID
   **/
  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getID() {
    return ID;
  }

  @JsonProperty(JSON_PROPERTY_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setID(String ID) {
    this.ID = ID;
  }

  public Mission ORG_ID(String ORG_ID) {

    this.ORG_ID = ORG_ID;
    return this;
  }

  /**
   * Indique l'organisation du partenaire concerné par la Demande de
   *Concours (voir DSF 8.4). Le code CRRA ou le code du SIS peut être utilisé.
   *Indique l'organisation du service réalisant la mission. Dans le cas
   *d'une réponse, c'est l'organisation du concourant qui doit être
   *indiquée. Se référer au DSF pour la structure normée des organisations Le
   *format est le suivant {pays}:{domaine}:{code
   *département}:{organisation}:{structure interne}*:{unité fonctionnelle}*.
   *identique à <CONTEXT><ORIGIN><ORG_ID>
   * @return ORG_ID
   **/
  @JsonProperty(JSON_PROPERTY_O_R_G_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getORGID() {
    return ORG_ID;
  }

  @JsonProperty(JSON_PROPERTY_O_R_G_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setORGID(String ORG_ID) {
    this.ORG_ID = ORG_ID;
  }

  public Mission NAME(String NAME) {

    this.NAME = NAME;
    return this;
  }

  /**
   * Le nom de la mission est construit à partir de l'expression régulière
   *suivante :
   *\"#DEMANDE_CONCOURS#\"{libelle_cadre_conventionnel}\"#\"{code_cadre_conventionnel}\"#\"
   *où le code_cadre_conventionnel est issue d'une nomenclature CISU-Cadre
   *Conventionnel (A Venir) NB : ce champ est détourné par rapport au standard
   *EMSI pour permettre l'expression d'une demande de concours et
   *indiquer le cadre conventionnel dans lequel elle est effectuée. Pour une
   *réponse à demande de concours : - Le nom de la mission est construit à
   *partir de l'expression régulière suivante :
   *\"#REPONSE_DEMANDE_CONCOURS#\"{code_reponse}\"#\" où le
   *code_reponse peut prendre les valeurs ACCEPTE, REFUS, PARTIELLE, DIVERGENTE
   *- sinon libre
   * @return NAME
   **/
  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getNAME() {
    return NAME;
  }

  @JsonProperty(JSON_PROPERTY_N_A_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setNAME(String NAME) {
    this.NAME = NAME;
  }

  public Mission STATUS(STATUSEnum STATUS) {

    this.STATUS = STATUS;
    return this;
  }

  /**
   * Les valeurs possibles avec lesquelles valoriser ce champ sont détaillées au
   *sein d'une nomenclature EMSI - ABO : mission refusée (ABOrted) - CANCLD
   *: mission annulée (CANCeLeD)** - NST : mission non débuté pour le métier
   *(Not STarted) - IPR :  mission débuté pour le métier (In PRogress). la
   *valeur IPR peut être suivi d'une valeur numérique de 00 à 100 (IPRnn)
   *spécifiant le degré d'avancement de la mission. Ce principe n'est
   *pas retenu au sein de NexSIS qui ne transmettra pas d'indication sur le
   *degré d'avancement de la mission via ce champ. - PAU : événement arrêté,
   *en pause pour métier, pas de besoin supplémentaire - COM : événement terminé
   *pour le métier (COMplete) Le status de la mission et celui des RESSOURCE
   *associées doit être cohérent et transcodable avec un status ANTARES (voir
   *DSF)  Dans le cas d'un objet MISSION générique de réponse à demande de
   *concours, le champ doit être valorisé à \"NST\"
   * @return STATUS
   **/
  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public STATUSEnum getSTATUS() {
    return STATUS;
  }

  @JsonProperty(JSON_PROPERTY_S_T_A_T_U_S)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSTATUS(STATUSEnum STATUS) {
    this.STATUS = STATUS;
  }

  public Mission START_TIME(OffsetDateTime START_TIME) {

    this.START_TIME = START_TIME;
    return this;
  }

  /**
   * - Dans le cadre d'une réponse à Demande de Concours Horraire cible pour
   *l'arrivée sur les lieux décrites (peut diverger de l'horaire
   *demandé) - Dans le cadre d'une mission décrivant les opérations en cours
   *: Horaire effectif de début de la mission
   * @return START_TIME
   **/
  @JsonProperty(JSON_PROPERTY_S_T_A_R_T_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getSTARTTIME() {
    return START_TIME;
  }

  @JsonProperty(JSON_PROPERTY_S_T_A_R_T_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setSTARTTIME(OffsetDateTime START_TIME) {
    this.START_TIME = START_TIME;
  }

  public Mission END_TIME(OffsetDateTime END_TIME) {

    this.END_TIME = END_TIME;
    return this;
  }

  /**
   * A valoriser selon la catégorie de mission : - Dans le cadre d'une
   *mission de réponse à demande de concours : ne pas renseigner - Dans le cadre
   *d'une mission décrivant les opérations en cours :  Si c'est un
   *déplacement, l'heure d'arrivée, si c'est une prise en charge
   *patient/victime, la fin de la prise en charge.
   * @return END_TIME
   **/
  @JsonProperty(JSON_PROPERTY_E_N_D_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getENDTIME() {
    return END_TIME;
  }

  @JsonProperty(JSON_PROPERTY_E_N_D_T_I_M_E)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setENDTIME(OffsetDateTime END_TIME) {
    this.END_TIME = END_TIME;
  }

  public Mission RESOURCE_ID(List<String> RESOURCE_ID) {

    this.RESOURCE_ID = RESOURCE_ID;
    return this;
  }

  public Mission addRESOURCEIDItem(String RESOURCE_IDItem) {
    if (this.RESOURCE_ID == null) {
      this.RESOURCE_ID = new ArrayList<>();
    }
    this.RESOURCE_ID.add(RESOURCE_IDItem);
    return this;
  }

  /**
   * Get RESOURCE_ID
   * @return RESOURCE_ID
   **/
  @JsonProperty(JSON_PROPERTY_R_E_S_O_U_R_C_E_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<String> getRESOURCEID() {
    return RESOURCE_ID;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_R_E_S_O_U_R_C_E_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setRESOURCEID(List<String> RESOURCE_ID) {
    if (RESOURCE_ID == null) {
      return;
    }
    if (this.RESOURCE_ID == null) {
      this.RESOURCE_ID = new ArrayList<>();
    }
    this.RESOURCE_ID.addAll(RESOURCE_ID);
  }

  public Mission PARENT_MISSION_ID(List<String> PARENT_MISSION_ID) {

    this.PARENT_MISSION_ID = PARENT_MISSION_ID;
    return this;
  }

  public Mission addPARENTMISSIONIDItem(String PARENT_MISSION_IDItem) {
    if (this.PARENT_MISSION_ID == null) {
      this.PARENT_MISSION_ID = new ArrayList<>();
    }
    this.PARENT_MISSION_ID.add(PARENT_MISSION_IDItem);
    return this;
  }

  /**
   * Get PARENT_MISSION_ID
   * @return PARENT_MISSION_ID
   **/
  @JsonProperty(JSON_PROPERTY_P_A_R_E_N_T_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<String> getPARENTMISSIONID() {
    return PARENT_MISSION_ID;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_P_A_R_E_N_T_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setPARENTMISSIONID(List<String> PARENT_MISSION_ID) {
    if (PARENT_MISSION_ID == null) {
      return;
    }
    if (this.PARENT_MISSION_ID == null) {
      this.PARENT_MISSION_ID = new ArrayList<>();
    }
    this.PARENT_MISSION_ID.addAll(PARENT_MISSION_ID);
  }

  public Mission CHILD_MISSION_ID(List<String> CHILD_MISSION_ID) {

    this.CHILD_MISSION_ID = CHILD_MISSION_ID;
    return this;
  }

  public Mission addCHILDMISSIONIDItem(String CHILD_MISSION_IDItem) {
    if (this.CHILD_MISSION_ID == null) {
      this.CHILD_MISSION_ID = new ArrayList<>();
    }
    this.CHILD_MISSION_ID.add(CHILD_MISSION_IDItem);
    return this;
  }

  /**
   * Get CHILD_MISSION_ID
   * @return CHILD_MISSION_ID
   **/
  @JsonProperty(JSON_PROPERTY_C_H_I_L_D_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public List<String> getCHILDMISSIONID() {
    return CHILD_MISSION_ID;
  }

  @JacksonXmlElementWrapper(useWrapping = false)

  @JsonProperty(JSON_PROPERTY_C_H_I_L_D_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setCHILDMISSIONID(List<String> CHILD_MISSION_ID) {
    if (CHILD_MISSION_ID == null) {
      return;
    }
    if (this.CHILD_MISSION_ID == null) {
      this.CHILD_MISSION_ID = new ArrayList<>();
    }
    this.CHILD_MISSION_ID.addAll(CHILD_MISSION_ID);
  }

  public Mission MAIN_MISSION_ID(String MAIN_MISSION_ID) {

    this.MAIN_MISSION_ID = MAIN_MISSION_ID;
    return this;
  }

  /**
   * - Dans le cas d'une mission générique de réponse à demande de concours,
   *indiquer l'ID de la mission générique utilisée pour modéliser la demande
   *de concours - Dans le cas d'une mission déclenchée dans le cadre
   *d'une réponse à demande de concours, l'ID de la mission générique de
   *réponse peut être utilisée dans ce champ pour indiquer qu'elle est liée
   *à une réponse
   * @return MAIN_MISSION_ID
   **/
  @JsonProperty(JSON_PROPERTY_M_A_I_N_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public String getMAINMISSIONID() {
    return MAIN_MISSION_ID;
  }

  @JsonProperty(JSON_PROPERTY_M_A_I_N_M_I_S_S_I_O_N_I_D)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setMAINMISSIONID(String MAIN_MISSION_ID) {
    this.MAIN_MISSION_ID = MAIN_MISSION_ID;
  }

  public Mission POSITION(Position POSITION) {

    this.POSITION = POSITION;
    return this;
  }

  /**
   * Get POSITION
   * @return POSITION
   **/
  @JsonProperty(JSON_PROPERTY_P_O_S_I_T_I_O_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public Position getPOSITION() {
    return POSITION;
  }

  @JsonProperty(JSON_PROPERTY_P_O_S_I_T_I_O_N)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setPOSITION(Position POSITION) {
    this.POSITION = POSITION;
  }

  public Mission PRIORITY(PRIORITYEnum PRIORITY) {

    this.PRIORITY = PRIORITY;
    return this;
  }

  /**
   * Indique une échelle de priorité pour la demande de concours. Dans le cadre
   *du standard EMSI, cette échelle doit être comprise entre 0 et 5. Ce champ
   *peut ne pas être interprété ni alimenté par les LRMs. Dans le cadre d'un
   *échange des opérations, optionnel. Le champ peut ne pas être émis ni
   *interprété.
   * @return PRIORITY
   **/
  @JsonProperty(JSON_PROPERTY_P_R_I_O_R_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public PRIORITYEnum getPRIORITY() {
    return PRIORITY;
  }

  @JsonProperty(JSON_PROPERTY_P_R_I_O_R_I_T_Y)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setPRIORITY(PRIORITYEnum PRIORITY) {
    this.PRIORITY = PRIORITY;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Mission mission = (Mission)o;
    return Objects.equals(this.TYPE, mission.TYPE) &&
        Objects.equals(this.FREETEXT, mission.FREETEXT) &&
        Objects.equals(this.ID, mission.ID) &&
        Objects.equals(this.ORG_ID, mission.ORG_ID) &&
        Objects.equals(this.NAME, mission.NAME) &&
        Objects.equals(this.STATUS, mission.STATUS) &&
        Objects.equals(this.START_TIME, mission.START_TIME) &&
        Objects.equals(this.END_TIME, mission.END_TIME) &&
        Objects.equals(this.RESOURCE_ID, mission.RESOURCE_ID) &&
        Objects.equals(this.PARENT_MISSION_ID, mission.PARENT_MISSION_ID) &&
        Objects.equals(this.CHILD_MISSION_ID, mission.CHILD_MISSION_ID) &&
        Objects.equals(this.MAIN_MISSION_ID, mission.MAIN_MISSION_ID) &&
        Objects.equals(this.POSITION, mission.POSITION) &&
        Objects.equals(this.PRIORITY, mission.PRIORITY);
  }

  @Override
  public int hashCode() {
    return Objects.hash(TYPE, FREETEXT, ID, ORG_ID, NAME, STATUS, START_TIME,
                        END_TIME, RESOURCE_ID, PARENT_MISSION_ID,
                        CHILD_MISSION_ID, MAIN_MISSION_ID, POSITION, PRIORITY);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Mission {\n");
    sb.append("    TYPE: ").append(toIndentedString(TYPE)).append("\n");
    sb.append("    FREETEXT: ").append(toIndentedString(FREETEXT)).append("\n");
    sb.append("    ID: ").append(toIndentedString(ID)).append("\n");
    sb.append("    ORG_ID: ").append(toIndentedString(ORG_ID)).append("\n");
    sb.append("    NAME: ").append(toIndentedString(NAME)).append("\n");
    sb.append("    STATUS: ").append(toIndentedString(STATUS)).append("\n");
    sb.append("    START_TIME: ")
        .append(toIndentedString(START_TIME))
        .append("\n");
    sb.append("    END_TIME: ").append(toIndentedString(END_TIME)).append("\n");
    sb.append("    RESOURCE_ID: ")
        .append(toIndentedString(RESOURCE_ID))
        .append("\n");
    sb.append("    PARENT_MISSION_ID: ")
        .append(toIndentedString(PARENT_MISSION_ID))
        .append("\n");
    sb.append("    CHILD_MISSION_ID: ")
        .append(toIndentedString(CHILD_MISSION_ID))
        .append("\n");
    sb.append("    MAIN_MISSION_ID: ")
        .append(toIndentedString(MAIN_MISSION_ID))
        .append("\n");
    sb.append("    POSITION: ").append(toIndentedString(POSITION)).append("\n");
    sb.append("    PRIORITY: ").append(toIndentedString(PRIORITY)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

Answer: this.EVENT = EVENT;

<think>
The Emsi class follows a consistent pattern for its setter methods. For CONTEXT, the setter is defined as `public void setCONTEXT(Context CONTEXT) { this.CONTEXT = CONTEXT; }`. The snippet ends right after the opening brace of the `setEVENT` method. Following the same pattern, the next line should assign the passed parameter to the class field, i.e., `this.EVENT = EVENT;`.
</think>
this.EVENT = EVENT;