```ts
/**
 * Calculates twice the area of a simple polygon given its vertices on the integer lattice.
 * @param vertices - Array of [x, y] pairs representing the vertices of the polygon in order.
 * @returns Twice the enclosed area as a non-negative integer.
 */
export function polygonDoubleArea(vertices: number[][]): number {
  if (vertices.length < 3) {
    throw new Error("Polygon must have at least three vertices.");
  }

  for (let i = 0; i < vertices.length; i++) {
    const vertex = vertices[i];
    if (!Array.isArray(vertex) || vertex.length !== 2) {
      throw new Error("Each vertex must be a pair of two integers.");
    }
    const [x, y] = vertex;
    if (!Number.isInteger(x) || !Number.isInteger(y)) {
      throw new Error("Vertex coordinates must be integers.");
    }
    if (i > 0 && (x === vertices[i - 1][0] && y === vertices[i - 1][1])) {
      throw new Error("Two identical consecutive vertices are not allowed.");
    }
  }

  const [firstX, firstY] = vertices[0];
  const [lastX, lastY] = vertices[vertices.length - 1];
  if (firstX === lastX && firstY === lastY) {
    throw new Error("The last vertex must not be identical to the first.");
  }

  let doubleArea = 0;
  for (let i = 0; i < vertices.length; i++) {
    const [x1, y1] = vertices[i];
    const [x2, y2] = vertices[(i + 1) % vertices.length];
    doubleArea += x1 * y2 - y1 * x2;
  }

  return Math.abs(doubleArea);
}
```