XML 24 R10.htm IDEA: XBRL DOCUMENT
v3.22.4

Revenue from Contracts with Customers | 12 Months Ended
--- | ---
Dec. 31, 2022
Revenue from Contracts with Customers |
Revenue from Contracts with Customers | 3. Revenue from Contracts with Customers Revenue is recognized when control of the promised goods or services is transferred to our customers, in an amount that reflects the consideration to which we expect to be entitled in exchange for those goods or services. Sales-based taxes are excluded from revenue. We provide mechanical and electrical contracting services. Our mechanical segment principally includes HVAC, plumbing, piping and controls, as well as off‑site construction, monitoring and fire protection. Our electrical segment includes installation and servicing of electrical systems. We build, install, maintain, repair and replace products and systems throughout the United States. All of our revenue is recognized over time as we deliver goods and services to our customers. Revenue can be earned based on an agreed-upon fixed price or based on actual costs incurred, marked up at an agreed-upon percentage. For fixed price agreements, we use the cost-to-cost input method of accounting under which contract revenue recognizable at any time during the life of a contract is determined by multiplying expected total contract revenue by the percentage of contract costs incurred at any time to total estimated contract costs. More specifically, as part of the negotiation and bidding process to obtain installation contracts, we estimate our contract costs, which include all direct materials, labor and subcontract costs and indirect costs related to contract performance, such as indirect labor, supplies, tools, repairs and depreciation costs. These contract costs are included in our results of operations under the caption “Cost of Services.” Then, as we perform under those contracts, we measure costs incurred, compare them to total estimated costs to complete the contract and recognize a corresponding proportion of contract revenue. Labor costs are considered to be incurred as the work is performed. Subcontractor labor is recognized as the work is performed. Non‑labor project costs consist of purchased equipment, prefabricated materials and other materials. Purchased equipment on our projects is substantially produced to job specifications, normally installed shortly after receipt and is a value-added element to our work. Prefabricated materials, such as ductwork and piping, are generally performed at our shops and recognized as contract costs when fabricated for the unique specifications of the job. Other materials costs are generally recorded when delivered to the work site. This measurement and comparison process requires updates to the estimate of total costs to complete the contract, and these updates may include subjective assessments and judgments. ​ We account for a contract when: (i) it has approval and commitment from both parties, (ii) the rights of the parties are identified, (iii) payment terms are identified, (iv) the contract has commercial substance, and (v) collectability of consideration is probable. We consider the start of a project to be when the above criteria have been met and we either have written authorization from the customer to proceed or an executed contract. Selling, marketing and estimation costs incurred in relation to selling contracts are expensed as incurred. On rare occasions, we may incur significant expenses related to selling a contract that we only incurred because we sold that contract. If this occurs, we capitalize that cost and amortize it on a completion percentage basis over the life of the contract. We do not currently have any capitalized selling, marketing, or estimation costs in our Consolidated Balance Sheet and did not incur any impairment loss in the current year. We generally do not incur significant incremental costs related to obtaining or fulfilling a contract prior to the start of a project. On rare occasions, when significant pre contract costs are incurred, they are capitalized and amortized over the life of the contract using a cost-to-cost input method to measure progress towards contract completion. We do not currently have any capitalized obtainment or fulfillment costs in our Consolidated Balance Sheet and have not incurred any impairment loss on such costs in the current year. ​ Project contracts typically provide for a schedule of billings or invoices to the customer based on our job-to-date completion percentage of specific tasks inherent in the fulfillment of our performance obligation(s). The schedules for such billings usually do not precisely match the schedule on which costs are incurred. As a result, contract revenue recognized in our Consolidated Statement of Operations can and usually does differ from amounts that can be billed or invoiced to the customer at any point during the contract. Amounts by which cumulative contract revenue recognized on a contract as of a given date exceed cumulative billings and unbilled receivables to the customer under the contract are reflected as a current asset in our Consolidated Balance Sheet under the caption “Costs and Estimated Earnings in Excess of Billings.” Amounts by which cumulative billings to the customer under a contract as of a given date exceed cumulative contract revenue recognized on the contract are reflected as a current liability in our Consolidated Balance Sheet under the caption “Billings in Excess of Costs and Estimated Earnings.” Contracts in progress are as follows (in thousands):
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
​ | ​ | December 31, |
​ |  | 2022 |  | 2021 |
Costs incurred on contracts in progress | ​ | $ | 4,801,264 | ​ | $ | 3,723,715 | ​
Estimated earnings, net of losses | ​ |  | 796,260 | ​ |  | 589,286 | ​
Less—Billings to date | ​ |  | (5,953,973) | ​ |  | (4,527,801) | ​
Less—Unbilled accounts receivable | ​ | ​ | (77,030) | ​ | ​ | (61,881) | ​
Less—Unbilled accounts receivable credit allowance | ​ | ​ | (1,011) | ​ | ​ | (715) | ​
​ | ​ | $ | (434,490) | ​ | $ | (277,396) | ​
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
Costs and estimated earnings in excess of billings | ​ | $ | 27,211 | ​ | $ | 29,900 | ​
Plus—Costs and estimated earnings in excess of billings credit allowance | ​ | ​ | 80 | ​ | ​ | 84 | ​
Billings in excess of costs and estimated earnings | ​ |  | (461,781) | ​ |  | (307,380) | ​
​ | ​ | $ | (434,490) | ​ | $ | (277,396) | ​
​ Accounts receivable include amounts billed to customers under retention or retainage provisions in construction contracts. Such provisions are standard in our industry and usually allow for a small portion of progress billings or the contract price to be withheld by the customer until after we have completed work on the project, typically for a period of six months. Based on our experience with similar contracts in recent years, the majority of our billings for such retention balances at each Balance Sheet date are finalized and collected within the subsequent year. Retention balances at December 31, 2022 and 2021 were $193.6 million and $139.5 million, respectively, and are included in accounts receivable. Accounts payable at December 31, 2022 and 2021 included $29.8 million and $24.0 million of retainage under terms of contracts with subcontractors, respectively. The majority of the retention balances at each Balance Sheet date are finalized and paid within the subsequent year. The cost-to-cost input method of accounting is also affected by changes in job performance, job conditions, and final contract settlements. These factors may result in revisions to estimated costs and, therefore, revenue. Such revisions are frequently based on further estimates and subjective assessments. The effects of these revisions are recognized in the period in which revisions are determined. When such revisions lead to a conclusion that a loss will be recognized on a contract, the full amount of the estimated ultimate loss is recognized in the period such conclusion is reached, regardless of the completion percentage of the contract. Revisions to project costs and conditions can give rise to change orders under which there is an agreement between the customer and us that the customer pays an additional or reduced contract price. Revisions can also result in claims we might make against the customer to recover project variances that have not been satisfactorily addressed through change orders with the customer. The amount of revenue associated with unapproved change orders and claims was immaterial for the year ended December 31, 2022. Variations from estimated project costs could have a significant impact on our operating results, depending on project size, and the recoverability of the variation from change orders collected from customers. We typically invoice our customers with payment terms of net due in 30 days. It is common in the construction industry for a contract to specify more lenient payment terms allowing the customer 45 to 60 days to make their payment. It is also common for the contract in the construction industry to specify that a general contractor is not required to submit payments to a subcontractor until it has received those funds from the owner or funding source. In most instances, we receive payment of our invoices between 30 to 90 days of the date of the invoice. A performance obligation is a promise in a contract to transfer a distinct good or service to the customer. A contract’s transaction price is allocated to each distinct performance obligation and recognized as revenue when, or as, the performance obligation is satisfied. To determine the proper revenue recognition method for contracts, we evaluate whether two or more contracts should be combined and accounted for as one performance obligation and whether the combined or single contract should be accounted for as more than one performance obligation. This evaluation requires significant judgment and the decision to combine a group of contracts or separate the combined or single contract into multiple performance obligations could change the amount of revenue and profit recorded in a given period. For most of our contracts, the customer contracts with us to provide a significant service of integrating a complex set of tasks and components into a single project or capability (even if that single project results in the delivery of multiple units). Hence, the entire contract is accounted for as one performance obligation. Less commonly, however, we may promise to provide distinct goods or services within a contract, in which case we separate the contract into more than one performance obligation. If a contract is separated into more than one performance obligation, we allocate the total transaction price to each performance obligation in an amount based on the estimated relative standalone selling prices of the promised goods or services underlying each performance obligation. We infrequently sell standard products with observable standalone sales. In such cases, the observable standalone sales are used to determine the standalone selling price. More frequently, we sell a customized, customer-specific solution, and, in these cases, we typically use the expected cost plus a margin approach to estimate the standalone selling price of each performance obligation. ​ We recognize revenue over time for all of our services as we perform them because (i) control continuously transfers to that customer as work progresses, and (ii) we have the right to bill the customer as costs are incurred. The customer typically controls the work in process, as evidenced either by contractual termination clauses or by our rights to payment for work performed to date plus a reasonable profit to deliver products or services that do not have an alternative use to the Company. Due to the nature of the work required to be performed on many of our performance obligations, the estimation of total revenue and cost at completion (the process described below in more detail) is complex, subject to many variables and requires significant judgment. The consideration to which we are entitled on our long-term contracts may include both fixed and variable amounts. Variable amounts can either increase or decrease the transaction price. A common example of variable amounts that can either increase or decrease contract value are pending change orders that represent contract modifications for which a change in scope has been authorized or acknowledged by our customer, but the final adjustment to contract price is yet to be negotiated. Other examples of positive variable revenue include amounts awarded upon achievement of certain performance metrics, program milestones or cost of completion date targets and can be based upon customer discretion. Variable amounts can result in a deduction from contract revenue if we fail to meet stated performance requirements, such as complying with the construction schedule. ​ We include estimated amounts of variable consideration in the contract price to the extent it is probable that a significant reversal of cumulative revenue recognized will not occur when the uncertainty associated with the variable consideration is resolved. Our estimates of variable consideration and determination of whether to include estimated amounts in the contract price are based largely on an assessment of our anticipated performance and all information (historical, current and forecasted) that is reasonably available to us. We reassess the amount of variable consideration each accounting period until the uncertainty associated with the variable consideration is resolved. Changes in the assessed amount of variable consideration are accounted for prospectively as a cumulative adjustment to revenue recognized in the current period. Contracts are often modified to account for changes in contract specifications and requirements. We consider contract modifications to exist when the modification either creates new, or changes the existing, enforceable rights and obligations. Most of our contract modifications are for goods or services that are not distinct from the existing performance obligation(s). The effect of a contract modification on the transaction price, and our measure of progress for the performance obligation to which it relates, is recognized as an adjustment to revenue (either as an increase or decrease) on a cumulative catch-up basis. We have a Company-wide policy requiring periodic review of the Estimate at Completion in which management reviews the progress and execution of our performance obligations and estimated remaining obligations. As part of this process, management reviews information including, but not limited to, any outstanding key contract matters, progress towards completion and the related program schedule, identified risks and opportunities and the related changes in estimates of revenue and costs. The risks and opportunities include management's judgment about the ability and cost to achieve the schedule (e.g., the number and type of milestone events), technical requirements (e.g., a newly developed product versus a mature product) and other contract requirements. Management must make assumptions and estimates regarding labor productivity and availability, the complexity of the work to be performed, the availability of materials, the length of time to complete the performance obligation (e.g., to estimate increases in wages and prices for materials and related support cost allocations), execution by our subcontractors, the availability and timing of funding from our customer, and overhead cost rates, among other variables. Based on this analysis, any adjustments to revenue, cost of services, and the related impact to operating income are recognized as necessary in the quarter when they become known. These adjustments may result from positive program performance if we determine we will be successful in mitigating risks surrounding the technical, schedule and cost aspects of those performance obligations or realizing related opportunities and may result in an increase in operating income during the performance of individual performance obligations. Likewise, if we determine we will not be successful in mitigating these risks or realizing related opportunities, these adjustments may result in a decrease in operating income. Changes in estimates of revenue, cost of services and the related impact to operating income are recognized quarterly on a cumulative catch-up basis, meaning we recognize in the current period the cumulative effect of the changes on current and prior periods based on our progress towards complete satisfaction of a performance obligation. A significant change in one or more of these estimates could affect the profitability of one or more of our performance obligations. For projects in which estimates of total costs to be incurred on a performance obligation exceed total estimates of revenue to be earned, a provision for the entire loss on the performance obligation is recognized in the period the loss is determined. The Company typically does not incur any returns, refunds, or similar obligations after the completion of the performance obligation since any deficiencies are corrected during the course of the work or are included as a modification to revenue. The Company does offer an industry standard warranty on our work, which is most commonly for a one-year period. The vendors providing the equipment and materials are responsible for any failures in their product unless installed incorrectly. We include an estimated amount to cover estimated warranty expense in our Cost of Services and record a liability in our Consolidated Balance Sheet to cover our current estimated outstanding warranty obligations. During the years ended December 31, 2022 and December 31, 2021, net revenue recognized from our performance obligations satisfied in previous periods was not material. ​ Disaggregation of Revenue Our consolidated 2022 revenue was derived from contracts to provide service activities in the mechanical and electrical services segments we serve. Refer to Note 16 “Segment Information” for additional information on our reportable segments. We disaggregate our revenue from contracts with customers by activity, customer type and service provided, as we believe it best depicts how the nature, amount, timing and uncertainty of our revenue and cash flows are affected by economic factors. See details in the following tables (dollars in thousands): ​
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
​ | ​ | ​ | Year Ended December 31, | ​
Revenue by Service Provided |  |  | 2022 | ​ |  | 2021 | ​ | ​ | 2020 | ​
Mechanical Services | ​ | ​ | $ | 3,178,475 |  | 76.8 | % | ​ | $ | 2,542,623 |  | 82.7 | % | ​ | $ | 2,430,632 | ​ | 85.1 | %
Electrical Services | ​ | ​ | ​ | 961,889 | ​ | 23.2 | % | ​ | ​ | 531,013 | ​ | 17.3 | % | ​ | ​ | 426,027 | ​ | 14.9 | %
Total | ​ | ​ | $ | 4,140,364 | ​ | 100.0 | % | ​ | $ | 3,073,636 | ​ | 100.0 | % | ​ | $ | 2,856,659 | ​ | 100.0 | %
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
​ | ​ | ​ | Year Ended December 31, | ​
Revenue by Type of Customer | ​ | ​ | 2022 | ​ | ​ | 2021 |  | ​ | 2020 |
Industrial | ​ | ​ | $ | 1,973,252 | ​ | 47.7 | % | ​ | $ | 1,356,688 | ​ | 44.1 | % | ​ | $ | 1,112,075 | ​ | 38.9 | %
Healthcare | ​ | ​ | ​ | 584,023 | ​ | 14.1 | % | ​ | ​ | 417,901 | ​ | 13.6 | % | ​ | ​ | 371,105 | ​ | 13.0 | %
Education | ​ | ​ | ​ | 445,638 | ​ | 10.8 | % | ​ | ​ | 390,251 | ​ | 12.7 | % | ​ | ​ | 487,922 | ​ | 17.1 | %
Office Buildings | ​ | ​ | ​ | 349,235 | ​ | 8.4 | % | ​ | ​ | 308,799 | ​ | 10.1 | % | ​ | ​ | 319,426 | ​ | 11.2 | %
Retail, Restaurants and Entertainment | ​ | ​ | ​ | 311,697 | ​ | 7.5 | % | ​ | ​ | 213,386 | ​ | 6.9 | % | ​ | ​ | 239,541 | ​ | 8.4 | %
Government | ​ | ​ | ​ | 255,314 | ​ | 6.2 | % | ​ | ​ | 174,813 | ​ | 5.7 | % | ​ | ​ | 163,717 | ​ | 5.7 | %
Multi-Family and Residential | ​ | ​ | ​ | 126,339 | ​ | 3.0 | % | ​ | ​ | 112,779 | ​ | 3.7 | % | ​ | ​ | 86,799 | ​ | 3.0 | %
Other | ​ | ​ | ​ | 94,866 | ​ | 2.3 | % | ​ | ​ | 99,019 | ​ | 3.2 | % | ​ | ​ | 76,074 | ​ | 2.7 | %
Total | ​ | ​ | $ | 4,140,364 | ​ | 100.0 | % | ​ | $ | 3,073,636 | ​ | 100.0 | % | ​ | $ | 2,856,659 | ​ | 100.0 | %
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
​ | ​ | ​ | Year Ended December 31, | ​
Revenue by Activity Type | ​ | ​ | 2022 | ​ | ​ | 2021 |  | ​ | 2020 | ​
New Construction | ​ | ​ | $ | 2,011,992 | ​ | 48.6 | % | ​ | $ | 1,421,784 | ​ | 46.3 | % | ​ | $ | 1,333,739 | ​ | 46.7 | %
Existing Building Construction | ​ | ​ | ​ | 1,210,512 | ​ | 29.2 | % | ​ | ​ | 963,461 | ​ | 31.3 | % | ​ | ​ | 910,807 | ​ | 31.9 | %
Service Projects | ​ | ​ | ​ | 382,155 | ​ | 9.2 | % | ​ | ​ | 278,582 | ​ | 9.1 | % | ​ | ​ | 241,402 | ​ | 8.4 | %
Service Calls, Maintenance and Monitoring | ​ | ​ | ​ | 535,705 | ​ | 13.0 | % | ​ | ​ | 409,809 | ​ | 13.3 | % | ​ | ​ | 370,711 | ​ | 13.0 | %
Total | ​ | ​ | $ | 4,140,364 | ​ | 100.0 | % | ​ | $ | 3,073,636 | ​ | 100.0 | % | ​ | $ | 2,856,659 | ​ | 100.0 | %
​ Contract Assets and Liabilities ​ Contract assets include unbilled amounts typically resulting from sales under long term contracts when the cost-to-cost method of revenue recognition is used, revenue recognized exceeds the amount billed to the customer and right to payment is conditional or subject to completing a milestone, such as a phase of the project. Contract assets are not considered a significant financing component, as they are intended to protect the customer in the event that we do not perform our obligations under the contract. Contract assets are generally classified as current, as it is very unusual for us to have contract assets with a term of greater than one year. ​ Contract liabilities consist of advance payments and billings in excess of revenue recognized. It is very unusual for us to have advanced payments with a term of greater than one year; therefore, our contract liabilities are usually all current. Advanced payments from customers related to work not yet started are classified as “Deferred Revenue.” If we have advanced payments with a term greater than one year, the noncurrent portion of advanced payments would be included in “Other Long-term Liabilities” in our Consolidated Balance Sheets. Contract liabilities are not considered to have a significant financing component, as they are used to meet working capital requirements that are generally higher in the early stages of a contract and are intended to protect us from the other party failing to meet its obligations under the contract. Our contract assets and liabilities are reported in a net position on a contract-by-contract basis at the end of each reporting period. ​ The following table presents the changes in contract assets and contract liabilities (in thousands): ​
​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​ | ​
​ | Year Ended December 31, | ​ | ​ | Year Ended December 31,
​ | 2022 | ​ | 2021
​ | Contract |  | Contract | ​ | Contract |  | Contract
​ | Assets | ​ | Liabilities | ​ | Assets | ​ | Liabilities
Balance at beginning of period | $ | 29,900 | ​ | $ | 307,380 | ​ | $ | 18,622 | ​ | $ | 226,237
Change due to acquisitions / disposals | ​ | 2,426 | ​ | ​ | 1,160 | ​ | ​ | 10,356 | ​ | ​ | 36,523
Change related to credit allowance | ​ | 4 | ​ | ​ | — | ​ | ​ | (5) | ​ | ​ | —
Other changes in the period | ​ | (5,119) | ​ | ​ | 239,753 | ​ | ​ | 927 | ​ | ​ | 44,620
Balance at end of period | $ | 27,211 | ​ | $ | 548,293 | ​ | $ | 29,900 |  | $ | 307,380
​ During the years ended December 31, 2022 and 2021, we recognized revenue of $286.5 million and $207.6 million related to our contract liabilities at January 1, 2021 and January 1, 2020, respectively. ​ We did not have any impairment losses recognized on our receivables or contract assets in 2022 and 2021. ​ Remaining Performance Obligations ​ Remaining construction performance obligations represent the remaining transaction price of firm orders for which work has not been performed and exclude unexercised contract options. As of December 31, 2022, the aggregate amount of the transaction price allocated to remaining performance obligations was $4.06 billion. The Company expects to recognize revenue on approximately 65-75% of the remaining performance obligations over the next 12 months, with the remaining recognized thereafter. Our service maintenance agreements are generally one-year renewable agreements. We have adopted the practical expedient that allows us to not include service maintenance contracts with a total term of one year or less; therefore, we do not report unfulfilled performance obligations for service maintenance agreements.

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 -Publisher FASB -Name Accounting Standards Codification -Topic 606 -URI https://asc.fasb.org/topic&trid=49130388 Reference 2: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 10 -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130551-203045 Reference 3: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 13 -Subparagraph (b)(2) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130556-203045 Reference 4: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 12 -Subparagraph (b) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045 Reference 5: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 9 -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130550-203045 Reference 6: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 12 -Subparagraph (e) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045 Reference 7: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 12 -Subparagraph (a) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045 Reference 8: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 12 -Subparagraph (d) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045 Reference 9: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 15 -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130558-203045 Reference 10: http://www.xbrl.org/2003/role/disclosureRef -Publisher FASB -Name Accounting Standards Codification -Topic 606 -SubTopic 10 -Section 50 -Paragraph 12 -Subparagraph (c) -URI https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045 + Details
Name: | us-gaap_RevenueFromContractWithCustomerTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration