module notifications {

    namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
    prefix "ncEvent";

    import ietf-yang-types { prefix yang; }

    import yuma-ncx { prefix ncx; }

    organization
      "IETF NETCONF WG";

    contact
      "netconf@ops.ietf.org";

    description
      "Conversion of the 'ncEvent' XSD in the 
       NETCONF Notifications RFC.";
         
    reference
      "RFC 5277.";

    revision 2013-03-15 {
      description "Moved sequence-id to this module.";
    }

    revision 2008-07-14 {
      description "RFC 5277 version.";
    }

    typedef streamNameType {
      description
        "The name of an event stream.";
      type string;
    }

    rpc create-subscription {
      description
        "The command to create a notification subscription. It
         takes as argument the name of the notification stream
         and filter. Both of those options limit the content of
         the subscription. In addition, there are two time-related
         parameters, startTime and stopTime, which can be used to 
         select the time interval of interest to the notification
         replay feature.";

      input {
        leaf stream {
          description
            "An optional parameter that indicates which stream of events
             is of interest. If not present, then events in the default
             NETCONF stream will be sent.";
          type streamNameType;
          default "NETCONF";
        }

        anyxml filter {
          description
            "An optional parameter that indicates which subset of all
             possible events is of interest. The format of this
             parameter is the same as that of the filter parameter
             in the NETCONF protocol operations. If not present,
             all events not precluded by other parameters will 
             be sent.";
        }

        leaf startTime {
          description
            "A parameter used to trigger the replay feature and
             indicates that the replay should start at the time
             specified. If start time is not present, this is not a
             replay subscription.";
          type yang:date-and-time;
        }

        leaf stopTime {
          // must ". >= ../startTime";
          description
            "An optional parameter used with the optional replay
             feature to indicate the newest notifications of
             interest. If stop time is not present, the notifications
             will continue until the subscription is terminated.
             Must be used with startTime.";
          type yang:date-and-time;
        }
      }
    }

   container notification {
      description "internal struct to start a notification";
      ncx:abstract;
      ncx:hidden;
      config false;

      leaf eventTime {
         mandatory true;
         type yang:date-and-time;
      }

      // eventType and any data content goes here
   }

    augment /notification {
        leaf sequence-id {
            description
              "Global auto-increment sequence ID added to
               each notification element sent by netconfd.
               Only present if agt_notif_sequence_id enabled
               in the agt_profile.  Disabled by default.
               No CLI Parameter!!";
            type uint32;
        }
    }

}

