Skip to content

VMF / MIL-STD-6017 Normalized Event Contract

This blueprint describes how a deployment can persist authorized, externally normalized VMF / MIL-STD-6017 / K-series-derived events without making nats-sinks a VMF parser or tactical gateway.

nats-sinks receives a normalized event from NATS JetStream, validates generic metadata, writes to the configured sink, and acknowledges only after durable success. VMF parsing, MIL-STD-2045 header handling, bearer protocols, authorization, redaction, tactical validation, and K-series semantics remain external.

Architecture

flowchart LR
    Source[VMF source or gateway] --> Adapter[External VMF adapter]
    Adapter --> JS[NATS JetStream]
    JS --> Sink[nats-sinks]
    Sink --> Store[Oracle Database / file / object sink]
    Store --> Consumers[Reporting / audit / replay]

Synthetic Event Shape

{
  "event_id": "synthetic-vmf-0001",
  "source_gateway": "vmf-gateway-placeholder",
  "source_system": "mission-adapter-placeholder",
  "message_family": "VMF",
  "message_standard": "MIL-STD-6017",
  "message_type": "K-series",
  "message_name": "Kx.x",
  "event_time": "2026-05-31T10:05:00Z",
  "receive_time": "2026-05-31T10:05:02Z",
  "sender_reference": "sender-placeholder",
  "recipient_reference": "recipient-placeholder",
  "correlation_id": "correlation-placeholder-002",
  "sequence": "sequence-placeholder-002",
  "payload_sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
  "raw_payload_reference": "artifact://synthetic/vmf/0001",
  "normalized_payload": {
    "synthetic": true,
    "message_status": "accepted",
    "placeholder_fields": {
      "field_a": "value-a"
    }
  },
  "classification": "NATO UNCLASSIFIED",
  "labels": ["synthetic", "vmf", "custody"],
  "security_labels": {
    "profile": "example-security-label-v1",
    "handling": "synthetic-only"
  },
  "mission_metadata": {
    "profile": "normalized-vmf-event",
    "profile_version": 1
  },
  "schema_profile": "normalized-vmf-event",
  "schema_version": 1
}

Persistence Guidance

Use Oracle columns for stable identifiers and timestamps when operators need searchable reporting. Keep profile-specific or changing fields in JSON. File sink output can preserve the complete event for disconnected review or replay preparation. Use DLQ handling for malformed JSON, profile validation failures, and permanent sink errors.

Idempotency Strategy

Prefer a key derived from source_gateway, source_system, event_id, sequence, correlation_id, and payload_sha256. Redelivery must not create duplicate operational records.

Explicit Non-Goals

This blueprint does not implement MIL-STD-6017, VMF encoding or decoding, K-series field catalogues, MIL-STD-2045 header parsing, CNR behavior, gateway behavior, cryptography, tactical command logic, or fire-support workflows.