pingintel-api 1.4.5__tar.gz → 1.4.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. pingintel_api-1.4.7/.claude/settings.json +7 -0
  2. pingintel_api-1.4.7/.claude/settings.local.json +16 -0
  3. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/PKG-INFO +3 -2
  4. pingintel_api-1.4.7/examples/data/demo_email.eml +364 -0
  5. pingintel_api-1.4.7/examples/find-amwins-missing-account-numbers.py +154 -0
  6. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-extraction/parse_sov.py +3 -1
  7. pingintel_api-1.4.7/examples/ping-vision/clear_and_triage_api.py +593 -0
  8. pingintel_api-1.4.7/examples/ping-vision/send_and_track_submission.py +154 -0
  9. pingintel_api-1.4.7/src/pingintel_api/__about__.py +1 -0
  10. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingdata/pingdata_api_client.py +19 -1
  11. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingdata/types.py +11 -7
  12. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingdataapi_cmd.py +30 -3
  13. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingvision/pingvision_api_client.py +87 -1
  14. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingvision/types.py +8 -0
  15. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingvisionapi_cmd.py +121 -5
  16. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/sov_fixer/sov_fixer_api_client.py +151 -30
  17. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/sov_fixer/types.py +53 -2
  18. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/sovfixerapi_cmd.py +19 -0
  19. pingintel_api-1.4.5/src/pingintel_api/__about__.py +0 -1
  20. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/.gitignore +0 -0
  21. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/.pre-commit-config.yaml +0 -0
  22. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/LICENSE +0 -0
  23. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/README.md +0 -0
  24. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/SOV10 2026-02_Acc-STG.txt +0 -0
  25. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/Untitled-9.json5 +0 -0
  26. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/assignment_queue.xlsx +0 -0
  27. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/completed_submissions.xlsx +0 -0
  28. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/data/parse_sov_testfile.xlsx +0 -0
  29. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-data/enhance_multiple_locations.py +0 -0
  30. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-data/enhance_one_location.py +0 -0
  31. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-data/pingdata_enhance.py +0 -0
  32. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-extraction/sovfixer_fix_sov.py +0 -0
  33. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-extraction/sovfixer_list_activity.py +0 -0
  34. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-extraction/sovfixer_reoutput_sov.py +0 -0
  35. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-vision/pingvision_activity.py +0 -0
  36. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/ping-vision/pingvision_clear_and_triage.py +0 -0
  37. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/pingvision_assignment.py +0 -0
  38. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/pingvision_declination_flow.py +0 -0
  39. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/sovfixer_list_history.py +0 -0
  40. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/sovfixer_list_history_ping_None_1_run2.csv +0 -0
  41. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/sovfixerapi +0 -0
  42. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/test_reoutput_locations.csv +0 -0
  43. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/examples/test_sov.xlsx +0 -0
  44. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/generate_docs.py +0 -0
  45. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/justfile +0 -0
  46. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/output-data-f432c75e-b40e-11f0-9e68-3c58c2f91432-1.json +0 -0
  47. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/pyproject.toml +0 -0
  48. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/requirements.txt +0 -0
  49. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/__init__.py +0 -0
  50. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/api_client_base.py +0 -0
  51. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/common_types.py +0 -0
  52. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/constants.py +0 -0
  53. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingmaps/pingmaps_api_client.py +0 -0
  54. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingmaps/types.py +0 -0
  55. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/pingmapsapi_cmd.py +0 -0
  56. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/url_signature_factory.py +0 -0
  57. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/src/pingintel_api/utils.py +0 -0
  58. {pingintel_api-1.4.5 → pingintel_api-1.4.7}/tests/__init__.py +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "WebFetch(domain:data-api.sovfixer.com)"
5
+ ]
6
+ }
7
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "WebFetch(domain:data-api.sovfixer.com)",
5
+ "WebFetch(domain:docs.pingintel.com)",
6
+ "WebFetch(domain:api.sovfixer.com)",
7
+ "Bash(curl -s \"http://localhost/olddocs\")",
8
+ "Bash(curl -sv \"http://localhost/api/schema/\")",
9
+ "Bash(curl -s \"http://localhost/api/schema/\")",
10
+ "Bash(python3 -c ' *)",
11
+ "Bash(mkdir -p \"C:/temp\")",
12
+ "Bash(curl -s \"http://localhost/api/schema/\" -o \"C:/temp/schema.yaml\")",
13
+ "Read(//c/temp/**)"
14
+ ]
15
+ }
16
+ }
@@ -1,10 +1,11 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pingintel-api
3
- Version: 1.4.5
3
+ Version: 1.4.7
4
4
  Summary: Python-based client to Ping Data Intelligence APIs
5
5
  Project-URL: Homepage, https://github.com/pingintel/pingintel-api
6
6
  Project-URL: Issues, https://github.com/pingintel/pingintel-api/issues
7
7
  Author-email: Ping Intel <support@pingintel.com>, Scott Stafford <scott@pingintel.com>
8
+ License-File: LICENSE
8
9
  Classifier: License :: OSI Approved :: MIT License
9
10
  Classifier: Operating System :: OS Independent
10
11
  Classifier: Programming Language :: Python :: 3
@@ -0,0 +1,364 @@
1
+ From: Murphy Peisel <murphy@pingintel.com>
2
+ Content-Type: multipart/mixed;
3
+ boundary="Apple-Mail=_CB4ED241-4744-4F41-A658-0E69F8EED05E"
4
+ Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81.1.4\))
5
+ Subject: SOV
6
+ X-Universally-Unique-Identifier: 75380DD4-7C3E-448B-A4A5-303F39FDCAC6
7
+ Message-Id: <5E3C8281-E2C4-4478-AC37-E86F4A370E18@pingintel.com>
8
+ Date: Mon, 23 Feb 2026 12:20:37 -0500
9
+ To: Murphy Peisel <murphy@pingintel.com>
10
+
11
+
12
+ --Apple-Mail=_CB4ED241-4744-4F41-A658-0E69F8EED05E
13
+ Content-Disposition: attachment;
14
+ filename=parse_sov_testfile.xlsx
15
+ Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;
16
+ x-unix-mode=0644;
17
+ name="parse_sov_testfile.xlsx"
18
+ Content-Transfer-Encoding: quoted-printable
19
+
20
+ PK=03=04=14=00=00=00=00=00=00=00=00=00=A4=01=84=B8=B5=02=00=00=B5=02=00=00=
21
+ =1A=00=00=00xl/_rels/workbook.xml.rels<?xml=20version=3D"1.0"=20=
22
+ encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A<Relationships=20=
23
+ xmlns=3D"http://schemas.openxmlformats.org/package/2006/relationships"><Re=
24
+ lationship=20Id=3D"rId1"=20=
25
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
26
+ s/worksheet"=20Target=3D"worksheets/sheet1.xml"/><Relationship=20=
27
+ Id=3D"rId2"=20=
28
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
29
+ s/theme"=20Target=3D"theme/theme1.xml"/><Relationship=20Id=3D"rId3"=20=
30
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
31
+ s/styles"=20Target=3D"styles.xml"/><Relationship=20Id=3D"rId4"=20=
32
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
33
+ s/sheetMetadata"=20=
34
+ Target=3D"metadata.xml"/></Relationships>PK=03=04=14=00=00=00=00=00=00=00=00=
35
+ =000=0F=88k=DE=1D=00=00=DE=1D=00=00=13=00=00=00xl/theme/theme1.xml<?xml=20=
36
+ version=3D"1.0"=20encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A=
37
+ <a:theme=20=
38
+ xmlns:a=3D"http://schemas.openxmlformats.org/drawingml/2006/main"=20=
39
+ name=3D"Office=20Theme"><a:themeElements><a:clrScheme=20=
40
+ name=3D"Office"><a:dk1><a:sysClr=20val=3D"windowText"=20=
41
+ lastClr=3D"000000"/></a:dk1><a:lt1><a:sysClr=20val=3D"window"=20=
42
+ lastClr=3D"FFFFFF"/></a:lt1><a:dk2><a:srgbClr=20=
43
+ val=3D"1F497D"/></a:dk2><a:lt2><a:srgbClr=20=
44
+ val=3D"EEECE1"/></a:lt2><a:accent1><a:srgbClr=20=
45
+ val=3D"4F81BD"/></a:accent1><a:accent2><a:srgbClr=20=
46
+ val=3D"C0504D"/></a:accent2><a:accent3><a:srgbClr=20=
47
+ val=3D"9BBB59"/></a:accent3><a:accent4><a:srgbClr=20=
48
+ val=3D"8064A2"/></a:accent4><a:accent5><a:srgbClr=20=
49
+ val=3D"4BACC6"/></a:accent5><a:accent6><a:srgbClr=20=
50
+ val=3D"F79646"/></a:accent6><a:hlink><a:srgbClr=20=
51
+ val=3D"0000FF"/></a:hlink><a:folHlink><a:srgbClr=20=
52
+ val=3D"800080"/></a:folHlink></a:clrScheme><a:fontScheme=20=
53
+ name=3D"Office"><a:majorFont><a:latin=20typeface=3D"Cambria"/><a:ea=20=
54
+ typeface=3D""/><a:cs=20typeface=3D""/><a:font=20script=3D"Jpan"=20=
55
+ typeface=3D"=EF=BC=AD=EF=BC=B3=20=EF=BC=B0=E3=82=B4=E3=82=B7=E3=83=83=E3=82=
56
+ =AF"/><a:font=20script=3D"Hang"=20typeface=3D"=EB=A7=91=EC=9D=80=20=
57
+ =EA=B3=A0=EB=94=95"/><a:font=20script=3D"Hans"=20=
58
+ typeface=3D"=E5=AE=8B=E4=BD=93"/><a:font=20script=3D"Hant"=20=
59
+ typeface=3D"=E6=96=B0=E7=B4=B0=E6=98=8E=E9=AB=94"/><a:font=20=
60
+ script=3D"Arab"=20typeface=3D"Times=20New=20Roman"/><a:font=20=
61
+ script=3D"Hebr"=20typeface=3D"Times=20New=20Roman"/><a:font=20=
62
+ script=3D"Thai"=20typeface=3D"Tahoma"/><a:font=20script=3D"Ethi"=20=
63
+ typeface=3D"Nyala"/><a:font=20script=3D"Beng"=20=
64
+ typeface=3D"Vrinda"/><a:font=20script=3D"Gujr"=20=
65
+ typeface=3D"Shruti"/><a:font=20script=3D"Khmr"=20=
66
+ typeface=3D"MoolBoran"/><a:font=20script=3D"Knda"=20=
67
+ typeface=3D"Tunga"/><a:font=20script=3D"Guru"=20=
68
+ typeface=3D"Raavi"/><a:font=20script=3D"Cans"=20=
69
+ typeface=3D"Euphemia"/><a:font=20script=3D"Cher"=20typeface=3D"Plantagenet=
70
+ =20Cherokee"/><a:font=20script=3D"Yiii"=20typeface=3D"Microsoft=20Yi=20=
71
+ Baiti"/><a:font=20script=3D"Tibt"=20typeface=3D"Microsoft=20=
72
+ Himalaya"/><a:font=20script=3D"Thaa"=20typeface=3D"MV=20Boli"/><a:font=20=
73
+ script=3D"Deva"=20typeface=3D"Mangal"/><a:font=20script=3D"Telu"=20=
74
+ typeface=3D"Gautami"/><a:font=20script=3D"Taml"=20=
75
+ typeface=3D"Latha"/><a:font=20script=3D"Syrc"=20typeface=3D"Estrangelo=20=
76
+ Edessa"/><a:font=20script=3D"Orya"=20typeface=3D"Kalinga"/><a:font=20=
77
+ script=3D"Mlym"=20typeface=3D"Kartika"/><a:font=20script=3D"Laoo"=20=
78
+ typeface=3D"DokChampa"/><a:font=20script=3D"Sinh"=20typeface=3D"Iskoola=20=
79
+ Pota"/><a:font=20script=3D"Mong"=20typeface=3D"Mongolian=20=
80
+ Baiti"/><a:font=20script=3D"Viet"=20typeface=3D"Times=20New=20=
81
+ Roman"/><a:font=20script=3D"Uigh"=20typeface=3D"Microsoft=20=
82
+ Uighur"/><a:font=20script=3D"Geor"=20=
83
+ typeface=3D"Sylfaen"/></a:majorFont><a:minorFont><a:latin=20=
84
+ typeface=3D"Calibri"/><a:ea=20typeface=3D""/><a:cs=20=
85
+ typeface=3D""/><a:font=20script=3D"Jpan"=20typeface=3D"=EF=BC=AD=EF=BC=B3=20=
86
+ =EF=BC=B0=E3=82=B4=E3=82=B7=E3=83=83=E3=82=AF"/><a:font=20script=3D"Hang"=20=
87
+ typeface=3D"=EB=A7=91=EC=9D=80=20=EA=B3=A0=EB=94=95"/><a:font=20=
88
+ script=3D"Hans"=20typeface=3D"=E5=AE=8B=E4=BD=93"/><a:font=20=
89
+ script=3D"Hant"=20typeface=3D"=E6=96=B0=E7=B4=B0=E6=98=8E=E9=AB=94"/><a:fo=
90
+ nt=20script=3D"Arab"=20typeface=3D"Arial"/><a:font=20script=3D"Hebr"=20=
91
+ typeface=3D"Arial"/><a:font=20script=3D"Thai"=20=
92
+ typeface=3D"Tahoma"/><a:font=20script=3D"Ethi"=20=
93
+ typeface=3D"Nyala"/><a:font=20script=3D"Beng"=20=
94
+ typeface=3D"Vrinda"/><a:font=20script=3D"Gujr"=20=
95
+ typeface=3D"Shruti"/><a:font=20script=3D"Khmr"=20=
96
+ typeface=3D"DaunPenh"/><a:font=20script=3D"Knda"=20=
97
+ typeface=3D"Tunga"/><a:font=20script=3D"Guru"=20=
98
+ typeface=3D"Raavi"/><a:font=20script=3D"Cans"=20=
99
+ typeface=3D"Euphemia"/><a:font=20script=3D"Cher"=20typeface=3D"Plantagenet=
100
+ =20Cherokee"/><a:font=20script=3D"Yiii"=20typeface=3D"Microsoft=20Yi=20=
101
+ Baiti"/><a:font=20script=3D"Tibt"=20typeface=3D"Microsoft=20=
102
+ Himalaya"/><a:font=20script=3D"Thaa"=20typeface=3D"MV=20Boli"/><a:font=20=
103
+ script=3D"Deva"=20typeface=3D"Mangal"/><a:font=20script=3D"Telu"=20=
104
+ typeface=3D"Gautami"/><a:font=20script=3D"Taml"=20=
105
+ typeface=3D"Latha"/><a:font=20script=3D"Syrc"=20typeface=3D"Estrangelo=20=
106
+ Edessa"/><a:font=20script=3D"Orya"=20typeface=3D"Kalinga"/><a:font=20=
107
+ script=3D"Mlym"=20typeface=3D"Kartika"/><a:font=20script=3D"Laoo"=20=
108
+ typeface=3D"DokChampa"/><a:font=20script=3D"Sinh"=20typeface=3D"Iskoola=20=
109
+ Pota"/><a:font=20script=3D"Mong"=20typeface=3D"Mongolian=20=
110
+ Baiti"/><a:font=20script=3D"Viet"=20typeface=3D"Arial"/><a:font=20=
111
+ script=3D"Uigh"=20typeface=3D"Microsoft=20Uighur"/><a:font=20=
112
+ script=3D"Geor"=20=
113
+ typeface=3D"Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme=20=
114
+ name=3D"Office"><a:fillStyleLst><a:solidFill><a:schemeClr=20=
115
+ val=3D"phClr"/></a:solidFill><a:gradFill=20=
116
+ rotWithShape=3D"1"><a:gsLst><a:gs=20pos=3D"0"><a:schemeClr=20=
117
+ val=3D"phClr"><a:tint=20val=3D"50000"/><a:satMod=20=
118
+ val=3D"300000"/></a:schemeClr></a:gs><a:gs=20pos=3D"35000"><a:schemeClr=20=
119
+ val=3D"phClr"><a:tint=20val=3D"37000"/><a:satMod=20=
120
+ val=3D"300000"/></a:schemeClr></a:gs><a:gs=20pos=3D"100000"><a:schemeClr=20=
121
+ val=3D"phClr"><a:tint=20val=3D"15000"/><a:satMod=20=
122
+ val=3D"350000"/></a:schemeClr></a:gs></a:gsLst><a:lin=20ang=3D"16200000"=20=
123
+ scaled=3D"1"/></a:gradFill><a:gradFill=20rotWithShape=3D"1"><a:gsLst><a:gs=
124
+ =20pos=3D"0"><a:schemeClr=20val=3D"phClr"><a:tint=20=
125
+ val=3D"100000"/><a:shade=20val=3D"100000"/><a:satMod=20=
126
+ val=3D"130000"/></a:schemeClr></a:gs><a:gs=20pos=3D"100000"><a:schemeClr=20=
127
+ val=3D"phClr"><a:tint=20val=3D"50000"/><a:shade=20=
128
+ val=3D"100000"/><a:satMod=20=
129
+ val=3D"350000"/></a:schemeClr></a:gs></a:gsLst><a:lin=20ang=3D"16200000"=20=
130
+ scaled=3D"0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln=20=
131
+ w=3D"9525"=20cap=3D"flat"=20cmpd=3D"sng"=20=
132
+ algn=3D"ctr"><a:solidFill><a:schemeClr=20val=3D"phClr"><a:shade=20=
133
+ val=3D"95000"/><a:satMod=20=
134
+ val=3D"105000"/></a:schemeClr></a:solidFill><a:prstDash=20=
135
+ val=3D"solid"/></a:ln><a:ln=20w=3D"25400"=20cap=3D"flat"=20cmpd=3D"sng"=20=
136
+ algn=3D"ctr"><a:solidFill><a:schemeClr=20=
137
+ val=3D"phClr"/></a:solidFill><a:prstDash=20val=3D"solid"/></a:ln><a:ln=20=
138
+ w=3D"38100"=20cap=3D"flat"=20cmpd=3D"sng"=20=
139
+ algn=3D"ctr"><a:solidFill><a:schemeClr=20=
140
+ val=3D"phClr"/></a:solidFill><a:prstDash=20=
141
+ val=3D"solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:e=
142
+ ffectLst><a:outerShdw=20blurRad=3D"40000"=20dist=3D"20000"=20=
143
+ dir=3D"5400000"=20rotWithShape=3D"0"><a:srgbClr=20val=3D"000000"><a:alpha=20=
144
+ val=3D"38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:=
145
+ effectStyle><a:effectLst><a:outerShdw=20blurRad=3D"40000"=20dist=3D"23000"=
146
+ =20dir=3D"5400000"=20rotWithShape=3D"0"><a:srgbClr=20=
147
+ val=3D"000000"><a:alpha=20=
148
+ val=3D"35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:=
149
+ effectStyle><a:effectLst><a:outerShdw=20blurRad=3D"40000"=20dist=3D"23000"=
150
+ =20dir=3D"5400000"=20rotWithShape=3D"0"><a:srgbClr=20=
151
+ val=3D"000000"><a:alpha=20=
152
+ val=3D"35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camer=
153
+ a=20prst=3D"orthographicFront"><a:rot=20lat=3D"0"=20lon=3D"0"=20=
154
+ rev=3D"0"/></a:camera><a:lightRig=20rig=3D"threePt"=20dir=3D"t"><a:rot=20=
155
+ lat=3D"0"=20lon=3D"0"=20=
156
+ rev=3D"1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT=20w=3D"63500"=20=
157
+ h=3D"25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst=
158
+ ><a:solidFill><a:schemeClr=20val=3D"phClr"/></a:solidFill><a:gradFill=20=
159
+ rotWithShape=3D"1"><a:gsLst><a:gs=20pos=3D"0"><a:schemeClr=20=
160
+ val=3D"phClr"><a:tint=20val=3D"40000"/><a:satMod=20=
161
+ val=3D"350000"/></a:schemeClr></a:gs><a:gs=20pos=3D"40000"><a:schemeClr=20=
162
+ val=3D"phClr"><a:tint=20val=3D"45000"/><a:shade=20val=3D"99000"/><a:satMod=
163
+ =20val=3D"350000"/></a:schemeClr></a:gs><a:gs=20=
164
+ pos=3D"100000"><a:schemeClr=20val=3D"phClr"><a:shade=20=
165
+ val=3D"20000"/><a:satMod=20=
166
+ val=3D"255000"/></a:schemeClr></a:gs></a:gsLst><a:path=20=
167
+ path=3D"circle"><a:fillToRect=20l=3D"50000"=20t=3D"-80000"=20r=3D"50000"=20=
168
+ b=3D"180000"/></a:path></a:gradFill><a:gradFill=20=
169
+ rotWithShape=3D"1"><a:gsLst><a:gs=20pos=3D"0"><a:schemeClr=20=
170
+ val=3D"phClr"><a:tint=20val=3D"80000"/><a:satMod=20=
171
+ val=3D"300000"/></a:schemeClr></a:gs><a:gs=20pos=3D"100000"><a:schemeClr=20=
172
+ val=3D"phClr"><a:shade=20val=3D"30000"/><a:satMod=20=
173
+ val=3D"200000"/></a:schemeClr></a:gs></a:gsLst><a:path=20=
174
+ path=3D"circle"><a:fillToRect=20l=3D"50000"=20t=3D"50000"=20r=3D"50000"=20=
175
+ b=3D"50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:th=
176
+ emeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a=
177
+ :style><a:lnRef=20idx=3D"1"><a:schemeClr=20=
178
+ val=3D"accent1"/></a:lnRef><a:fillRef=20idx=3D"3"><a:schemeClr=20=
179
+ val=3D"accent1"/></a:fillRef><a:effectRef=20idx=3D"2"><a:schemeClr=20=
180
+ val=3D"accent1"/></a:effectRef><a:fontRef=20idx=3D"minor"><a:schemeClr=20=
181
+ val=3D"lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/>=
182
+ <a:lstStyle/><a:style><a:lnRef=20idx=3D"2"><a:schemeClr=20=
183
+ val=3D"accent1"/></a:lnRef><a:fillRef=20idx=3D"0"><a:schemeClr=20=
184
+ val=3D"accent1"/></a:fillRef><a:effectRef=20idx=3D"1"><a:schemeClr=20=
185
+ val=3D"accent1"/></a:effectRef><a:fontRef=20idx=3D"minor"><a:schemeClr=20=
186
+ val=3D"tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraCl=
187
+ rSchemeLst/></a:theme>PK=03=04=14=00=00=00=00=00=00=00=00=00=CBF=B79=E1=04=
188
+ =00=00=E1=04=00=00=0D=00=00=00xl/styles.xml<?xml=20version=3D"1.0"=20=
189
+ encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A<styleSheet=20=
190
+ xmlns=3D"http://schemas.openxmlformats.org/spreadsheetml/2006/main"=20=
191
+ xmlns:vt=3D"http://schemas.openxmlformats.org/officeDocument/2006/docProps=
192
+ VTypes"><numFmts=20count=3D"2"><numFmt=20numFmtId=3D"44"=20=
193
+ formatCode=3D"_(&quot;$&quot;*=20#,##0.00_);_(&quot;$&quot;*=20=
194
+ \(#,##0.00\);_(&quot;$&quot;*=20&quot;-&quot;??_);_(@_)"/><numFmt=20=
195
+ numFmtId=3D"56"=20formatCode=3D"&quot;=E4=B8=8A=E5=8D=88/=E4=B8=8B=E5=8D=88=
196
+ =20&quot;hh&quot;=E6=99=82&quot;mm&quot;=E5=88=86&quot;ss&quot;=E7=A7=92=20=
197
+ &quot;"/></numFmts><fonts=20count=3D"1"><font><sz=20val=3D"12"/><color=20=
198
+ theme=3D"1"/><name=20val=3D"Calibri"/><family=20val=3D"2"/><scheme=20=
199
+ val=3D"minor"/></font></fonts><fills=20count=3D"2"><fill><patternFill=20=
200
+ patternType=3D"none"/></fill><fill><patternFill=20=
201
+ patternType=3D"gray125"/></fill></fills><borders=20=
202
+ count=3D"1"><border><left/><right/><top/><bottom/><diagonal/></border></bo=
203
+ rders><cellStyleXfs=20count=3D"1"><xf=20numFmtId=3D"0"=20fontId=3D"0"=20=
204
+ fillId=3D"0"=20borderId=3D"0"/></cellStyleXfs><cellXfs=20count=3D"1"><xf=20=
205
+ numFmtId=3D"0"=20fontId=3D"0"=20fillId=3D"0"=20borderId=3D"0"=20xfId=3D"0"=
206
+ =20applyNumberFormat=3D"1"/></cellXfs><cellStyles=20count=3D"1"><cellStyle=
207
+ =20name=3D"Normal"=20xfId=3D"0"=20builtinId=3D"0"/></cellStyles><dxfs=20=
208
+ count=3D"0"/><tableStyles=20count=3D"0"=20=
209
+ defaultTableStyle=3D"TableStyleMedium9"=20=
210
+ defaultPivotStyle=3D"PivotStyleMedium4"/></styleSheet>PK=03=04=14=00=00=00=
211
+ =00=00=00=00=00=00=9C=10=DEl=A9=05=00=00=A9=05=00=00=18=00=00=00xl/workshe=
212
+ ets/sheet1.xml<?xml=20version=3D"1.0"=20encoding=3D"UTF-8"=20=
213
+ standalone=3D"yes"?>=0D=0A<worksheet=20=
214
+ xmlns=3D"http://schemas.openxmlformats.org/spreadsheetml/2006/main"=20=
215
+ xmlns:r=3D"http://schemas.openxmlformats.org/officeDocument/2006/relations=
216
+ hips"><dimension=20ref=3D"A1:M2"/><sheetViews><sheetView=20=
217
+ workbookViewId=3D"0"/></sheetViews><sheetData><row=20r=3D"1"><c=20r=3D"A1"=
218
+ =20t=3D"str"><v>Building=20Description</v></c><c=20r=3D"B1"=20=
219
+ t=3D"str"><v>Street</v></c><c=20r=3D"C1"=20t=3D"str"><v>City</v></c><c=20=
220
+ r=3D"D1"=20t=3D"str"><v>State</v></c><c=20r=3D"E1"=20=
221
+ t=3D"str"><v>Zip</v></c><c=20r=3D"F1"=20=
222
+ t=3D"str"><v>Construction</v></c><c=20r=3D"G1"=20=
223
+ t=3D"str"><v>Occupancy</v></c><c=20r=3D"H1"=20t=3D"str"><v>Building=20=
224
+ Limit</v></c><c=20r=3D"I1"=20t=3D"str"><v>BPP=20Limit</v></c><c=20r=3D"J1"=
225
+ =20t=3D"str"><v>BI=20Limit</v></c><c=20r=3D"K1"=20t=3D"str"><v=20=
226
+ xml:space=3D"preserve">TIV=20</v></c><c=20r=3D"L1"=20=
227
+ t=3D"str"><v>roof</v></c><c=20r=3D"M1"=20t=3D"str"><v>roof=20=
228
+ geometry</v></c></row><row=20r=3D"2"><c=20r=3D"A2"=20t=3D"str"><v>White=20=
229
+ House</v></c><c=20r=3D"B2"=20t=3D"str"><v>1600=20Pennsylvania=20=
230
+ Ave</v></c><c=20r=3D"C2"=20t=3D"str"><v=20=
231
+ xml:space=3D"preserve">Washington=20</v></c><c=20r=3D"D2"=20=
232
+ t=3D"str"><v>DC</v></c><c=20r=3D"F2"=20t=3D"str"><v>stone</v></c><c=20=
233
+ r=3D"G2"=20t=3D"str"><v>Single-family=20house</v></c><c=20r=3D"H2"=20=
234
+ t=3D"str"><v=20xml:space=3D"preserve">=20$10,000,000.00=20</v></c><c=20=
235
+ r=3D"I2"=20t=3D"str"><v=20xml:space=3D"preserve">=20$20,000,000.00=20=
236
+ </v></c><c=20r=3D"J2"=20t=3D"str"><v>0</v></c><c=20r=3D"K2"=20=
237
+ t=3D"str"><v>30000000</v></c><c=20r=3D"M2"=20=
238
+ t=3D"str"><v>flat</v></c></row></sheetData><ignoredErrors><ignoredError=20=
239
+ numberStoredAsText=3D"1"=20=
240
+ sqref=3D"A1:M2"/></ignoredErrors></worksheet>PK=03=04=14=00=00=00=00=00=00=
241
+ =00=00=00`=80=00=81=88=03=00=00=88=03=00=00=0F=00=00=00xl/metadata.xml<?xm=
242
+ l=20version=3D"1.0"=20encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A=
243
+ <metadata=20=
244
+ xmlns=3D"http://schemas.openxmlformats.org/spreadsheetml/2006/main"=20=
245
+ xmlns:xlrd=3D"http://schemas.microsoft.com/office/spreadsheetml/2017/richd=
246
+ ata"=20=
247
+ xmlns:xda=3D"http://schemas.microsoft.com/office/spreadsheetml/2017/dynami=
248
+ carray">=0A=20=20<metadataTypes=20count=3D"1">=0A=20=20=20=20=
249
+ <metadataType=20name=3D"XLDAPR"=20minSupportedVersion=3D"120000"=20=
250
+ copy=3D"1"=20pasteAll=3D"1"=20pasteValues=3D"1"=20merge=3D"1"=20=
251
+ splitFirst=3D"1"=20rowColShift=3D"1"=20clearFormats=3D"1"=20=
252
+ clearComments=3D"1"=20assign=3D"1"=20coerce=3D"1"=20cellMeta=3D"1"/>=0A=20=
253
+ =20</metadataTypes>=0A=20=20<futureMetadata=20name=3D"XLDAPR"=20=
254
+ count=3D"1">=0A=20=20=20=20<bk>=0A=20=20=20=20=20=20<extLst>=0A=20=20=20=20=
255
+ =20=20=20=20<ext=20uri=3D"{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">=0A=20=20=
256
+ =20=20=20=20=20=20=20=20<xda:dynamicArrayProperties=20fDynamic=3D"1"=20=
257
+ fCollapsed=3D"0"/>=0A=20=20=20=20=20=20=20=20</ext>=0A=20=20=20=20=20=20=
258
+ </extLst>=0A=20=20=20=20</bk>=0A=20=20</futureMetadata>=0A=20=20=
259
+ <cellMetadata=20count=3D"1">=0A=20=20=20=20<bk>=0A=20=20=20=20=20=20<rc=20=
260
+ t=3D"1"=20v=3D"0"/>=0A=20=20=20=20</bk>=0A=20=20</cellMetadata>=0A=
261
+ </metadata>PK=03=04=14=00=00=00=00=00=00=00=00=00g=BAj0B=01=00=00B=01=00=00=
262
+ =0F=00=00=00xl/workbook.xml<?xml=20version=3D"1.0"=20encoding=3D"UTF-8"=20=
263
+ standalone=3D"yes"?>=0D=0A<workbook=20=
264
+ xmlns=3D"http://schemas.openxmlformats.org/spreadsheetml/2006/main"=20=
265
+ xmlns:r=3D"http://schemas.openxmlformats.org/officeDocument/2006/relations=
266
+ hips"><workbookPr=20codeName=3D"ThisWorkbook"/><sheets><sheet=20=
267
+ name=3D"Sheet1"=20sheetId=3D"1"=20=
268
+ r:id=3D"rId1"/></sheets></workbook>PK=03=04=14=00=00=00=00=00=00=00=00=00J=
269
+ j=11=F9L=02=00=00L=02=00=00=0B=00=00=00_rels/.rels<?xml=20version=3D"1.0"=20=
270
+ encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A<Relationships=20=
271
+ xmlns=3D"http://schemas.openxmlformats.org/package/2006/relationships"><Re=
272
+ lationship=20Id=3D"rId2"=20=
273
+ Type=3D"http://schemas.openxmlformats.org/package/2006/relationships/metad=
274
+ ata/core-properties"=20Target=3D"docProps/core.xml"/><Relationship=20=
275
+ Id=3D"rId3"=20=
276
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
277
+ s/extended-properties"=20Target=3D"docProps/app.xml"/><Relationship=20=
278
+ Id=3D"rId1"=20=
279
+ Type=3D"http://schemas.openxmlformats.org/officeDocument/2006/relationship=
280
+ s/officeDocument"=20=
281
+ Target=3D"xl/workbook.xml"/></Relationships>PK=03=04=14=00=00=00=00=00=00=00=
282
+ =00=00=8B=13H=182=02=00=002=02=00=00=10=00=00=00docProps/app.xml<?xml=20=
283
+ version=3D"1.0"=20encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A=
284
+ <Properties=20=
285
+ xmlns=3D"http://schemas.openxmlformats.org/officeDocument/2006/extended-pr=
286
+ operties"=20=
287
+ xmlns:vt=3D"http://schemas.openxmlformats.org/officeDocument/2006/docProps=
288
+ VTypes"><Application>SheetJS</Application><HeadingPairs><vt:vector=20=
289
+ size=3D"2"=20=
290
+ baseType=3D"variant"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:varia=
291
+ nt><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><Ti=
292
+ tlesOfParts><vt:vector=20size=3D"1"=20=
293
+ baseType=3D"lpstr"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts>=
294
+ </Properties>PK=03=04=14=00=00=00=00=00=00=00=00=00=D6=92|=11Z=01=00=00Z=01=
295
+ =00=00=11=00=00=00docProps/core.xml<?xml=20version=3D"1.0"=20=
296
+ encoding=3D"UTF-8"=20standalone=3D"yes"?>=0D=0A<cp:coreProperties=20=
297
+ xmlns:cp=3D"http://schemas.openxmlformats.org/package/2006/metadata/core-p=
298
+ roperties"=20xmlns:dc=3D"http://purl.org/dc/elements/1.1/"=20=
299
+ xmlns:dcterms=3D"http://purl.org/dc/terms/"=20=
300
+ xmlns:dcmitype=3D"http://purl.org/dc/dcmitype/"=20=
301
+ xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instance"/>PK=03=04=14=00=00=
302
+ =00=00=00=00=00=00=00=A8=D7j=80=15=08=00=00=15=08=00=00=13=00=00=00[Conten=
303
+ t_Types].xml<?xml=20version=3D"1.0"=20encoding=3D"UTF-8"=20=
304
+ standalone=3D"yes"?>=0D=0A<Types=20=
305
+ xmlns=3D"http://schemas.openxmlformats.org/package/2006/content-types"=20=
306
+ xmlns:xsd=3D"http://www.w3.org/2001/XMLSchema"=20=
307
+ xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instance"><Default=20=
308
+ Extension=3D"xml"=20ContentType=3D"application/xml"/><Default=20=
309
+ Extension=3D"bin"=20=
310
+ ContentType=3D"application/vnd.ms-excel.sheet.binary.macroEnabled.main"/><=
311
+ Default=20Extension=3D"vml"=20=
312
+ ContentType=3D"application/vnd.openxmlformats-officedocument.vmlDrawing"/>=
313
+ <Default=20Extension=3D"data"=20=
314
+ ContentType=3D"application/vnd.openxmlformats-officedocument.model+data"/>=
315
+ <Default=20Extension=3D"bmp"=20ContentType=3D"image/bmp"/><Default=20=
316
+ Extension=3D"png"=20ContentType=3D"image/png"/><Default=20=
317
+ Extension=3D"gif"=20ContentType=3D"image/gif"/><Default=20=
318
+ Extension=3D"emf"=20ContentType=3D"image/x-emf"/><Default=20=
319
+ Extension=3D"wmf"=20ContentType=3D"image/x-wmf"/><Default=20=
320
+ Extension=3D"jpg"=20ContentType=3D"image/jpeg"/><Default=20=
321
+ Extension=3D"jpeg"=20ContentType=3D"image/jpeg"/><Default=20=
322
+ Extension=3D"tif"=20ContentType=3D"image/tiff"/><Default=20=
323
+ Extension=3D"tiff"=20ContentType=3D"image/tiff"/><Default=20=
324
+ Extension=3D"pdf"=20ContentType=3D"application/pdf"/><Default=20=
325
+ Extension=3D"rels"=20=
326
+ ContentType=3D"application/vnd.openxmlformats-package.relationships+xml"/>=
327
+ <Override=20PartName=3D"/xl/workbook.xml"=20=
328
+ ContentType=3D"application/vnd.openxmlformats-officedocument.spreadsheetml=
329
+ .sheet.main+xml"/><Override=20PartName=3D"/xl/worksheets/sheet1.xml"=20=
330
+ ContentType=3D"application/vnd.openxmlformats-officedocument.spreadsheetml=
331
+ .worksheet+xml"/><Override=20PartName=3D"/xl/theme/theme1.xml"=20=
332
+ ContentType=3D"application/vnd.openxmlformats-officedocument.theme+xml"/><=
333
+ Override=20PartName=3D"/xl/styles.xml"=20=
334
+ ContentType=3D"application/vnd.openxmlformats-officedocument.spreadsheetml=
335
+ .styles+xml"/><Override=20PartName=3D"/docProps/core.xml"=20=
336
+ ContentType=3D"application/vnd.openxmlformats-package.core-properties+xml"=
337
+ /><Override=20PartName=3D"/docProps/app.xml"=20=
338
+ ContentType=3D"application/vnd.openxmlformats-officedocument.extended-prop=
339
+ erties+xml"/><Override=20PartName=3D"/xl/metadata.xml"=20=
340
+ ContentType=3D"application/vnd.openxmlformats-officedocument.spreadsheetml=
341
+ .sheetMetadata+xml"/></Types>PK=01=02=00=00=14=00=00=00=00=00=00=00=00=00=A4=
342
+ =01=84=B8=B5=02=00=00=B5=02=00=00=1A=00=00=00=00=00=00=00=00=00=00=00=00=00=
343
+ =00=00=00=00xl/_rels/workbook.xml.relsPK=01=02=00=00=14=00=00=00=00=00=00=00=
344
+ =00=000=0F=88k=DE=1D=00=00=DE=1D=00=00=13=00=00=00=00=00=00=00=00=00=00=00=
345
+ =00=00=ED=02=00=00xl/theme/theme1.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=
346
+ =00=00=CBF=B79=E1=04=00=00=E1=04=00=00=0D=00=00=00=00=00=00=00=00=00=00=00=
347
+ =00=00=FC=20=
348
+ =00=00xl/styles.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00=9C=10=DEl=A9=
349
+ =05=00=00=A9=05=00=00=18=00=00=00=00=00=00=00=00=00=00=00=00=00=08&=00=00x=
350
+ l/worksheets/sheet1.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00`=80=00=
351
+ =81=88=03=00=00=88=03=00=00=0F=00=00=00=00=00=00=00=00=00=00=00=00=00=E7+=00=
352
+ =00xl/metadata.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00g=BAj0B=01=00=
353
+ =00B=01=00=00=0F=00=00=00=00=00=00=00=00=00=00=00=00=00=9C/=00=00xl/workbo=
354
+ ok.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00Jj=11=F9L=02=00=00L=02=00=
355
+ =00=0B=00=00=00=00=00=00=00=00=00=00=00=00=00=0B=
356
+ 1=00=00_rels/.relsPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00=8B=13H=182=02=
357
+ =00=002=02=00=00=10=00=00=00=00=00=00=00=00=00=00=00=00=00=803=00=00docPro=
358
+ ps/app.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00=D6=92|=11Z=01=00=00=
359
+ Z=01=00=00=11=00=00=00=00=00=00=00=00=00=00=00=00=00=E05=00=00docProps/cor=
360
+ e.xmlPK=01=02=00=00=14=00=00=00=00=00=00=00=00=00=A8=D7j=80=15=08=00=00=15=
361
+ =08=00=00=13=00=00=00=00=00=00=00=00=00=00=00=00=00i7=00=00[Content_Types]=
362
+ .xmlPK=05=06=00=00=00=00=0A=00=0A=00{=02=00=00=AF?=00=00=00=00=
363
+
364
+ --Apple-Mail=_CB4ED241-4744-4F41-A658-0E69F8EED05E--
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Find Amwins missing account numbers by looking up policy_number from PingVision and SOVFixer.
4
+
5
+ Iterates through SOVFixer history for Amwins, finds pingids, and checks if policy numbers
6
+ match between PingVision submission and SOVFixer jobs.
7
+ """
8
+
9
+ import click, datetime
10
+ from pprint import pprint
11
+
12
+ from pingintel_api import PingVisionAPIClient, SOVFixerAPIClient
13
+
14
+
15
+ def check_pingid(pingid: str, pv_client: PingVisionAPIClient, sf_client: SOVFixerAPIClient, dump: bool = False) -> bool:
16
+ """
17
+ Check policy numbers for a PingVision submission and its associated SOVFixer jobs.
18
+ Returns True if all match, False if any mismatch.
19
+ """
20
+ # Get PingVision submission activity
21
+ activity = pv_client.list_submission_activity(pingid=pingid)
22
+ results = activity.get("results", [])
23
+
24
+ if dump:
25
+ click.echo("\n--- PingVision submission activity ---")
26
+ pprint(activity)
27
+
28
+ if not results:
29
+ click.echo(f"No submission found for pingid: {pingid}")
30
+ return True
31
+
32
+ submission = results[0]
33
+
34
+ # Get submission's extra_data.policy_number
35
+ extra_data = submission.get("extra_data", {}) or {}
36
+ submission_policy_number = extra_data.get("policy_number")
37
+ click.echo(f"{pingid}: {submission_policy_number}")
38
+
39
+ # Get jobs from the submission
40
+ jobs = submission.get("jobs", [])
41
+ all_match = True
42
+
43
+ for job in jobs:
44
+ sovid = job.get("sovid")
45
+
46
+ if not sovid:
47
+
48
+ continue
49
+
50
+ # Look up the SOVFixer activity for this sovid
51
+ sf_activity = sf_client.list_activity(id=sovid)
52
+ if dump:
53
+ click.echo(f"\n--- SOVFixer activity for {sovid} ---")
54
+ pprint(sf_activity)
55
+ sf_results = sf_activity.get("results", [])
56
+ if sf_results:
57
+ sf_extra_data = sf_results[0].get("extra_data", {}) or {}
58
+ sf_policy_number = sf_extra_data.get("policy_number")
59
+ else:
60
+ sf_policy_number = None
61
+
62
+ click.echo(f" {sovid}: {sf_policy_number}")
63
+
64
+ # Check for mismatch
65
+ if submission_policy_number != sf_policy_number:
66
+ click.echo(f" *** MISMATCH: submission={submission_policy_number}, sovfixer={sf_policy_number}")
67
+ all_match = False
68
+
69
+ return all_match
70
+
71
+
72
+ @click.command()
73
+ @click.option(
74
+ "-e",
75
+ "--environment",
76
+ type=click.Choice(["prod", "prodeu", "staging", "dev"], case_sensitive=False),
77
+ default="prod",
78
+ help="API environment (prod, dev, etc.)",
79
+ )
80
+ @click.option(
81
+ "--limit",
82
+ type=int,
83
+ default=None,
84
+ help="Maximum number of history items to process.",
85
+ )
86
+ @click.option(
87
+ "--id",
88
+ "pingid",
89
+ default=None,
90
+ help="Check a single pingid instead of iterating through history.",
91
+ )
92
+ @click.option(
93
+ "--dump",
94
+ is_flag=True,
95
+ default=False,
96
+ help="Prettyprint the raw API responses.",
97
+ )
98
+ def main(environment: str, limit: int | None, pingid: str | None, dump: bool):
99
+ """Iterate through Amwins SOVFixer history and check for policy number mismatches."""
100
+ pv_client = PingVisionAPIClient(environment=environment)
101
+ sf_client = SOVFixerAPIClient(environment=environment, auth_token="3b9f832a6e930859bdc25cd231626983f61b1988")
102
+
103
+ # If a specific pingid is provided, just check that one
104
+ if pingid:
105
+ click.echo(f"Checking single pingid: {pingid}")
106
+ all_match = check_pingid(pingid, pv_client, sf_client, dump=dump)
107
+ if not all_match:
108
+ breakpoint()
109
+ return
110
+
111
+ seen_pingids = set()
112
+ count = 0
113
+ cursor_id = "s-ha-amw-5htfh5"
114
+
115
+ click.echo("Fetching SOVFixer history for Amwins...")
116
+ has_remaining = True
117
+
118
+ while has_remaining:
119
+ history = sf_client.list_history(cursor_id=cursor_id, page_size=100, start=datetime.datetime(2025, 1, 1))
120
+ cursor_id = history.get("cursor_id")
121
+ print(history["cursor_id"])
122
+ has_remaining = len(history.get("results", []))
123
+ for item in history.get("results", []):
124
+ # Filter for Amwins
125
+ # org_short_name = item.get("organization__short_name", "")
126
+ # if org_short_name != "amwins":
127
+ # continue
128
+
129
+ pingid = item.get("pingid")
130
+ sovid = item.get("sovid")
131
+ record_type = item.get("record_type")
132
+
133
+ if not pingid or pingid in seen_pingids:
134
+ continue
135
+
136
+ seen_pingids.add(pingid)
137
+ count += 1
138
+
139
+ click.echo(f"Checking {pingid} ({count}) ---")
140
+
141
+ all_match = check_pingid(pingid, pv_client, sf_client, dump=dump)
142
+
143
+ if not all_match:
144
+ breakpoint()
145
+
146
+ if limit and count >= limit:
147
+ click.echo(f"\nReached limit of {limit} pingids.")
148
+ return
149
+
150
+ click.echo(f"\nDone. Checked {count} pingids.")
151
+
152
+
153
+ if __name__ == "__main__":
154
+ main()
@@ -70,6 +70,8 @@ for output in outputs:
70
70
  # ensure response is in a good state
71
71
  assert fetch_outputs_response.status_code in (200, 201)
72
72
  print(f"saving {output['filename']}")
73
- with open(f"workflow_example_results/{output['filename']}", "wb") as outfile:
73
+ output_path = f"workflow_example_results/{output['filename']}"
74
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
75
+ with open(output_path, "wb") as outfile:
74
76
  outfile.write(fetch_outputs_response.content)
75
77
  print(f"saved {output['filename']}")