wipo-gbd-transformation 1.1.53__py3-none-any.whl → 1.1.55__py3-none-any.whl

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.

Potentially problematic release.


This version of wipo-gbd-transformation might be problematic. Click here for more details.

Files changed (37) hide show
  1. gbdtransformation/brands/catm/filters.py +2 -1
  2. gbdtransformation/brands/catm/template.yml +9 -5
  3. gbdtransformation/brands/chtm/filters.py +153 -181
  4. gbdtransformation/brands/chtm/schema +79 -91
  5. gbdtransformation/brands/chtm/template.yml +98 -107
  6. gbdtransformation/brands/natm/__init__.py +2 -3
  7. gbdtransformation/brands/natm/filters.py +8 -2
  8. gbdtransformation/brands/notm/__init__.py +5 -0
  9. gbdtransformation/brands/notm/filters.py +117 -0
  10. gbdtransformation/brands/notm/template.yml +165 -0
  11. gbdtransformation/brands/phtm/schema +79 -50
  12. gbdtransformation/brands/phtm/schema.classic +50 -0
  13. gbdtransformation/brands/phtm/template.classic.yml +102 -0
  14. gbdtransformation/brands/phtm/template.yml +1 -102
  15. gbdtransformation/brands/vctm/__init__.py +5 -0
  16. gbdtransformation/brands/vctm/filters.py +75 -0
  17. gbdtransformation/brands/vctm/schema +87 -0
  18. gbdtransformation/brands/vctm/template.yml +1 -0
  19. gbdtransformation/brands/vctm/tests/__init__.py +0 -0
  20. gbdtransformation/brands/xxxx/template.yml +1 -1
  21. gbdtransformation/designs/woid/filters.py +26 -1
  22. gbdtransformation/designs/woid/template.yml +166 -1
  23. gbdtransformation/designs/xxid/template.yml +118 -2
  24. gbdtransformation/execs-nico.py +709 -0
  25. gbdtransformation/execs.py +9 -4
  26. gbdtransformation/gbd-transform.exec.tgz +0 -0
  27. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/METADATA +5 -3
  28. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/RECORD +33 -24
  29. wipo_gbd_transformation-1.1.55.dist-info/SOURCES_Stefans-Mac-Studio.local_Sep-18-063455-2024_Conflict.txt +690 -0
  30. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/WHEEL +1 -1
  31. gbdtransformation/designs/bgid/__init__.py +0 -5
  32. gbdtransformation/designs/bgid/filters.py +0 -91
  33. gbdtransformation/designs/bgid/schema +0 -106
  34. gbdtransformation/designs/bgid/template.yml +0 -169
  35. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/LICENSE.md +0 -0
  36. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/entry_points.txt +0 -0
  37. {wipo_gbd_transformation-1.1.53.dist-info → wipo_gbd_transformation-1.1.55.dist-info}/top_level.txt +0 -0
@@ -1,130 +1,121 @@
1
1
  {% from 'navigation.tmpl' import match %}
2
2
 
3
- {% call(info) match('marinfo', transac) %}
4
- {% set kind = info | get_kind %}
5
- type: TRADEMARK
6
- kind: {{ kind }}
7
-
8
- markFeature: {{ info.martype | translate_feature(info.marart) }}
3
+ {% set trademark = Trademark %}
4
+ {% set status = trademark.MarkCurrentStatusCode | translate_status %}
5
+ {% set officeCode = trademark.RegistrationOfficeCode %}
9
6
 
10
- registrationOfficeCode: CH
11
- designatedCountries:
12
- - CH
7
+ {% if officeCode == 'CH' %}
13
8
 
14
- st13: {{ info.basappn | st13('CH', appdate=info.basannd) }}
9
+ st13: {{ trademark.ApplicationNumber.ApplicationNumberText | st13('CH', appdate=trademark.ApplicationDate) }}
10
+ gbdStatus: {{ status }}
11
+ registrationOfficeCode: {{ officeCode }}
12
+ type: TRADEMARK
15
13
 
16
- applicationNumber: {{ info.basappn }}
17
- applicationDate: {{ info.basannd }}
18
- registrationNumber: {{ info.basregn }}
19
- registrationDate: {{ info.basregd }}
14
+ {% if not status == 'Delete' %}
15
+ kind: {{ tradenark.MarkCategory | translate_kind }}
16
+ markFeature: {{ trademark.MarkRepresentation.MarkFeatureCategory | translate_feature }}
17
+ designatedCountries:
18
+ - {{ officeCode }}
20
19
 
21
- applicationLanguageCode: {{ info.origlan }}
20
+ applicationNumber: {{ trademark.ApplicationNumber.ApplicationNumberText }}
21
+ applicationDate: {{ trademark.ApplicationDate | convertdate('%Y-%m-%d') }}
22
+ registrationNumber: {{ trademark | get_registration_nb(trademark.MarkCurrentStatusCode) }}
23
+ registrationDate: {{ trademark.RegistrationDate }}
24
+ applicationLanguageCode:
25
+ officeStatus: {{ trademark.MarkCurrentStatusCode }}
26
+ statusDate:
27
+ expiryDate: {{ trademark.ExpiryDate }}
22
28
 
23
- expiryDate: {{ info.expirationdate }}
24
- terminationDate: {{ info.basdeld }}
29
+ markDisclaimerDetails:
25
30
 
26
- officeStatus: {{ info.basstate }}
27
- gbdStatus: {{ info.basstate | translate_status(info.basdeld) }}
28
- statusDate: {{ info.lastgazd }}
31
+ markDescriptionDetails:
29
32
 
30
- markDisclaimerDetails:
31
- - languageCode: {{ info.marrem | guess_language(info.origlan) }}
32
- text: {{ info.marrem }}
33
+ wordMarkSpecification:
34
+ markVerbalElement:
35
+ {% set verbalElement = trademark.MarkRepresentation.MarkReproduction.WordMarkSpecification.MarkSignificantVerbalElementText | clean_verbal_element %}
36
+ - text: {{ verbalElement }}
37
+ languageCode:
33
38
 
34
39
  markImageDetails:
35
- - name: {{ info.marpicd }}
36
- colourIndicator: {{ info.colclai | get_true_or_false }}
40
+ {% call(img) match('MarkImage', trademark.MarkRepresentation.MarkImageBag) %}
41
+ - name: {{ img.FileName }}
42
+ colourIndicator: {{ img.MarkImageColourClaimedText | get_true_or_false }}
37
43
  colourClaimed:
38
- - languageCode: {{ info.colclai | guess_language }}
39
- text: {{ info.colclai }}
40
-
41
- {% set verbal = info | get_verbal %}
42
- wordMarkSpecification:
43
- markVerbalElement:
44
- - languageCode: {{ verbal | guess_language(default=info.origlan) }}
45
- text: {{ verbal | trim }}
44
+ - text: {{ img.MarkImageColourClaimedText }}
45
+ languageCode: {{ img.MarkImageColourClaimedText | local_guess_language() }}
46
+ classification:
47
+ kind: Vienna
48
+ code:
49
+ -
50
+ {% endcall %}
46
51
 
47
- {% set persons = info | get_roles %}
48
- applicants:
49
- {% for applicant in persons.applicants %}
50
- - fullName:
51
- - languageCode: {{ info.origlan }}
52
- text: {{ applicant.name }}
53
- fullAddress:
54
- - languageCode: {{ info.origlan }}
55
- text: {{ applicant.addr }}
56
- countryCode: {{ applicant.nat }}
57
- {% endfor %}
52
+ markSoundDetails:
53
+ {% call(sound) match('MarkSoundDetails.MarkSound', trademark.MarkRepresentation.MarkSoundBag) %}
54
+ - filename: {{ sound.MarkSoundFilename }}
55
+ fileformat: {{ sound.MarkSoundFileFormat }}
56
+ {% endcall %}
58
57
 
59
- representatives:
60
- {% for representative in persons.representatives %}
61
- - fullName:
62
- - languageCode: {{ info.origlan }}
63
- text: {{ representative.name }}
64
- fullAddress:
65
- - languageCode: {{ info.origlan }}
66
- text: {{ representative.addr }}
67
- countryCode: {{ representative.nat }}
68
- {% endfor %}
69
-
70
- {% if persons.correspondence %}
71
- correspondence:
72
- fullName:
73
- - languageCode: {{ info.origlan }}
74
- text: {{ persons.correspondence.name }}
75
- fullAddress:
76
- - languageCode: {{ info.origlan }}
77
- text: {{ persons.correspondence.addr }}
78
- countryCode: {{ persons.correspondence.nat }}
79
- {% endif %}
58
+ markVideoDetails:
59
+ {% call(video) match('MarkVideoDetails.MarkVideo', trademark.MarkRepresentation) %}
60
+ - filename: {{ video.MarkVideoFilename }}
61
+ fileformat: {{ video.MarkVideoFileFormat }}
62
+ {% endcall %}
80
63
 
81
- priorities:
82
- {% call(prio) match('prigr.prio', info) %}
83
- - countryCode: {{ prio.prinat }}
84
- number: {{ prio.prinr }}
85
- date: {{ prio.priappd }}
86
- comment: {{ prigr.prirem }}
87
- {% endcall %}
88
-
89
- {% set (nc_gs, gs) = info.gsgr | structure_gs %}
90
- {% if nc_gs.keys() | length > 0 %}
91
64
  goodsServicesClassification:
92
65
  kind: Nice
93
66
  version: {{ ASK_THE_OFFICE }}
94
- class:
95
- {% for cls, terms in nc_gs.items() %}
96
- - code: {{ cls | int }}
97
- {% if terms | length > 0 %}
98
- terms:
99
- {{ terms | guess_language(default=info.origlan) | field_name }}:
100
- {% for term in terms %}
101
- - {{ term }}
102
- {% endfor %}
103
- {% endif %}
104
- {% endfor %}
105
- {% endif %}
67
+ class:
68
+ {% call(ClassDescription) match('ClassDescription', trademark.GoodsServicesBag.GoodsServices.ClassDescriptionBag) %}
69
+ - code: {{ ClassDescription.ClassNumber }}
70
+ terms: {{ ClassDescription.GoodsServicesDescriptionText }}
71
+ languageCode: {{ ClassDescription.GoodsServicesDescriptionText | local_guess_language() }}
72
+ {% endcall %}
106
73
 
107
- {% if gs | length > 0 %}
108
- goodsServicesUnclassified:
109
- {{ gs | guess_language(default=info.origlan) | field_name }}:
110
- {% for term in gs %}
111
- - {{ term }}
112
- {% endfor %}
113
- {% endif %}
74
+ priorities:
75
+ {% call(priority) match('PriorityBag.Priority', trademark) %}
76
+ - countryCode: {{ priority.PriorityCountryCode }}
77
+ number: {{ priority.PriorityRegistrationNumber }}
78
+ date: {{ select_priority_date }}
79
+ {% endcall %}
80
+
81
+ publications:
82
+ {% call(publication) match('PublicationBag.Publication', trademark) %}
83
+ - identifier: {{ publication.PublicationIdentifier }}
84
+ date: {{ publication.PublicationDate }}
85
+ section: {{ publication.PublicationPage }}
86
+ {% endcall %}
114
87
 
115
- # publications:
116
- # {% call(publ) match('marhist.histdata', transac) %}
117
- # - identifier: {{ publ.artnr }}
118
- # date: {{ publ.evdat }}
119
- # section: {{ publ.gaznum }}
120
- # {% endcall %}
121
-
122
- extra:
123
- {% call(opp) match('oppositiongr', info) %}
124
- opposition:
125
- state: {{ opp.oppositionstate }}
126
- date: {{ opp.oppositiondate }}
88
+ applicants:
89
+ {% call(Applicant) match('Applicant', trademark.ApplicantBag) %}
90
+ - identifier:
91
+ kind:
92
+ fullName:
93
+ - text: {{ Applicant.Contact.Name.PersonName.PersonFullName }}
94
+ languageCode:
95
+ {% call(postalAddress) match('PostalAddress', Applicant.Contact.PostalAddressBag) %}
96
+ fullAddress:
97
+ {% set addr = postalAddress.PostalStructuredAddress | get_full_address %}
98
+ - text: {{ addr }}
99
+ languageCode: {{ addr | local_guess_language() }}
100
+ countryCode: {{ postalAddress.PostalStructuredAddress.CountryCode }}
101
+ {% endcall %}
127
102
  {% endcall %}
128
103
 
129
- {% endcall %}
104
+ representatives:
105
+ {% call(Representative) match('Representative', trademark.RepresentativeBag) %}
106
+ - identifier:
107
+ kind:
108
+ fullName:
109
+ - text: {{ Representative.Contact.Name.PersonName.PersonFullName }}
110
+ languageCode:
111
+ {% call(postalAddress) match('PostalAddress', Representative.Contact.PostalAddressBag) %}
112
+ fullAddress:
113
+ {% set addr = postalAddress.PostalStructuredAddress | get_full_address %}
114
+ - text: {{ addr }}
115
+ languageCode: {{ addr | local_guess_language() }}
116
+ countryCode: {{ postalAddress.PostalStructuredAddress.CountryCode }}
117
+ {% endcall %}
118
+ {% endcall %}
130
119
 
120
+ {% endif %}
121
+ {% endif %}
@@ -6,7 +6,6 @@ source = 'national'
6
6
  # NA/T/197/593
7
7
  # AP/M/2006/413
8
8
  # A/D/1/825028
9
- appnum_mask = [ '[A-Z]{2}/([A-Z])/\\d{4}/(\\d*)',
10
- '[A-Z]{2}/([A-Z])/\\d{3}/(\\d*)',
11
- '([A-Z])/D/1/(\\d*)' ]
9
+ appnum_mask = [ '([A-Z]{2})/([A-Z])/\\d*/(\\d*)',
10
+ '([A-Z])/[A-Z]/1/(\\d*)' ]
12
11
 
@@ -11,27 +11,33 @@ def translate_type(header):
11
11
  code = header.TransactionCode
12
12
 
13
13
  # extraction missing info.
14
- if code == 'Do Not Use':
14
+ if 'do not use' in code.lower():
15
15
  raise Exception('Code "%s" encountered. Skipping.' % code)
16
16
 
17
17
  if code == 'National Trademarks': return 'TRADEMARK'
18
+ if code == 'National Marks Act 2012': return 'TRADEMARK'
18
19
  if code == 'Madrid Marks': return 'TRADEMARK'
19
20
  if code == 'Banjul Trademark': return 'TRADEMARK'
21
+ if code == 'Banjul Protocol Marks': return 'TRADEMARK'
20
22
  if code == 'DEFENSIVE MARK': return 'TRADEMARK'
23
+ if code == 'CERTIFICATION MARK': return 'TRADEMARK'
21
24
 
22
25
  raise Exception('Type "%s" is not mapped.' % code)
23
26
 
24
27
  def translate_kind(trademark, header):
25
28
  subcode = header.TransactionSubCode
26
29
 
30
+ if subcode == 'Trade Mark': return ['Individual']
27
31
  if subcode == 'PART A': return ['Individual']
28
32
  if subcode == 'PART B': return ['Individual']
29
33
  if subcode == 'Banjul Trademark': return ['Individual']
34
+ if subcode == 'Banjul Protocol Marks': return ['Individual']
30
35
  if subcode == 'Madrid Protocol': return ['Individual']
31
36
  if subcode == 'Madrid Agreement': return ['Individual']
32
37
  if subcode == 'DEFENSIVE MARK': return ['Defensive']
38
+ if subcode == 'CERTIFICATION MARK': return ['Collective']
33
39
 
34
- raise Exception('Kind "%s" not mapped.' % code)
40
+ raise Exception('Kind "%s" not mapped.' % subcode)
35
41
 
36
42
  def translate_status(trademark):
37
43
  status = trademark.MarkCurrentStatusCode
@@ -0,0 +1,5 @@
1
+ # instruction to render the output to JSON format
2
+ render = 'JSON'
3
+ source = 'national'
4
+
5
+
@@ -0,0 +1,117 @@
1
+ import re
2
+
3
+ def translate_kind(kind):
4
+ if not kind: return ['Individual']
5
+
6
+ if kind == 'Individual mark': return ['Individual']
7
+ if kind == 'Collective mark': return ['Collective']
8
+
9
+ raise Exception('kind "%s" is not mapped.' % kind)
10
+
11
+ def translate_status(status):
12
+ if not status: return 'Ended'
13
+
14
+ if status in ['Registered',
15
+ 'Granted']:
16
+ return 'Registered'
17
+
18
+ if status in ['Pending']:
19
+ return 'Pending'
20
+
21
+ if status in ['Refused',
22
+ 'Shelved',
23
+ 'Finally shelved',
24
+ 'Ceased',
25
+ 'Ceased/cancelled',
26
+ 'Withdrawn']:
27
+ return 'Ended'
28
+
29
+ #return 'Unknown'
30
+ raise Exception('Status "%s" unmapped' % status)
31
+
32
+ def translate_feature(feature):
33
+ """translation of mark feature"""
34
+ if not feature: return 'Undefined'
35
+ feature = feature.upper()
36
+ if feature == 'COMBINED/FIGURATIVE MARK': return 'Combined'
37
+ if feature == 'WORD MARK': return 'Word'
38
+ if feature == '3D-MARK': return "Three dimensional"
39
+
40
+ #return 'Unknown'
41
+
42
+ # raise Exception to recognize unmapped values
43
+ raise Exception('Feature "%s" unmapped' % feature)
44
+
45
+ def get_local_text(node):
46
+ if "$" in node:
47
+ return node["$"]
48
+
49
+ def get_local_texts(nodes):
50
+ text = ""
51
+ start = True
52
+ for node in nodes:
53
+ if "$" in node:
54
+ if start:
55
+ start = False
56
+ else:
57
+ text += ", "
58
+ text += node["$"]
59
+ return text
60
+
61
+ """
62
+ def get_registration_nb(trademark, tmstatus):
63
+ if trademark.RegistrationNumber:
64
+ return trademark.RegistrationNumber
65
+
66
+ # default registration number to application number
67
+ # in case none is provided
68
+ if tmstatus in ['Registered', 'Expired']:
69
+ return trademark.ApplicationNumber.ApplicationNumberText
70
+ """
71
+
72
+ def get_full_address(postalStructuredAddress):
73
+ result = ""
74
+ if "addressLineText" in postalStructuredAddress:
75
+ for addressLineText in postalStructuredAddress["addressLineText"]:
76
+ """
77
+ if hasattr(addressLineText, '__value'):
78
+ if len(result) > 0:
79
+ result += ", "
80
+ result += addressLineText.__value
81
+ """
82
+ if "cityName" in postalStructuredAddress:
83
+ if len(result) > 0:
84
+ result += ", "
85
+ result += postalStructuredAddress["cityName"]
86
+ if "countryCode" in postalStructuredAddress:
87
+ result += ", " + postalStructuredAddress["countryCode"]
88
+ if "postalCode" in postalStructuredAddress:
89
+ result += " " + postalStructuredAddress["postalCode"]
90
+ if len(result) == 0:
91
+ return
92
+ else:
93
+ return result.strip()
94
+
95
+ """
96
+ def select_priority_date(priority):
97
+ if priority == None:
98
+ return None
99
+ if "PriorityApplicationFilingDate" in priority:
100
+ return priority["PriorityApplicationFilingDate"]
101
+ elif "PriorityRegistrationDate" in priority:
102
+ return priority["PriorityRegistrationDate"]
103
+ else:
104
+ return None
105
+
106
+ def clean_verbal_element(element_text):
107
+ if element_text == None:
108
+ return None
109
+ element_text = element_text.replace("((fig.))", "")
110
+ return element_text.strip()
111
+ """
112
+
113
+ def local_guess_language(content):
114
+ if content == None:
115
+ return None
116
+ from langdetect import detect
117
+ return detect(content)
@@ -0,0 +1,165 @@
1
+ {% from 'navigation.tmpl' import match %}
2
+ {% from 'navigation.tmpl' import enumerate %}
3
+
4
+ {% call(trademark) match('trademark', trademarkBag) %}
5
+
6
+ {% call(applicationNumber) match('applicationNumber', trademark.trademarkTypeChoice1) %}
7
+ st13: {{ applicationNumber.applicationNumberText | st13('NO', appdate=trademark.trademarkTypeChoice2.applicationDate) }}
8
+ applicationNumber: {{ applicationNumber.applicationNumberText }}
9
+ {% endcall %}
10
+ applicationDate: {{ trademark.trademarkTypeChoice2.applicationDate | convertdate('%Y-%m-%d') }}
11
+
12
+ registrationNumber: {{ trademark.trademarkTypeChoice1.registrationNumber }}
13
+ registrationDate: {{ trademark.registrationDate }}
14
+
15
+ expiryDate: {{ trademark.expiryDate }}
16
+ # rarely passed
17
+ terminationDate:
18
+
19
+ {% set status = trademark.markCurrentStatusCode | translate_status %}
20
+ gbdStatus: {{ status }}
21
+ officeStatus: {{ trademark.markCurrentStatusCode }}
22
+ statusDate: {{ trademark.markCurrentStatusDate }}
23
+
24
+ registrationOfficeCode: "NO"
25
+ designatedCountries:
26
+ - "NO"
27
+
28
+ type: TRADEMARK
29
+
30
+ kind:
31
+ - Individual
32
+
33
+ markFeature: {{ trademark.markFeatureDescription | translate_feature() }}
34
+ # (Word|Stylized characters|Figurative|Combined|Three dimensional|Colour|Sound|Hologram|Olfactory|Motion|Municipal|Chimney|Other|Undefined)
35
+
36
+ kind:
37
+ - Individual
38
+ # (Individual|Collective|Certificate|Defensive|Other|Membership)
39
+
40
+ publicationDate: #
41
+
42
+ applicationLanguageCode:
43
+ # rarely passed
44
+ secondLanguageCode:
45
+
46
+ markDisclaimerDetails:
47
+ {% call(markDisclaimerText) match('markDisclaimerText', trademark.markDisclaimerBag) %}
48
+ - languageCode:
49
+ text: {{ markDisclaimerText | get_local_text() }}
50
+ {% endcall %}
51
+
52
+ markDescriptionDetails:
53
+ - languageCode:
54
+ text:
55
+
56
+ wordMarkSpecification:
57
+ markVerbalElement:
58
+ - languageCode:
59
+ text: {{ trademark.markRepresentation.markReproduction.wordMarkSpecification.markVerbalElementText | get_local_text() }}
60
+ markSignificantVerbalElement:
61
+ - languageCode:
62
+ text: {{ trademark.markRepresentation.markReproduction.wordMarkSpecification.markSignificantVerbalElementText | get_local_text() }}
63
+ markTranslation:
64
+ - languageCode:
65
+ text:
66
+ markTransliteration:
67
+
68
+ markImageDetails:
69
+ {% call(markImage) match('markImage', trademark.markRepresentation.markReproduction.markImageBag) %}
70
+ - name: {{ markImage.fileName }}
71
+ colourIndicator: {{ markImage.colourModeCategory }}
72
+ colourClaimed:
73
+ - languageCode:
74
+ text:
75
+ description:
76
+ {% call(markDescriptionText) match('markDescriptionText', trademark.markRepresentation.markDescriptionBag.markDescriptionBagTypeChoiceSequence) %}
77
+ - languageCode:
78
+ text: {{ markDescriptionText | get_local_text() }}
79
+ {% endcall %}
80
+ classification:
81
+ kind:
82
+ version:
83
+ code:
84
+ -
85
+ {% endcall %}
86
+
87
+ markSoundDetails:
88
+ - filename:
89
+ fileformat:
90
+
91
+ markVideoDetails:
92
+ - filename:
93
+ fileformat:
94
+
95
+ goodsServicesClassification:
96
+ kind: Nice
97
+ version:
98
+ class:
99
+ {% call(goodsServices) match('goodsServices', trademark.goodsServicesBag) %}
100
+ {% call(classDescription) match('classDescription', goodsServices.classDescriptionBag) %}
101
+ - code: {{ classDescription.classNumber }}
102
+ terms:
103
+ {% call(goodsServicesDescriptionText) match('goodsServicesDescriptionText', classDescription) %}
104
+ {{ goodsServicesDescriptionText.localizedTextType | get_local_text | local_guess_language() }}:
105
+ - {{ goodsServicesDescriptionText.localizedTextType | get_local_text }}
106
+ {% endcall %}
107
+ {% endcall %}
108
+ {% endcall %}
109
+
110
+ priorities:
111
+ {% call(priority) match('priority', trademark.priorityBag) %}
112
+ - countryCode: {{ priority.priorityCountryCode }}
113
+ number: {{ priority.applicationNumber.applicationNumberText }}
114
+ date: {{ priority.priorityApplicationFilingDate }}
115
+ comment:
116
+ {% endcall %}
117
+
118
+ publications:
119
+ - identifier:
120
+ date:
121
+ section:
122
+
123
+ representatives:
124
+ {% call(representative) match('representative', trademark.representativeBag) %}
125
+ - identifier: {{ representative.partyIdentifier }}
126
+ kind:
127
+ fullName:
128
+ - languageCode:
129
+ text: {{ representative.contact.contactTypeChoiceSequence.name.entityName.transliterationName | get_local_texts() }}
130
+ fullAddress:
131
+ {% call(postalAddress) match('postalAddress', representative.contact.contactTypeChoiceSequence.postalAddressBag) %}
132
+ - languageCode:
133
+ text: {{ postalAddress.postalStructuredAddress | get_full_address() }}
134
+ {% endcall %}
135
+ countryCode:
136
+ {% endcall %}
137
+
138
+ correspondence:
139
+ fullName:
140
+ - languageCode:
141
+ text:
142
+ fullAddress:
143
+ - languageCode:
144
+ text:
145
+ countryCode:
146
+
147
+ applicants:
148
+ {% call(applicant) match('applicant', trademark.applicantBag) %}
149
+ - identifier: {{ applicant.partyIdentifier }}
150
+ kind:
151
+ fullName:
152
+ - languageCode:
153
+ text: {{ applicant.contact.contactTypeChoiceSequence.name.entityName.transliterationName | get_local_texts() }}
154
+ fullAddress:
155
+ {% call(postalAddress) match('postalAddress', applicant.contact.contactTypeChoiceSequence.postalAddressBag) %}
156
+ - languageCode:
157
+ text: {{ postalAddress.postalStructuredAddress | get_full_address() }}
158
+ {% endcall %}
159
+ countryCode:
160
+ {% endcall %}
161
+
162
+ {% endcall %}
163
+
164
+ # here goes extra information that is office specific and that is pertinent for us to retain.
165
+ extra: