Skip to content

Commit

Permalink
feat(RegistryV2): add managed registry export
Browse files Browse the repository at this point in the history
  • Loading branch information
silto committed Mar 6, 2025
1 parent 8f934df commit 1819209
Show file tree
Hide file tree
Showing 17 changed files with 2,209 additions and 28 deletions.
2 changes: 1 addition & 1 deletion apps/doc/docs/reference/validation/bsvhu.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ title: BSVHU
| L'adresse e-mail de l'émetteur | emitter.company.mail | EMISSION | emitter.emitterIrregularSituation est false | EMISSION ou TRANSPORT si émetteur | - |
| Le type de destination | destination.type | EMISSION | - | EMISSION ou TRANSPORT si émetteur | - |
| L'opération prévue | destination.plannedOperationCode | EMISSION | - | EMISSION ou TRANSPORT si émetteur | - |
| Le N° d'agrément du destinataire | destination.agrementNumber | EMISSION | - | OPERATION | - |
| Le N° d'agrément du destinataire | destination.agrementNumber | - | - | OPERATION | - |
| La raison sociale du destinataire | destination.company.name | EMISSION | - | EMISSION ou TRANSPORT si émetteur | - |
| Le N° SIRET du destinataire | destination.company.siret | EMISSION | - | EMISSION ou TRANSPORT si émetteur | - |
| L'adresse du destinataire | destination.company.address | EMISSION | - | EMISSION ou TRANSPORT si émetteur | - |
Expand Down
321 changes: 319 additions & 2 deletions back/src/bsda/registryV2.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
IncomingWasteV2,
ManagedWasteV2,
OutgoingWasteV2,
TransportedWasteV2
} from "@td/codegen-back";
Expand All @@ -14,6 +15,7 @@ import { ITXClientDenyList } from "@prisma/client/runtime/library";
import { getTransporterCompanyOrgId } from "@td/constants";
import {
emptyIncomingWasteV2,
emptyManagedWasteV2,
emptyOutgoingWasteV2,
emptyTransportedWasteV2,
RegistryV2Bsda
Expand Down Expand Up @@ -926,13 +928,298 @@ export const toTransportedWasteV2 = (
};
};

export const toManagedWasteV2 = (
bsda: RegistryV2Bsda
): Omit<Required<ManagedWasteV2>, "__typename"> => {
const transporters = getTransportersSync(bsda);

const [transporter, transporter2, transporter3, transporter4, transporter5] =
transporters;
const {
initialEmitterCompanyName,
initialEmitterCompanySiret,
initialEmitterCompanyAddress,
initialEmitterCompanyPostalCode,
initialEmitterCompanyCity,
initialEmitterCompanyCountry
} = getInitialEmitterData(bsda);
const {
destinationFinalOperationCodes,
destinationFinalOperationWeights,
destinationFinalOperationCompanySirets
} = getFinalOperationsData(bsda);
const {
street: transporter1CompanyAddress,
postalCode: transporter1CompanyPostalCode,
city: transporter1CompanyCity,
country: transporter1CompanyCountry
} = splitAddress(
transporter?.transporterCompanyAddress,
transporter?.transporterCompanyVatNumber
);

const {
street: transporter2CompanyAddress,
postalCode: transporter2CompanyPostalCode,
city: transporter2CompanyCity,
country: transporter2CompanyCountry
} = splitAddress(
transporter2?.transporterCompanyAddress,
transporter2?.transporterCompanyVatNumber
);

const {
street: transporter3CompanyAddress,
postalCode: transporter3CompanyPostalCode,
city: transporter3CompanyCity,
country: transporter3CompanyCountry
} = splitAddress(
transporter3?.transporterCompanyAddress,
transporter3?.transporterCompanyVatNumber
);

const {
street: transporter4CompanyAddress,
postalCode: transporter4CompanyPostalCode,
city: transporter4CompanyCity,
country: transporter4CompanyCountry
} = splitAddress(
transporter4?.transporterCompanyAddress,
transporter4?.transporterCompanyVatNumber
);

const {
street: transporter5CompanyAddress,
postalCode: transporter5CompanyPostalCode,
city: transporter5CompanyCity,
country: transporter5CompanyCountry
} = splitAddress(
transporter5?.transporterCompanyAddress,
transporter5?.transporterCompanyVatNumber
);

const {
street: destinationCompanyAddress,
postalCode: destinationCompanyPostalCode,
city: destinationCompanyCity,
country: destinationCompanyCountry
} = splitAddress(bsda.destinationCompanyAddress);

const {
street: workerCompanyAddress,
postalCode: workerCompanyPostalCode,
city: workerCompanyCity,
country: workerCompanyCountry
} = splitAddress(bsda.workerCompanyAddress);

const {
street: emitterCompanyAddress,
postalCode: emitterCompanyPostalCode,
city: emitterCompanyCity,
country: emitterCompanyCountry
} = splitAddress(bsda.emitterCompanyAddress);

return {
...emptyManagedWasteV2,
id: bsda.id,
source: "BSD",
publicId: null,
bsdId: bsda.id,
reportAsSiret: null,
createdAt: bsda.createdAt,
updatedAt: bsda.updatedAt,
transporterTakenOverAt: transporter?.transporterTransportTakenOverAt,
destinationOperationDate: bsda.destinationOperationDate,
bsdType: "BSDA",
bsdSubType: getBsdaSubType(bsda),
customId: null,
status: bsda.status,
wasteDescription: bsda.wasteMaterialName,
wasteCode: bsda.wasteCode,
wasteCodeBale: null,
wastePop: bsda.wastePop,
wasteIsDangerous: true,
quantity: null,
wasteContainsElectricOrHybridVehicles: null,
weight: bsda.weightValue
? bsda.weightValue.dividedBy(1000).toDecimalPlaces(6).toNumber()
: null,
weightIsEstimate: bsda.weightIsEstimate,
volume: null,
managingStartDate: null,
managingEndDate: null,
initialEmitterCompanyName,
initialEmitterCompanySiret,
initialEmitterCompanyAddress,
initialEmitterCompanyPostalCode,
initialEmitterCompanyCity,
initialEmitterCompanyCountry,
initialEmitterMunicipalitiesInseeCodes: null,
emitterCompanyIrregularSituation: null,
emitterCompanyType: null,
emitterCompanySiret: bsda.emitterCompanySiret,
emitterCompanyName: bsda.emitterCompanyName,
emitterCompanyGivenName: null,
emitterCompanyAddress,
emitterCompanyPostalCode,
emitterCompanyCity,
emitterCompanyCountry,
emitterCompanyMail: bsda.emitterCompanyMail,
emitterPickupsiteName: bsda.emitterPickupSiteName,
emitterPickupsiteAddress: bsda.emitterPickupSiteAddress,
emitterPickupsitePostalCode: bsda.emitterPickupSitePostalCode,
emitterPickupsiteCity: bsda.emitterPickupSiteCity,
emitterPickupsiteCountry: bsda.emitterPickupSiteAddress ? "FR" : null,
tempStorerCompanyOrgId: null,
tempStorerCompanyName: null,
tempStorerCompanyAddress: null,
tempStorerCompanyPostalCode: null,
tempStorerCompanyCity: null,
tempStorerCompanyCountryCode: null,
workerCompanySiret: bsda.workerCompanySiret,
workerCompanyName: bsda.workerCompanyName,
workerCompanyAddress,
workerCompanyPostalCode,
workerCompanyCity,
workerCompanyCountry,
parcelCities: null,
parcelInseeCodes: null,
parcelNumbers: null,
parcelCoordinates: null,
sisIdentifiers: null,
ecoOrganismeSiret: bsda.ecoOrganismeSiret,
ecoOrganismeName: bsda.ecoOrganismeName,
brokerCompanySiret: bsda.brokerCompanySiret,
brokerCompanyName: bsda.brokerCompanyName,
brokerCompanyMail: bsda.brokerCompanyMail,
brokerRecepisseNumber: bsda.brokerRecepisseNumber,
traderCompanySiret: null,
traderCompanyName: null,
traderCompanyMail: null,
traderRecepisseNumber: null,
isDirectSupply: false,
transporter1CompanySiret: getTransporterCompanyOrgId(transporter),
transporter1CompanyName: transporter?.transporterCompanyName ?? null,
transporter1CompanyGivenName: null,
transporter1CompanyAddress,
transporter1CompanyPostalCode,
transporter1CompanyCity,
transporter1CompanyCountry,
transporter1RecepisseIsExempted:
transporter?.transporterRecepisseIsExempted,
transporter1RecepisseNumber: transporter?.transporterRecepisseNumber,
transporter1TransportMode: transporter?.transporterTransportMode,
transporter1CompanyMail: transporter?.transporterCompanyMail,
transporter2CompanySiret: getTransporterCompanyOrgId(transporter2),
transporter2CompanyName: transporter2?.transporterCompanyName,
transporter2CompanyGivenName: null,
transporter2CompanyAddress,
transporter2CompanyPostalCode,
transporter2CompanyCity,
transporter2CompanyCountry,
transporter2RecepisseIsExempted:
transporter2?.transporterRecepisseIsExempted,
transporter2RecepisseNumber: transporter2?.transporterRecepisseNumber,
transporter2TransportMode: transporter2?.transporterTransportMode,
transporter2CompanyMail: transporter2?.transporterCompanyMail,
transporter3CompanySiret: getTransporterCompanyOrgId(transporter3),
transporter3CompanyName: transporter3?.transporterCompanyName,
transporter3CompanyGivenName: null,
transporter3CompanyAddress,
transporter3CompanyPostalCode,
transporter3CompanyCity,
transporter3CompanyCountry,
transporter3RecepisseIsExempted:
transporter3?.transporterRecepisseIsExempted,
transporter3RecepisseNumber: transporter3?.transporterRecepisseNumber,
transporter3TransportMode: transporter3?.transporterTransportMode,
transporter3CompanyMail: transporter3?.transporterCompanyMail,
transporter4CompanySiret: getTransporterCompanyOrgId(transporter4),
transporter4CompanyName: transporter4?.transporterCompanyName,
transporter4CompanyGivenName: null,
transporter4CompanyAddress,
transporter4CompanyPostalCode,
transporter4CompanyCity,
transporter4CompanyCountry,
transporter4RecepisseIsExempted:
transporter4?.transporterRecepisseIsExempted,
transporter4RecepisseNumber: transporter4?.transporterRecepisseNumber,
transporter4TransportMode: transporter4?.transporterTransportMode,
transporter4CompanyMail: transporter4?.transporterCompanyMail,
transporter5CompanySiret: getTransporterCompanyOrgId(transporter5),
transporter5CompanyName: transporter5?.transporterCompanyName,
transporter5CompanyGivenName: null,
transporter5CompanyAddress,
transporter5CompanyPostalCode,
transporter5CompanyCity,
transporter5CompanyCountry,
transporter5RecepisseIsExempted:
transporter5?.transporterRecepisseIsExempted,
transporter5RecepisseNumber: transporter5?.transporterRecepisseNumber,
transporter5TransportMode: transporter5?.transporterTransportMode,
transporter5CompanyMail: transporter5?.transporterCompanyMail,
wasteAdr: bsda.wasteAdr,
nonRoadRegulationMention: null,
destinationCap: bsda.destinationCap,
wasteDap: null,
destinationCompanySiret: bsda.destinationCompanySiret,
destinationCompanyName: bsda.destinationCompanyName,
destinationCompanyGivenName: null,
destinationCompanyAddress,
destinationCompanyPostalCode,
destinationCompanyCity,
destinationCompanyCountry,
destinationCompanyMail: bsda.destinationCompanyMail,
destinationDropSiteAddress: null,
destinationDropSitePostalCode: null,
destinationDropSiteCity: null,
destinationDropSiteCountryCode: null,

destinationReceptionAcceptationStatus:
bsda.destinationReceptionAcceptationStatus,
destinationReceptionWeight: bsda.destinationReceptionWeight
? bsda.destinationReceptionWeight
.dividedBy(1000)
.toDecimalPlaces(6)
.toNumber()
: null,
destinationReceptionAcceptedWeight: null,
destinationReceptionRefusedWeight: null,
destinationPlannedOperationCode: bsda.destinationPlannedOperationCode,
destinationPlannedOperationMode: null,
destinationOperationCodes: bsda.destinationOperationCode
? [bsda.destinationOperationCode]
: null,
destinationOperationModes: bsda.destinationOperationMode
? [bsda.destinationOperationMode]
: null,
nextDestinationPlannedOperationCodes:
bsda.destinationOperationNextDestinationPlannedOperationCode
? [bsda.destinationOperationNextDestinationPlannedOperationCode]
: null,
destinationHasCiterneBeenWashedOut: null,
destinationOperationNoTraceability: false,
destinationFinalOperationCompanySirets,
destinationFinalOperationCodes,
destinationFinalOperationWeights,
declarationNumber: null,
notificationNumber: null,
movementNumber: null,
isUpcycled: null,
destinationParcelInseeCodes: null,
destinationParcelNumbers: null,
destinationParcelCoordinates: null
};
};

const minimalBsdaForLookupSelect = {
id: true,
destinationOperationSignatureDate: true,
destinationCompanySiret: true,
emitterCompanySiret: true,
ecoOrganismeSiret: true,
workerCompanySiret: true,
brokerCompanySiret: true,
wasteCode: true,
transporters: {
select: {
Expand All @@ -943,6 +1230,13 @@ const minimalBsdaForLookupSelect = {
transporterTransportTakenOverAt: true,
transporterTransportSignatureDate: true
}
},
intermediaries: {
select: {
id: true,
siret: true,
vatNumber: true
}
}
};

Expand Down Expand Up @@ -970,12 +1264,12 @@ const bsdaToLookupCreateInputs = (
});
}
if (transporter?.transporterTransportSignatureDate) {
const sirets = new Set([
const outgoingSirets = new Set([
bsda.emitterCompanySiret,
bsda.ecoOrganismeSiret,
bsda.workerCompanySiret
]);
sirets.forEach(siret => {
outgoingSirets.forEach(siret => {
if (!siret) {
return;
}
Expand All @@ -991,6 +1285,29 @@ const bsdaToLookupCreateInputs = (
bsdaId: bsda.id
});
});
const managedSirets = new Set([bsda.brokerCompanySiret]);
bsda.intermediaries?.forEach(intermediary => {
const intermediaryOrgId = intermediary.siret ?? intermediary.vatNumber;
if (intermediaryOrgId) {
managedSirets.add(intermediaryOrgId);
}
});
managedSirets.forEach(siret => {
if (!siret) {
return;
}
res.push({
id: bsda.id,
readableId: bsda.id,
siret,
exportRegistryType: RegistryExportType.MANAGED,
declarationType: RegistryExportDeclarationType.BSD,
wasteType: RegistryExportWasteType.DD,
wasteCode: bsda.wasteCode,
...generateDateInfos(transporter.transporterTransportSignatureDate!),
bsdaId: bsda.id
});
});
}
const transporterSirets = {};
bsda.transporters?.forEach(transporter => {
Expand Down
Loading

0 comments on commit 1819209

Please sign in to comment.