1{2 "schemaVersion": 1,3 "purpose": "Deterministic map from a WooCommerce payment-gateway family to the source meta keys that may hold its transaction reference and card display details, plus the evidence state that decides whether a populated candidate may be written or only reported.",4 "principles": [5 "A populated key is a candidate, never proof. Writing it requires verified field semantics AND a recognized relationship between the field's producer and the order's payment method.",6 "The payment method slug names the checkout plugin, not necessarily the processor behind it. A method slug alone therefore neither selects nor disqualifies a key.",7 "Key co-presence across families is not proof that one gateway fronts another. A layered relationship must be independently verified before it unlocks a write.",8 "A candidate that cannot be written is reported with a reason. It is never truncated, never resolved by guessed precedence, and never promoted into a payment-existence signal."9
17 "purpose": "The complete set of non-gateway source meta keys the payments import reads. A run reads only what an approved outcome needs; anything not listed here or derived from families[] is out of scope for this import.",
18 "core": [
19 "_order_total",
20 "_paid_date",
21 "_date_paid",
22 "_payment_method",
23 "_payment_method_title",
24 "_order_currency"
25 ],
26 "note": "Gateway reference and card display keys are derived from families[]. Raw provider response blobs are never read: the never-read declaration lives in refund-corroboration.json, and the read-key list is checked against it."
27 },
28 "resolutionOrder": [
29 "Use the canonical WooCommerce reference when populated and within the target limit.",
30 "Otherwise use a gateway-specific field only when its semantics are verified and the registry recognizes the order method either directly or through a separately verified layered integration.",
31 "More than one distinct eligible value is ambiguous-transaction-reference; write no reference.",
32 "A populated undocumented, incompatible, or over-length value is reported and never written."
33 ],
34 "evidenceStates": {
35 "verified-source-contract": "Defined by WooCommerce's own documented order contract.",
36 "verified": "The gateway's own schema or documentation defines the field. Eligible to write when the method relationship is also recognized.",
37 "candidate-unverified": "The field is observed in source data but no authoritative schema defines its meaning. Report only.",
38 "unmapped": "No candidate fields are known for this family yet. Enumerate actual keys and report."
39 },
40 "canonicalReference": {
41 "family": "woocommerce-canonical",
42 "displayName": "WooCommerce canonical",
43 "referenceFields": [
44 "_transaction_id"
45 ],
46 "evidence": "verified-source-contract",
47 "methodRelationship": "any",
48 "writePolicy": "write-for-any-method"
49 },
50 "families": [
51 {
52 "family": "payplus",
53 "displayName": "PayPlus",
54 "classification": "online",
55 "evidence": "verified",
56 "writePolicy": "write-when-method-recognized",
57 "referenceFields": [
58 "payplus_transaction_uid"
59 ],
60 "cardDisplayFields": {
61 "lastFourDigits": "payplus_four_digits",
62 "brand": "payplus_brand_name"
63 },
64 "methodRelationships": {
65 "direct": {
66 "slugs": [],
67 "slugPrefixes": [
68 "payplus-payment-gateway"
69 ]
70 },
71 "layered": []
72 },
73 "openVerifications": [
74 "Confirm the field provenance against PayPlus's own schema or documentation before the pilot. The semantics are live-observed rather than vendor-documented."
75 ]
76 },
77 {
78 "family": "tranzila",
79 "displayName": "Tranzila",
80 "classification": "online",
81 "evidence": "candidate-unverified",
82 "writePolicy": "report-only",
83 "referenceFields": [
84 "tranzila_authnr"
85 ],
86 "cardDisplayFields": {},
87 "methodRelationships": {
88 "direct": {
89 "slugs": [
90 "tranzila"
91 ],
92 "slugPrefixes": []
93 },
94 "layered": [
95 {
96 "frontEndFamily": "gobit",
97 "frontEndMethodSlugs": [
98 "gobitpaymentgateway"
99 ],
100 "verified": false,
101 "note": "Orders whose method is the Gobit gateway are observed carrying this key while orders whose method is Tranzila are not. No gateway documentation establishes that Gobit fronts Tranzila, so this relationship does not unlock a write. Verifying the field's semantics alone is insufficient: this flag must also become true."
102 }
103 ]
104 },
105 "openVerifications": [
106 "Establish from Tranzila's own documentation whether this field is a provider transaction identifier or an authorization number; the name suggests the latter.",
107 "Establish independently whether the Gobit gateway fronts Tranzila."
108 ]
109 },
110 {
111 "family": "gobit",
112 "displayName": "Gobit",
113 "classification": "online",
114 "evidence": "candidate-unverified",
115 "writePolicy": "report-only",
116 "referenceFields": [
117 "_gobit_verify"
118 ],
119 "cardDisplayFields": {},
120 "methodRelationships": {
121 "direct": {
122 "slugs": [
123 "gobitpaymentgateway"
124 ],
125 "slugPrefixes": []
126 },
127 "layered": []
128 },
129 "openVerifications": [
130 "Establish from Gobit's own documentation what this field holds before treating it as a provider transaction identifier."
131 ]
132 },
133 {
134 "family": "officeguy",
135 "displayName": "OfficeGuy",
136 "classification": "online",
137 "evidence": "unmapped",
138 "writePolicy": "report-only",
139 "referenceFields": [],
140 "cardDisplayFields": {},
141 "methodRelationships": {
142 "direct": {
143 "slugs": [
144 "officeguy",
145 "officeguybit"
146 ],
147 "slugPrefixes": []
148 },
149 "layered": []
150 },
151 "openVerifications": [
152 "Enumerate the actual keys these orders carry through discovery, then map them from OfficeGuy's own documentation. This family is also an accounting-issuer signal for invoice discovery."
153 ]
154 }
155 ],
156 "methodClassification": {
157 "offlineSlugs": [
158 "cod",
159 "bacs",
160 "cheque",
161 "other_payment"
162 ],
163 "onlineSlugs": [
164 "gobitpaymentgateway",
165 "tranzila",
166 "officeguy",
167 "officeguybit"
168 ],
169 "onlineSlugPrefixes": [
170 "payplus-payment-gateway"
171 ],
172 "unknownPolicy": "Omit offlinePayment from the request and count unclassified-method. Never guess a class."