XML 31 R10.htm IDEA: XBRL DOCUMENT
v3.24.0.1

Revenue | 12 Months Ended
--- | ---
Dec. 31, 2023
Revenue from Contract with Customer [Abstract] |
Revenue | Revenue The Company derives the majority of its revenue by providing services on a time and material basis that are short-term in nature. The Company accounts for revenue in accordance with ASC Topic 606, Revenue from Contracts with Customers. Performance Obligations The Company provides highly integrated and bundled inspection services to its customers. The majority of the Company's contracts have a single performance obligation as the promise to transfer the individual goods or services is not separately identifiable from other promises in the contracts and is, therefore, not distinct. For contracts with multiple performance obligations, the Company allocates the contract’s transaction price to each performance obligation using the Company's best estimate of the standalone selling price of each distinct good or service in the contract. The primary method used to estimate standalone selling price is a relative selling price based on price lists. Contract modifications are not routine in the performance of the Company's contracts. Generally, when contracts are modified, the modification is to account for changes in scope to the goods and services that are provided. In most instances, contract modifications are for goods or services that are distinct, and, therefore, are accounted for as a separate contract. The Company's performance obligations are satisfied over time as work progresses or at a point in time. The majority of the Company's revenue is recognized over time as work progresses for the Company's service deliverables, which includes providing testing, inspection and mechanical services to our customers. Revenue is recognized over time, based on time and material incurred to date which best portrays the transfer of control to the customer. The Company also utilizes an available practical expedient that provides for revenue to be recognized in an amount that corresponds directly with the value to the customer of the entity’s performance completed to date. Fixed fee arrangements are determined based on expected labor, material, and overhead to be consumed on fulfillment of such services. For these arrangements, revenue is recognized on a cost-to-cost method tracked on an input basis. The majority of our revenue recognized at a point in time is related to product sales when the customer obtains control of the asset, which is generally upon shipment to the customer. Contract costs include labor, material and overhead. The Company expects any significant remaining performance obligations to be satisfied within one year. Contract Estimates The majority of the Company's revenues are short-term in nature. The Company enters into master service agreements ("MSAs") with customers that specify an overall framework and contract terms. The actual contracting to provide services or furnish products are triggered by a work order, purchase order, or some similar document issued pursuant to an MSA which sets forth the scope of services and/or identifies the products to be provided. From time-to-time, the Company may enter into longer-term contracts, which can range from several months to several years. Revenue on certain contracts is recognized as work is performed based on total costs incurred to date in relation to the total estimated costs for the performance of the contract at completion. This includes contract estimates of costs to be incurred for the performance of the contract. Cost estimation is based upon the professional knowledge and experience of the Company's project managers, engineers and financial professionals. Factors that are considered in estimating the work to be completed include the availability of materials, the effect of any delays in the Company's project performance and the recoverability of any claims. Whenever revisions of estimates, contract costs and/or contract values indicate that the contract costs will exceed estimated revenues, thus creating a loss, a provision for the total estimated loss is recorded in that period. Revenue by Category The following series of tables present the Company's disaggregated revenue: Revenue by industry was as follows (in thousands):
Year ended December 31, 2023 | North America |  | International |  | Products |  | Corp/Elim |  | Total
Oil & Gas | $ | 379,221 |  |  | $ | 36,615 |  |  | $ | 159 |  |  | $ | — |  |  | $ | 415,995 |
Aerospace & Defense | 56,000 |  |  | 20,711 |  |  | 286 |  |  | — |  |  | 76,997 |
Industrials | 42,518 |  |  | 26,292 |  |  | 1,773 |  |  | — |  |  | 70,583 |
Power Generation and Transmission | 23,598 |  |  | 6,609 |  |  | 3,767 |  |  | — |  |  | 33,974 |
Other Process Industries | 33,035 |  |  | 14,456 |  |  | 112 |  |  | — |  |  | 47,603 |
Infrastructure, Research & Engineering | 16,620 |  |  | 9,320 |  |  | 3,168 |  |  | — |  |  | 29,108 |
Petrochemical | 13,216 |  |  | 1,216 |  |  | — |  |  | — |  |  | 14,432 |
Other | 15,122 |  |  | 9,195 |  |  | 3,721 |  |  | (11,257) |  |  | 16,781 |
Total | $ | 579,330 |  |  | $ | 124,414 |  |  | $ | 12,986 |  |  | $ | (11,257) |  |  | $ | 705,473 |
Year ended December 31, 2022 | North America |  | International |  | Products |  | Corp/Elim |  | Total
Oil & Gas | $ | 356,763 |  |  | $ | 30,654 |  |  | $ | 335 |  |  | $ | — |  |  | $ | 387,752 |
Aerospace & Defense | 61,475 |  |  | 18,763 |  |  | 314 |  |  | — |  |  | 80,552 |
Industrials | 38,197 |  |  | 23,703 |  |  | 2,083 |  |  | — |  |  | 63,983 |
Power Generation and Transmission | 31,197 |  |  | 8,304 |  |  | 2,603 |  |  | — |  |  | 42,104 |
Other Process Industries | 40,778 |  |  | 14,021 |  |  | 28 |  |  | — |  |  | 54,827 |
Infrastructure, Research & Engineering | 15,283 |  |  | 7,946 |  |  | 3,994 |  |  | — |  |  | 27,223 |
Petrochemical | 15,360 |  |  | 536 |  |  | — |  |  | — |  |  | 15,896 |
Other | 14,283 |  |  | 8,498 |  |  | 3,370 |  |  | (11,115) |  |  | 15,036 |
Total | $ | 573,336 |  |  | $ | 112,425 |  |  | $ | 12,727 |  |  | $ | (11,115) |  |  | $ | 687,373 |
Year ended December 31, 2021 | North America |  | International |  | Products |  | Corp/Elim |  | Total |  |  |  |  |  |
Oil & Gas | $ | 330,880 |  |  | $ | 35,232 |  |  | $ | 808 |  |  | $ | — |  |  | $ | 366,920 |  |  |  |  |  |  |
Aerospace & Defense | 51,593 |  |  | 16,513 |  |  | 286 |  |  | — |  |  | 68,392 |  |  |  |  |  |  |
Industrials | 41,873 |  |  | 24,000 |  |  | 1,842 |  |  | — |  |  | 67,715 |  |  |  |  |  |  |
Power Generation and Transmission | 39,966 |  |  | 9,927 |  |  | 2,853 |  |  | — |  |  | 52,746 |  |  |  |  |  |  |
Other Process Industries | 38,742 |  |  | 12,593 |  |  | 64 |  |  | — |  |  | 51,399 |  |  |  |  |  |  |
Infrastructure, Research & Engineering | 16,809 |  |  | 11,496 |  |  | 3,985 |  |  | — |  |  | 32,290 |  |  |  |  |  |  |
Petrochemical | 19,378 |  |  | 227 |  |  | — |  |  | — |  |  | 19,605 |  |  |  |  |  |  |
Other | 16,146 |  |  | 7,257 |  |  | 3,993 |  |  | (9,332) |  |  | 18,064 |  |  |  |  |  |  |
Total | $ | 555,387 |  |  | $ | 117,245 |  |  | $ | 13,831 |  |  | $ | (9,332) |  |  | $ | 677,131 |  |  |  |  |  |  |
Revenue per key geographic location was as follows (in thousands):
Year ended December 31, 2023 | North America |  | International |  | Products |  | Corp/Elim |  | Total
United States | $ | 495,764 |  |  | $ | 934 |  |  | $ | 5,956 |  |  | $ | (2,372) |  |  | $ | 500,282 |
Other Americas | 77,880 |  |  | 12,906 |  |  | 850 |  |  | (4,697) |  |  | 86,939 |
Europe | 3,655 |  |  | 105,934 |  |  | 1,927 |  |  | (3,381) |  |  | 108,135 |
Asia-Pacific | 2,031 |  |  | 4,640 |  |  | 4,253 |  |  | (807) |  |  | 10,117 |
Total | $ | 579,330 |  |  | $ | 124,414 |  |  | $ | 12,986 |  |  | $ | (11,257) |  |  | $ | 705,473 |
Year ended December 31, 2022 | North America |  | International |  | Products |  | Corp/Elim |  | Total
United States | $ | 485,551 |  |  | $ | 910 |  |  | $ | 6,495 |  |  | $ | (3,083) |  |  | $ | 489,873 |
Other Americas | 83,877 |  |  | 9,076 |  |  | 406 |  |  | (4,105) |  |  | 89,254 |
Europe | 2,811 |  |  | 99,714 |  |  | 1,896 |  |  | (3,502) |  |  | 100,919 |
Asia-Pacific | 1,097 |  |  | 2,725 |  |  | 3,930 |  |  | (425) |  |  | 7,327 |
Total | $ | 573,336 |  |  | $ | 112,425 |  |  | $ | 12,727 |  |  | $ | (11,115) |  |  | $ | 687,373 |
Year ended December 31, 2021 | North America |  | International |  | Products |  | Corp/Elim |  | Total
United States | $ | 472,125 |  |  | $ | 912 |  |  | $ | 6,469 |  |  | $ | (4,284) |  |  | $ | 475,222 |
Other Americas | 80,013 |  |  | 5,003 |  |  | 395 |  |  | (1,768) |  |  | 83,643 |
Europe | 1,841 |  |  | 108,411 |  |  | 2,174 |  |  | (2,812) |  |  | 109,614 |
Asia-Pacific | 1,408 |  |  | 2,919 |  |  | 4,793 |  |  | (468) |  |  | 8,652 |
Total | $ | 555,387 |  |  | $ | 117,245 |  |  | $ | 13,831 |  |  | $ | (9,332) |  |  | $ | 677,131 |
Contract Balances The timing of revenue recognition, billings and cash collections results in billed accounts receivable, unbilled receivables (contract assets), and customer advances and deposits (contract liabilities) on the Consolidated Balance Sheets. Amounts are generally billed as work progresses in accordance with agreed-upon contractual terms, generally at periodic intervals (e.g., weekly, bi-weekly or monthly). Generally, billing occurs subsequent to revenue recognition, resulting in contract assets. However, the Company sometimes receives advances or deposits from its customers before revenue is recognized, resulting in contract liabilities. These assets and liabilities are aggregated on an individual contract basis and reported on the Consolidated Balance Sheets at the end of each reporting period within accounts receivable, net or accrued expenses and other current liabilities. Revenue recognized for 2023 and 2022, that was included in the contract liability balance at the beginning of the year was $6.3 million and $4.7 million, respectively. Changes in the contract asset and liability balances during the years ended December 31, 2023 and 2022, were not impacted by any other factors. The Company applies the practical expedient to expense incremental costs incurred related to obtaining a contract when the amortization period of the asset that the Company otherwise would have recognized is one year or less.

X
- References No definition available. + Details
Name: | us-gaap_RevenueFromContractWithCustomerAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition The entire disclosure of revenue from contract with customer to transfer good or service and to transfer nonfinancial asset. Includes, but is not limited to, disaggregation of revenue, credit loss recognized from contract with customer, judgment and change in judgment related to contract with customer, and asset recognized from cost incurred to obtain or fulfill contract with customer. Excludes insurance and lease contracts. + References Reference 1: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 9 -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-9 Reference 2: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 10 -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-10 Reference 3: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 15 -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-15 Reference 4: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 12 -Subparagraph (a) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-12 Reference 5: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 12 -Subparagraph (b) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-12 Reference 6: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 12 -Subparagraph (c) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-12 Reference 7: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 12 -Subparagraph (d) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-12 Reference 8: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 12 -Subparagraph (e) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-12 Reference 9: http://www.xbrl.org/2003/role/disclosureRef -Topic 606 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 13 -Subparagraph (b)(2) -Publisher FASB -URI https://asc.fasb.org//1943274/2147479806/606-10-50-13 Reference 10: http://www.xbrl.org/2003/role/disclosureRef -Name Accounting Standards Codification -Topic 606 -Publisher FASB -URI https://asc.fasb.org//606/tableOfContent + Details
Name: | us-gaap_RevenueFromContractWithCustomerTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration