Changes Document

urn:showpapers:changes:1JSON Schema 2020-12Download JSON

What an AI app hands back when it cannot write a .showpapers file: proposed changes to one collection, made against the exact archive in base (from the archive or a companion). Every change is a proposal: the app shows each one for review, marks values as coming from the generator, and applies only what the person accepts. Nothing is deleted or confirmed without the person. Recognize it by schema == urn:showpapers:changes:1. The reference tool applies a changes document to its base archive and writes a new Collection file.

Top Level

MemberTypeRules
schema required"urn:showpapers:changes:1"
base requiredobjectclosed
generator requiredgenerator
summary requiredstringmin length 0; max length 500; pattern ^[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*$
changes requiredarray of changemin items 1; max items 500

Definitions

id

string · pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

sha256

string · pattern ^[a-f0-9]{64}$

collectionTitle

string · min length 1; max length 200; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$

paperTitle

Unicode scalars. The apps' native title rule: trimmed, no control characters, no '/' or '\\'.

string · min length 1; max length 100; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff/\\]+$

noteTitle

Collection: edge whitespace kept, at least one non-whitespace scalar.

string · min length 1; max length 160; pattern ^[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*[^\s\u0000-\u001f\u007f-\u009f\ud800-\udfff][^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*$

label

string · min length 1; max length 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$

rule

Automatic filing. autoAdd needs at least one document type. Clause fields are distinct; only the six date fields accept operators other than equals, and their values are ISO dates.

MemberTypeRules
documentTypes requiredarray of one of "evidence.identity.foreign-passport", "state.issued.us-passport", "state.issued.visa-foil", "cbp.record.i-94", "ice.sevp.issued.i-20", "uscis.issued.i-551", "uscis.issued.i-766", "uscis.notice.i-797", "uscis.notice.i-797a", "uscis.notice.i-797b", "uscis.notice.i-797c"max items 11; unique
autoAdd requiredboolean
excludedPaperIds requiredarray of idmax items 100; unique
condition requirednull or object or object

folder

A personal folder. Array order is the folder order. Folders hold papers only. Names are unique ignoring case and are limited in UTF-16 units, like the apps.

MemberTypeRules
id requiredid
name requiredstringmin length 1; max length 80; max UTF-16 units 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$
color requiredone of "blue", "teal", "green", "amber", "coral", "purple", "gray"
icon requirednull or one of "folder", "paper", "passport", "identity", "travel", "study", "work", "receipt", "shield", "people", "home", "checklist", "appointment"
purpose requiredstringmin length 0; max length 240; max UTF-16 units 240; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*$
rule requirednull or rule
paperIds requiredarray of idmax items 100; unique

person

Names are unique ignoring case; at most one person is the owner (isMe).

MemberTypeRules
id requiredid
name requiredstringmin length 1; max length 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$
isMe requiredboolean

icon

one of "folder", "paper", "passport", "identity", "travel", "study", "work", "receipt", "shield", "people", "home", "checklist", "appointment"

unit

number · min 0; max 1

kind

one of "generic", "i20", "i94", "passport", "visa", "i797", "employment-authorization", "drivers-license", "social-security", "birth-certificate", "marriage-certificate", "tax", "insurance"

fieldKey

one of "program-start-date", "program-end-date", "sevis-id", "admission-date", "admit-until", "class-of-admission", "admission-record-number", "given-name", "family-name", "date-of-birth", "country-of-birth", "country-of-citizenship", "nationality", "document-number", "passport-number", "issuing-country", "issue-date", "expiration-date", "place-of-birth", "sex", "full-name", "receipt-number", "case-type", "notice-type" … (78 values)

valueType

one of "text", "date", "duration-of-status"

isoDate

string · min length 10; max length 10; pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

region

Normalized to the rendered page (0..1). box is [left, top, right, bottom] with left <= right and top <= bottom.

MemberTypeRules
box requirednull or array of unit
polygon requiredarray of array of unitmax items 8

evidence

One of:

evidence: variant 1

A line of this paper's reading (readings/<id>.json must exist and contain it).

MemberTypeRules
page requiredintegermin 0; max 199
block requiredintegermin 0; max 1999
line requiredintegermin 0; max 9999

evidence: variant 2

Text quoted from the original page by an external agent, with an optional location. Not an OCR line.

MemberTypeRules
page requiredintegermin 0; max 199
quote requiredstringmin length 1; max length 8192; pattern ^[^\u0000-\u0008\u000b-\u001f\u007f-\u009f\ud800-\udfff]*$
region requirednull or region

changeDetail

A proposed detail. It arrives with origin agent and stays pending until the person reviews it. label is required for key other.

MemberTypeRules
id requiredid
key requiredfieldKey
label requirednull or label
value requiredstringmin length 1; max length 4096
normalizedValue requirednull or string
valueType requiredvalueType
confidence requirednull or unit
evidence requiredarray of evidencemax items 16

generator

The program that wrote this file, not a signature. Apps write {"name":"ShowPapers","platform":"android"|"ios","version":<app version>}.

MemberTypeRules
name requiredstringmin length 1; max length 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$
platform requiredstringmin length 1; max length 40; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$
version requiredstringmin length 1; max length 40; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$

reminder

source detail names a date detail of this paper with one of the keys expiration-date, valid-until, program-end-date, admit-until, coverage-end-date; source date has detailId null.

MemberTypeRules
source requiredone of "detail", "date"
detailId requirednull or string
date requiredisoDate
leadDays requiredone of 7, 14, 30
enabled requiredboolean

change

One of:

change: collection.rename

Rename the collection.

MemberTypeRules
op required"collection.rename"
title requiredcollectionTitle

change: paper.rename

Propose a new paper title.

MemberTypeRules
op required"paper.rename"
paperId requiredid
title requiredpaperTitle

change: paper.setType

Propose a paper type. custom only with kind generic. Stored as the paper's type.agentSuggestion.

MemberTypeRules
op required"paper.setType"
paperId requiredid
kind requiredkind
custom requirednull or label
confidence requirednull or unit

change: paper.setPeople

Replace the people assigned to a paper.

MemberTypeRules
op required"paper.setPeople"
paperId requiredid
personIds requiredarray of idmax items 64; unique

change: paper.setBuiltInFolder

Place a paper in a built-in folder (null: automatic).

MemberTypeRules
op required"paper.setBuiltInFolder"
paperId requiredid
builtInFolder requirednull or one of "identity", "visas", "notices", "applications", "residency", "work-authorization", "travel-entry", "study", "home", "finance", "health", "education", "work", "family", "legal", "other"

change: paper.setReminder

Set or clear a paper's reminder.

MemberTypeRules
op required"paper.setReminder"
paperId requiredid
reminder requirednull or reminder

change: paper.pin

Pin a paper (appended to the pinned order).

MemberTypeRules
op required"paper.pin"
paperId requiredid

change: paper.unpin

Unpin a paper.

MemberTypeRules
op required"paper.unpin"
paperId requiredid

change: detail.add

Propose a new detail.

MemberTypeRules
op required"detail.add"
paperId requiredid
detail requiredchangeDetail

change: detail.remove

Propose removing a detail.

MemberTypeRules
op required"detail.remove"
paperId requiredid
detailId requiredstringmin length 1; max length 96

change: person.add

Add a person.

MemberTypeRules
op required"person.add"
person requiredperson

change: person.rename

Rename a person.

MemberTypeRules
op required"person.rename"
personId requiredid
name requiredstringmin length 1; max length 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$

change: person.remove

Remove a person and their paper assignments.

MemberTypeRules
op required"person.remove"
personId requiredid

change: folder.add

Add a personal folder at the end.

MemberTypeRules
op required"folder.add"
folder requiredfolder

change: folder.update

Change the listed folder fields; omitted fields stay unchanged.

MemberTypeRules
op required"folder.update"
folderId requiredid
namestringmin length 1; max length 80; max UTF-16 units 80; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]+$
colorone of "blue", "teal", "green", "amber", "coral", "purple", "gray"
iconnull or one of "folder", "paper", "passport", "identity", "travel", "study", "work", "receipt", "shield", "people", "home", "checklist", "appointment"
purposestringmin length 0; max length 240; max UTF-16 units 240; pattern ^(?![ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000])(?![\s\S]*[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$)[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*$
rulenull or rule

change: folder.remove

Remove a folder; its papers stay.

MemberTypeRules
op required"folder.remove"
folderId requiredid

change: folder.addPapers

Add papers to a folder.

MemberTypeRules
op required"folder.addPapers"
folderId requiredid
paperIds requiredarray of idmin items 1; max items 100; unique

change: folder.removePapers

Remove papers from a folder.

MemberTypeRules
op required"folder.removePapers"
folderId requiredid
paperIds requiredarray of idmin items 1; max items 100; unique

change: note.add

Add a note.

MemberTypeRules
op required"note.add"
noteId requiredid
title requirednoteTitle
record requiredobjectmax members 16
A complete urn:showpapers:scratch-record:1 object.

change: note.replace

Replace a note's title and complete record.

MemberTypeRules
op required"note.replace"
noteId requiredid
title requirednoteTitle
record requiredobjectmax members 16
A complete urn:showpapers:scratch-record:1 object; carry forward every unchanged row and field.

change: note.remove

Remove a note.

MemberTypeRules
op required"note.remove"
noteId requiredid

change: relationship.add

Suggest that two papers are related. It arrives as a suggested relationship with origin agent.

MemberTypeRules
op required"relationship.add"
type requiredone of "same-case", "different-stage", "same-person", "same-record", "same-organization", "supporting-document", "renewal", "amendment", "subsequent-filing", "duplicate", "alternate-version"
paperIds requiredarray of idmin items 2; max items 2; unique
referringPaperId requirednull or id
reason requiredstringmin length 0; max length 500; pattern ^[^\u0000-\u001f\u007f-\u009f\ud800-\udfff]*$

change: relationship.remove

Propose removing a relationship.

MemberTypeRules
op required"relationship.remove"
relationshipId requiredid