wipo-gbd-transformation 1.1.54__py3-none-any.whl → 1.1.56__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 (24) hide show
  1. gbdtransformation/brands/chtm/filters.py +159 -181
  2. gbdtransformation/brands/chtm/schema +79 -91
  3. gbdtransformation/brands/chtm/template.yml +98 -107
  4. gbdtransformation/brands/natm/__init__.py +2 -3
  5. gbdtransformation/brands/natm/filters.py +8 -2
  6. gbdtransformation/brands/notm/__init__.py +5 -0
  7. gbdtransformation/brands/notm/filters.py +98 -0
  8. gbdtransformation/brands/notm/template.yml +165 -0
  9. gbdtransformation/brands/phtm/schema +79 -50
  10. gbdtransformation/brands/phtm/schema.classic +50 -0
  11. gbdtransformation/brands/phtm/template.classic.yml +102 -0
  12. gbdtransformation/brands/phtm/template.yml +1 -102
  13. gbdtransformation/brands/xxxx/template.yml +1 -1
  14. gbdtransformation/designs/woid/filters.py +11 -2
  15. gbdtransformation/execs-nico.py +709 -0
  16. gbdtransformation/execs.py +9 -4
  17. gbdtransformation/gbd-transform.exec.tgz +0 -0
  18. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/METADATA +3 -1
  19. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/RECORD +24 -17
  20. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/LICENSE.md +0 -0
  21. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/SOURCES_Stefans-Mac-Studio.local_Sep-18-063455-2024_Conflict.txt +0 -0
  22. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/WHEEL +0 -0
  23. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.dist-info}/entry_points.txt +0 -0
  24. {wipo_gbd_transformation-1.1.54.dist-info → wipo_gbd_transformation-1.1.56.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,98 @@
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
+ def get_full_address(postalStructuredAddress):
62
+ result = ""
63
+ if "addressLineText" in postalStructuredAddress:
64
+ for addressLineText in postalStructuredAddress["addressLineText"]:
65
+ # always empty, which is good
66
+ """
67
+ if hasattr(addressLineText, '__value'):
68
+ if len(result) > 0:
69
+ result += ", "
70
+ result += addressLineText.__value
71
+ """
72
+ if "cityName" in postalStructuredAddress:
73
+ if len(result) > 0:
74
+ result += ", "
75
+ result += postalStructuredAddress["cityName"]
76
+ if "countryCode" in postalStructuredAddress:
77
+ result += ", " + postalStructuredAddress["countryCode"]
78
+ if "postalCode" in postalStructuredAddress:
79
+ result += " " + postalStructuredAddress["postalCode"]
80
+ if len(result) == 0:
81
+ return
82
+ else:
83
+ return result.strip()
84
+
85
+ def local_guess_language(content):
86
+ if content == None:
87
+ return None
88
+ from lingua import Language, LanguageDetectorBuilder
89
+ detector = LanguageDetectorBuilder.from_all_spoken_languages().build()
90
+ language = detector.detect_language_of(content)
91
+ if language:
92
+ lang = language.iso_code_639_1.name.lower()
93
+ # we merge Norwegian flavors, Norwegian Bokmål and Norwegian Nynorsk
94
+ if lang == "nn" or lang =="nb":
95
+ lang = "no"
96
+ return lang
97
+ else:
98
+ return None
@@ -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:
@@ -1,50 +1,79 @@
1
- /RECORD
2
- __/AGENT
3
- ____/ADDR_STREET
4
- ____/AGENT_CODE
5
- ____/CITY_NAME
6
- ____/PERSON_NAME
7
- ____/PROVINCE_NAME
8
- __/APPL_SUBTYP
9
- __/APPL_TYP
10
- __/APPNO
11
- __/EXPIRATION_DATE
12
- __/FILE_NBR
13
- __/FILE_SEQ
14
- __/FILE_SER
15
- __/FILE_TYP
16
- __/FILING_DATE
17
- __/LAW_CODE
18
- __/LOGO
19
- ____/LOGO
20
- __/NICE_CLASS
21
- ____/NICE_CLASS_CODE
22
- ____/NICE_CLASS_DESCRIPTION
23
- __/OWNER
24
- ____/ADDR_STREET
25
- ____/CITY_NAME
26
- ____/NATIONALITY_COUNTRY_CODE
27
- ____/PERSON_NAME
28
- ____/PROVINCE_NAME
29
- ____/RESIDENCE_COUNTRY_CODE
30
- ____/STATE_CODE
31
- ____/STATE_NAME
32
- __/PRIORITIES
33
- ____/COUNTRY_CODE
34
- ____/PRIORITY_APPL_ID
35
- ____/PRIORITY_DATE
36
- __/PUBLICATION_DATE
37
- __/REGISTRATION_DATE
38
- __/REGISTRATION_NBR
39
- __/SIGN_TYPE
40
- __/STATUS_CATEGORY
41
- __/STATUS_DATE
42
- __/STATUS_NAME
43
- __/TITLE
44
- __/VIENNA
45
- ____/VIENNA_CLASS_CODE
46
- ____/VIENNA_ELEM_CODE
47
- ____/VIENNA_GROUP_CODE
48
- ____/VIENNA_NAME
49
- ____/VIENNA_TEXT
50
- __/sign_type
1
+ /Transaction
2
+ __/TradeMarkTransactionBody
3
+ ____/TransactionContentDetails
4
+ ______/TransactionCode
5
+ ______/TransactionData
6
+ ________/TradeMarkApplication
7
+ __________/TradeMarkDetails
8
+ ____________/TradeMark
9
+ ______________/ApplicantDetails
10
+ ________________/Applicant
11
+ __________________/ApplicantAddressBook
12
+ ____________________/FormattedNameAddress
13
+ ______________________/Address
14
+ ________________________/AddressCountryCode
15
+ ______________________/Name
16
+ ________________________/FreeFormatName
17
+ __________________________/FreeFormatNameDetails
18
+ ____________________________/FreeFormatNameLine
19
+ ____________________________/FreeFormatNameLine[@languageCode=en]
20
+ ______________/ApplicationDate
21
+ ______________/ApplicationLanguageCode
22
+ ______________/ApplicationNumber
23
+ ______________/ExpiryDate
24
+ ______________/GoodsServicesDetails
25
+ ________________/GoodsServices
26
+ __________________/ClassDescriptionDetails
27
+ ____________________/ClassDescription
28
+ ______________________/ClassNumber
29
+ ______________________/GoodsServicesDescription
30
+ ______________________/GoodsServicesDescription[@languageCode=en]
31
+ ______________/MarkCurrentStatusCode
32
+ ______________/MarkCurrentStatusDate
33
+ ______________/MarkDisclaimerDetails
34
+ ________________/MarkDisclaimer
35
+ ________________/MarkDisclaimer[@languageCode=en]
36
+ ______________/MarkEventDetails
37
+ ________________/MarkEvent
38
+ __________________/MarkEventCode
39
+ __________________/MarkEventDate
40
+ __________________/OfficeSpecificMarkEventName
41
+ ______________/MarkFeature
42
+ ______________/MarkImageDetails
43
+ ________________/MarkImage
44
+ __________________/MarkImageCategory
45
+ ____________________/CategoryCodeDetails
46
+ ______________________/CategoryCode
47
+ ____________________/CategoryKind
48
+ ____________________/CategoryVersion
49
+ __________________/MarkImageFileFormat
50
+ __________________/MarkImageFilename
51
+ ______________/PriorityDetails
52
+ ________________/Priority
53
+ __________________/PriorityCountryCode
54
+ __________________/PriorityDate
55
+ __________________/PriorityNumber
56
+ ______________/PublicationDetails
57
+ ________________/Publication
58
+ __________________/PublicationDate
59
+ __________________/PublicationIdentifier
60
+ __________________/PublicationSection
61
+ ______________/RegistrationDate
62
+ ______________/RegistrationNumber
63
+ ______________/RegistrationOfficeCode
64
+ ______________/RepresentativeDetails
65
+ ________________/Representative
66
+ __________________/RepresentativeAddressBook
67
+ ____________________/FormattedNameAddress
68
+ ______________________/Address
69
+ ________________________/AddressCountryCode
70
+ ______________________/Name
71
+ ________________________/FreeFormatName
72
+ __________________________/FreeFormatNameDetails
73
+ ____________________________/FreeFormatNameLine
74
+ ____________________________/FreeFormatNameLine[@languageCode=en]
75
+ ______________/WordMarkSpecification
76
+ ________________/MarkVerbalElementText
77
+ ________________/MarkVerbalElementText[@languageCode=en]
78
+ ______/TransactionIdentifier
79
+ ______/TransactionSubCode