File Coverage

blib/lib/SBOM/CycloneDX/Patent.pm
Criterion Covered Total %
statement 35 54 64.8
branch 0 28 0.0
condition n/a
subroutine 12 13 92.3
pod 1 1 100.0
total 48 96 50.0


line stmt bran cond sub pod time code
1             package SBOM::CycloneDX::Patent;
2              
3 1     1   2280 use 5.010001;
  1         4  
4 1     1   6 use strict;
  1         3  
  1         31  
5 1     1   4 use warnings;
  1         1  
  1         49  
6 1     1   4 use utf8;
  1         2  
  1         8  
7              
8 1     1   28 use SBOM::CycloneDX::BomRef;
  1         2  
  1         19  
9 1     1   4 use SBOM::CycloneDX::Enum;
  1         2  
  1         54  
10 1     1   5 use SBOM::CycloneDX::List;
  1         1  
  1         16  
11 1     1   9 use SBOM::CycloneDX::Timestamp;
  1         1  
  1         25  
12              
13 1     1   3 use Types::Standard qw(Str InstanceOf Enum);
  1         2  
  1         10  
14 1     1   1527 use Types::TypeTiny qw(ArrayLike);
  1         2  
  1         7  
15              
16 1     1   433 use Moo;
  1         3  
  1         13  
17 1     1   398 use namespace::autoclean;
  1         2  
  1         14  
18              
19             extends 'SBOM::CycloneDX::Base';
20              
21             has bom_ref => (
22             is => 'rw',
23             isa => InstanceOf ['SBOM::CycloneDX::BomRef'],
24             coerce => sub { ref($_[0]) ? $_[0] : SBOM::CycloneDX::BomRef->new($_[0]) }
25             );
26              
27             has patent_number => (is => 'rw', isa => Str, required => 1);
28              
29             has application_number => (is => 'rw', isa => Str);
30              
31             has jurisdiction => (is => 'rw', required => 1);
32              
33             has priority_application => (is => 'rw', isa => InstanceOf ['SBOM::CycloneDX::Patent::PriorityApplication']);
34              
35             has publication_number => (is => 'rw', isa => Str);
36              
37             has title => (is => 'rw', isa => Str);
38              
39             has abstract => (is => 'rw', isa => Str);
40              
41             has filing_date => (
42             is => 'rw',
43             isa => InstanceOf ['SBOM::CycloneDX::Timestamp'],
44             coerce => sub { ref($_[0]) ? $_[0] : SBOM::CycloneDX::Timestamp->new($_[0]) }
45             );
46              
47             has grant_date => (
48             is => 'rw',
49             isa => InstanceOf ['SBOM::CycloneDX::Timestamp'],
50             coerce => sub { ref($_[0]) ? $_[0] : SBOM::CycloneDX::Timestamp->new($_[0]) }
51             );
52              
53             has patent_expiration_date => (
54             is => 'rw',
55             isa => InstanceOf ['SBOM::CycloneDX::Timestamp'],
56             coerce => sub { ref($_[0]) ? $_[0] : SBOM::CycloneDX::Timestamp->new($_[0]) }
57             );
58              
59             has patent_legal_status =>
60             (is => 'rw', isa => Enum [SBOM::CycloneDX::Enum->values('PATENT_LEGAL_STATUS')], required => 1);
61              
62             has patent_assignee => (
63             is => 'rw',
64             isa => ArrayLike [
65             InstanceOf ['SBOM::CycloneDX::OrganizationalContact'] | InstanceOf ['SBOM::CycloneDX::OrganizationalEntity']
66             ],
67             default => sub { SBOM::CycloneDX::List->new }
68             );
69              
70             has external_references => (
71             is => 'rw',
72             isa => ArrayLike [InstanceOf ['SBOM::CycloneDX::ExternalReference']],
73             default => sub { SBOM::CycloneDX::List->new }
74             );
75              
76              
77             sub TO_JSON {
78              
79 0     0 1   my $self = shift;
80              
81 0           my $json = {};
82              
83 0 0         $json->{'bom-ref'} = $self->bom_ref if ($self->bom_ref);
84 0 0         $json->{patentNumber} = $self->patent_number if ($self->patent_number);
85 0 0         $json->{applicationNumber} = $self->application_number if ($self->application_number);
86 0 0         $json->{jurisdiction} = $self->jurisdiction if ($self->jurisdiction);
87 0 0         $json->{priorityApplication} = $self->priority_application if ($self->priority_application);
88 0 0         $json->{publicationNumber} = $self->publication_number if ($self->publication_number);
89 0 0         $json->{title} = $self->title if ($self->title);
90 0 0         $json->{abstract} = $self->abstract if ($self->abstract);
91 0 0         $json->{filingDate} = $self->filing_date if ($self->filing_date);
92 0 0         $json->{grantDate} = $self->grant_date if ($self->grant_date);
93 0 0         $json->{patentExpirationDate} = $self->patent_expiration_date if ($self->patent_expiration_date);
94 0 0         $json->{patentLegalStatus} = $self->patent_legal_status if ($self->patent_legal_status);
95 0 0         $json->{patentAssignee} = $self->patent_assignee if (@{$self->patent_assignee});
  0            
96 0 0         $json->{externalReferences} = $self->external_references if (@{$self->external_references});
  0            
97              
98 0           return $json;
99              
100             }
101              
102             1;
103              
104             =encoding utf-8
105              
106             =head1 NAME
107              
108             SBOM::CycloneDX::Patent - Patent
109              
110             =head1 SYNOPSIS
111              
112             SBOM::CycloneDX::Patent->new();
113              
114              
115             =head1 DESCRIPTION
116              
117             L A patent is a legal instrument, granted by an
118             authority, that confers certain rights over an invention for a specified
119             period, contingent on public disclosure and adherence to relevant legal
120             requirements. The summary information in this object is aligned with
121             L principles where
122             applicable.
123              
124             =head2 METHODS
125              
126             L inherits all methods from L
127             and implements the following new ones.
128              
129             =over
130              
131             =item SBOM::CycloneDX::Patent->new( %PARAMS )
132              
133             Properties:
134              
135             =over
136              
137             =item * C, A brief summary of the invention described in the
138             patent. Aligned with C and C

in WIPO ST.96. Refer to

139             L.
140              
141             =item * C, The unique number assigned to a patent application
142             when it is filed with a patent office. It is used to identify the specific
143             application and track its progress through the examination process. Aligned
144             with C in ST.96. Refer to L.
145              
146             =item * C, An identifier which can be used to reference the object
147             elsewhere in the BOM. Every C must be unique within the BOM.
148              
149             =item * C, External references provide a way to document
150             systems, sites, and information that may be relevant but are not included
151             with the BOM. They may also establish specific relationships within or
152             external to the BOM.
153              
154             =item * C, The date the patent application was filed with the
155             jurisdiction. Aligned with C in WIPO ST.96. Refer to
156             L.
157              
158             =item * C, The date the patent was granted by the jurisdiction.
159             Aligned with C in WIPO ST.96. Refer to
160             L.
161              
162             =item * C, The jurisdiction or patent office where the priority
163             application was filed, specified using WIPO ST.3 codes. Aligned with
164             C in ST.96. Refer to L.
165              
166             =item * C, A collection of organisations or individuals to
167             whom the patent rights are assigned. This supports joint ownership and
168             allows for flexible representation of both corporate entities and
169             individual inventors.
170              
171             See L and L.
172              
173             =item * C, The date the patent expires. Derived from
174             grant or filing date according to jurisdiction-specific rules.
175              
176             =item * C, Indicates the current legal status of the
177             patent or patent application, based on the WIPO ST.27 standard. This status
178             reflects administrative, procedural, or legal events. Values include both
179             active and inactive states and are useful for determining enforceability,
180             procedural history, and maintenance status.
181              
182             =item * C, The unique number assigned to the granted patent by
183             the issuing authority. Aligned with C in WIPO ST.96. Refer to
184             L.
185              
186             =item * C, The "priority_application" contains the
187             essential data necessary to identify and reference an earlier patent filing for
188             priority rights. In line with WIPO ST.96 guidelines, it includes the
189             jurisdiction (office code), application number, and filing date-the three key
190             elements that uniquely specify the priority application in a global patent
191             context.
192              
193             See L.
194              
195             =item * C, This is the number assigned to a patent
196             application once it is published. Patent applications are generally
197             published 18 months after filing (unless an applicant requests
198             non-publication). This number is distinct from the application number.
199              
200             Purpose: Identifies the publicly available version of the application.
201              
202             Format: Varies by jurisdiction, often similar to application numbers but
203             includes an additional suffix indicating publication.
204              
205             Example:
206              
207             - US: US20240000123A1 (indicates the first publication of application
208             US20240000123)
209              
210             - Europe: EP23123456A1 (first publication of European application
211             EP23123456).
212              
213             WIPO ST.96 v8.0:
214             - Publication Number field: L
215              
216             =item * C, The title of the patent, summarising the invention it </td> </tr> <tr> <td class="h" > <a name="217">217</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> protects. Aligned with C<InventionTitle> in WIPO ST.96. Refer to </td> </tr> <tr> <td class="h" > <a name="218">218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<InventionTitle in ST.96|https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/InventionTitle.xsd>. </td> </tr> <tr> <td class="h" > <a name="219">219</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="220">220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="221">221</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="222">222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->abstract </td> </tr> <tr> <td class="h" > <a name="223">223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="224">224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->application_number </td> </tr> <tr> <td class="h" > <a name="225">225</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="226">226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->bom_ref </td> </tr> <tr> <td class="h" > <a name="227">227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="228">228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->external_references </td> </tr> <tr> <td class="h" > <a name="229">229</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="230">230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->filing_date </td> </tr> <tr> <td class="h" > <a name="231">231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="232">232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->grant_date </td> </tr> <tr> <td class="h" > <a name="233">233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="234">234</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->jurisdiction </td> </tr> <tr> <td class="h" > <a name="235">235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="236">236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->patent_assignee </td> </tr> <tr> <td class="h" > <a name="237">237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="238">238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->patent_expiration_date </td> </tr> <tr> <td class="h" > <a name="239">239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="240">240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->patent_legal_status </td> </tr> <tr> <td class="h" > <a name="241">241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="242">242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->patent_number </td> </tr> <tr> <td class="h" > <a name="243">243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="244">244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->priority_application </td> </tr> <tr> <td class="h" > <a name="245">245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="246">246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->publication_number </td> </tr> <tr> <td class="h" > <a name="247">247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="248">248</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item $patent->title </td> </tr> <tr> <td class="h" > <a name="249">249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="250">250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="251">251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="252">252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="253">253</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 SUPPORT </td> </tr> <tr> <td class="h" > <a name="254">254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="255">255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Bugs / Feature Requests </td> </tr> <tr> <td class="h" > <a name="256">256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="257">257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Please report any bugs or feature requests through the issue tracker </td> </tr> <tr> <td class="h" > <a name="258">258</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> at L<https://github.com/giterlizzi/perl-SBOM-CycloneDX/issues>. </td> </tr> <tr> <td class="h" > <a name="259">259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You will be notified automatically of any progress on your issue. </td> </tr> <tr> <td class="h" > <a name="260">260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="261">261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Source Code </td> </tr> <tr> <td class="h" > <a name="262">262</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="263">263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is open source software. The code repository is available for </td> </tr> <tr> <td class="h" > <a name="264">264</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> public review and contribution under the terms of the license. </td> </tr> <tr> <td class="h" > <a name="265">265</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="266">266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<https://github.com/giterlizzi/perl-SBOM-CycloneDX> </td> </tr> <tr> <td class="h" > <a name="267">267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="268">268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> git clone https://github.com/giterlizzi/perl-SBOM-CycloneDX.git </td> </tr> <tr> <td class="h" > <a name="269">269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="270">270</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="271">271</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 AUTHOR </td> </tr> <tr> <td class="h" > <a name="272">272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="273">273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="274">274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="275">275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item * Giuseppe Di Terlizzi <gdt@cpan.org> </td> </tr> <tr> <td class="h" > <a name="276">276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="277">277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="278">278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="279">279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="280">280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 LICENSE AND COPYRIGHT </td> </tr> <tr> <td class="h" > <a name="281">281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="282">282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This software is copyright (c) 2025-2026 by Giuseppe Di Terlizzi. </td> </tr> <tr> <td class="h" > <a name="283">283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="284">284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is free software; you can redistribute it and/or modify it under </td> </tr> <tr> <td class="h" > <a name="285">285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the same terms as the Perl 5 programming language system itself. </td> </tr> <tr> <td class="h" > <a name="286">286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="287">287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> </table> </body> </html>