gdias 3 месяцев назад
Родитель
Сommit
1bd16ef2f0
1 измененных файлов с 50 добавлено и 834 удалено
  1. 50 834
      src/routes/formcpr/+page.svelte

+ 50 - 834
src/routes/formcpr/+page.svelte

@@ -1,577 +1,46 @@
 <script>
-    // Página de formulário CPR — sem envio para endpoint (apenas preview e copiar JSON)
-    // Datas: use dd/MM/yyyy | Números: strings (ex: "1000")
-    // Campos S/N: "S" ou "N"
-  
-    // Estado do formulário com a estrutura exatamente como o payload final precisa
-    let form = {
+  let nome = '';
+  let numeroContato = '';
+  let email = '';
+  let tipoProduto = '';
+  let numeroControleInterno = '';
+  let quantidadeProduto = '';
+  let nomePropriedade = '';
+  let localizacaoPropriedade = '';
+
+  let previewOpen = false;
+  let payloadString = '';
+
+  const cardCls = 'rounded-lg bg-white/5 p-6 backdrop-blur-sm border border-white/10';
+  const inputCls = 'mt-1 block w-full rounded-md bg-white/5 border border-white/10 px-3 py-2 text-sm text-white placeholder-white/50 focus:border-bg1_button_contact focus:ring-1 focus:ring-bg1_button_contact';
+  const btnPrimary = 'inline-flex items-center justify-center rounded-md bg-gradient-to-r from-bg1_button_contact to-bg2_button_contact px-4 py-2 text-sm font-medium text-white shadow-sm hover:opacity-90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-bg1_button_contact transition-colors';
+
+  function generatePayload() {
+    const payload = {
       instrument: {
-        cprTypeCode: '',
-        otcRegisterAccountCode: '',
-        otcPaymentAgentAccountCode: '',
-        otcCustodianAccountCode: '',
-        internalControlNumber: '',
-        electronicEmissionIndicator: '', // "S" | "N"
-        isinCode: '',
-        issueDate: '',
-        maturityDate: '',
-        issueQuantity: '',
-        issueValue: '',
-        issueFinancialValue: '',
-        unitValue: '',
-        referenceDate: '',
-        profitabilityStartDate: '',
-        automaticExpirationIndicator: '', // "S" | "N"
-  
-        collaterals: [
-          {
-            collateralTypeCode: '',
-            collateralTypeName: '',
-            constitutionProcessIndicator: '', // "S" | "N"
-            otcBondsmanAccountCode: '',
-            documentNumber: ''
-          }
-        ],
-  
-        products: [
-          {
-            cprProductName: '',
-            cprProductClassName: '',
-            cprProductHarvest: '',
-            cprProductDescription: '',
-            cprProductQuantity: '',
-            measureUnitName: '',
-            packagingWayName: '',
-            cprProductStatusCode: '',
-            productionTypeCode: ''
-          }
-        ],
-  
-        issuers: [
-          {
-            cprIssuerName: '',
-            documentNumber: '',
-            personTypeAcronym: '',
-            stateAcronym: '',
-            cityName: '',
-            ibgeCode: '',
-            issuerLegalNatureCode: ''
-          }
-        ],
-  
-        deposit: {
-          otcFavoredAccountCode: '',
-          documentNumber: '',
-          personTypeAcronym: '',
-          selfNumber: '',
-          settlementModalityTypeCode: '',
-          otcSettlementBankAccountCode: '',
-          depositQuantity: '',
-          depositUnitPriceValue: ''
-        },
-  
-        paymentMethod: {
-          paymentMethodCode: '',
-          indexCode: '',
-          indexShortName: '',
-          vcpIndicatorTypeCode: '',
-          indexadorPercentageValue: '',
-          interestRateSpreadPercentage: '',
-          interestRateCriteriaTypeCode: '',
-          interestPaymentDate: '',
-          interestPaymentValue: ''
-        },
-  
-        interestPaymentFlow: {
-          interestPaymentFrequencyCode: '',
-          interestMonthsQuantity: '',
-          timeUnitTypeCode: '',
-          deadlineTypeCode: '',
-          paymentStartDate: ''
-        },
-  
-        amortizationPaymentFlow: {
-          amortizationTypeCode: '',
-          amortizationMonthsQuantity: '',
-          timeUnitTypeCode: '',
-          deadlineTypeCode: '',
-          amortizationStartDate: ''
-        },
-  
-        scr: {
-          scrTypeCode: '',
-          scrCustomerDetail: '',
-          personTypeAcronym: '',
-          documentNumber: '',
-          contractCode: '',
-          operationModalityTypeCode: '',
-          bacenReferenceCode: '',
-          finalityCode: '',
-          ipocCode: ''
-        },
-  
-        dolarEuroProfitability: {
-          calculationTypeCode: '',
-          initialExchangeValue: '',
-          fixingTypeCode: '',
-          dataSourceTypeCode: ''
-        },
-  
-        igpmIpcaProfitability: {
-          adjustmentFrequencyTypeCode: '',
-          adjustmentProRataTypeCode: '',
-          adjustmentTypeCode: ''
-        },
-  
-        creditor: {
-          creditorName: '',
-          documentNumber: ''
-        },
-  
-        ballast: {
-          ballastTypeCode: '',
-          lotNumber: '',
-          ballastQuantity: '',
-          currencyCode: '',
-          transactionIdentification: '',
-          additionalText: ''
-        },
-  
-        registerOffice: {
-          cprNumber: '',
-          cprContractNumber: ''
-        },
-  
-        events: [
-          {
-            eventTypeCode: '',
-            eventOriginalDate: '',
-            unitPriceValue: '',
-            interestUnitPriceValue: '',
-            residualValue: '',
-            amortizationPercentage: '',
-            eventQuantity: ''
-          }
-        ],
-  
-        productionPlaces: [
-          {
-            productionPlaceName: '',
-            propertyRegistrationNumber: '',
-            notaryName: '',
-            totalProductionAreaInHectaresNumber: '',
-            totalAreaInHectaresNumber: '',
-            carCode: '',
-            latitudeCode: '',
-            longitudeCode: '',
-            zipCode: ''
-          }
-        ],
-  
-        greenCpr: {
-          greenCprIndicator: '', // "S" | "N"
-          greenCprCertificateName: '',
-          greenCprCertificateCnpjNumber: '',
-          greenCprGeoreferencingDescription: '',
-          greenCprDeclarationIndicator: '' // "S" | "N"
-        },
-  
-        // DeliveryPlace ainda não definido — deixo como JSON livre (textarea)
-        deliveryPlace: {}
-      }
-    };
-  
-    // Variáveis planas: Instrument
-    let instrument_cprTypeCode = '';
-    let instrument_otcRegisterAccountCode = '';
-    let instrument_otcPaymentAgentAccountCode = '';
-    let instrument_otcCustodianAccountCode = '';
-    let instrument_internalControlNumber = '';
-    let instrument_electronicEmissionIndicator = '';
-    let instrument_isinCode = '';
-    let instrument_issueDate = '';
-    let instrument_maturityDate = '';
-    let instrument_issueQuantity = '';
-    let instrument_issueValue = '';
-    let instrument_issueFinancialValue = '';
-    let instrument_unitValue = '';
-    let instrument_referenceDate = '';
-    let instrument_profitabilityStartDate = '';
-    let instrument_automaticExpirationIndicator = '';
-
-    // Variáveis planas: Collateral (item único)
-    let coll_collateralTypeCode = '';
-    let coll_collateralTypeName = '';
-    let coll_constitutionProcessIndicator = '';
-    let coll_otcBondsmanAccountCode = '';
-    let coll_documentNumber = '';
-
-    // Variáveis planas: Product (item único)
-    let prod_cprProductName = '';
-    let prod_cprProductClassName = '';
-    let prod_cprProductHarvest = '';
-    let prod_cprProductDescription = '';
-    let prod_cprProductQuantity = '';
-    let prod_measureUnitName = '';
-    let prod_packagingWayName = '';
-    let prod_cprProductStatusCode = '';
-    let prod_productionTypeCode = '';
-
-    // Variáveis planas: Issuer (item único)
-    let issuer_cprIssuerName = '';
-    let issuer_documentNumber = '';
-    let issuer_personTypeAcronym = '';
-    let issuer_stateAcronym = '';
-    let issuer_cityName = '';
-    let issuer_ibgeCode = '';
-    let issuer_issuerLegalNatureCode = '';
-
-    // Variáveis planas: Deposit
-    let dep_otcFavoredAccountCode = '';
-    let dep_documentNumber = '';
-    let dep_personTypeAcronym = '';
-    let dep_selfNumber = '';
-    let dep_settlementModalityTypeCode = '';
-    let dep_otcSettlementBankAccountCode = '';
-    let dep_depositQuantity = '';
-    let dep_depositUnitPriceValue = '';
-
-    // Variáveis planas: Payment Method
-    let pay_paymentMethodCode = '';
-    let pay_indexCode = '';
-    let pay_indexShortName = '';
-    let pay_vcpIndicatorTypeCode = '';
-    let pay_indexadorPercentageValue = '';
-    let pay_interestRateSpreadPercentage = '';
-    let pay_interestRateCriteriaTypeCode = '';
-    let pay_interestPaymentDate = '';
-    let pay_interestPaymentValue = '';
-
-    // Variáveis planas: Interest Payment Flow
-    let ipf_interestPaymentFrequencyCode = '';
-    let ipf_interestMonthsQuantity = '';
-    let ipf_timeUnitTypeCode = '';
-    let ipf_deadlineTypeCode = '';
-    let ipf_paymentStartDate = '';
-
-    // Variáveis planas: Amortization Payment Flow
-    let apf_amortizationTypeCode = '';
-    let apf_amortizationMonthsQuantity = '';
-    let apf_timeUnitTypeCode = '';
-    let apf_deadlineTypeCode = '';
-    let apf_amortizationStartDate = '';
-
-    // Variáveis planas: SCR
-    let scr_scrTypeCode = '';
-    let scr_scrCustomerDetail = '';
-    let scr_personTypeAcronym = '';
-    let scr_documentNumber = '';
-    let scr_contractCode = '';
-    let scr_operationModalityTypeCode = '';
-    let scr_bacenReferenceCode = '';
-    let scr_finalityCode = '';
-    let scr_ipocCode = '';
-
-    // Variáveis planas: Dólar/Euro Profitability
-    let de_calculationTypeCode = '';
-    let de_initialExchangeValue = '';
-    let de_fixingTypeCode = '';
-    let de_dataSourceTypeCode = '';
-
-    // Variáveis planas: IGPM/IPCA Profitability
-    let ig_adjustmentFrequencyTypeCode = '';
-    let ig_adjustmentProRataTypeCode = '';
-    let ig_adjustmentTypeCode = '';
-
-    // Variáveis planas: Creditor
-    let creditor_creditorName = '';
-    let creditor_documentNumber = '';
-
-    // Variáveis planas: Ballast
-    let ballast_ballastTypeCode = '';
-    let ballast_lotNumber = '';
-    let ballast_ballastQuantity = '';
-    let ballast_currencyCode = '';
-    let ballast_transactionIdentification = '';
-    let ballast_additionalText = '';
-
-    // Variáveis planas: Register Office
-    let register_cprNumber = '';
-    let register_cprContractNumber = '';
-
-    // Variáveis planas: Event (item único)
-    let ev_eventTypeCode = '';
-    let ev_eventOriginalDate = '';
-    let ev_unitPriceValue = '';
-    let ev_interestUnitPriceValue = '';
-    let ev_residualValue = '';
-    let ev_amortizationPercentage = '';
-    let ev_eventQuantity = '';
-
-    // Variáveis planas: Production Place (item único)
-    let pl_productionPlaceName = '';
-    let pl_propertyRegistrationNumber = '';
-    let pl_notaryName = '';
-    let pl_totalProductionAreaInHectaresNumber = '';
-    let pl_totalAreaInHectaresNumber = '';
-    let pl_carCode = '';
-    let pl_latitudeCode = '';
-    let pl_longitudeCode = '';
-    let pl_zipCode = '';
-
-    // Variáveis planas: Green CPR
-    let green_greenCprIndicator = '';
-    let green_greenCprCertificateName = '';
-    let green_greenCprCertificateCnpjNumber = '';
-    let green_greenCprGeoreferencingDescription = '';
-    let green_greenCprDeclarationIndicator = '';
-
-    // DeliveryPlace via textarea (independente do objeto form)
-    let deliveryPlaceDraft = '';
-    $: deliveryPlaceObject = (() => { try { return JSON.parse(deliveryPlaceDraft || '{}'); } catch { return {}; } })();
-
-    // Derivados para preview e copiar
-    $: payload = {
-      data: {
-        instrument: {
-          cprTypeCode: instrument_cprTypeCode,
-          otcRegisterAccountCode: instrument_otcRegisterAccountCode,
-          otcPaymentAgentAccountCode: instrument_otcPaymentAgentAccountCode,
-          otcCustodianAccountCode: instrument_otcCustodianAccountCode,
-          internalControlNumber: instrument_internalControlNumber,
-          electronicEmissionIndicator: instrument_electronicEmissionIndicator,
-          isinCode: instrument_isinCode,
-          issueDate: instrument_issueDate,
-          maturityDate: instrument_maturityDate,
-          issueQuantity: instrument_issueQuantity,
-          issueValue: instrument_issueValue,
-          issueFinancialValue: instrument_issueFinancialValue,
-          unitValue: instrument_unitValue,
-          referenceDate: instrument_referenceDate,
-          profitabilityStartDate: instrument_profitabilityStartDate,
-          automaticExpirationIndicator: instrument_automaticExpirationIndicator,
-
-          collaterals: [
-            {
-              collateralTypeCode: coll_collateralTypeCode,
-              collateralTypeName: coll_collateralTypeName,
-              constitutionProcessIndicator: coll_constitutionProcessIndicator,
-              otcBondsmanAccountCode: coll_otcBondsmanAccountCode,
-              documentNumber: coll_documentNumber
-            }
-          ],
-          products: [
-            {
-              cprProductName: prod_cprProductName,
-              cprProductClassName: prod_cprProductClassName,
-              cprProductHarvest: prod_cprProductHarvest,
-              cprProductDescription: prod_cprProductDescription,
-              cprProductQuantity: prod_cprProductQuantity,
-              measureUnitName: prod_measureUnitName,
-              packagingWayName: prod_packagingWayName,
-              cprProductStatusCode: prod_cprProductStatusCode,
-              productionTypeCode: prod_productionTypeCode
-            }
-          ],
-          issuers: [
-            {
-              cprIssuerName: issuer_cprIssuerName,
-              documentNumber: issuer_documentNumber,
-              personTypeAcronym: issuer_personTypeAcronym,
-              stateAcronym: issuer_stateAcronym,
-              cityName: issuer_cityName,
-              ibgeCode: issuer_ibgeCode,
-              issuerLegalNatureCode: issuer_issuerLegalNatureCode
-            }
-          ],
-          deposit: {
-            otcFavoredAccountCode: dep_otcFavoredAccountCode,
-            documentNumber: dep_documentNumber,
-            personTypeAcronym: dep_personTypeAcronym,
-            selfNumber: dep_selfNumber,
-            settlementModalityTypeCode: dep_settlementModalityTypeCode,
-            otcSettlementBankAccountCode: dep_otcSettlementBankAccountCode,
-            depositQuantity: dep_depositQuantity,
-            depositUnitPriceValue: dep_depositUnitPriceValue
-          },
-          paymentMethod: {
-            paymentMethodCode: pay_paymentMethodCode,
-            indexCode: pay_indexCode,
-            indexShortName: pay_indexShortName,
-            vcpIndicatorTypeCode: pay_vcpIndicatorTypeCode,
-            indexadorPercentageValue: pay_indexadorPercentageValue,
-            interestRateSpreadPercentage: pay_interestRateSpreadPercentage,
-            interestRateCriteriaTypeCode: pay_interestRateCriteriaTypeCode,
-            interestPaymentDate: pay_interestPaymentDate,
-            interestPaymentValue: pay_interestPaymentValue
-          },
-          interestPaymentFlow: {
-            interestPaymentFrequencyCode: ipf_interestPaymentFrequencyCode,
-            interestMonthsQuantity: ipf_interestMonthsQuantity,
-            timeUnitTypeCode: ipf_timeUnitTypeCode,
-            deadlineTypeCode: ipf_deadlineTypeCode,
-            paymentStartDate: ipf_paymentStartDate
-          },
-          amortizationPaymentFlow: {
-            amortizationTypeCode: apf_amortizationTypeCode,
-            amortizationMonthsQuantity: apf_amortizationMonthsQuantity,
-            timeUnitTypeCode: apf_timeUnitTypeCode,
-            deadlineTypeCode: apf_deadlineTypeCode,
-            amortizationStartDate: apf_amortizationStartDate
-          },
-          scr: {
-            scrTypeCode: scr_scrTypeCode,
-            scrCustomerDetail: scr_scrCustomerDetail,
-            personTypeAcronym: scr_personTypeAcronym,
-            documentNumber: scr_documentNumber,
-            contractCode: scr_contractCode,
-            operationModalityTypeCode: scr_operationModalityTypeCode,
-            bacenReferenceCode: scr_bacenReferenceCode,
-            finalityCode: scr_finalityCode,
-            ipocCode: scr_ipocCode
-          },
-          dolarEuroProfitability: {
-            calculationTypeCode: de_calculationTypeCode,
-            initialExchangeValue: de_initialExchangeValue,
-            fixingTypeCode: de_fixingTypeCode,
-            dataSourceTypeCode: de_dataSourceTypeCode
-          },
-          igpmIpcaProfitability: {
-            adjustmentFrequencyTypeCode: ig_adjustmentFrequencyTypeCode,
-            adjustmentProRataTypeCode: ig_adjustmentProRataTypeCode,
-            adjustmentTypeCode: ig_adjustmentTypeCode
-          },
-          creditor: {
-            creditorName: creditor_creditorName,
-            documentNumber: creditor_documentNumber
-          },
-          ballast: {
-            ballastTypeCode: ballast_ballastTypeCode,
-            lotNumber: ballast_lotNumber,
-            ballastQuantity: ballast_ballastQuantity,
-            currencyCode: ballast_currencyCode,
-            transactionIdentification: ballast_transactionIdentification,
-            additionalText: ballast_additionalText
-          },
-          registerOffice: {
-            cprNumber: register_cprNumber,
-            cprContractNumber: register_cprContractNumber
-          },
-          events: [
-            {
-              eventTypeCode: ev_eventTypeCode,
-              eventOriginalDate: ev_eventOriginalDate,
-              unitPriceValue: ev_unitPriceValue,
-              interestUnitPriceValue: ev_interestUnitPriceValue,
-              residualValue: ev_residualValue,
-              amortizationPercentage: ev_amortizationPercentage,
-              eventQuantity: ev_eventQuantity
-            }
-          ],
-          productionPlaces: [
-            {
-              productionPlaceName: pl_productionPlaceName,
-              propertyRegistrationNumber: pl_propertyRegistrationNumber,
-              notaryName: pl_notaryName,
-              totalProductionAreaInHectaresNumber: pl_totalProductionAreaInHectaresNumber,
-              totalAreaInHectaresNumber: pl_totalAreaInHectaresNumber,
-              carCode: pl_carCode,
-              latitudeCode: pl_latitudeCode,
-              longitudeCode: pl_longitudeCode,
-              zipCode: pl_zipCode
-            }
-          ],
-          greenCpr: {
-            greenCprIndicator: green_greenCprIndicator,
-            greenCprCertificateName: green_greenCprCertificateName,
-            greenCprCertificateCnpjNumber: green_greenCprCertificateCnpjNumber,
-            greenCprGeoreferencingDescription: green_greenCprGeoreferencingDescription,
-            greenCprDeclarationIndicator: green_greenCprDeclarationIndicator
-          },
-          deliveryPlace: deliveryPlaceObject
-        }
-      }
-    };
-    $: payloadString = JSON.stringify(payload, null, 2);
-  
-    let previewOpen = false;
-    let copied = false;
-  
-    async function copyJson() {
-      try {
-        await navigator.clipboard.writeText(payloadString);
-        copied = true;
-        setTimeout(() => (copied = false), 2000);
-      } catch (e) {
-        console.error('Falha ao copiar JSON:', e);
+        cprTypeCode: nome,
+        otcRegisterAccountCode: numeroContato,
+        otcPaymentAgentAccountCode: email,
+        otcCustodianAccountCode: tipoProduto,
+        internalControlNumber: numeroControleInterno,
+        electronicEmissionIndicator: quantidadeProduto,
+        isinCode: nomePropriedade,
+        issueDate: localizacaoPropriedade
       }
-    }
-  
-    // deliveryPlaceDraft já definido acima; funções auxiliares não necessárias
-  
-    const inputCls =
-      'w-full rounded-md border border-border1_contact/20 bg-border2_contact/5 p-3 text-tx_contact_form focus:outline-none focus:ring-2 focus:ring-blue-400';
-    const cardCls =
-      'rounded-xl border border-border1_contact/20 bg-border2_contact/5 backdrop-blur-sm p-6 md:p-8 shadow-md transition hover:shadow-lg';
-    const btnPrimary =
-      'inline-flex items-center justify-center gap-2 rounded-md border-2 border-border1_contact bg-gradient-to-r from-bg1_button_contact to-bg2_button_contact px-6 py-3 font-bold text-tx_contact_form transition duration-300 ease-out hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60';
-    const btnGhost =
-      'inline-flex items-center justify-center gap-2 rounded-md border-2 border-border1_contact/40 px-4 py-2 font-medium text-tx_contact_form/80 transition hover:bg-border1_contact/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60';
-  
-    // Blanks para listas dinâmicas
-    const blankCollateral = {
-      collateralTypeCode: '',
-      collateralTypeName: '',
-      constitutionProcessIndicator: '',
-      otcBondsmanAccountCode: '',
-      documentNumber: ''
-    };
-  
-    const blankProduct = {
-      cprProductName: '',
-      cprProductClassName: '',
-      cprProductHarvest: '',
-      cprProductDescription: '',
-      cprProductQuantity: '',
-      measureUnitName: '',
-      packagingWayName: '',
-      cprProductStatusCode: '',
-      productionTypeCode: ''
-    };
-  
-    const blankIssuer = {
-      cprIssuerName: '',
-      documentNumber: '',
-      personTypeAcronym: '',
-      stateAcronym: '',
-      cityName: '',
-      ibgeCode: '',
-      issuerLegalNatureCode: ''
-    };
-  
-    const blankEvent = {
-      eventTypeCode: '',
-      eventOriginalDate: '',
-      unitPriceValue: '',
-      interestUnitPriceValue: '',
-      residualValue: '',
-      amortizationPercentage: '',
-      eventQuantity: ''
     };
-  
-    const blankProductionPlace = {
-      productionPlaceName: '',
-      propertyRegistrationNumber: '',
-      notaryName: '',
-      totalProductionAreaInHectaresNumber: '',
-      totalAreaInHectaresNumber: '',
-      carCode: '',
-      latitudeCode: '',
-      longitudeCode: '',
-      zipCode: ''
-    };
-  </script>
-  <div class="bg-gradient-to-b from-bg1_contact to-bg2_contact min-h-screen">
+    
+    payloadString = JSON.stringify(payload, null, 2);
+    return payload;
+  }
+
+  function handleSubmit() {
+    const payload = generatePayload();
+    previewOpen = true;
+    
+    console.log('Payload enviado:', payload);
+  }
+</script>
+<div class="bg-gradient-to-b from-bg1_contact to-bg2_contact min-h-screen">
   <section id="formcpr" class="relative overflow-hidden py-24 text-tx_contact">
     <!-- Blobs decorativos -->
     <div aria-hidden="true" class="pointer-events-none absolute -top-24 -left-24 h-72 w-72 rounded-full bg-gradient-to-br from-bg1_button_contact/20 to-bg2_button_contact/20 blur-3xl"></div>
@@ -582,8 +51,6 @@
         Faça sua CPR conosco
       </h1>
   
-      <!-- Ações topo -->
-  
       {#if previewOpen}
         <div class={cardCls + ' mb-8'}>
           <p class="mb-3 font-semibold">Pré-visualização do JSON</p>
@@ -591,276 +58,25 @@
         </div>
       {/if}
   
-      <!-- INSTRUMENT -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Instrumento</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Tipo de CPR</label><input class={inputCls} bind:value={instrument_cprTypeCode} /></div>
-          <div><label class="text-sm">Código da Conta de Registro (OTC)</label><input class={inputCls} bind:value={instrument_otcRegisterAccountCode} /></div>
-          <div><label class="text-sm">Código da Conta do Agente de Pagamento (OTC)</label><input class={inputCls} bind:value={instrument_otcPaymentAgentAccountCode} /></div>
-          <div><label class="text-sm">Código da Conta do Custodiante (OTC)</label><input class={inputCls} bind:value={instrument_otcCustodianAccountCode} /></div>
-          <div><label class="text-sm">Número de Controle Interno</label><input class={inputCls} bind:value={instrument_internalControlNumber} /></div>
-          <div><label class="text-sm">Emissão Eletrônica? (S/N)</label><input class={inputCls} bind:value={instrument_electronicEmissionIndicator} /></div>
-          <div><label class="text-sm">Código ISIN</label><input class={inputCls} bind:value={instrument_isinCode} /></div>
-          <div><label class="text-sm">Data de Emissão (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={instrument_issueDate} /></div>
-          <div><label class="text-sm">Data de Vencimento (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={instrument_maturityDate} /></div>
-          <div><label class="text-sm">Quantidade Emitida</label><input class={inputCls} bind:value={instrument_issueQuantity} /></div>
-          <div><label class="text-sm">Valor de Emissão</label><input class={inputCls} bind:value={instrument_issueValue} /></div>
-          <div><label class="text-sm">Valor Financeiro da Emissão</label><input class={inputCls} bind:value={instrument_issueFinancialValue} /></div>
-          <div><label class="text-sm">Valor Unitário</label><input class={inputCls} bind:value={instrument_unitValue} /></div>
-          <div><label class="text-sm">Data de Referência (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={instrument_referenceDate} /></div>
-          <div><label class="text-sm">Data de Início da Rentabilidade (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={instrument_profitabilityStartDate} /></div>
-          <div><label class="text-sm">Vencimento Automático? (S/N)</label><input class={inputCls} bind:value={instrument_automaticExpirationIndicator} /></div>
-        </div>
-      </div>
-  
-      <!-- COLLATERALS -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Collaterals</h2>
-        </div>
-        <div class="mb-4 rounded-md border border-border1_contact/10 p-4">
-          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-            <div><label class="text-sm">Tipo de Garantia (código)</label><input class={inputCls} bind:value={coll_collateralTypeCode} /></div>
-            <div><label class="text-sm">Nome da Garantia</label><input class={inputCls} bind:value={coll_collateralTypeName} /></div>
-            <div><label class="text-sm">Garantia já constituída? (S/N)</label><input class={inputCls} bind:value={coll_constitutionProcessIndicator} /></div>
-            <div><label class="text-sm">Código da Conta do Fiador (OTC)</label><input class={inputCls} bind:value={coll_otcBondsmanAccountCode} /></div>
-            <div><label class="text-sm">Número do Documento</label><input class={inputCls} bind:value={coll_documentNumber} /></div>
-          </div>
-          <div class="mt-3"></div>
-        </div>
-      </div>
-  
-      <!-- PRODUCTS -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Products</h2>
-        </div>
-        <div class="mb-4 rounded-md border border-border1_contact/10 p-4">
-          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-            <div><label class="text-sm">Produto</label><input class={inputCls} bind:value={prod_cprProductName} /></div>
-            <div><label class="text-sm">Classe do Produto</label><input class={inputCls} bind:value={prod_cprProductClassName} /></div>
-            <div><label class="text-sm">Safra</label><input class={inputCls} bind:value={prod_cprProductHarvest} /></div>
-            <div class="md:col-span-3"><label class="text-sm">Descrição do Produto</label><input class={inputCls} bind:value={prod_cprProductDescription} /></div>
-            <div><label class="text-sm">Quantidade do Produto</label><input class={inputCls} bind:value={prod_cprProductQuantity} /></div>
-            <div><label class="text-sm">Unidade de Medida</label><input class={inputCls} bind:value={prod_measureUnitName} /></div>
-            <div><label class="text-sm">Forma de Embalagem</label><input class={inputCls} bind:value={prod_packagingWayName} /></div>
-            <div><label class="text-sm">Status do Produto (código)</label><input class={inputCls} bind:value={prod_cprProductStatusCode} /></div>
-            <div><label class="text-sm">Tipo de Produção (código)</label><input class={inputCls} bind:value={prod_productionTypeCode} /></div>
-          </div>
-          <div class="mt-3"></div>
-        </div>
-      </div>
-  
-      <!-- ISSUERS -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Issuers</h2>
-        </div>
-        <div class="mb-4 rounded-md border border-border1_contact/10 p-4">
-          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-            <div><label class="text-sm">Nome do Emissor</label><input class={inputCls} bind:value={issuer_cprIssuerName} /></div>
-            <div><label class="text-sm">Número do Documento (CPF/CNPJ)</label><input class={inputCls} bind:value={issuer_documentNumber} /></div>
-            <div><label class="text-sm">Tipo de Pessoa (F/J)</label><input class={inputCls} bind:value={issuer_personTypeAcronym} /></div>
-            <div><label class="text-sm">UF</label><input class={inputCls} bind:value={issuer_stateAcronym} /></div>
-            <div><label class="text-sm">Cidade</label><input class={inputCls} bind:value={issuer_cityName} /></div>
-            <div><label class="text-sm">Código IBGE do Município</label><input class={inputCls} bind:value={issuer_ibgeCode} /></div>
-            <div><label class="text-sm">Natureza Jurídica (código)</label><input class={inputCls} bind:value={issuer_issuerLegalNatureCode} /></div>
-          </div>
-          <div class="mt-3"></div>
-        </div>
-      </div>
-  
-      <!-- DEPOSIT -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Deposit</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Código da Conta do Favorecido (OTC)</label><input class={inputCls} bind:value={dep_otcFavoredAccountCode} /></div>
-          <div><label class="text-sm">Número do Documento (CPF/CNPJ)</label><input class={inputCls} bind:value={dep_documentNumber} /></div>
-          <div><label class="text-sm">Tipo de Pessoa (F/J)</label><input class={inputCls} bind:value={dep_personTypeAcronym} /></div>
-          <div><label class="text-sm">Número próprio (referência interna)</label><input class={inputCls} bind:value={dep_selfNumber} /></div>
-          <div><label class="text-sm">Modalidade de Liquidação (código)</label><input class={inputCls} bind:value={dep_settlementModalityTypeCode} /></div>
-          <div><label class="text-sm">Código da Conta Bancária de Liquidação (OTC)</label><input class={inputCls} bind:value={dep_otcSettlementBankAccountCode} /></div>
-          <div><label class="text-sm">Quantidade em Depósito</label><input class={inputCls} bind:value={dep_depositQuantity} /></div>
-          <div><label class="text-sm">Preço Unitário do Depósito</label><input class={inputCls} bind:value={dep_depositUnitPriceValue} /></div>
-        </div>
-      </div>
-  
-      <!-- PAYMENT METHOD -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Payment Method</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Forma de Pagamento (código)</label><input class={inputCls} bind:value={pay_paymentMethodCode} /></div>
-          <div><label class="text-sm">Código do Índice</label><input class={inputCls} bind:value={pay_indexCode} /></div>
-          <div class="md:col-span-3"><label class="text-sm">Nome do Índice (abreviado)</label><input class={inputCls} bind:value={pay_indexShortName} /></div>
-          <div><label class="text-sm">Indicador VCP (código)</label><input class={inputCls} bind:value={pay_vcpIndicatorTypeCode} /></div>
-          <div><label class="text-sm">Percentual do Indexador (%)</label><input class={inputCls} bind:value={pay_indexadorPercentageValue} /></div>
-          <div><label class="text-sm">Spread da Taxa de Juros (%)</label><input class={inputCls} bind:value={pay_interestRateSpreadPercentage} /></div>
-          <div><label class="text-sm">Critério da Taxa de Juros (código)</label><input class={inputCls} bind:value={pay_interestRateCriteriaTypeCode} /></div>
-          <div><label class="text-sm">Data de Pagamento de Juros (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={pay_interestPaymentDate} /></div>
-          <div><label class="text-sm">Valor do Pagamento de Juros</label><input class={inputCls} bind:value={pay_interestPaymentValue} /></div>
-        </div>
-      </div>
-  
-      <!-- INTEREST PAYMENT FLOW -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Interest Payment Flow</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Frequência de Pagamento de Juros (código)</label><input class={inputCls} bind:value={ipf_interestPaymentFrequencyCode} /></div>
-          <div><label class="text-sm">Quantidade de Meses de Juros</label><input class={inputCls} bind:value={ipf_interestMonthsQuantity} /></div>
-          <div><label class="text-sm">Unidade de Tempo (código)</label><input class={inputCls} bind:value={ipf_timeUnitTypeCode} /></div>
-          <div><label class="text-sm">Tipo de Prazo (código)</label><input class={inputCls} bind:value={ipf_deadlineTypeCode} /></div>
-          <div><label class="text-sm">Data de Início do Pagamento (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={ipf_paymentStartDate} /></div>
-        </div>
-      </div>
-  
-      <!-- AMORTIZATION PAYMENT FLOW -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Amortization Payment Flow</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Tipo de Amortização (código)</label><input class={inputCls} bind:value={apf_amortizationTypeCode} /></div>
-          <div><label class="text-sm">Quantidade de Meses para Amortização</label><input class={inputCls} bind:value={apf_amortizationMonthsQuantity} /></div>
-          <div><label class="text-sm">Unidade de Tempo (código)</label><input class={inputCls} bind:value={apf_timeUnitTypeCode} /></div>
-          <div><label class="text-sm">Tipo de Prazo (código)</label><input class={inputCls} bind:value={apf_deadlineTypeCode} /></div>
-          <div><label class="text-sm">Data de Início da Amortização (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={apf_amortizationStartDate} /></div>
-        </div>
-      </div>
-  
-      <!-- SCR -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">SCR</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Tipo de SCR (código)</label><input class={inputCls} bind:value={scr_scrTypeCode} /></div>
-          <div><label class="text-sm">Detalhes do Cliente (SCR)</label><input class={inputCls} bind:value={scr_scrCustomerDetail} /></div>
-          <div><label class="text-sm">Tipo de Pessoa (F/J)</label><input class={inputCls} bind:value={scr_personTypeAcronym} /></div>
-          <div><label class="text-sm">Número do Documento (CPF/CNPJ)</label><input class={inputCls} bind:value={scr_documentNumber} /></div>
-          <div><label class="text-sm">Código do Contrato</label><input class={inputCls} bind:value={scr_contractCode} /></div>
-          <div><label class="text-sm">Modalidade da Operação (código)</label><input class={inputCls} bind:value={scr_operationModalityTypeCode} /></div>
-          <div><label class="text-sm">Código de Referência BACEN</label><input class={inputCls} bind:value={scr_bacenReferenceCode} /></div>
-          <div><label class="text-sm">Finalidade (código)</label><input class={inputCls} bind:value={scr_finalityCode} /></div>
-          <div><label class="text-sm">Código IPOC</label><input class={inputCls} bind:value={scr_ipocCode} /></div>
-        </div>
-      </div>
-  
-      <!-- DOLAR/EURO PROFITABILITY -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Dólar/Euro Profitability</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Tipo de Cálculo (código)</label><input class={inputCls} bind:value={de_calculationTypeCode} /></div>
-          <div><label class="text-sm">Câmbio Inicial</label><input class={inputCls} bind:value={de_initialExchangeValue} /></div>
-          <div><label class="text-sm">Tipo de Fixação (código)</label><input class={inputCls} bind:value={de_fixingTypeCode} /></div>
-          <div><label class="text-sm">Fonte de Dados (código)</label><input class={inputCls} bind:value={de_dataSourceTypeCode} /></div>
-        </div>
-      </div>
-  
-      <!-- IGPM/IPCA PROFITABILITY -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">IGPM/IPCA Profitability</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Frequência de Reajuste (código)</label><input class={inputCls} bind:value={ig_adjustmentFrequencyTypeCode} /></div>
-          <div><label class="text-sm">Pró-rata de Reajuste (código)</label><input class={inputCls} bind:value={ig_adjustmentProRataTypeCode} /></div>
-          <div><label class="text-sm">Tipo de Reajuste (código)</label><input class={inputCls} bind:value={ig_adjustmentTypeCode} /></div>
-        </div>
-      </div>
-  
-      <!-- CREDITOR -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Creditor</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Nome do Credor</label><input class={inputCls} bind:value={creditor_creditorName} /></div>
-          <div><label class="text-sm">Número do Documento (CPF/CNPJ)</label><input class={inputCls} bind:value={creditor_documentNumber} /></div>
-        </div>
-      </div>
-  
-      <!-- BALLAST -->
       <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Ballast</h2>
+        <h2 class="mb-4 text-xl font-bold">Pré-registro CPR</h2>
         <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Tipo de Lastro (código)</label><input class={inputCls} bind:value={ballast_ballastTypeCode} /></div>
-          <div><label class="text-sm">Número do Lote</label><input class={inputCls} bind:value={ballast_lotNumber} /></div>
-          <div><label class="text-sm">Quantidade do Lastro</label><input class={inputCls} bind:value={ballast_ballastQuantity} /></div>
-          <div><label class="text-sm">Moeda (código)</label><input class={inputCls} bind:value={ballast_currencyCode} /></div>
-          <div><label class="text-sm">Identificação da Transação</label><input class={inputCls} bind:value={ballast_transactionIdentification} /></div>
-          <div class="md:col-span-3"><label class="text-sm">Texto Adicional</label><input class={inputCls} bind:value={ballast_additionalText} /></div>
-        </div>
-      </div>
-  
-      <!-- REGISTER OFFICE -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Register Office</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">Número da CPR</label><input class={inputCls} bind:value={register_cprNumber} /></div>
-          <div><label class="text-sm">Número do Contrato da CPR</label><input class={inputCls} bind:value={register_cprContractNumber} /></div>
-        </div>
-      </div>
-  
-      <!-- EVENTS -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Events</h2>
-        </div>
-        <div class="mb-4 rounded-md border border-border1_contact/10 p-4">
-          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-            <div><label class="text-sm">Tipo de Evento (código)</label><input class={inputCls} bind:value={ev_eventTypeCode} /></div>
-            <div><label class="text-sm">Data Original do Evento (dd/MM/aaaa)</label><input class={inputCls} placeholder="dd/MM/aaaa" bind:value={ev_eventOriginalDate} /></div>
-            <div><label class="text-sm">Preço Unitário</label><input class={inputCls} bind:value={ev_unitPriceValue} /></div>
-            <div><label class="text-sm">Preço Unitário de Juros</label><input class={inputCls} bind:value={ev_interestUnitPriceValue} /></div>
-            <div><label class="text-sm">Valor Residual</label><input class={inputCls} bind:value={ev_residualValue} /></div>
-            <div><label class="text-sm">Percentual de Amortização (%)</label><input class={inputCls} bind:value={ev_amortizationPercentage} /></div>
-            <div><label class="text-sm">Quantidade do Evento</label><input class={inputCls} bind:value={ev_eventQuantity} /></div>
-          </div>
-          <div class="mt-3"></div>
-        </div>
-      </div>
-  
-      <!-- PRODUCTION PLACES -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Production Places</h2>
-        </div>
-        <div class="mb-4 rounded-md border border-border1_contact/10 p-4">
-          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-            <div><label class="text-sm">Local de Produção (nome)</label><input class={inputCls} bind:value={pl_productionPlaceName} /></div>
-            <div><label class="text-sm">Número da Matrícula do Imóvel</label><input class={inputCls} bind:value={pl_propertyRegistrationNumber} /></div>
-            <div><label class="text-sm">Nome do Cartório</label><input class={inputCls} bind:value={pl_notaryName} /></div>
-            <div><label class="text-sm">Área de Produção Total (ha)</label><input class={inputCls} bind:value={pl_totalProductionAreaInHectaresNumber} /></div>
-            <div><label class="text-sm">Área Total (ha)</label><input class={inputCls} bind:value={pl_totalAreaInHectaresNumber} /></div>
-            <div class="md:col-span-3"><label class="text-sm">Código CAR</label><input class={inputCls} bind:value={pl_carCode} /></div>
-            <div><label class="text-sm">Latitude</label><input class={inputCls} bind:value={pl_latitudeCode} /></div>
-            <div><label class="text-sm">Longitude</label><input class={inputCls} bind:value={pl_longitudeCode} /></div>
-            <div><label class="text-sm">CEP</label><input class={inputCls} bind:value={pl_zipCode} /></div>
-          </div>
-          <div class="mt-3"></div>
-        </div>
-      </div>
-  
-      <!-- GREEN CPR -->
-      <div class={cardCls + ' mb-8'}>
-        <h2 class="mb-4 text-xl font-bold">Green CPR</h2>
-        <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
-          <div><label class="text-sm">CPR Verde? (S/N)</label><input class={inputCls} bind:value={green_greenCprIndicator} /></div>
-          <div><label class="text-sm">Nome do Certificado (CPR Verde)</label><input class={inputCls} bind:value={green_greenCprCertificateName} /></div>
-          <div><label class="text-sm">CNPJ do Certificador</label><input class={inputCls} bind:value={green_greenCprCertificateCnpjNumber} /></div>
-          <div class="md:col-span-3"><label class="text-sm">Descrição do Georreferenciamento</label><input class={inputCls} bind:value={green_greenCprGeoreferencingDescription} /></div>
-          <div><label class="text-sm">Declaração CPR Verde? (S/N)</label><input class={inputCls} bind:value={green_greenCprDeclarationIndicator} /></div>
-        </div>
-      </div>
-  
-      <!-- DELIVERY PLACE (JSON livre por enquanto) -->
-      <div class={cardCls + ' mb-8'}>
-        <div class="mb-3 flex items-center justify-between">
-          <h2 class="text-xl font-bold">Delivery Place (JSON)</h2>
+          <div><label class="text-sm">Nome</label><input class={inputCls} bind:value={nome} /></div>
+          <div><label class="text-sm">Numero para Contato</label><input class={inputCls} bind:value={numeroContato} /></div>
+          <div><label class="text-sm">Email</label><input class={inputCls} bind:value={email} /></div>
+          <div><label class="text-sm">Tipo do produto</label><input class={inputCls} bind:value={tipoProduto} /></div>
+          <div><label class="text-sm">Número de Controle Interno</label><input class={inputCls} bind:value={numeroControleInterno} /></div>
+          <div><label class="text-sm">Quantidade do produto</label><input class={inputCls} bind:value={quantidadeProduto} /></div>
+          <div><label class="text-sm">Nome da propriedade</label><input class={inputCls} bind:value={nomePropriedade} /></div>
+          <div><label class="text-sm">Localização da propriedade</label><input class={inputCls} placeholder="" bind:value={localizacaoPropriedade} /></div>
         </div>
-        <textarea class={inputCls + ' min-h-[180px] font-mono'} bind:value={deliveryPlaceDraft}></textarea>
-        <p class="mt-2 text-sm text-tx_contact_form/70">Cole aqui o JSON do deliveryPlace. Quando tiver a estrutura final, eu troco por inputs dedicados.</p>
       </div>
   
-      <!-- Rodapé de ações -->
       <div class="flex flex-wrap items-center gap-3">
-        <button class={btnPrimary} type="button" on:click={() => (previewOpen = true)}>
+        <button class={btnPrimary} type="button" on:click={handleSubmit}>
           Enviar
         </button>
       </div>
     </div>
   </section>
-  </div>
+</div>