From 2f116e48b2108caf0ae22eac442840f2d1629b68 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 11 Nov 2024 11:21:23 +0100 Subject: [PATCH 01/19] new add new xsd files --- gestionatr/data/AceptacionReposicion.xsd | 15 + .../data/AceptacionReposicionReceptor.xsd | 15 + .../data/ActivacionModificacionDeATR.xsd | 1 + .../ActivacionModificacionDeATRUnidir.xsd | 15 + gestionatr/data/ActivacionReposicion.xsd | 15 + gestionatr/data/ActivacionTraspasoCOR.xsd | 1 + gestionatr/data/AnulacionD1.xsd | 14 + .../data/ConsultaSolicitudReposicion.xsd | 17 + gestionatr/data/EnvioInformacionPS.xsd | 1 + gestionatr/data/Facturacion.xsd | 143 +- .../NotificacionActivacionPorReposicion.xsd | 16 + ...otificacionCambiosATRDesdeDistribuidor.xsd | 1 + gestionatr/data/RechazoReposicion.xsd | 15 + gestionatr/data/RechazoReposicionReceptor.xsd | 15 + gestionatr/data/SaldoLecturasFacturacion.xsd | 227 ++- gestionatr/data/SolicitudReposicion.xsd | 15 + gestionatr/data/SolicitudTraspasoCOR.xsd | 1 + gestionatr/data/TipoMensajeA301.xsd | 15 +- gestionatr/data/TipoMensajeA305.xsd | 15 +- gestionatr/data/TipoMensajeC101.xsd | 7 + gestionatr/data/TipoMensajeC105.xsd | 10 +- gestionatr/data/TipoMensajeC201.xsd | 17 +- gestionatr/data/TipoMensajeC205.xsd | 16 +- gestionatr/data/TipoMensajeE.xsd | 14 +- gestionatr/data/TipoMensajeE2.xsd | 137 ++ gestionatr/data/TipoMensajeE205.xsd | 50 + gestionatr/data/TipoMensajeM101.xsd | 4 + gestionatr/data/TipoMensajeM105.xsd | 11 +- gestionatr/data/TipoMensajeM2.xsd | 40 + gestionatr/data/TipoMensajeP002.xsd | 121 +- gestionatr/data/TipoMensajeR101.xsd | 12 + gestionatr/data/TipoMensajeRechazo.xsd | 5 + gestionatr/data/TipoMensajeT101.xsd | 12 +- gestionatr/data/TipoMensajeT105.xsd | 13 +- gestionatr/data/TiposComplejos.xsd | 500 +++++- gestionatr/data/TiposSencillos.xsd | 1483 ++++++++++------- 36 files changed, 2193 insertions(+), 816 deletions(-) create mode 100644 gestionatr/data/AceptacionReposicion.xsd create mode 100644 gestionatr/data/AceptacionReposicionReceptor.xsd create mode 100644 gestionatr/data/ActivacionModificacionDeATRUnidir.xsd create mode 100644 gestionatr/data/ActivacionReposicion.xsd create mode 100644 gestionatr/data/AnulacionD1.xsd create mode 100644 gestionatr/data/ConsultaSolicitudReposicion.xsd create mode 100644 gestionatr/data/NotificacionActivacionPorReposicion.xsd create mode 100644 gestionatr/data/RechazoReposicion.xsd create mode 100644 gestionatr/data/RechazoReposicionReceptor.xsd create mode 100644 gestionatr/data/SolicitudReposicion.xsd create mode 100644 gestionatr/data/TipoMensajeE2.xsd create mode 100644 gestionatr/data/TipoMensajeE205.xsd create mode 100644 gestionatr/data/TipoMensajeM2.xsd diff --git a/gestionatr/data/AceptacionReposicion.xsd b/gestionatr/data/AceptacionReposicion.xsd new file mode 100644 index 00000000..5ad799de --- /dev/null +++ b/gestionatr/data/AceptacionReposicion.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/AceptacionReposicionReceptor.xsd b/gestionatr/data/AceptacionReposicionReceptor.xsd new file mode 100644 index 00000000..f0258b83 --- /dev/null +++ b/gestionatr/data/AceptacionReposicionReceptor.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/ActivacionModificacionDeATR.xsd b/gestionatr/data/ActivacionModificacionDeATR.xsd index dfc7508e..b61e568f 100644 --- a/gestionatr/data/ActivacionModificacionDeATR.xsd +++ b/gestionatr/data/ActivacionModificacionDeATR.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd b/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd new file mode 100644 index 00000000..1d436000 --- /dev/null +++ b/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/ActivacionReposicion.xsd b/gestionatr/data/ActivacionReposicion.xsd new file mode 100644 index 00000000..d26deeb5 --- /dev/null +++ b/gestionatr/data/ActivacionReposicion.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/ActivacionTraspasoCOR.xsd b/gestionatr/data/ActivacionTraspasoCOR.xsd index 73cd5e92..2357259b 100644 --- a/gestionatr/data/ActivacionTraspasoCOR.xsd +++ b/gestionatr/data/ActivacionTraspasoCOR.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/AnulacionD1.xsd b/gestionatr/data/AnulacionD1.xsd new file mode 100644 index 00000000..e350e19d --- /dev/null +++ b/gestionatr/data/AnulacionD1.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/gestionatr/data/ConsultaSolicitudReposicion.xsd b/gestionatr/data/ConsultaSolicitudReposicion.xsd new file mode 100644 index 00000000..251aa772 --- /dev/null +++ b/gestionatr/data/ConsultaSolicitudReposicion.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/gestionatr/data/EnvioInformacionPS.xsd b/gestionatr/data/EnvioInformacionPS.xsd index a62fb861..8ae3123b 100644 --- a/gestionatr/data/EnvioInformacionPS.xsd +++ b/gestionatr/data/EnvioInformacionPS.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/Facturacion.xsd b/gestionatr/data/Facturacion.xsd index 74006ea9..260dbbcd 100644 --- a/gestionatr/data/Facturacion.xsd +++ b/gestionatr/data/Facturacion.xsd @@ -1,4 +1,5 @@ + @@ -98,7 +99,16 @@ Tabla 113 - + + + Tabla 133 + + + + + Tabla 131 + + @@ -325,113 +335,77 @@ - + - + - - - Tabla 129 - - - - + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + @@ -475,6 +449,7 @@ + @@ -569,7 +544,7 @@ - + @@ -676,7 +651,7 @@ - + diff --git a/gestionatr/data/NotificacionActivacionPorReposicion.xsd b/gestionatr/data/NotificacionActivacionPorReposicion.xsd new file mode 100644 index 00000000..4c66515c --- /dev/null +++ b/gestionatr/data/NotificacionActivacionPorReposicion.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd b/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd index 0fbeea90..c98d3d0d 100644 --- a/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd +++ b/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/RechazoReposicion.xsd b/gestionatr/data/RechazoReposicion.xsd new file mode 100644 index 00000000..25ab746d --- /dev/null +++ b/gestionatr/data/RechazoReposicion.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/RechazoReposicionReceptor.xsd b/gestionatr/data/RechazoReposicionReceptor.xsd new file mode 100644 index 00000000..a339ac90 --- /dev/null +++ b/gestionatr/data/RechazoReposicionReceptor.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/SaldoLecturasFacturacion.xsd b/gestionatr/data/SaldoLecturasFacturacion.xsd index 538eeeb6..c85585d1 100644 --- a/gestionatr/data/SaldoLecturasFacturacion.xsd +++ b/gestionatr/data/SaldoLecturasFacturacion.xsd @@ -1,15 +1,222 @@ - + + - - - - - - - - - + + + + + + + + + + + + + + + + Tabla 113 + + + + + Tabla 133 + + + + + Tabla 131 + + + + + Tabla 26 + + + + + + + + + + + + + Tabla 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + En Kwh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 131 + + + + diff --git a/gestionatr/data/SolicitudReposicion.xsd b/gestionatr/data/SolicitudReposicion.xsd new file mode 100644 index 00000000..674a4084 --- /dev/null +++ b/gestionatr/data/SolicitudReposicion.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/gestionatr/data/SolicitudTraspasoCOR.xsd b/gestionatr/data/SolicitudTraspasoCOR.xsd index a2618800..0e937960 100644 --- a/gestionatr/data/SolicitudTraspasoCOR.xsd +++ b/gestionatr/data/SolicitudTraspasoCOR.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/TipoMensajeA301.xsd b/gestionatr/data/TipoMensajeA301.xsd index 52a6f2e6..c8c05050 100644 --- a/gestionatr/data/TipoMensajeA301.xsd +++ b/gestionatr/data/TipoMensajeA301.xsd @@ -1,4 +1,6 @@ + + @@ -23,6 +25,12 @@ Tabla 66 + + + Tabla 137 + + + Tabla 8 @@ -45,16 +53,13 @@ - - - Tabla 113 - - + Tabla 9 + diff --git a/gestionatr/data/TipoMensajeA305.xsd b/gestionatr/data/TipoMensajeA305.xsd index 28dfa803..7e205b9a 100644 --- a/gestionatr/data/TipoMensajeA305.xsd +++ b/gestionatr/data/TipoMensajeA305.xsd @@ -1,4 +1,6 @@ + + @@ -14,22 +16,25 @@ + + + Tabla 137 + + + - - - Tabla 113 - - + Tabla 9 + diff --git a/gestionatr/data/TipoMensajeC101.xsd b/gestionatr/data/TipoMensajeC101.xsd index 8cac0046..0ff94233 100644 --- a/gestionatr/data/TipoMensajeC101.xsd +++ b/gestionatr/data/TipoMensajeC101.xsd @@ -1,4 +1,5 @@ + @@ -21,6 +22,12 @@ Tabla 8 + + + Tabla 137 + + + diff --git a/gestionatr/data/TipoMensajeC105.xsd b/gestionatr/data/TipoMensajeC105.xsd index b33c2952..dcb5b3ee 100644 --- a/gestionatr/data/TipoMensajeC105.xsd +++ b/gestionatr/data/TipoMensajeC105.xsd @@ -1,12 +1,16 @@ + + + + @@ -26,11 +30,7 @@ - - - Tabla 113 - - + Tabla 9 diff --git a/gestionatr/data/TipoMensajeC201.xsd b/gestionatr/data/TipoMensajeC201.xsd index 49f9303e..044520fd 100644 --- a/gestionatr/data/TipoMensajeC201.xsd +++ b/gestionatr/data/TipoMensajeC201.xsd @@ -1,11 +1,13 @@ + + - + @@ -28,6 +30,12 @@ + + + Tabla 137 + + + Tabla 8 @@ -67,16 +75,13 @@ - - - Tabla 113 - - + Tabla 9 + diff --git a/gestionatr/data/TipoMensajeC205.xsd b/gestionatr/data/TipoMensajeC205.xsd index 8e329d54..75d1e115 100644 --- a/gestionatr/data/TipoMensajeC205.xsd +++ b/gestionatr/data/TipoMensajeC205.xsd @@ -1,12 +1,21 @@ + + + + + Tabla 113 + + + + @@ -26,16 +35,13 @@ - - - Tabla 113 - - + Tabla 9 + diff --git a/gestionatr/data/TipoMensajeE.xsd b/gestionatr/data/TipoMensajeE.xsd index bef2d284..51c486c7 100644 --- a/gestionatr/data/TipoMensajeE.xsd +++ b/gestionatr/data/TipoMensajeE.xsd @@ -1,4 +1,6 @@ + + @@ -17,6 +19,12 @@ Tabla 122 + + + Tabla 137 + + + @@ -44,6 +52,7 @@ + @@ -59,13 +68,16 @@ Tabla 26 + + - + + diff --git a/gestionatr/data/TipoMensajeE2.xsd b/gestionatr/data/TipoMensajeE2.xsd new file mode 100644 index 00000000..b0b795a4 --- /dev/null +++ b/gestionatr/data/TipoMensajeE2.xsd @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + Tabla 135 + + + + + + + + + + + + Tabla 26 + + + + + + + + + + + + + + + + + Tabla 135 + + + + + + Tabla 26 + + + + + + + + + + + Tabla 26 + + + + + + + + + + + + + + + + + + + Tabla 134 + + + + + Tabla 26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 27 + + + + + + + + + + + + + + + + + + + diff --git a/gestionatr/data/TipoMensajeE205.xsd b/gestionatr/data/TipoMensajeE205.xsd new file mode 100644 index 00000000..89457d2c --- /dev/null +++ b/gestionatr/data/TipoMensajeE205.xsd @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + Tabla 134 + + + + + + Tabla 113 + + + + + + + + + + + + + Tabla 9 + + + + + + + diff --git a/gestionatr/data/TipoMensajeM101.xsd b/gestionatr/data/TipoMensajeM101.xsd index 5399a6b6..ff5dd8cb 100644 --- a/gestionatr/data/TipoMensajeM101.xsd +++ b/gestionatr/data/TipoMensajeM101.xsd @@ -1,4 +1,6 @@ + + @@ -28,6 +30,8 @@ + + Tabla 108 diff --git a/gestionatr/data/TipoMensajeM105.xsd b/gestionatr/data/TipoMensajeM105.xsd index d934adff..a2051d2a 100644 --- a/gestionatr/data/TipoMensajeM105.xsd +++ b/gestionatr/data/TipoMensajeM105.xsd @@ -1,4 +1,6 @@ + + @@ -19,22 +21,21 @@ Tabla 116 + + - - - Tabla 113 - - + Tabla 9 + diff --git a/gestionatr/data/TipoMensajeM2.xsd b/gestionatr/data/TipoMensajeM2.xsd new file mode 100644 index 00000000..c5fe1ab4 --- /dev/null +++ b/gestionatr/data/TipoMensajeM2.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 116 + + + + + + + + + + + + diff --git a/gestionatr/data/TipoMensajeP002.xsd b/gestionatr/data/TipoMensajeP002.xsd index 2c6c3a13..d179fb5e 100644 --- a/gestionatr/data/TipoMensajeP002.xsd +++ b/gestionatr/data/TipoMensajeP002.xsd @@ -1,4 +1,6 @@ + + @@ -26,51 +28,6 @@ - - - - Tabla 64 - - - - - - - - - - - - - - - - - - Tabla 26 - - - - - Tabla 123 - - - - - - - - - - Tabla 9 - - - - - - Tabla 113 - - @@ -82,12 +39,13 @@ Tabla 26 + Tabla 26 - + @@ -100,7 +58,6 @@ - @@ -127,6 +84,50 @@ Tabla 26 + + + + Tabla 64 + + + + + + + + + + + + + + + + + + + + Tabla 26 + + + + + Tabla 123 + + + + + + + + + + + Tabla 9 + + + + @@ -138,7 +139,6 @@ - @@ -183,11 +183,17 @@ Tabla 35 + + + + Tabla 26 + + @@ -208,6 +214,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/gestionatr/data/TipoMensajeR101.xsd b/gestionatr/data/TipoMensajeR101.xsd index fabea5d2..f40e3f79 100644 --- a/gestionatr/data/TipoMensajeR101.xsd +++ b/gestionatr/data/TipoMensajeR101.xsd @@ -1,4 +1,5 @@ + @@ -92,7 +93,13 @@ Tabla 35 + + + + Tabla 139 + + Tabla 86 @@ -122,6 +129,11 @@ Tabla 87 + + + Tabla 140 + + diff --git a/gestionatr/data/TipoMensajeRechazo.xsd b/gestionatr/data/TipoMensajeRechazo.xsd index 87622190..b93086db 100644 --- a/gestionatr/data/TipoMensajeRechazo.xsd +++ b/gestionatr/data/TipoMensajeRechazo.xsd @@ -1,4 +1,5 @@ + @@ -118,6 +119,8 @@ + + @@ -153,7 +156,9 @@ Tabla 27 + + diff --git a/gestionatr/data/TipoMensajeT101.xsd b/gestionatr/data/TipoMensajeT101.xsd index cb96b9c6..ceac7c4b 100644 --- a/gestionatr/data/TipoMensajeT101.xsd +++ b/gestionatr/data/TipoMensajeT101.xsd @@ -1,4 +1,5 @@ + @@ -27,11 +28,12 @@ Tabla 66 - + - Tabla 26 + Tabla 137 + Tabla 26 @@ -43,11 +45,7 @@ - - - Tabla 113 - - + Tabla 9 diff --git a/gestionatr/data/TipoMensajeT105.xsd b/gestionatr/data/TipoMensajeT105.xsd index 342078d8..a970e93d 100644 --- a/gestionatr/data/TipoMensajeT105.xsd +++ b/gestionatr/data/TipoMensajeT105.xsd @@ -1,4 +1,5 @@ + @@ -19,17 +20,19 @@ Tabla 26 + + + Tabla 137 + + + - - - Tabla 113 - - + Tabla 9 diff --git a/gestionatr/data/TiposComplejos.xsd b/gestionatr/data/TiposComplejos.xsd index f40b40ca..4265d001 100644 --- a/gestionatr/data/TiposComplejos.xsd +++ b/gestionatr/data/TiposComplejos.xsd @@ -1,4 +1,6 @@ + + @@ -62,6 +64,11 @@ + + + + + @@ -118,6 +125,75 @@ + + + + + Tabla 1 + + + + + + + + + + + Tabla 1 + + + + + + + + + + + Tabla 2 + + + + + Tabla 3 + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 102 + + + + + Tabla 102 + + + + + + @@ -270,19 +346,36 @@ - + - - + + + + + + + + + + + + - Tabla 113 + Tabla 11 + + + + + + Tabla 9 + @@ -397,6 +490,11 @@ + + + + + @@ -567,6 +665,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -783,6 +919,91 @@ + + + + + + Tabla 129 + + + + + Tabla 26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 129 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1063,8 +1284,15 @@ + + + Tabla 113 + + + + @@ -1262,10 +1490,43 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1299,6 +1560,16 @@ + + + + + Tabla 131 + + + + + @@ -1329,6 +1600,112 @@ + + + + + + + Tabla 129 + + + + + Tabla 130 + + + + + Tabla 26 + + + + + + + + + + + + + + + Tabla 129 + + + + + Tabla 130 + + + + + Tabla 26 + + + + + + + + + + + + + + Tabla 126 + + + + + + + Tabla 129 + + + + + Tabla 130 + + + + + Tabla 26 + + + + + + + + + + + + + + + Tabla 129 + + + + + Tabla 130 + + + + + Tabla 26 + + + + + + + + @@ -1341,7 +1718,6 @@ - @@ -1484,6 +1860,7 @@ + @@ -1608,6 +1985,111 @@ + + + + + + Tabla 113 + + + + + + + + + + + + + Tabla 26 + + + + + Tabla 130 + + + + + + + + + + + Tabla 26 + + + + + Tabla 130 + + + + + + + + + + + + + + + + + + + + Tabla 113 + + + + + Tabla 133 + + + + + + + + + + + + Tabla 113 + + + + + Tabla 133 + + + + + + + + + + + + Tabla 113 + + + + + Tabla 133 + + + + + + diff --git a/gestionatr/data/TiposSencillos.xsd b/gestionatr/data/TiposSencillos.xsd index dd04322a..e4532da2 100644 --- a/gestionatr/data/TiposSencillos.xsd +++ b/gestionatr/data/TiposSencillos.xsd @@ -1,5 +1,6 @@ - + + @@ -51,118 +52,6 @@ - - - Bono Social (tabla 116) - 0 No Bono Social - Retirada - 1 Bono Social - - - - - - - - - - C骴igo Motivo Expediente Acometida (tabla 125) - 01 Aumento potencia - 02 Cambio tensi髇 - 03 Cambio tarifa - 04 Nuevo suministro - 05 Colectivo nueva construcci髇 - 06 Colectivo electrificaci髇 rural - 07 Informativo Plan urban韘tico - 08 Informativo Plan industrial - 09 Informativo Productor de R間imen Especial - 10 Colectivo reconstrucci髇 vivienda - 11 TCT No relacionado a NNSS - 12 TCT Relacionado a NNSS. - 13 Colectivo renovaci髇 de Instalaciones de enlace varios suministros - 14 Renovaci髇 de instalaciones de enlace - - - - - - - - - - - - - - - - - - - - - - C骴igo Motivo Anomal韆/Fraude (tabla 63) - A001 Programaci髇/parametrizaci髇 err髇ea - A002 Equipo de Medida con conexi髇 err髇ea - A003 Equipo de Medida inadecuado a instalaci髇 - A004 Contador averiado - A005 Transformadores averiados - A006 M骴em averiado/Fallo comunicaci髇 - A007 Error medici髇 fuera de margen - A008 Programaci髇/parametrizaci髇 err髇ea por aver韆 - A009 Contador no se lee - A010 Constante contador no corresponde a constante facturaci髇 - A011 Lectura err髇ea - A012 Suministro no se factura - A013 Corriente directa autorizada - A014 Tarifa/Discriminaci髇 horaria mal informada o aplicada - F001 Corriente directa con contrato - F002 Corriente directa con contrato (doble acometida) - F003 Corriente directa sin contrato (sin contador) - F004 Corriente directa sin contrato (con contador) - F005 Inversi髇 entrada-salida - F006 Puente entrada-salida en la misma fase (shunt) - F007 Puente de tensi髇 aislado/desconectado - F008 Equipo de medida manipulado - F009 Conexi髇 de equipo de medida manipulada - F010 Cambio de placa caracter韘ticas de transformadores I/T - F011 Equipo de medida sustituido sin autorizaci髇 - F012 Programaci髇/parametrizaci髇 alterada - F013 ICP puenteado o no ajustado a potencia contratada - F014 Cesi髇 de energ韆 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Codigo CNAE @@ -179,20 +68,6 @@ - - - - - - - - - - - - - - codigo contrato ATR @@ -228,12 +103,14 @@ + + @@ -376,8 +253,6 @@ - - @@ -430,21 +305,31 @@ + + + + + + - - - - - codigo motivo del rechazo (tabla 27) permitidos en el proceso de Traspaso a COR - 01 No existe Punto de Suministro asociado al CUPS - E5 CUPS sujeto a LOPD - - - - - + + + + + + + + + + + + + + + + @@ -505,8 +390,8 @@ 76 Excedente del periodo 6 81 Tipo de autoconsumo 82 Coeficiente de reparto - 83 Recargo por la no dedicaci髇 exclusiva de la carga a veh韈ulos el閏tricos - 84 Descuento en peajes de transporte y distribuci髇 a la industria electrointensiva + 83 Recargo por la no dedicaci髇 exclusiva de la carga a veh韈ulos el閏tricos + 84 Descuento en peajes de transporte y distribuci髇 a la industria electrointensiva 85 Regularizaci髇 descuento en peajes de transporte y distribuci髇a la industria electrointensiva 86 Descuento por retardo en activaci髇 autoconsumo imputable al distribuidor 87 Descuento por retardo en activaci髇 autoconsumo NO imputable al distribuidor @@ -569,9 +454,6 @@ - - - @@ -585,28 +467,12 @@ - - - - - - - - - - - - - - - - @@ -636,6 +502,13 @@ + + + + + + + decimal de tres digitos @@ -646,13 +519,6 @@ - - - - - - - @@ -679,6 +545,14 @@ + + + + + + + + @@ -691,14 +565,6 @@ - - - - - - - - @@ -1046,9 +912,6 @@ 0550201 No existe autoconsumo asociado al CUPS 0550202 Factura autoconsumo correcta. Se adjunta desglose 0550203 Improcedente. Se adjunta explicacion en comentarios - 0560101 Se envia desglose de importes facturados autoconsumo - 0560201 No existe autoconsumo asociado al CUPS - 0560202 Improcedente. Se adjunta explicacion en comentarios 0570101 Expediente anulado 0570102 Expediente rectificado 0570103 El cliente aporta documentacion que justifica suministro sin actividad @@ -1163,6 +1026,23 @@ 0740202 Movimiento realizado en plazo 0740203 Movimiento fuera de plazo imputable al cliente 0740204 Improcedente. Se adjunta explicaci髇 en comentarios + 0750101 Se refactura el concepto reclamado + 0750201 Conceptos reclamados correctamente facturados (incluir explicaci髇 en campo comentarios) + 0750202 Improcedente. Se adjunta explicaci髇 en comentarios + 0760101 Procedente. Se adjunta explicaci髇 en comentarios + 0760201 Improcedente. Se adjunta explicaci髇 en comentarios + 0770101 Procedente. Se agiliza el tr醡ite unilateral + 0770201 Improcedente. Proceso en plazo + 0770202 mprocedente. Instalaci髇 de generaci髇 pendiente de activar + 0780101 Procedente. Se agiliza el tr醡ite unilateral + 0780201 Improcedente. Proceso en plazo + 0780202 Improcedente. Se adjunta explicaci髇 en comentarios + 0790101 Procedente. Se facilita documentaci髇 + 0790201 Improcedente. Se adjunta explicaci髇 comentarios + 0800101 Procedente. Se agiliza tr醡ite de reposici髇 + 0800201 Improcedente. Se adjunta explicaci髇 comentarios + 0810101 Procedente. Se agiliza tr醡ite de reposici髇 + 0810201 Improcedente. Se adjunta explicaci髇 comentarios @@ -1486,9 +1366,6 @@ - - - @@ -1603,11 +1480,22 @@ - - - - - + + + + + + + + + + + + + + + + @@ -1627,24 +1515,6 @@ - - - Esquema de medida (tabla 130) - A - EdM Bidireccional en PF - B - EdM Bidireccional en PF y EdM gen. neta - C - EdM Consumo Total y EdM bidireccional gen. neta - D - EdM Consumo Total y EdM gen bruta y EdM cons SSAA - E - Configuraci髇 singular - - - - - - - - - - Estado telefono (tabla 41) @@ -1717,6 +1587,14 @@ + + + + + + + + Indicativo tipo de activacion (tabla 8) @@ -1876,13 +1754,17 @@ - + - Motivo de baja o suspension de suministro (tabla 10) - 01 Baja por cese de la actividad - 02 Baja por fin de contrato de energia - 03 Corte por impago - 04 Baja por impago + Motivo de baja o suspension de suministro (tabla 136) + 01 Modificaci髇 del contrato de acceso por modificaci髇 del tipo de autoconsumo colectivo + 02 Modificaci髇 del contrato de acceso por modificaci髇 del acuerdo de reparto + 03 Modificaci髇 del contrato de acceso por modificaci髇 de la potencia de generaci髇 + 04 Modificaci髇 del contrato de acceso por Alta en autoconsumo colectivo + 05 Modificaci髇 del contrato de acceso por baja total del autoconsumo colectivo + 06 Modificaci髇 del contrato de acceso por baja de un participante en el autoconsumo colectivo + 07 Modificaci髇 del contrato de acceso por modificaci髇 de otros datos de autoconsumo colectivo + 08 Modificaci髇 del contrato de acceso por modificaci髇 de datos de autoconsumo individual @@ -1890,24 +1772,26 @@ + + + + - + - Motivo Comunicaci髇 Baja Unidireccional (tabla 120) - 01 Baja del contrato de acceso de duraci髇 inferior a un a駉 seg鷑 fecha solicitada por la comercializadora - 02 Baja del contrato de acceso por orden judicial o mandato de organismo oficial - 03 Baja del contrato de acceso por rechazo del COR al traspaso - 04 Baja del contrato de acceso a iniciativa de la distribuidora por seguridad de la red. - 05 Baja del contrato de acceso por haber pasado dos meses desde que se suspendi un punto de suministro tras el desistimiento de un cambio de comercializador activado sobre un punto de suministro suspendido por impago - + Motivo de baja o suspension de suministro (tabla 10) + 01 Baja por cese de la actividad + 02 Baja por fin de contrato de energia + 03 Corte por impago + 04 Baja por impago + - @@ -1919,14 +1803,21 @@ 04 Alta en autoconsumo 05 Modificaci髇 de tipo de autoconsumo 06 Modificaci髇 coeficiente de reparto - 07 Modificaci髇 potencia generaci髇 + 07 Modificaci髇 potencia generaci髇 comunicada por la Comunidad Aut髇oma 08 Baja en autoconsumo 09 Modificaci髇 desde peaje 3.1A a peaje 6.1DT 10 Modificaci髇 desde peaje 3.1A a peaje 6.2DT 11 Falta fichero coeficientes del a駉 que inicia + 12 Modificaci髇 potencia generaci髇 13 Informaci髇 aplicaci髇 descuento por retardo en activaci髇 autoconsumo imputable al distribuidor 14 Informaci髇 aplicaci髇 descuento por retardo en activaci髇 autoconsumo NO imputable al distribuidor - 15 Alta en autoconsumo colectivo comunicada por un representante + 15 Alta en autoconsumo colectivo comunicada representante de autoconsumo + 16 Baja en autoconsumo colectivo + 17 Baja en autoconsumo comunicada por un participante, representante de autoconsumo o Comunidad Aut髇oma + 18 Modificaci髇 otros datos autoconsumo + 19 Alta en autoconsumo colectivo comunicada por un participante + 20 Suministro contratable + 21 Modificaci髇 indicativo esencialidad @@ -1941,9 +1832,16 @@ + + + + + + + @@ -1974,42 +1872,7 @@ - - - - - Motivo No Contratable (tabla 123) - 01 El PS no ha pasado la inspecci髇 de la instalaci髇 de enlace (instalaci髇 desde la Caja General de Protecci髇, CGP, al contador) - 02 Instalaci髇 el閏trica peligrosa - 03 Necesidad de abrir expediente de acometida: Derechos caducados - 04 Expediente abierto de nuevos suministos - 05 Expediente abierto de inspecci髇 - 06 Falta licencia de ocupaci髇, c閐ula de habitabilidad u otra documentaci髇 relevante que impide la contrataci髇 del NNSS - 07 Orden o Resoluci髇 de la Administraci髇 P鷅lica competente, Resoluci髇 o Mandato Judicial que impide la contrataci髇 en el PS - - - - - - - - - - - - - - - Motivo de posible traspaso a la COR (tabla 119) - 01 Solicitud de baja por fin de contrato de energ韆 (B1 motivo 02) - 02 Solicitud de desistimiento a un cambio de comercilizador de un nuevo titular - 03 Decisi髇 fundada de la Direcci髇 General de Pol韙ica Energ閠ica y Minas, cautelar o definitivamente, se traspasan los puntos de suministro al COR - - - - - - + @@ -2029,6 +1892,13 @@ 07 Modo control potencia 08 Periodicidad facturacion 09 Direccion Punto de Suministro + 10 Tipo autoconsumo + 11 Tipo subsecci髇 autoconsumo + 12 Colectivo + 13 TipoCups + 14 Servicios Auxiliares + 15 趎ico contrato + 16 Acuerdo de reparto/ Fichero de coeficientes @@ -2041,6 +1911,13 @@ + + + + + + + @@ -2087,6 +1964,7 @@ 40 Estimada 50 Autolectura 60 Telegestion + 70 Calculada 99 Sin lectura @@ -2097,6 +1975,7 @@ + @@ -2126,41 +2005,6 @@ - - - - - - - - - - - - - - - - - - Resultado de desistimiento (tabla 118) - 01 Vuelta a la situaci髇 anterior - En servicio - 02 Vuelta a la situaci髇 anterior - Sin servicio (Cortado) - 03 Traspaso a la COR - 04 Baja del contrato por rechazo de la COR al traspaso - 05 Baja por cese de actividad - 06 Activaci髇 de Cambio de Comercializador - - - - - - - - - - - Resultado de la intervencion (Tabla 75) @@ -2207,44 +2051,6 @@ - - - Secci髇 Registro (tabla 127) - 1 - Sin excedentes - 2 - Con excedentes - - - - - - - - - - tipo de tensi髇 solicitada (tabla 117) - M Monof醩ica - T Trif醩ica - - - - - - - - - - Subsecci髇 (tabla 128) - a0 - Con excedentes y mecanismo de compesaci髇 simplificado - b1 - Con excedentes sin mecanismo de compensaci髇 y un 鷑ico contrato de suministro - b2 - Con excedentes sin mecanismo de compensaci髇 y varios contratos de suministro - - - - - - - - Subtipo de Reclamacion o Peticion (tabla 82) @@ -2295,7 +2101,6 @@ 048 PETICI覰 INFORMACI覰 ADICIONAL RECHAZO 049 FALTA FICHERO DE MEDIDA 055 DISCONFORMIDAD IMPORTE FACTURADO AUTOCONSUMO - 056 PETICI覰 DESGLOSE IMPORTE FACTURADO AUTOCONSUMO 057 DISCONFORMIDAD CON EXPEDIENTE DE ANOMALIA Y FRAUDE (sin factura emitida) 058 RETRASO EN PLAZO ACEPTACI覰 CAMBIO DE COMERCIALIZADOR 059 RETRASO EN PLAZO ACTIVACI覰 CAMBIO DE COMERCIALIZADOR @@ -2313,6 +2118,13 @@ 072 RETRASO EN PLAZO DE ACTIVACI覰 DESISTIMIENTO 073 PAR罬ETROS DE COMUNICACI覰 074 RETRASO PLAZO ACEPTACI覰 ANULACI覰 + 075 DISCONFORMIDAD CON AUTOCONSUMO FACTURADO + 076 CONSULTA SEGUIMIENTO AUTOCONSUMO + 077 RETRASO EN EL PLAZO DE ACTIVACI覰 UNIDIRECCIONAL AUTOCONSUMO + 078 RETRASO EN EL PLAZO DE ACTIVACI覰 BAJA UNIDIRECCIONAL AUTOCONSUMO + 079 SOLICITUD CONTRATO DE ACCESO + 080 RETRASO EN PLAZO ACEPTACI覰 REPOSICI覰 + 081 RETRASO EN PLAZO ACTIVACI覰 REPOSICI覰 @@ -2363,7 +2175,6 @@ - @@ -2381,6 +2192,13 @@ + + + + + + + @@ -2461,34 +2279,6 @@ - - - Tecnolog韆 de generaci髇 (tabla 126) - - - - - - - - - - - - - - - - - - - - - - - - - Tension de Suministro CIE y APM (tabla 64) @@ -2598,12 +2388,6 @@ - - - - - - Tipo aclarador de finca (tabla 16) @@ -2728,28 +2512,8 @@ 01 Autoconsumo tipo 1 2A Autoconsumo tipo 2 segun el Art. 13.2.a) del RD 900/2015 2B Autoconsumo tipo 2 segun el Art. 13.2.b) del RD 900/2015 - 31 Sin Excedentes Individual - Consumo - 32 Sin Excedentes Colectivo - Consumo - 33 Sin Excedentes Colectivo con acuerdo de compensaci髇 - Consumo - 41 Con excedentes y compensaci髇 Individual - Consumo - 42 Con excedentes y compensaci髇 Colectivo - Consumo - 43 Con excedentes y compensaci髇 Colectivo a trav閟 de red - Consumo - 51 Con excedentes sin compensaci髇 Individual sin cto de SSAA en Red Interior - Consumo - 52 Con excedentes sin compensaci髇 Individual con cto SSAA en Red Interior - Consumo - 53 Con excedentes sin compensaci髇 individual con cto SSAA en Red Interior - SSAA - 54 Con excedentes sin compensaci髇 Colectivo en Red Interior - Consumo - 55 Con excedentes sin compensaci髇 Colectivo con cto de SSAA en Red Interior - Consumo - 56 Con excedentes sin compensaci髇 Colectivo con cto de SSAA en Red Interior - SSAA - 57 Con excedentes sin compensaci髇 Colectivo sin cto de SSAA (despreciable) en red interior - Consumo - 58 Con excedentes sin compensaci髇 Colectivo sin cto de SSAA a trav閟 de red - Consumo - 61 Con excedentes sin compensaci髇 Individual con cto SSAA a trav閟 de red - Consumo - 62 Con excedentes sin compensaci髇 individual con cto SSAA a trav閟 de red - SSAA - 63 Con excedentes sin compensaci髇 Colectivo con cto de SSAA a trav閟 de red - Consumo - 64 Con excedentes sin compensaci髇 Colectivo con cto de SSAA a trav閟 de red - SSAA - 71 Con excedentes sin compensaci髇 Individual con cto SSAA a trav閟 de red y red interior - Consumo - 72 Con excedentes sin compensaci髇 individual con cto SSAA a trav閟 de red y red interior - SSAA - 73 Con excedentes sin compensaci髇 Colectivo con cto de SSAA a trav閟 de red y red interior - Consumo - 74 Con excedentes sin compensaci髇 Colectivo con cto de SSAA a trav閟 de red y red interior - SSAA + 11 Sin excedentes + 12 Con excedentes @@ -2758,40 +2522,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo de cargo (tabla 132) - 01 Cargo correspondiente al t閞mino de potencia - 02 Cargo correspondiente al t閞mino de energ韆 - - - - - + + + @@ -2911,6 +2644,8 @@ la reclamacion 21 Tarifa 22 Impuesto Electrico 23 Desglose Suplemento Territorial + 24 Pago por el uso de la red - autoconsumo + 25 Acuerdo de reparto/ Fichero de coeficientes: Eliminado. Es un concepto de contrato, no de facturaci髇 26 Retardo en activaci髇 autoconsumo 27 Descuento retardo activaci髇 autoconsumo superior al valor econ髆ico de la energ韆 horaria consumida de la red @@ -2937,6 +2672,7 @@ la reclamacion + @@ -2969,30 +2705,6 @@ la reclamacion - - - Tipo CUPS (tabla 131) - 01 - Consumo - 02 - Servicios Auxiliares - - - - - - - - - - Tipo de desistimiento (tabla 122) - 01 Desistimiento en plazo m醲. de 14 d韆s naturales - 02 Desistimiento por incumplimiento de comercializador en contrataci髇 - - - - - - - Tipo de Telegestion (tabla 111) @@ -3113,20 +2825,6 @@ la reclamacion - - - Tipo Impuesto (Tabla 114) - 1 - IVA / IPSI/ IGIC - 2 - IVA / IPSI/ IGIC reducido - 3 - IVA / IPSI/ IGIC EXENTO - - - - - - - - Tipo de incidencia en equipos de medida (Tabla 86) @@ -3169,20 +2867,6 @@ la reclamacion - - - Tipo de instalaci髇 (tabla 129) - 01 - Red interior - 02 - Red interior da varios consumidores (instalaci髇 de enlace) - 03 - Pr髕ima a trav閟 de red - - - - - - - - Tipo de Intervencion (tabla 74) @@ -3201,8 +2885,8 @@ la reclamacion S Solicitud de modificacion contractual administrativa N Solicitud de modificacion contractual tecnica A Solicitud de modificacion tanto administrativa como tecnica - M Solicitud de aplicacion SMV - B Baja de SMV, vuelta a suministro normal + M Solicitud de aplicaci髇 de SMV. + B Baja del SMV. Vuelta al suministro normal. @@ -3251,6 +2935,18 @@ la reclamacion + + + tipo de tensi髇 solicitada (tabla 117) + M Monof醩ica + T Trif醩ica + + + + + + + Tipo movimiento del aparato (tabla 31) @@ -3279,10 +2975,30 @@ la reclamacion - + - tipo de punto de medida (tabla 30) - 01 Punto de medida tipo 1 + Bono Social (tabla 116) + 0 No Bono Social - Retirada + 1 Bono Social + + + + + + + + + + + + + + + + + + tipo de punto de medida (tabla 30) + 01 Punto de medida tipo 1 02 Punto de medida tipo 2 03 Punto de medida tipo 3 04 Punto de medida tipo 4 @@ -3346,6 +3062,7 @@ la reclamacion 07 Juzgados 08 Afectado no titular del PS 09 Asociacion de Consumidores + 11 Junta Arbitral de Consumo @@ -3357,6 +3074,7 @@ la reclamacion + @@ -3374,6 +3092,7 @@ la reclamacion 10 CIE generaci髇 11 Declaraci髇 relativa a puntos de recarga de veh韈ulos el閏tricos de acceso p鷅lico 12 Fichero de coeficientes de reparto + 13 Certificado suelo urbanizado @@ -3389,6 +3108,7 @@ la reclamacion + @@ -3407,32 +3127,10 @@ la reclamacion + - - - - - Solicitud de Contrataci髇 (tabla 124) - A300 Solicitud de nuevo suministro - C100 Solicitud de cambio de comercializador sin modificaci髇 en el contrato de acceso - C200 Solicitud de cambio de comercializador con modificaci髇 en el contrato de acceso - B101 Baja por cese de actividad - B102 Baja por fin de contrato de suministro - B103 Corte o suspensi髇 del suministro por impago - B104 Baja por impago - M100 Solicitud de modificaci髇 contractual - - - - - - - - - - - + @@ -3650,113 +3348,6 @@ la reclamacion - - - Cadena de un caracter restringido - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo de contestaci髇 indidencia (tabla 121) - 01 Nuevo tel閒ono de contacto - 02 Deficiencia/Trabajos subsanada. Contactar con cliente - - - - - - - - - - cadena de dos caracteres con valores restringidos - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Variables aportacion informacion (tabla 76) @@ -3793,10 +3384,10 @@ la reclamacion - + - - + + @@ -3829,12 +3420,6 @@ la reclamacion - - - - - - @@ -3991,4 +3576,660 @@ la reclamacion + + + + + + + + + Tipo Impuesto (Tabla 114) + 1 - IVA / IPSI/ IGIC + 2 - IVA / IPSI/ IGIC reducido + 3 - IVA / IPSI/ IGIC EXENTO + + + + + + + + + + + + + + + + + + + + + + + + + + Secci髇 Registro (tabla 127) + 1 - Sin excedentes + 2 - Con excedentes + + + + + + + + + + Subsecci髇 (tabla 128) + a0 - Con excedentes y mecanismo de compesaci髇 simplificado + b1 - Con excedentes sin mecanismo de compensaci髇 y un 鷑ico contrato de suministro + b2 - Con excedentes sin mecanismo de compensaci髇 y varios contratos de suministro + + + + + + + + + + + Tipo de instalaci髇 (tabla 129) + 01 - Red interior + 02 - Red interior da varios consumidores (instalaci髇 de enlace) + 03 - Pr髕ima a trav閟 de red + + + + + + + + + + + + Esquema de medida (tabla 130) + A - EdM Bidireccional en PF + B - EdM Bidireccional en PF y EdM gen. neta + C - EdM Consumo Total y EdM bidireccional gen. neta + D - EdM Consumo Total y EdM gen bruta y EdM cons SSAA + E - Configuraci髇 singular + F - Configuraci髇 cuando en un mismo CAU multigeneraci髇 coexistan esquemas de medida diferentes + + + + + + + + + + + + + + Tipo CUPS (tabla 131) + 01 - Consumo + 02 - Servicios Auxiliares + + + + + + + + + + + + + + + + + + + + + + + + Tecnolog韆 de generaci髇 (tabla 126) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cadena de dos caracteres con valores restringidos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cadena de un caracter restringido + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo de contestaci髇 indidencia (tabla 121) + 01 Nuevo tel閒ono de contacto + 02 Deficiencia/Trabajos subsanada. Contactar con cliente + + + + + + + + + + Motivo de posible traspaso a la COR (tabla 119) + 01 Solicitud de baja por fin de contrato de energ韆 (B1 motivo 02) + 02 Solicitud de desistimiento a un cambio de comercilizador de un nuevo titular + 03 Decisi髇 fundada de la Direcci髇 General de Pol韙ica Energ閠ica y Minas, cautelar o definitivamente, se traspasan los puntos de suministro al COR + + + + + + + + + + + + + + Tipo de desistimiento (tabla 122) + 01 Desistimiento en plazo m醲. de 14 d韆s naturales + 02 Desistimiento por incumplimiento de comercializador en contrataci髇 + + + + + + + + + + Resultado de desistimiento (tabla 118) + 01 Vuelta a la situaci髇 anterior - En servicio + 02 Vuelta a la situaci髇 anterior - Sin servicio (Cortado) + 03 Traspaso a la COR + 04 Baja del contrato por rechazo de la COR al traspaso + 05 Baja por cese de actividad + 06 Activaci髇 de Cambio de Comercializador + + + + + + + + + + + + + + Motivo No Contratable (tabla 123) + 01 El PS no ha pasado la inspecci髇 de la instalaci髇 de enlace (instalaci髇 desde la Caja General de Protecci髇, CGP, al contador) + 02 Instalaci髇 el閏trica peligrosa + 03 Necesidad de abrir expediente de acometida: Derechos caducados + 04 Expediente abierto de nuevos suministos + 05 Expediente abierto de inspecci髇 + 06 Falta licencia de ocupaci髇, c閐ula de habitabilidad u otra documentaci髇 relevante que impide la contrataci髇 del NNSS + 07 Orden o Resoluci髇 de la Administraci髇 P鷅lica competente, Resoluci髇 o Mandato Judicial que impide la contrataci髇 en el PS + + + + + + + + + + + + + + + Solicitud de Contrataci髇 (tabla 124) + A300 Solicitud de nuevo suministro + C100 Solicitud de cambio de comercializador sin modificaci髇 en el contrato de acceso + C200 Solicitud de cambio de comercializador con modificaci髇 en el contrato de acceso + B101 Baja por cese de actividad + B102 Baja por fin de contrato de suministro + B103 Corte o suspensi髇 del suministro por impago + B104 Baja por impago + M100 Solicitud de modificaci髇 contractual + + + + + + + + + + + + + + + + + + + + + + C骴igo Motivo Anomal韆/Fraude (tabla 63) + A001 Programaci髇/parametrizaci髇 err髇ea + A002 Equipo de Medida con conexi髇 err髇ea + A003 Equipo de Medida inadecuado a instalaci髇 + A004 Contador averiado + A005 Transformadores averiados + A006 M骴em averiado/Fallo comunicaci髇 + A007 Error medici髇 fuera de margen + A008 Programaci髇/parametrizaci髇 err髇ea por aver韆 + A009 Contador no se lee + A010 Constante contador no corresponde a constante facturaci髇 + A011 Lectura err髇ea + A012 Suministro no se factura + A013 Corriente directa autorizada + A014 Tarifa/Discriminaci髇 horaria mal informada o aplicada + F001 Corriente directa con contrato + F002 Corriente directa con contrato (doble acometida) + F003 Corriente directa sin contrato (sin contador) + F004 Corriente directa sin contrato (con contador) + F005 Inversi髇 entrada-salida + F006 Puente entrada-salida en la misma fase (shunt) + F007 Puente de tensi髇 aislado/desconectado + F008 Equipo de medida manipulado + F009 Conexi髇 de equipo de medida manipulada + F010 Cambio de placa caracter韘ticas de transformadores I/T + F011 Equipo de medida sustituido sin autorizaci髇 + F012 Programaci髇/parametrizaci髇 alterada + F013 ICP puenteado o no ajustado a potencia contratada + F014 Cesi髇 de energ韆 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C骴igo Motivo Expediente Acometida (tabla 125) + 01 Aumento potencia + 02 Cambio tensi髇 + 03 Cambio tarifa + 04 Nuevo suministro + 05 Colectivo nueva construcci髇 + 06 Colectivo electrificaci髇 rural + 07 Informativo Plan urban韘tico + 08 Informativo Plan industrial + 09 Informativo Productor de R間imen Especial + 10 Colectivo reconstrucci髇 vivienda + 11 TCT No relacionado a NNSS + 12 TCT Relacionado a NNSS. + 13 Colectivo renovaci髇 de Instalaciones de enlace varios suministros + 14 Renovaci髇 de instalaciones de enlace + + + + + + + + + + + + + + + + + + + + + + codigo motivo del rechazo (tabla 27) permitidos en el proceso de Traspaso a COR + 01 No existe Punto de Suministro asociado al CUPS + E5 CUPS sujeto a LOPD + + + + + + + + + + + + Motivo Comunicaci髇 Baja Unidireccional (tabla 120) + 01 Baja del contrato de acceso de duraci髇 inferior a un a駉 seg鷑 fecha solicitada por la comercializadora + 02 Baja del contrato de acceso por orden judicial o mandato de organismo oficial + 03 Baja del contrato de acceso por rechazo del COR al traspaso + 04 Baja del contrato de acceso a iniciativa de la distribuidora por seguridad de la red. + 05 Baja del contrato de acceso por haber pasado dos meses desde que se suspendi un punto de suministro tras el desistimiento de un cambio de comercializador activado sobre un punto de suministro suspendido por impago + + + + + + + + + + + + + Tipo de cargo (tabla 132) + 01 Cargo correspondiente al t閞mino de potencia + 02 Cargo correspondiente al t閞mino de energ韆 + + + + + + + + + + Tipo de subsecci髇 (tabla 133) + 10 - Sin excedentes no acogidos a compensaci髇 + 11 - Sin excedentes acogidos a compensaci髇 + 20 - Con excedentes no acogidos a compensaci髇 + 21 - Con excedentes acogidos a compensaci髇 + + + + + + + + + + + + + + Resultado de la activacion de la reposicion (tabla 134) +01 Vuelta a la situacion anterior En servicio La reposicion ha finalizado devolviendo el PS a la situacion anterior a la peticion que se ha repuesto +02 Vuelta a la situacion anterior En servicio (cortado) Reposicion de una solicitud de C1/C2 en la que se produjo un reenganche del PS. Se vuelve a la situacion anterior en la que el PS se encontraba cortado. En el caso de desear la reconexion del PS, la peticion se deber realizar por fuera del sistema al no existir una solicitud de corte en curso. +03 Traspaso a la CORTraspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. +04 Baja del contrato por rechazo de la COR Traspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. +05 Baja por cese de actividad Concurrencia de procesos: se prioriza la baja (en la medida de lo posible) por cese de actividad solicitada por el consumidor sobre el traspaso a la COR. +06 Activacion de cambio de comercializador Concurrencia de procesos: se prioriza el cambio de comercializador sobre el traspaso a la COR. + + + + + + + + + + + + + Tipo de reposicion (tabla 135) + + + +01 Reposicion por contratacion o cambio indebido solicitada por el comercializador entrante. Por cambio sin autorizacion o firma del cliente +02 Reposicion por error administrativo solicitada por el comercializador entrante Por ejemplo, error en CUPS, direccion no coincidente, etc. +03 Reposicion solicitada por el comercializador saliente Cuando la reposicion se solicita por el comercializador saliente y no tiene Traspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. + + + + + + + + + + Motivo Comunicacion Modificacion Unidireccional (tabla 136) + + +01 Modificacion del contrato de acceso por modificacion del tipo de autoconsumo colectivo +02 Modificacion del contrato de acceso por modificacion del acuerdo de reparto +03 Modificacion del contrato de acceso por modificacion de la potencia de generacion +04 Modificacion del contrato de acceso por Alta en autoconsumo colectivo +05 Modificacion del contrato de acceso por baja total del autoconsumo colectivo +06 Modificacion del contrato de acceso por baja de un participante en el autoconsumo colectivo +07 Modificacion del contrato de acceso por modificacion de otros datos de autoconsumo colectivo +08 Modificaci髇 del contrato de acceso por modificaci髇 de datos de autoconsumo individual + + + + + + + + + + + + + + + + Tipo esencialidad (tabla 137) + + +00 No esencial +01 Esencial por electrodependencia + + + + + + + + + Indicativo validacion cliente (Tabla 138) + + +S Si +N No +B Indicador NIF/CIF vacio o no real El Distribuidor devolvera el valor B en los casos en los que no disponga de informacion del NIF/CIF del contrato en vigor o sea un valor no real. + + + + + + + + + + Tipo de disconformidad de autoconsumo facturado (tabla 139) + + +01 Tipo Autoconsumo Disconformidad con la informacion facilitada en este campo del F1 +02 Tipo subseccion Disconformidad con la informacion facilitada en este campo del F1 +03 Colectivo Disconformidad con la informacion facilitada en este campo del F1 +04 Tipo CUPS Disconformidad con la informacion facilitada en este campo del F1 +05 SSAA Disconformidad con la informacion facilitada en este campo del F1 +06 Unico contrato Disconformidad con la informacion facilitada en este campo del F1 +07 Generacion Neta Beta aplicada Disconformidad con la Beta aplicada asociada a un autoconsumo colectivo + + + + + + + + + + + + + + + Motivo consulta (Tabla 140) + + +01 Contratacion +02 Conexiones +03 Verificacion del equipo + + + + + + + From 646462a37c0e3e13238ca031480e7e0cf7b177a7 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2024 17:13:00 +0100 Subject: [PATCH 02/19] new adaptar canvis a xmls de testos --- tests/data/F1_periodos_DH.xml | 1 + tests/data/a301.xml | 55 ++++- tests/data/a301_correos.xml | 55 ++++- tests/data/a305_elec.xml | 164 +++++++++++++ tests/data/c101.xml | 2 + tests/data/c105.xml | 62 ++++- tests/data/c201.xml | 61 ++++- tests/data/c205.xml | 171 +++++++++++++ tests/data/d101.xml | 224 ++++++++---------- tests/data/d101_min_with_info.xml | 141 +++++++---- tests/data/d110.xml | 18 ++ tests/data/e101.xml | 2 + tests/data/e106.xml | 63 ++++- tests/data/e201.xml | 32 +++ tests/data/e202_accept.xml | 18 ++ tests/data/e202_reject.xml | 36 +++ tests/data/e203.xml | 27 +++ tests/data/e205.xml | 159 +++++++++++++ tests/data/e206.xml | 104 ++++++++ tests/data/e209_accept.xml | 16 ++ tests/data/e212.xml | 16 ++ tests/data/e213.xml | 24 ++ tests/data/e214.xml | 45 ++++ tests/data/e215_accept.xml | 16 ++ tests/data/f101_factura_atr.xml | 1 + tests/data/f101_factura_atr_30A.xml | 1 + tests/data/f101_factura_atr_61B_exceso.xml | 1 + tests/data/f101_factura_atr_ajuste.xml | 1 + .../data/f101_factura_atr_autoconsum_20td.xml | 61 +++++ tests/data/f101_factura_atr_bad.xml | 1 + .../f101_factura_atr_direccion_suministro.xml | 1 + tests/data/f101_factura_atr_empty_periods.xml | 1 + .../f101_factura_atr_free_interpretation.xml | 1 + tests/data/f101_factura_atr_medidas_baja.xml | 1 + tests/data/f101_factura_empty_rent.xml | 1 + tests/data/f101_spaces.xml | 1 + tests/data/m101.xml | 55 ++++- tests/data/m101r.xml | 54 ++++- tests/data/m105.xml | 173 ++++++++++++++ tests/data/m202_reject.xml | 36 +++ tests/data/m205.xml | 149 ++++++++++++ tests/data/p002_accept.xml | 91 ++++++- tests/data/q101.xml | 113 +++++++++ tests/data/r101.xml | 3 + tests/data/t101.xml | 53 ++++- tests/data/t105.xml | 54 ++++- 46 files changed, 2180 insertions(+), 185 deletions(-) create mode 100644 tests/data/a305_elec.xml create mode 100644 tests/data/c205.xml create mode 100644 tests/data/d110.xml create mode 100644 tests/data/e201.xml create mode 100644 tests/data/e202_accept.xml create mode 100644 tests/data/e202_reject.xml create mode 100644 tests/data/e203.xml create mode 100644 tests/data/e205.xml create mode 100644 tests/data/e206.xml create mode 100644 tests/data/e209_accept.xml create mode 100644 tests/data/e212.xml create mode 100644 tests/data/e213.xml create mode 100644 tests/data/e214.xml create mode 100644 tests/data/e215_accept.xml create mode 100644 tests/data/m105.xml create mode 100644 tests/data/m202_reject.xml create mode 100644 tests/data/m205.xml diff --git a/tests/data/F1_periodos_DH.xml b/tests/data/F1_periodos_DH.xml index 0f9e0544..29e43d7a 100644 --- a/tests/data/F1_periodos_DH.xml +++ b/tests/data/F1_periodos_DH.xml @@ -42,6 +42,7 @@ 2015-12-18 00 + 01 N 004 1 diff --git a/tests/data/a301.xml b/tests/data/a301.xml index 06b1c1c3..b013a24f 100644 --- a/tests/data/a301.xml +++ b/tests/data/a301.xml @@ -13,6 +13,8 @@ 2222 + 01 + 2016-06-06 L 2016-06-06 S @@ -20,8 +22,59 @@ 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + 02 + ES1234000000000001JN0F 018 diff --git a/tests/data/a301_correos.xml b/tests/data/a301_correos.xml index ea616f05..e3b6f785 100644 --- a/tests/data/a301_correos.xml +++ b/tests/data/a301_correos.xml @@ -13,13 +13,66 @@ 2222 + 01 + 2016-06-06 L 2016-06-06 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + 02 + ES1234000000000001JN0F 018 diff --git a/tests/data/a305_elec.xml b/tests/data/a305_elec.xml new file mode 100644 index 00000000..98adf794 --- /dev/null +++ b/tests/data/a305_elec.xml @@ -0,0 +1,164 @@ + + + + 1234 + 4321 + A3 + 05 + 201412111009 + 01 + 2014-04-16T22:13:37 + ES1234000000000001JN0F + + + + 2018-05-05 + 01 + 2016-06-06 + + + + 00001 + + 2020-01-01 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + + 02 + ES1234000000000001JN0F + + 018 + 01 + 01 + + 1000 + 2000 + + 1 + S + 10 + 50 + 05 + + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + Comentarios Varios + + + + + \ No newline at end of file diff --git a/tests/data/c101.xml b/tests/data/c101.xml index 86fcdd26..a8047c25 100644 --- a/tests/data/c101.xml +++ b/tests/data/c101.xml @@ -14,6 +14,8 @@ L + 01 + 2016-06-06 2016-06-06 S S diff --git a/tests/data/c105.xml b/tests/data/c105.xml index 9f9d6cf2..fdd83d50 100644 --- a/tests/data/c105.xml +++ b/tests/data/c105.xml @@ -16,12 +16,66 @@ 2016-08-21 1 + 01 + 2016-06-06 00001 2020-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + 02 018 @@ -108,5 +162,11 @@ Comentarios Varios + + + 07 + https://www.google.com/ + + diff --git a/tests/data/c201.xml b/tests/data/c201.xml index 31609074..de811c42 100644 --- a/tests/data/c201.xml +++ b/tests/data/c201.xml @@ -15,6 +15,8 @@ S S 2222 + 01 + 2016-06-06 L 2016-06-06 S @@ -25,8 +27,59 @@ 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 + ES1234000000000001JN0F 018 @@ -129,5 +182,11 @@ Comentario + + + 07 + https://www.google.com/ + + \ No newline at end of file diff --git a/tests/data/c205.xml b/tests/data/c205.xml new file mode 100644 index 00000000..778e8bd6 --- /dev/null +++ b/tests/data/c205.xml @@ -0,0 +1,171 @@ + + + + 1234 + 4321 + C2 + 05 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + 2016-08-21 + 1 + + 01 + 2016-06-06 + + + 00001 + + 2020-01-01 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + + ES1234000000000001JN0F + 02 + + 018 + 01 + 01 + + 1000 + 2000 + + 1 + S + 10 + 50 + 05 + + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + Comentarios Varios + + + + + 07 + https://www.google.com/ + + + + diff --git a/tests/data/d101.xml b/tests/data/d101.xml index 104c710d..faba8018 100644 --- a/tests/data/d101.xml +++ b/tests/data/d101.xml @@ -14,134 +14,108 @@ 01 2016-06-09 01 + 01 + 2016-06-06 - ES1234000000000001JN0FA001 - 2 - a0 - S + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + ES1234000000000001JN0F002 + b11 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + - - ES1234000000000001JN0F - 01 - 1234567890qwertyuiop - - - ES1234000000000001JN0F001 - b12 - Diesel - 100 - 01 - B - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - Espa帽a - 17 - 171181 - 17118000400 - 17230 - - CL - Pau Casals - 18 - 1 - D - 3 - 2 - BI - Bar - - - - - - ES1234000000000001JN0F002 - b11 - 100 - 01 - B - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - Espa帽a - 17 - 171181 - 17118000400 - 17230 - - CL - Pau Casals - 18 - 1 - D - 3 - 2 - BI - Bar - - - - - Esto es un comentario + + + 07 + https://www.google.com/ + + diff --git a/tests/data/d101_min_with_info.xml b/tests/data/d101_min_with_info.xml index d260cdd2..5cf0b06e 100644 --- a/tests/data/d101_min_with_info.xml +++ b/tests/data/d101_min_with_info.xml @@ -14,57 +14,98 @@ 04 - ES1234000000000001JN0FA001 - 2 - S + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + ES1234000000000001JN0F002 + b11 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + - - ES1234000000000001JN0F - - - b12 - 100 - 01 - S - - 100 - 200 - 40 - - - - NI - 111111111H - - - Juan - L贸pez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - - Espa帽a - 17 - 171181 - 17230 - - CL - Pau Casals - 18 - - - - diff --git a/tests/data/d110.xml b/tests/data/d110.xml new file mode 100644 index 00000000..02995f00 --- /dev/null +++ b/tests/data/d110.xml @@ -0,0 +1,18 @@ + + + + 1234 + 4321 + D1 + 01 + 201605219497 + 00 + 2016-06-08T04:24:09 + ES0116000000011531LK0F + + + + 2016-06-10 + + + diff --git a/tests/data/e101.xml b/tests/data/e101.xml index 6da612e4..0f1df9d9 100644 --- a/tests/data/e101.xml +++ b/tests/data/e101.xml @@ -13,6 +13,8 @@ 201605219400 01 + 01 + 2016-06-06 NI 11111111H diff --git a/tests/data/e106.xml b/tests/data/e106.xml index 7e131e06..322a8ba1 100644 --- a/tests/data/e106.xml +++ b/tests/data/e106.xml @@ -15,13 +15,68 @@ 2016-08-21 S S + 01 + 2016-06-06 00001 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 + ES1234000000000001JN0F 018 01 @@ -105,5 +160,11 @@ Comentarios Varios + + + 07 + https://www.google.com/ + + \ No newline at end of file diff --git a/tests/data/e201.xml b/tests/data/e201.xml new file mode 100644 index 00000000..8ca4149e --- /dev/null +++ b/tests/data/e201.xml @@ -0,0 +1,32 @@ + + + + 1234 + 4321 + E2 + 01 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 201605219400 + 01 + + NI + 11111111H + F + + + + 08 + http://eneracme.com/docs/NIF11111111H.pdf + + + 07 + http://eneracme.com/docs/NIF11111111H.pdf + + + + diff --git a/tests/data/e202_accept.xml b/tests/data/e202_accept.xml new file mode 100644 index 00000000..630ecb91 --- /dev/null +++ b/tests/data/e202_accept.xml @@ -0,0 +1,18 @@ + + + + 1234 + 4321 + E2 + 02 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2020-05-01 + S + 2020-05-06 + + diff --git a/tests/data/e202_reject.xml b/tests/data/e202_reject.xml new file mode 100644 index 00000000..e15cc829 --- /dev/null +++ b/tests/data/e202_reject.xml @@ -0,0 +1,36 @@ + + + + 1234 + 4321 + E2 + 02 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2016-07-20 + + 1 + 01 + Motiu de rebuig 01: No existe Punto de Suministro asociado al CUPS + + + 2 + 03 + Cuando el CIF-NIF no coincide con el que figura en la base de datos del Distribuidor + + + + 08 + http://eneracme.com/docs/NIF11111111H.pdf + + + 07 + http://eneracme.com/docs/NIF11111111H.pdf + + + + diff --git a/tests/data/e203.xml b/tests/data/e203.xml new file mode 100644 index 00000000..76c4fc38 --- /dev/null +++ b/tests/data/e203.xml @@ -0,0 +1,27 @@ + + + + 1234 + 4321 + E2 + 03 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2016-07-21 + 2016-07-22 + + 1 + 01 + Com 1 + + + 2 + 08 + Com 2 + + + diff --git a/tests/data/e205.xml b/tests/data/e205.xml new file mode 100644 index 00000000..69f1d38b --- /dev/null +++ b/tests/data/e205.xml @@ -0,0 +1,159 @@ + + + + 1234 + 4321 + E2 + 05 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + 2016-08-21 + 01 + 33222111 + 01 + 2016-06-06 + + + + 00001 + + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + + + + NI + B36385870 + J + + + + + 07 + https://www.google.com/ + + + Comentarios Varios + + \ No newline at end of file diff --git a/tests/data/e206.xml b/tests/data/e206.xml new file mode 100644 index 00000000..876227ef --- /dev/null +++ b/tests/data/e206.xml @@ -0,0 +1,104 @@ + + + + 1234 + 4321 + E2 + 06 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + 2016-08-21 + 01 + S + + + + 00001 + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + Comentarios Varios + + + + NI + B36385870 + J + + + + + 07 + https://www.google.com/ + + + + \ No newline at end of file diff --git a/tests/data/e209_accept.xml b/tests/data/e209_accept.xml new file mode 100644 index 00000000..40dddf1b --- /dev/null +++ b/tests/data/e209_accept.xml @@ -0,0 +1,16 @@ + + + + 1234 + 4321 + E2 + 09 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2020-05-01 + + diff --git a/tests/data/e212.xml b/tests/data/e212.xml new file mode 100644 index 00000000..a855a5b1 --- /dev/null +++ b/tests/data/e212.xml @@ -0,0 +1,16 @@ + + + + 1234 + 4321 + E2 + 12 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2020-05-01 + + diff --git a/tests/data/e213.xml b/tests/data/e213.xml new file mode 100644 index 00000000..fc33aa61 --- /dev/null +++ b/tests/data/e213.xml @@ -0,0 +1,24 @@ + + + + 1234 + 4321 + E2 + 13 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 02 + + Nombre Inventado + + 34 + 683834841 + + mail_falso@dominio.com + + + diff --git a/tests/data/e214.xml b/tests/data/e214.xml new file mode 100644 index 00000000..9277ebdb --- /dev/null +++ b/tests/data/e214.xml @@ -0,0 +1,45 @@ + + + + 1234 + 4321 + E2 + 14 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 201605219400 + 01 + 2016-05-05 + N + + Espa帽a + 17 + 17079 + 17079000501 + PZ + 17001 + MELA MUTERMILCH + 2 + n/a + 001 + 001 + 001 + BI + Bloque de Pisos + + + + 08 + http://eneracme.com/docs/NIF11111111H.pdf + + + 07 + http://eneracme.com/docs/NIF11111111H.pdf + + + + diff --git a/tests/data/e215_accept.xml b/tests/data/e215_accept.xml new file mode 100644 index 00000000..c7e00304 --- /dev/null +++ b/tests/data/e215_accept.xml @@ -0,0 +1,16 @@ + + + + 1234 + 4321 + E2 + 15 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + S + + diff --git a/tests/data/f101_factura_atr.xml b/tests/data/f101_factura_atr.xml index 08b44cd7..472a3039 100644 --- a/tests/data/f101_factura_atr.xml +++ b/tests/data/f101_factura_atr.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_atr_30A.xml b/tests/data/f101_factura_atr_30A.xml index 18744b00..2ad02860 100644 --- a/tests/data/f101_factura_atr_30A.xml +++ b/tests/data/f101_factura_atr_30A.xml @@ -42,6 +42,7 @@ 2016-12-23 00 + 01 N 003 2 diff --git a/tests/data/f101_factura_atr_61B_exceso.xml b/tests/data/f101_factura_atr_61B_exceso.xml index ce567421..886da922 100644 --- a/tests/data/f101_factura_atr_61B_exceso.xml +++ b/tests/data/f101_factura_atr_61B_exceso.xml @@ -42,6 +42,7 @@ 2016-12-23 00 + 01 N 017 2 diff --git a/tests/data/f101_factura_atr_ajuste.xml b/tests/data/f101_factura_atr_ajuste.xml index eb917c52..30b13dbd 100644 --- a/tests/data/f101_factura_atr_ajuste.xml +++ b/tests/data/f101_factura_atr_ajuste.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_atr_autoconsum_20td.xml b/tests/data/f101_factura_atr_autoconsum_20td.xml index eb0d148d..6f535cd9 100644 --- a/tests/data/f101_factura_atr_autoconsum_20td.xml +++ b/tests/data/f101_factura_atr_autoconsum_20td.xml @@ -45,6 +45,8 @@ 2021-12-16 53 ES0304000016006825GV0FA000 + 10 + 01 N 018 1 @@ -113,6 +115,40 @@ 1.21 + + + 2021-12-31 + 2022-01-31 + + 1.00 + + + 2.00 + + + 3.00 + + + + + + 2021-12-31 + 2022-01-31 + + 11.00 + 0 + + + 12.00 + 0 + + + 13.00 + 0 + + + 33 + 2021-12-31 @@ -129,6 +165,31 @@ 0.00 + + ES1234000000000001JN0FA001 + S + B + + ES1234000000000001JN0F001 + 01 + S + + + 2016-04-04 + 2016-05-05 + + 1.00 + + + 2.00 + + + 3.00 + + + + + diff --git a/tests/data/f101_factura_atr_bad.xml b/tests/data/f101_factura_atr_bad.xml index 99100f77..c3ffffdc 100644 --- a/tests/data/f101_factura_atr_bad.xml +++ b/tests/data/f101_factura_atr_bad.xml @@ -44,6 +44,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_atr_direccion_suministro.xml b/tests/data/f101_factura_atr_direccion_suministro.xml index 4c326403..9a1919a9 100644 --- a/tests/data/f101_factura_atr_direccion_suministro.xml +++ b/tests/data/f101_factura_atr_direccion_suministro.xml @@ -44,6 +44,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_atr_empty_periods.xml b/tests/data/f101_factura_atr_empty_periods.xml index 324dd647..9d51180f 100644 --- a/tests/data/f101_factura_atr_empty_periods.xml +++ b/tests/data/f101_factura_atr_empty_periods.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_atr_free_interpretation.xml b/tests/data/f101_factura_atr_free_interpretation.xml index 59dbf5ce..b592079e 100644 --- a/tests/data/f101_factura_atr_free_interpretation.xml +++ b/tests/data/f101_factura_atr_free_interpretation.xml @@ -45,6 +45,7 @@ 2016-12-29 00 + 01 N 004 1 diff --git a/tests/data/f101_factura_atr_medidas_baja.xml b/tests/data/f101_factura_atr_medidas_baja.xml index ec52e2e8..a30f7b89 100644 --- a/tests/data/f101_factura_atr_medidas_baja.xml +++ b/tests/data/f101_factura_atr_medidas_baja.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_factura_empty_rent.xml b/tests/data/f101_factura_empty_rent.xml index 82eb4d5c..3fd7e817 100644 --- a/tests/data/f101_factura_empty_rent.xml +++ b/tests/data/f101_factura_empty_rent.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/f101_spaces.xml b/tests/data/f101_spaces.xml index 75447667..e664a7f6 100644 --- a/tests/data/f101_spaces.xml +++ b/tests/data/f101_spaces.xml @@ -43,6 +43,7 @@ 2016-01-01 00 + 01 N 001 1 diff --git a/tests/data/m101.xml b/tests/data/m101.xml index 92635298..dcc0eb8b 100644 --- a/tests/data/m101.xml +++ b/tests/data/m101.xml @@ -15,6 +15,8 @@ S S 2222 + 01 + 2016-06-06 01 L 2016-06-06 @@ -22,8 +24,59 @@ 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 + ES1234000000000001JN0F 018 diff --git a/tests/data/m101r.xml b/tests/data/m101r.xml index b2cf707e..e2c24291 100644 --- a/tests/data/m101r.xml +++ b/tests/data/m101r.xml @@ -19,10 +19,62 @@ L 2016-06-06 1 + 01 + 2016-06-06 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 018 diff --git a/tests/data/m105.xml b/tests/data/m105.xml new file mode 100644 index 00000000..5cc69b1d --- /dev/null +++ b/tests/data/m105.xml @@ -0,0 +1,173 @@ + + + + 1234 + 4321 + M1 + 05 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + 2016-08-21 + 1 + + 01 + 2016-06-06 + + + 00001 + + 2020-01-01 + + + 01 + 1234567890qwertyuiop + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + + 02 + ES1234000000000001JN0F + + 018 + 01 + 01 + + 1000 + 2000 + + 1 + S + 10 + 50 + 05 + + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + + + Comentarios Varios + + + + + 07 + https://www.google.com/ + + + + diff --git a/tests/data/m202_reject.xml b/tests/data/m202_reject.xml new file mode 100644 index 00000000..b00b30cb --- /dev/null +++ b/tests/data/m202_reject.xml @@ -0,0 +1,36 @@ + + + + 1234 + 4321 + M2 + 02 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + 2016-07-20 + + 1 + 01 + Motiu de rebuig 01: No existe Punto de Suministro asociado al CUPS + + + 2 + 03 + Cuando el CIF-NIF no coincide con el que figura en la base de datos del Distribuidor + + + + 08 + http://eneracme.com/docs/NIF11111111H.pdf + + + 07 + http://eneracme.com/docs/NIF11111111H.pdf + + + + diff --git a/tests/data/m205.xml b/tests/data/m205.xml new file mode 100644 index 00000000..f8d91c50 --- /dev/null +++ b/tests/data/m205.xml @@ -0,0 +1,149 @@ + + + + 1234 + 4321 + M2 + 05 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + + Cambio motivado por presencia autoconsumo + + 2016-06-06 + 1 + + + + 00001 + + 2016-05-05 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + Comentarios Varios + + + + \ No newline at end of file diff --git a/tests/data/p002_accept.xml b/tests/data/p002_accept.xml index b00024b7..e0489151 100644 --- a/tests/data/p002_accept.xml +++ b/tests/data/p002_accept.xml @@ -16,16 +16,68 @@ N 03 + 3600 S C100 03 2020-03-31 - 01 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 2020-01-01 N N + 2016-05-05 S 9820 @@ -65,12 +117,39 @@ 1900-01-01 S + + + NI + B36385870 + J + + + ACC Y COMP DE COCINA MILLAN Y MU脩OZ + + + Espa帽a + 17 + 17079 + 17079000501 + PZ + 17001 + MELA MUTERMILCH + 2 + n/a + 001 + 001 + 001 + BI + Bloque de Pisos + + TT L09 1 T 2 + 10/100 CG @@ -78,9 +157,12 @@ 1 T 2 + 10/100 + S + 2000 12345678901234567890123456789012345 2020-03-01 @@ -105,5 +187,12 @@ S 02 + + + 39522 + 987654321 + 1234 + + \ No newline at end of file diff --git a/tests/data/q101.xml b/tests/data/q101.xml index 86169a4a..d1eec27d 100644 --- a/tests/data/q101.xml +++ b/tests/data/q101.xml @@ -8,8 +8,121 @@ 201412111009 01 2014-04-16T22:13:37 + 123456798 + N + 01 + 33333 + + 123123132 + 333222111 + ES1234000000000001JN0F + + 11 + 10 + 01 + N + 0 + 0 + 1 + + 2016-04-04 + 2016-05-05 + + + 2016-04-04 + 2016-05-05 + 30 + + 05 + + + + 2016-04-04 + 2016-05-05 + + 100.00 + + + 200.00 + + + 300.00 + + + + + + + 2016-04-04 + 2016-05-05 + + 1.00 + + + 2.00 + + + 3.00 + + + + + + 2016-04-04 + 2016-05-05 + + 11.00 + + + 12.00 + + + 13.00 + + + + + + 2016-04-04 + 2016-05-05 + + 21.00 + + + 22.00 + + + 23.00 + + + + + ES1234000000000001JN0FA001 + S + B + + ES1234000000000001JN0F001 + 01 + + + 2016-04-04 + 2016-05-05 + + 1.00 + + + 2.00 + + + 3.00 + + + + + + 1112223334445556667779 diff --git a/tests/data/r101.xml b/tests/data/r101.xml index 931df82a..ebbb6fb1 100644 --- a/tests/data/r101.xml +++ b/tests/data/r101.xml @@ -27,6 +27,7 @@ 01 2016-01-20 1 + ES1234000000000001JN0FA001 AE @@ -39,11 +40,13 @@ 0000003106.00 + 01 01 33333 01 100 05 + 01 4444222211113333 Perico Palotes Largos diff --git a/tests/data/t101.xml b/tests/data/t101.xml index 7d1cefee..636451ea 100644 --- a/tests/data/t101.xml +++ b/tests/data/t101.xml @@ -16,11 +16,62 @@ 2020-05-01 9820 S + 2016-06-06 S 2018-01-01 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 018 diff --git a/tests/data/t105.xml b/tests/data/t105.xml index af2425ee..36e05a7c 100644 --- a/tests/data/t105.xml +++ b/tests/data/t105.xml @@ -14,12 +14,64 @@ 2016-08-21 S + S + 2016-06-06 00001 - 00 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + 02 018 From 96b50c33e9721c6ef478a5956e88c4dd483787a6 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Nov 2024 14:22:25 +0100 Subject: [PATCH 03/19] new actualizar taula de codis --- gestionatr/defs.py | 229 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 198 insertions(+), 31 deletions(-) diff --git a/gestionatr/defs.py b/gestionatr/defs.py index 5e80eeb7..46f30252 100644 --- a/gestionatr/defs.py +++ b/gestionatr/defs.py @@ -412,19 +412,6 @@ 'name': u'DA脩OS INSPECCI脫N', 'type': '09', }), - ({ - 'min_fields': ['cups', 'comentarios', 'num_fact'], - 'code': '055', - 'name': u'DISCONFORMIDAD SOBRE IMPORTE FACTURADO ' - u'AUTOCONSUMO', - 'type': '02', - }), - ({ - 'min_fields': ['cups', 'comentarios', 'num_fact'], - 'code': '056', - 'name': u'PETICI脫N DESGLOSE IMPORTE A FACTURAR AUTOCONSUMO', - 'type': '02', - }), ({ 'min_fields': ['nif_cliente', 'nombre_cliente', 'comentarios', 'numero_expediente_fraude'], 'code': '057', @@ -533,6 +520,50 @@ 'name': u'RETRASO PLAZO ACEPTACI脫N ANULACI脫N', 'type': '03', }), + ({ + 'min_fields': ['nif_cliente', 'nombre_cliente', 'cups', 'comentarios', 'num_fact', + 'tipo_disconforme_autoconsumo'], + 'code': '075', + 'name': u'DISCONFORMIDAD CON AUTOCONSUMO FACTURADO', + 'type': '02', + }), + ({ + 'min_fields': ['nif_cliente', 'nombre_cliente', 'telefono_contacto', 'cups', 'comentarios', + 'persona_de_contacto', 'sol_nuevos_suministro', 'motivo_consulta'], + 'code': '076', + 'name': u'CONSULTA SEGUIMIENTO AUTOCONSUMO', + 'type': '03', + }), + ({ + 'min_fields': ['cups', 'codigo_de_solicitud', 'CAU'], + 'code': '077', + 'name': u'RETRASO EN PLAZO ACTIVACI脫N UNIDIRECCIONAL AUTOCONSUMO', + 'type': '03', + }), + ({ + 'min_fields': ['cups', 'codigo_de_solicitud'], + 'code': '078', + 'name': u'RETRASO EN PLAZO ACTIVACI脫N BAJA UNIDIRECCIONAL DISTRIBUIDORA', + 'type': '03', + }), + ({ + 'min_fields': ['nif_cliente', 'nombre_cliente', 'cups'], + 'code': '079', + 'name': u'SOLICITUD CONTRATO DE ACCESO', + 'type': '03', + }), + ({ + 'min_fields': ['cups', 'codigo_de_solicitud'], + 'code': '080', + 'name': u'RETRASO EN PLAZO DE ACEPTACI脫N REPOSICI脫N', + 'type': '03', + }), + ({ + 'min_fields': ['cups', 'codigo_de_solicitud'], + 'code': '081', + 'name': u'RETRASO EN PLAZO DE ACTIVACI脫N REPOSICI脫N', + 'type': '03', + }), ({ 'min_fields': [], 'code': '100', @@ -977,6 +1008,9 @@ ('131', 'ZENIT'), ('132', 'ZIV'), ('133', 'ZURC'), + ('134', 'ENEL'), + ('135', 'SAGEMCOM'), + ('136', 'ADD Grup'), ('198', 'VARIOS'), ('199', 'DESCONOCIDA'), ] @@ -1114,9 +1148,32 @@ ('G4', 'Suministro M铆nimo Vital'), ('G5', 'Este tipo de modificaci贸n (鈥淢鈥/鈥滲鈥) solo aplica a solicitudes de modificaci贸n (formato M1) de suministros en bono social (suministrados por COR)'), ('G6', 'No es posible modificar fichero de coeficientes si no ha transcurrido un m铆nimo de 4 meses desde la 煤ltima modificaci贸n'), + ('G7', 'Si los SSAA no son despreciables y se da de alta un 煤nico contrato, el tipo de instalaci贸n no puede ser 鈥03鈥 (pr贸xima a trav茅s de red)'), + ('G8', 'La solicitud de modificaci贸n de autoconsumo coincide con la contrataci贸n en vigor.'), + ('G9', 'La solicitud de modificaci贸n no puede incorporar otras modificaciones t茅cnicas'), + ('H1', 'Tipo Autoconsumo no v谩lido'), + ('H2', 'Tipo Subsecci贸n no v谩lido'), + ('H3', 'Autoconsumo colectivo'), ('H4', 'La instalaci贸n del cliente no puede tener vertidos a la red'), ('H5', 'No se puede solicitar una segunda modificaci贸n de potencia en un mismo ciclo de facturaci贸n'), ('H6', 'La reducci贸n de potencia no cumple con los requisitos establecidos en el art铆culo 7 RDL 18/2022'), + ('H7', 'Falta documentaci贸n de autoconsumo'), + ('H8', 'Movimiento de cambio de acuerdo de reparto en vuelo'), + ('H9', 'Solicitud ya realizada por otro'), + ('I1', 'Identificador del titular que pretende reponer no coincide con el titular del contrato previo al proceso subyacente'), + ('I2', 'Reposici贸n solicitada en instalaciones superiores a 1 kV'), + ('I3', 'La reposici贸n no aplica al proceso subyacente'), + ('I4', 'Reposici贸n no posible t茅cnicamente en campo'), + ('I5', 'Reposici贸n no posible por movimiento de contrataci贸n posterior'), + ('I6', 'Reposici贸n solicitada supera plazo m谩ximo de 1 a帽o'), + ('I7', 'Concurrencia con proceso de reposici贸n. Se prioriza la activaci贸n de la reposici贸n'), + ('I8', 'Existencia de una solicitud previa en curso'), + ('J1', 'Vigencia del contrato que se pretende reponer est谩 finalizado'), + ('J2', 'Se dispone de aval documental acreditativo'), + ('J3', 'Se rechaza reposici贸n sin motivo espec铆fico'), + ('J4', 'Modificaci贸n t茅cnica solicitada coincide con la previa en distribuidor'), + ('J5', 'Comercializador entrante rechaza la reposici贸n'), + ('J6', 'Reposici贸n sobre un cambio de comercializador en curso'), ('99', 'Otros'), ] @@ -1274,6 +1331,7 @@ ('40', u'Estimada'), ('50', u'Autolectura'), ('60', u'Telegesti贸n'), + ('70', u'Calculada'), ('99', u'Sin lectura'), ] PROCEDENCIA = TABLA_44 @@ -1305,8 +1363,10 @@ ('A', 'Cambio datos administrativos (excepto cambio de titular y correcci贸n de datos identificativos del cliente)'), ('C', 'Correcci贸n datos que identifican al cliente'), + ('D', 'Cambio de Documentaci贸n'), ('P', 'La solicitud implica cambio en la periodicidad de la facturaci贸n'), - ('R', 'Modificaci贸n acuerdo de reparto/fichero de coeficientes de un autoconsumo colectivo') + ('R', 'Modificaci贸n acuerdo de reparto/fichero de coeficientes de un autoconsumo colectivo'), + ('U', 'Cambio datos administrativos del autoconsumo') ] TABLA_55 = [ @@ -1338,6 +1398,7 @@ ('10', u'CIE generaci贸n'), ('11', u'Declaraci贸n relativa a puntos de recarga de veh铆culos el茅ctricos de acceso p煤blico'), ('12', u'Fichero de coeficientes de reparto'), + ('13', u'Certificado de suelo urbanizado'), ] TABLA_62 = [ @@ -1789,13 +1850,6 @@ ('0490101', 'Enviado fichero'), ('0490201', 'No existe fichero'), ('0490202', 'Improcedente. Se adjunta explicaci贸n en comentarios'), - ('0550101', 'Se corrige facturaci贸n autoconsumo'), - ('0550201', 'No existe autoconsumo asociado al CUPS'), - ('0550202', 'Factura autoconsumo correcta. Se adjunta desglose'), - ('0550203', 'Improcedente. Se adjunta explicaci贸n en comentarios'), - ('0560101', 'Se env铆a desglose de importes facturados autoconsumo'), - ('0560201', 'No existe autoconsumo asociado al CUPS'), - ('0560202', 'Improcedente. Se adjunta explicaci贸n en comentarios'), ('0570101', 'Expediente anulado'), ('0570102', 'Expediente rectificado'), ('0570103', 'El cliente aporta documentaci贸n que justifica suministro sin actividad'), @@ -1911,6 +1965,23 @@ ('0740202', 'Movimiento realizado en plazo'), ('0740203', 'Movimiento fuera de plazo imputable al cliente'), ('0740204', 'Improcedente. Se adjunta explicaci贸n en comentarios'), + ('0750101', 'Se refactura el concepto reclamado'), + ('0750201', 'Conceptos reclamados correctamente facturados (incluir explicaci贸n en campo comentarios)'), + ('0750202', 'Improcedente. Se adjunta explicaci贸n en comentarios'), + ('0760101', 'Procedente. Se adjunta explicaci贸n en comentarios'), + ('0760201', 'Improcedente. Se adjunta explicaci贸n en comentarios'), + ('0770101', 'Procedente. Se agiliza el tr谩mite unilateral'), + ('0770201', 'Improcedente. Proceso en plazo'), + ('0770202', 'Improcedente. Instalaci贸n de generaci贸n pendiente de activar'), + ('0780101', 'Procedente. Se agiliza el tr谩mite unilateral'), + ('0780201', 'Improcedente. Proceso en plazo'), + ('0780202', 'Improcedente. Se adjunta explicaci贸n en comentarios'), + ('0790101', 'Procedente. Se facilita documentaci贸n'), + ('0790201', 'Improcedente. Se adjunta explicaci贸n comentarios'), + ('0800101', 'Procedente. Se agiliza tr谩mite de reposici贸n'), + ('0800201', 'Improcedente. Se adjunta explicaci贸n comentarios'), + ('0810101', 'Procedente. Se agiliza tr谩mite de reposici贸n'), + ('0810201', 'Improcedente. Se adjunta explicaci贸n comentarios') ] TABLA_74 = [('01', u'Concertacion de visita'), @@ -1957,6 +2028,7 @@ ('21', u'Tarifa'), ('22', u'Impuesto El茅ctrico'), ('23', u'Desglose Suplemento Territorial'), + ('24', u'Pago por uso de la red autoconsumo'), ('26', u'Retardo en activaci贸n autoconsumo'), ('27', u'Descuento retardo activaci贸n autoconsumo superior al valor econ贸mico de la energ铆a horaria consumida de la red') ] @@ -1970,7 +2042,14 @@ ('06', u'Tipo de contrato'), ('07', u'Modo control-potencia'), ('08', u'Periodicidad facturaci贸n'), - ('09', u'Direcci贸n Punto de Suministro') + ('09', u'Direcci贸n Punto de Suministro'), + ('10', u'Tipo Autoconsumo'), + ('11', u'Tipo Subsecci贸n'), + ('12', u'Colectivo'), + ('13', u'Tipo Cups'), + ('14', u'SSAA'), + ('15', u'脷nico contrato'), + ('16', u'Acuerdo de reparto/ Fichero coeficientes') ] @@ -1999,7 +2078,8 @@ ('06', u'Comercializador'), ('07', u'Juzgados'), ('08', u'Afectado no titular del PS'), - ('09', u'Asociaci贸n de Consumidores') + ('09', u'Asociaci贸n de Consumidores'), + ('11', u'Junta Arbitral de Consumo') ] TABLA_84 = [('01', u'Solicitud de Informaci贸n adicional'), @@ -2103,7 +2183,8 @@ ('08', u'Indemnizaci贸n'), ('09', u'Intereses de demora'), ('10', u'Servicios'), - ('11', u'Inspecci贸n - Fraude') + ('11', u'Inspecci贸n - Fraude'), + ('12', u'Derechos de contrataci贸n por reposici贸n') ] TABLA_102 = [ @@ -2239,17 +2320,27 @@ TABLA_109 = [('01', u'Telegesti贸n Operativa con CCH'), ('02', u'Telegesti贸n No Operativa'), ('03', u'Telegesti贸n Operativa sin CCH'), - ('04', u'Alta en autoconsumo'), + ('04', u'Alta en autoconsumo comunicada por la Comunidad Aut贸noma'), ('05', u'Modificaci贸n de tipo de autoconsumo'), - ('06', u'Modificaci贸n coeficiente de reparto'), - ('07', u'Modificaci贸n potencia generaci贸n'), + ('06', u'Modificaci贸n coeficiente de reparto comunicada por participante'), + ('07', u'Modificaci贸n potencia generaci贸n comunicada por la Comunidad Aut贸noma'), ('08', u'Baja en autoconsumo'), ('09', u'Modificaci贸n desde peaje 3.1A a peaje 6.1TD'), ('10', u'Modificaci贸n desde peaje 3.1A a peaje 6.2TD'), ('11', u'Pendiente env铆o de fichero de coeficientes de reparto variables para el a帽o en curso'), + ('12', u'Modificaci贸n potencia generaci贸n'), ('13', u'Informaci贸n aplicaci贸n descuento por retardo en activaci贸n autoconsumo imputable al distribuidor'), ('14', u'Informaci贸n aplicaci贸n descuento por retardo en activaci贸n autoconsumo NO imputable al distribuidor'), - ('15', u'Alta en autoconsumo colectivo comunicada por un representante'), + ('15', u'Alta en autoconsumo colectivo comunicada por un representante de autoconsumo'), + ('16', u'Baja en autoconsumo colectivo'), + ('17', u'Baja en autoconsumo comunicada por un participante'), + ('18', u'Modificaci贸n otros datos autoconsumo'), + ('19', u'Alta en autoconsumo colectivo comunicada por un participante'), + ('20', u'Suministro contratable'), + ('21', u'Modificaci贸n indicativo esencialidad'), + ('22', u'Modificaci贸n coeficiente de reparto comunicada por representante'), + ('23', u'Baja en autoconsumo comunicada por representante'), + ('24', u'Baja en autoconsumo comunicada por Comunidad Aut贸noma') ] TABLA_110 = [('01', u'Acompa帽a curva de carga'), @@ -2299,6 +2390,13 @@ ('73', u'Con excedentes sin compensaci贸n Colectivo con cto de SSAA a trav茅s de red y red interior 鈥 Consumo'), ('74', u'Con excedentes sin compensaci贸n Colectivo con cto de SSAA a trav茅s de red y red interior - SSAA'), ] +# es posa NEW perque no es un canvi que afecti a tot el ERP ja que REE encara utilitza els formats antics. Quan REE +# utilitzi la versio tambe s'adaptara la TABLA_113 amb les dades de TABLA_113_NEW +TABLA_113_NEW = [ + ('11', u'Sin excedentes'), + ('12', u'Con excedentes'), + ('0C', u'Baja como miembro de autoconsumo colectivo'), +] TENEN_AUTOCONSUM = [x[0] for x in TABLA_113 if x[0] not in ['00', '01', '2A', '2B', '2G']] @@ -2337,6 +2435,9 @@ ('02', u'Solicitud de desistimiento a un cambio de comercializador de un nuevo titular'), ('03', u'Decisi贸n fundada de la Direcci贸n General de Pol铆tica Energ茅tica y Minas, cautelar o ' u'definitivamente, se traspasan los puntos de suministro al COR'), + ('04', u'Solicitud de desistimiento a un alta, cambio de comercializador o modificaci贸n de contrato con activaci贸n de autoconsumo individual'), + ('05', u'Solicitud de reposici贸n no activada. Contrato anterior ha perdido vigencia'), + ('06', u'Solicitud de reposici贸n no activada. Comercializador anterior ha sido inhabilitado'), ] TABLA_120 = [ @@ -2504,16 +2605,82 @@ TABLA_129 = [('01', u'Red interior'), ('02', u'Red interior da varios consumidores (instalaci贸n de enlace)'), - ('03', u'Pr贸xima a trav茅s de red'), ] + ('03', u'Pr贸xima a trav茅s de red'), + ('04', u'En red interior pero pr贸xima a trav茅s de red del resto de los CUPS del colectivo'), + ('05', u'Pr贸xima a trav茅s de red pero en red interior de otro de los CUPS del colectivo'), ] TABLA_130 = [('A', u'EdM Bidireccional en PF'), ('B', u'EdM Bidireccional en PF y EdM gen. Neta'), ('C', u'EdM Consumo Total y EdM bidireccional gen. Neta'), ('D', u'EdM Consumo Total y EdM gen bruta y EdM SSAA'), - ('E', u'Configuraci贸n singular'), ] + ('E', u'Configuraci贸n singular'), + ('F', u'Configuraci贸n cuando en un mismo CAU multigeneraci贸n coexistan esquemas de medida diferentes'), ] TABLA_131 = [('01', u'Consumo'), ('02', u'Servicios Auxiliares'), ] TABLA_132 = [('01', u'Cargo correspondiente al t茅rmino de potencia'), - ('02', u'Cargo correspondiente al t茅rmino de energ铆a'), ] \ No newline at end of file + ('02', u'Cargo correspondiente al t茅rmino de energ铆a'), ] + +TABLA_133 = [ + ('10', u'Sin excedentes No acogido a compensaci贸n'), + ('11', u'Sin excedentes acogido a compensaci贸n'), + ('20', u'Con excedentes no acogidos a compensaci贸n'), + ('21', u'Con excedentes acogidos a compensaci贸n'), + ('00', u'Sin autoconsumo'), + ('0C', u'Baja como miembro de autoconsumo colectivo'), +] + +TABLA_134 = [ + ('01', u'Vuelta a la situaci贸n anterior 鈥 En servicio'), + ('02', u'Vuelta a la situaci贸n anterior 鈥 En servicio (cortado)'), + ('03', u'Traspaso a la COR'), + ('04', u'Baja del contrato por rechazo de la COR'), + ('05', u'Baja por cese de actividad'), + ('06', u'Activaci贸n de cambio de comercializador'), +] + +TABLA_135 = [ + ('01', u'Reposici贸n por contrataci贸n o cambio indebido solicitada por el comercializador entrante.'), + ('02', u'Reposici贸n por error administrativo solicitada por el comercializador entrante'), + ('03', u'Reposici贸n solicitada por el comercializador saliente'), +] + +TABLA_136 = [ + ('01', u'Modificaci贸n del contrato de acceso por modificaci贸n del tipo de autoconsumo colectivo'), + ('02', u'Modificaci贸n del contrato de acceso por modificaci贸n del acuerdo de reparto'), + ('03', u'Modificaci贸n del contrato de acceso por modificaci贸n de la potencia de generaci贸n'), + ('04', u'Modificaci贸n del contrato de acceso por Alta en autoconsumo colectivo'), + ('05', u'Modificaci贸n del contrato de acceso por baja total del autoconsumo colectivo'), + ('06', u'Modificaci贸n del contrato de acceso por baja de un participante en el autoconsumo colectivo'), + ('07', u'Modificaci贸n del contrato de acceso por modificaci贸n de otros datos de autoconsumo colectivo'), + ('08', u'Modificaci贸n del contrato de acceso por modificaci贸n de datos de autoconsumo individual'), +] + +TABLA_137 = [ + ('00', u'Reposici贸n por contrataci贸n o cambio indebido solicitada por el comercializador entrante.'), + ('01', u'Reposici贸n por error administrativo solicitada por el comercializador entrante'), +] + +TABLA_138 = [ + ('S', u'Si'), + ('N', u'No'), + ('B', u'Indicador NIF/CIF vac铆o o no real'), +] + +TABLA_139 = [ + ('01', u'Tipo Autoconsumo'), + ('02', u'Tipo subsecci贸n'), + ('03', u'Colectivo'), + ('04', u'Tipo CUPS'), + ('05', u'SSAA'), + ('06', u'脷nico contrato'), + ('07', u'Generaci贸n Neta Beta aplicada'), + +] + +TABLA_140 = [ + ('01', u'Contrataci贸n'), + ('02', u'Conexiones'), + ('03', u'Verificaci贸n del equipo'), +] From b2839f91bcb3ec2da04fd7d525eedffc09ff61e1 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 18 Nov 2024 10:16:55 +0100 Subject: [PATCH 04/19] fix xmls test tenien tags innecessaris o en faltaven o mal posats --- ...otificacionCambiosATRDesdeDistribuidor.xsd | 22 ----- tests/data/a301.xml | 90 +++++++++--------- tests/data/a305_elec.xml | 94 +++++++++---------- tests/data/c105.xml | 94 +++++++++---------- tests/data/c205.xml | 94 +++++++++---------- tests/data/d101.xml | 4 +- tests/data/d101_min_with_info.xml | 16 ---- tests/data/d102_accept.xml | 19 ---- tests/data/d110.xml | 14 ++- tests/data/m105.xml | 94 +++++++++---------- tests/data/p002_accept_min.xml | 1 + 11 files changed, 242 insertions(+), 300 deletions(-) delete mode 100644 gestionatr/data/AceptacionNotificacionCambiosATRDesdeDistribuidor.xsd delete mode 100644 tests/data/d102_accept.xml diff --git a/gestionatr/data/AceptacionNotificacionCambiosATRDesdeDistribuidor.xsd b/gestionatr/data/AceptacionNotificacionCambiosATRDesdeDistribuidor.xsd deleted file mode 100644 index 81ceac38..00000000 --- a/gestionatr/data/AceptacionNotificacionCambiosATRDesdeDistribuidor.xsd +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - Version 1.2 CNMC 2016.12.20 - - - - - Version CNMC 1.2 - - - - - - - - - diff --git a/tests/data/a301.xml b/tests/data/a301.xml index b013a24f..9912003b 100644 --- a/tests/data/a301.xml +++ b/tests/data/a301.xml @@ -26,52 +26,52 @@ 01 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + 02 ES1234000000000001JN0F diff --git a/tests/data/a305_elec.xml b/tests/data/a305_elec.xml index 98adf794..dac01322 100644 --- a/tests/data/a305_elec.xml +++ b/tests/data/a305_elec.xml @@ -25,54 +25,54 @@ 01 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + 02 ES1234000000000001JN0F diff --git a/tests/data/c105.xml b/tests/data/c105.xml index fdd83d50..dcea08aa 100644 --- a/tests/data/c105.xml +++ b/tests/data/c105.xml @@ -27,54 +27,54 @@ 01 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + 02 diff --git a/tests/data/c205.xml b/tests/data/c205.xml index 778e8bd6..384b7d18 100644 --- a/tests/data/c205.xml +++ b/tests/data/c205.xml @@ -27,54 +27,54 @@ 01 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + ES1234000000000001JN0F 02 diff --git a/tests/data/d101.xml b/tests/data/d101.xml index faba8018..83d9d026 100644 --- a/tests/data/d101.xml +++ b/tests/data/d101.xml @@ -111,11 +111,11 @@ - + 07 https://www.google.com/ - + diff --git a/tests/data/d101_min_with_info.xml b/tests/data/d101_min_with_info.xml index 5cf0b06e..6acd25dc 100644 --- a/tests/data/d101_min_with_info.xml +++ b/tests/data/d101_min_with_info.xml @@ -16,7 +16,6 @@ 01 - 1234567890qwertyuiop ES1234000000000001JN0FA001 @@ -24,20 +23,14 @@ 10 S - ES1234000000000001JN0F001 b12 - Diesel 100 01 - B S - S - 1234567890qwertyuidf 100 200 40 - E @@ -47,7 +40,6 @@ Juan L贸pez - S谩nchez 0034 @@ -61,23 +53,17 @@ 0034 683834841 - mail_falso@dominio.com - ES1234000000000001JN0F002 b11 100 01 - B S - S - 1234567890qwertyuidf 100 200 40 - E @@ -87,7 +73,6 @@ Juan L贸pez - S谩nchez 0034 @@ -101,7 +86,6 @@ 0034 683834841 - mail_falso@dominio.com diff --git a/tests/data/d102_accept.xml b/tests/data/d102_accept.xml deleted file mode 100644 index 6c1597fe..00000000 --- a/tests/data/d102_accept.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - 1234 - 4321 - D1 - 02 - 201607211259 - 01 - 2016-07-21T12:59:47 - ES1234000000000001JN0F - - - - 2016-06-06 - - - diff --git a/tests/data/d110.xml b/tests/data/d110.xml index 02995f00..e852366c 100644 --- a/tests/data/d110.xml +++ b/tests/data/d110.xml @@ -1,18 +1,16 @@ - + 1234 4321 D1 - 01 + 10 201605219497 00 2016-06-08T04:24:09 ES0116000000011531LK0F - - - 2016-06-10 - - - + + 2016-06-10 + + diff --git a/tests/data/m105.xml b/tests/data/m105.xml index 5cc69b1d..92118f2c 100644 --- a/tests/data/m105.xml +++ b/tests/data/m105.xml @@ -27,54 +27,54 @@ 01 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - + + ES1234000000000001JN0FA001 + 11 + 10 + N + + ES1234000000000001JN0FA00 + b11 + radiaci贸n solar + 100 + 01 + C + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + 02 ES1234000000000001JN0F diff --git a/tests/data/p002_accept_min.xml b/tests/data/p002_accept_min.xml index 6bb9be03..d5805ef3 100644 --- a/tests/data/p002_accept_min.xml +++ b/tests/data/p002_accept_min.xml @@ -14,6 +14,7 @@ N S + 3600 N 10000 From 68811a8b197c7b0f4ae376eeaf4ff702b23956a8 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 19 Nov 2024 14:47:41 +0100 Subject: [PATCH 05/19] new Actulizar xml test i taula codis amb revicions cnmc, canvis classes, test --- .../data/AceptacionReposicionReceptor.xsd | 2 +- .../ActivacionModificacionDeATRUnidir.xsd | 2 +- gestionatr/data/AnulacionD1.xsd | 8 +- gestionatr/data/Facturacion.xsd | 2 +- gestionatr/data/SaldoLecturasFacturacion.xsd | 15 +- gestionatr/data/TipoMensajeA305.xsd | 2 +- gestionatr/data/TipoMensajeC101.xsd | 3 +- gestionatr/data/TipoMensajeC105.xsd | 5 +- gestionatr/data/TipoMensajeC205.xsd | 14 +- gestionatr/data/TipoMensajeE.xsd | 2 +- gestionatr/data/TipoMensajeE2.xsd | 8 +- gestionatr/data/TipoMensajeE205.xsd | 2 +- gestionatr/data/TipoMensajeM101.xsd | 2 +- gestionatr/data/TipoMensajeM105.xsd | 4 +- gestionatr/data/TipoMensajeM2.xsd | 2 + gestionatr/data/TipoMensajeP002.xsd | 34 +- gestionatr/data/TipoMensajeR101.xsd | 15 +- gestionatr/data/TipoMensajeT101.xsd | 2 +- gestionatr/data/TipoMensajeT105.xsd | 2 +- gestionatr/data/TiposComplejos.xsd | 67 ++- gestionatr/data/TiposSencillos.xsd | 53 +- gestionatr/defs.py | 22 +- gestionatr/input/messages/A1.py | 2 +- gestionatr/input/messages/C1.py | 378 +++++++++++- gestionatr/input/messages/C2.py | 18 +- gestionatr/input/messages/D1.py | 569 ++---------------- gestionatr/input/messages/message.py | 4 +- gestionatr/output/messages/sw_c2.py | 6 +- gestionatr/output/messages/sw_d1.py | 139 ++--- tests/data/c105.xml | 4 +- tests/data/c201.xml | 2 +- tests/data/c205.xml | 4 +- tests/data/d101.xml | 5 +- tests/data/d110.xml | 8 +- tests/data/e205.xml | 17 + tests/data/e215_accept.xml | 16 - tests/data/m101b.xml | 2 + tests/data/m101m.xml | 2 + tests/data/m205.xml | 2 + tests/data/p002_accept.xml | 26 +- tests/data/q101.xml | 2 +- tests/data/r101.xml | 4 +- tests/test_input.py | 227 ++++--- tests/test_output.py | 163 +++-- 44 files changed, 902 insertions(+), 966 deletions(-) delete mode 100644 tests/data/e215_accept.xml diff --git a/gestionatr/data/AceptacionReposicionReceptor.xsd b/gestionatr/data/AceptacionReposicionReceptor.xsd index f0258b83..e212ec7c 100644 --- a/gestionatr/data/AceptacionReposicionReceptor.xsd +++ b/gestionatr/data/AceptacionReposicionReceptor.xsd @@ -1,4 +1,5 @@ + @@ -8,7 +9,6 @@ - diff --git a/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd b/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd index 1d436000..e19dc3b6 100644 --- a/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd +++ b/gestionatr/data/ActivacionModificacionDeATRUnidir.xsd @@ -4,7 +4,7 @@ - + diff --git a/gestionatr/data/AnulacionD1.xsd b/gestionatr/data/AnulacionD1.xsd index e350e19d..69e818f3 100644 --- a/gestionatr/data/AnulacionD1.xsd +++ b/gestionatr/data/AnulacionD1.xsd @@ -7,7 +7,13 @@ - + + + + + + + diff --git a/gestionatr/data/Facturacion.xsd b/gestionatr/data/Facturacion.xsd index 260dbbcd..9e0875d8 100644 --- a/gestionatr/data/Facturacion.xsd +++ b/gestionatr/data/Facturacion.xsd @@ -335,7 +335,7 @@ - + diff --git a/gestionatr/data/SaldoLecturasFacturacion.xsd b/gestionatr/data/SaldoLecturasFacturacion.xsd index c85585d1..8b902d9b 100644 --- a/gestionatr/data/SaldoLecturasFacturacion.xsd +++ b/gestionatr/data/SaldoLecturasFacturacion.xsd @@ -1,6 +1,6 @@ - + @@ -10,7 +10,7 @@ - + @@ -162,23 +162,12 @@ - - - - - - - - - - - diff --git a/gestionatr/data/TipoMensajeA305.xsd b/gestionatr/data/TipoMensajeA305.xsd index 7e205b9a..3f234c6f 100644 --- a/gestionatr/data/TipoMensajeA305.xsd +++ b/gestionatr/data/TipoMensajeA305.xsd @@ -34,7 +34,7 @@ Tabla 9 - + diff --git a/gestionatr/data/TipoMensajeC101.xsd b/gestionatr/data/TipoMensajeC101.xsd index 0ff94233..94d1244d 100644 --- a/gestionatr/data/TipoMensajeC101.xsd +++ b/gestionatr/data/TipoMensajeC101.xsd @@ -1,4 +1,5 @@ + @@ -22,7 +23,7 @@ Tabla 8 - + Tabla 137 diff --git a/gestionatr/data/TipoMensajeC105.xsd b/gestionatr/data/TipoMensajeC105.xsd index dcb5b3ee..6f9dbed7 100644 --- a/gestionatr/data/TipoMensajeC105.xsd +++ b/gestionatr/data/TipoMensajeC105.xsd @@ -1,4 +1,5 @@ + @@ -6,8 +7,6 @@ - - @@ -23,6 +22,8 @@ Tabla 116 + + diff --git a/gestionatr/data/TipoMensajeC205.xsd b/gestionatr/data/TipoMensajeC205.xsd index 75d1e115..e79f1310 100644 --- a/gestionatr/data/TipoMensajeC205.xsd +++ b/gestionatr/data/TipoMensajeC205.xsd @@ -1,18 +1,12 @@ - + - - - Tabla 113 - - - @@ -28,6 +22,12 @@ Tabla 116 + + + Tabla 113 + + + diff --git a/gestionatr/data/TipoMensajeE.xsd b/gestionatr/data/TipoMensajeE.xsd index 51c486c7..3f3b2d82 100644 --- a/gestionatr/data/TipoMensajeE.xsd +++ b/gestionatr/data/TipoMensajeE.xsd @@ -77,7 +77,7 @@ - + diff --git a/gestionatr/data/TipoMensajeE2.xsd b/gestionatr/data/TipoMensajeE2.xsd index b0b795a4..066d5563 100644 --- a/gestionatr/data/TipoMensajeE2.xsd +++ b/gestionatr/data/TipoMensajeE2.xsd @@ -26,11 +26,13 @@ - + + Tabla 26 + @@ -59,13 +61,11 @@ - - + Tabla 26 - diff --git a/gestionatr/data/TipoMensajeE205.xsd b/gestionatr/data/TipoMensajeE205.xsd index 89457d2c..23dce5f8 100644 --- a/gestionatr/data/TipoMensajeE205.xsd +++ b/gestionatr/data/TipoMensajeE205.xsd @@ -24,7 +24,7 @@ Tabla 134 - + Tabla 113 diff --git a/gestionatr/data/TipoMensajeM101.xsd b/gestionatr/data/TipoMensajeM101.xsd index ff5dd8cb..3fc57d76 100644 --- a/gestionatr/data/TipoMensajeM101.xsd +++ b/gestionatr/data/TipoMensajeM101.xsd @@ -30,7 +30,7 @@ - + diff --git a/gestionatr/data/TipoMensajeM105.xsd b/gestionatr/data/TipoMensajeM105.xsd index a2051d2a..7d814ce9 100644 --- a/gestionatr/data/TipoMensajeM105.xsd +++ b/gestionatr/data/TipoMensajeM105.xsd @@ -1,6 +1,6 @@ - + @@ -22,7 +22,7 @@ - + diff --git a/gestionatr/data/TipoMensajeM2.xsd b/gestionatr/data/TipoMensajeM2.xsd index c5fe1ab4..b6658fc0 100644 --- a/gestionatr/data/TipoMensajeM2.xsd +++ b/gestionatr/data/TipoMensajeM2.xsd @@ -28,6 +28,8 @@ Tabla 116 + + diff --git a/gestionatr/data/TipoMensajeP002.xsd b/gestionatr/data/TipoMensajeP002.xsd index d179fb5e..a03f3573 100644 --- a/gestionatr/data/TipoMensajeP002.xsd +++ b/gestionatr/data/TipoMensajeP002.xsd @@ -1,14 +1,14 @@ - + - + - Tabla 26 + Tabla 138 @@ -29,42 +29,42 @@ - + Tabla 26 - + - Tabla 26 + Tabla 137 - + Tabla 26 - - - + + + Tabla 50 - + Tabla 26 - + Tabla 108 - + Tabla 111 @@ -74,12 +74,12 @@ Tabla 26 - + Tabla 26 - + Tabla 26 @@ -93,7 +93,7 @@ - + @@ -230,7 +230,7 @@ - + diff --git a/gestionatr/data/TipoMensajeR101.xsd b/gestionatr/data/TipoMensajeR101.xsd index f40e3f79..d4e7b8dc 100644 --- a/gestionatr/data/TipoMensajeR101.xsd +++ b/gestionatr/data/TipoMensajeR101.xsd @@ -1,4 +1,5 @@ + @@ -95,10 +96,16 @@ - - - Tabla 139 - + + + + + + Tabla 139 + + + + diff --git a/gestionatr/data/TipoMensajeT101.xsd b/gestionatr/data/TipoMensajeT101.xsd index ceac7c4b..050189ff 100644 --- a/gestionatr/data/TipoMensajeT101.xsd +++ b/gestionatr/data/TipoMensajeT101.xsd @@ -45,7 +45,7 @@ - + Tabla 9 diff --git a/gestionatr/data/TipoMensajeT105.xsd b/gestionatr/data/TipoMensajeT105.xsd index a970e93d..2f51dd32 100644 --- a/gestionatr/data/TipoMensajeT105.xsd +++ b/gestionatr/data/TipoMensajeT105.xsd @@ -32,7 +32,7 @@ - + Tabla 9 diff --git a/gestionatr/data/TiposComplejos.xsd b/gestionatr/data/TiposComplejos.xsd index 4265d001..edb7a106 100644 --- a/gestionatr/data/TiposComplejos.xsd +++ b/gestionatr/data/TiposComplejos.xsd @@ -1,6 +1,6 @@ - + @@ -280,7 +280,6 @@ - @@ -346,6 +345,26 @@ + + + + + + + Tabla 11 + + + + + + + + + + + + + @@ -608,6 +627,7 @@ Tabla 65 + @@ -1250,21 +1270,21 @@ - + - + - + @@ -1272,7 +1292,7 @@ - + @@ -1283,6 +1303,7 @@ + @@ -1292,7 +1313,7 @@ - + @@ -1501,25 +1522,25 @@ - + - + - + - + @@ -1604,7 +1625,7 @@ - + Tabla 129 @@ -1639,7 +1660,7 @@ Tabla 130 - + Tabla 26 @@ -1733,21 +1754,21 @@ - + - + - + @@ -1755,7 +1776,7 @@ - + @@ -2035,8 +2056,8 @@ - - + + @@ -2052,8 +2073,8 @@ Tabla 133 - - + + @@ -2069,8 +2090,8 @@ Tabla 133 - - + + diff --git a/gestionatr/data/TiposSencillos.xsd b/gestionatr/data/TiposSencillos.xsd index e4532da2..7134aca5 100644 --- a/gestionatr/data/TiposSencillos.xsd +++ b/gestionatr/data/TiposSencillos.xsd @@ -131,7 +131,9 @@ 10 Anulacion de la baja a la comercializadora saliente. 11 Aceptacion a comercializadora saliente 12 Notificacion de rechazo como consecuencia de las actuaciones en campo. - 13 Contestaci髇 de incidencia + 13 Contestaci髇 de incidencia + 14 Consulta de aceptaci髇 de la solicitud de reposici髇 + 15 Aceptaci髇 o rechazo a comunicaci髇 de reposici髇 16 Contestaci髇 de incidencia @@ -149,6 +151,8 @@ + + @@ -329,6 +333,8 @@ + + @@ -395,6 +401,10 @@ 85 Regularizaci髇 descuento en peajes de transporte y distribuci髇a la industria electrointensiva 86 Descuento por retardo en activaci髇 autoconsumo imputable al distribuidor 87 Descuento por retardo en activaci髇 autoconsumo NO imputable al distribuidor + 88 Derechos de extensi髇 provenientes de una reposici髇 E2, no repercutibles al cliente + 89 Derechos de acceso provenientes de una reposici髇 E2, no repercutibles al cliente + 90 Derechos de enganche provenientes de una reposici髇 E2, no repercutibles al cliente + 91 Actuaciones en equipos de medida provenientes de una reposici髇 E2, no repercutibles al cliente @@ -452,6 +462,10 @@ + + + + @@ -908,10 +922,6 @@ 0490101 Enviado fichero 0490201 No existe fichero 0490202 Improcedente. Se adjunta explicacion en comentarios - 0550101 Se corrige facturacion autoconsumo - 0550201 No existe autoconsumo asociado al CUPS - 0550202 Factura autoconsumo correcta. Se adjunta desglose - 0550203 Improcedente. Se adjunta explicacion en comentarios 0570101 Expediente anulado 0570102 Expediente rectificado 0570103 El cliente aporta documentacion que justifica suministro sin actividad @@ -1362,10 +1372,6 @@ - - - - @@ -1485,6 +1491,7 @@ + @@ -1816,8 +1823,11 @@ 17 Baja en autoconsumo comunicada por un participante, representante de autoconsumo o Comunidad Aut髇oma 18 Modificaci髇 otros datos autoconsumo 19 Alta en autoconsumo colectivo comunicada por un participante - 20 Suministro contratable - 21 Modificaci髇 indicativo esencialidad + 20 Suministro contratable + 21 Modificaci髇 indicativo esencialidad + 22 Modificaci髇 coeficiente de reparto comunicada por representante + 23 Baja en autoconumo comunicada por representante + 24 Baja en autoconsumo comunicada por Comunidad Aut髇oma @@ -1842,6 +1852,9 @@ + + + @@ -1858,6 +1871,7 @@ 09 Intereses de demora 10 Servicios 11 Inspeccion - Fraude + 12 Derechos de contrataci髇 por reposici髇 @@ -2100,7 +2114,6 @@ 047 SOLICITUD RECALCULO CCH SIN MODIFICACION CIERRE ATR FASE 1 PVPC 048 PETICI覰 INFORMACI覰 ADICIONAL RECHAZO 049 FALTA FICHERO DE MEDIDA - 055 DISCONFORMIDAD IMPORTE FACTURADO AUTOCONSUMO 057 DISCONFORMIDAD CON EXPEDIENTE DE ANOMALIA Y FRAUDE (sin factura emitida) 058 RETRASO EN PLAZO ACEPTACI覰 CAMBIO DE COMERCIALIZADOR 059 RETRASO EN PLAZO ACTIVACI覰 CAMBIO DE COMERCIALIZADOR @@ -2174,7 +2187,6 @@ - @@ -3643,6 +3655,8 @@ la reclamacion 01 - Red interior 02 - Red interior da varios consumidores (instalaci髇 de enlace) 03 - Pr髕ima a trav閟 de red + 04 - En red interior pero pr髕ima a trav閟 de red del resto de los CUPS del colectivo + 05 - Pr髕ima a trav閟 de red, pero en red interior de otro de los CUPS del colectivo @@ -3650,6 +3664,8 @@ la reclamacion + + @@ -3923,6 +3939,9 @@ la reclamacion B103 Corte o suspensi髇 del suministro por impago B104 Baja por impago M100 Solicitud de modificaci髇 contractual + E100 Solicitud de Desistimiento + E200 Solicitud de Reposici髇 + T100 Traspaso a la COR @@ -3934,6 +3953,9 @@ la reclamacion + + + @@ -4171,11 +4193,14 @@ la reclamacion 00 No esencial -01 Esencial por electrodependencia +01 Esencial por electrodependencia +02 Esencial no electrodependiente + + diff --git a/gestionatr/defs.py b/gestionatr/defs.py index 46f30252..2688a62a 100644 --- a/gestionatr/defs.py +++ b/gestionatr/defs.py @@ -775,6 +775,7 @@ ('RA', 'Rambla'), ('RD', 'Ronda'), ('RS', 'Residencial'), + ('SU', 'Subida'), ('SD', 'Senda'), ('TR', 'Traves铆a'), ('UR', 'Urbanizaci贸n'), @@ -1011,6 +1012,10 @@ ('134', 'ENEL'), ('135', 'SAGEMCOM'), ('136', 'ADD Grup'), + ('137', 'ENPROTECH'), + ('138', 'EL SEWEDY'), + ('139', 'SANXING'), + ('140', 'KAIFA'), ('198', 'VARIOS'), ('199', 'DESCONOCIDA'), ] @@ -1153,7 +1158,7 @@ ('G9', 'La solicitud de modificaci贸n no puede incorporar otras modificaciones t茅cnicas'), ('H1', 'Tipo Autoconsumo no v谩lido'), ('H2', 'Tipo Subsecci贸n no v谩lido'), - ('H3', 'Autoconsumo colectivo'), + ('H3', 'Autoconsumo colectivo/individual'), ('H4', 'La instalaci贸n del cliente no puede tener vertidos a la red'), ('H5', 'No se puede solicitar una segunda modificaci贸n de potencia en un mismo ciclo de facturaci贸n'), ('H6', 'La reducci贸n de potencia no cumple con los requisitos establecidos en el art铆culo 7 RDL 18/2022'), @@ -2254,6 +2259,10 @@ ('85', u'Regularizaci贸n descuento en peajes de transporte y distribuci贸n de electricidad a la industria electrointensiva'), ('86', u'Descuento por retardo en activaci贸n autoconsumo imputable al distribuidor'), ('87', u'Descuento por retardo en activaci贸n autoconsumo NO imputable al distribuidor'), + ('88', u'Derechos de extensi贸n provenientes de una reposici贸n E2, no repercutibles al cliente.'), + ('89', u'Derechos de acceso provenientes de una reposici贸n E2, no repercutibles al cliente.'), + ('90', u'Derechos de enganche provenientes de una reposici贸n E2, no repercutibles al cliente.'), + ('91', u'Actuaciones en equipos de medida provenientes de una reposici贸n E2, no repercutibles al cliente.'), ] CONCEPTOS_CON_FECHA_OPERACION = [ @@ -2485,6 +2494,9 @@ ('B103', u'Corte o suspensi贸n del suministro por impago'), ('B104', u'Baja por Impago'), ('M100', u'Solicitud de modificaci贸n contractual'), + ('E100', u'Solicitud de Desistimiento'), + ('E200', u'Solicitud de Reposici贸n'), + ('T100', u'Traspaso a la COR'), ] TABLA_125 = [ @@ -2610,7 +2622,7 @@ ('05', u'Pr贸xima a trav茅s de red pero en red interior de otro de los CUPS del colectivo'), ] TABLA_130 = [('A', u'EdM Bidireccional en PF'), - ('B', u'EdM Bidireccional en PF y EdM gen. Neta'), + ('B', u'EdM Bidireccional en PF y EdM gen. Neta en serie'), ('C', u'EdM Consumo Total y EdM bidireccional gen. Neta'), ('D', u'EdM Consumo Total y EdM gen bruta y EdM SSAA'), ('E', u'Configuraci贸n singular'), @@ -2635,7 +2647,6 @@ ('01', u'Vuelta a la situaci贸n anterior 鈥 En servicio'), ('02', u'Vuelta a la situaci贸n anterior 鈥 En servicio (cortado)'), ('03', u'Traspaso a la COR'), - ('04', u'Baja del contrato por rechazo de la COR'), ('05', u'Baja por cese de actividad'), ('06', u'Activaci贸n de cambio de comercializador'), ] @@ -2658,8 +2669,9 @@ ] TABLA_137 = [ - ('00', u'Reposici贸n por contrataci贸n o cambio indebido solicitada por el comercializador entrante.'), - ('01', u'Reposici贸n por error administrativo solicitada por el comercializador entrante'), + ('00', u'No esencial'), + ('01', u'Esencial por electrodependencia'), + ('02', u'Esencial no electrodependiente'), ] TABLA_138 = [ diff --git a/gestionatr/input/messages/A1.py b/gestionatr/input/messages/A1.py index 2a082960..8cebcda6 100644 --- a/gestionatr/input/messages/A1.py +++ b/gestionatr/input/messages/A1.py @@ -3,7 +3,7 @@ from .message import Message from .Deadlines import ProcessDeadline from gestionatr.input.messages import except_f1 -from .D1 import DatosInstGen, DatosSuministro, Autoconsumo +from .C1 import DatosInstGen, DatosSuministro, Autoconsumo from gestionatr.utils import get_rec_attr diff --git a/gestionatr/input/messages/C1.py b/gestionatr/input/messages/C1.py index f47e1ce4..9832c487 100644 --- a/gestionatr/input/messages/C1.py +++ b/gestionatr/input/messages/C1.py @@ -477,10 +477,10 @@ def fecha_finalizacion(self): return data @property - def tipo_autoconsumo(self): + def autoconsumo(self): data = '' try: - data = self.contrato.TipoAutoconsumo.text + data = Autoconsumo(self.contrato.Autoconsumo) except AttributeError: pass return data @@ -596,6 +596,24 @@ def bono_social(self): pass return data + @property + def ind_esencial(self): + data = False + try: + data = self.datos_solicitud.IndEsencial.text + except AttributeError: + pass + return data + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + data = False + try: + data = self.datos_solicitud.FechaUltimoMovimientoIndEsencial.text + except AttributeError: + pass + return data + class PuntoDeMedida(object): @@ -1051,3 +1069,359 @@ def ind_bono_social(self): except AttributeError: pass return data + + +class Autoconsumo(object): + + def __init__(self, data): + self.autoconsumo = data + + @property + def datos_suministro(self): + data = '' + try: + data = DatosSuministro(self.autoconsumo.DatosSuministro) + except AttributeError: + pass + return data + + @property + def datos_cau(self): + data = '' + try: + data = DatosCAU(self.autoconsumo.DatosCAU) + except AttributeError: + pass + return data + + +class DatosSuministro(object): + + def __init__(self, data): + self.datos_suministro = data + + @property + def tipo_cups(self): + data = '' + try: + data = self.datos_suministro.TipoCUPS.text + except AttributeError: + pass + return data + + @property + def ref_catastro(self): + data = '' + try: + data = self.datos_suministro.RefCatastro.text + except AttributeError: + pass + return data + + +class DatosCAU(object): + + def __init__(self, data): + self.datos_cau = data + + @property + def cau(self): + data = '' + try: + data = self.datos_cau.CAU.text + except AttributeError: + pass + return data + + @property + def tipo_autoconsumo(self): + data = '' + try: + data = self.datos_cau.TipoAutoconsumo.text + except AttributeError: + pass + return data + + @property + def tipo_subseccion(self): + data = '' + try: + data = self.datos_cau.TipoSubseccion.text + except AttributeError: + pass + return data + + @property + def colectivo(self): + data = '' + try: + data = self.datos_cau.Colectivo.text + except AttributeError: + pass + return data + + @property + def datos_inst_gen(self): + data = [] + try: + for datos in self.datos_cau.DatosInstGen: + data.append(DatosInstGen(datos)) + except AttributeError: + pass + return data + + +class DatosInstGen(object): + + def __init__(self, data): + self.datos_inst_gen = data + + @property + def cil(self): + data = '' + try: + data = self.datos_inst_gen.CIL.text + except AttributeError: + pass + return data + + @property + def tec_generador(self): + data = '' + try: + data = self.datos_inst_gen.TecGenerador.text + except AttributeError: + pass + return data + + @property + def combustible(self): + data = '' + try: + data = self.datos_inst_gen.Combustible.text + except AttributeError: + pass + return data + + @property + def pot_instalada_gen(self): + data = '' + try: + data = self.datos_inst_gen.PotInstaladaGen.text + except AttributeError: + pass + return data + + @property + def tipo_instalacion(self): + data = '' + try: + data = self.datos_inst_gen.TipoInstalacion.text + except AttributeError: + pass + return data + + @property + def esquema_medida(self): + data = '' + try: + data = self.datos_inst_gen.EsquemaMedida.text + except AttributeError: + pass + return data + + @property + def ssaa(self): + data = '' + try: + data = self.datos_inst_gen.SSAA.text + except AttributeError: + pass + return data + + @property + def unico_contrato(self): + data = '' + try: + data = self.datos_inst_gen.UnicoContrato.text + except AttributeError: + pass + return data + + @property + def ref_catastro(self): + data = '' + try: + data = self.datos_inst_gen.RefCatastro.text + except AttributeError: + pass + return data + + @property + def utm(self): + data = '' + try: + data = UTM(self.datos_inst_gen.UTM) + except AttributeError: + pass + return data + + @property + def titular_representante_gen(self): + data = '' + try: + data = TitularRepresentanteGen(self.datos_inst_gen.TitularRepresentanteGen) + except AttributeError: + pass + return data + + +class UTM(object): + + def __init__(self, data): + self.utm = data + + @property + def x(self): + data = '' + try: + data = self.utm.X.text + except AttributeError: + pass + return data + + @property + def y(self): + data = '' + try: + data = self.utm.Y.text + except AttributeError: + pass + return data + + @property + def huso(self): + data = '' + try: + data = self.utm.Huso.text + except AttributeError: + pass + return data + + @property + def banda(self): + data = '' + try: + data = self.utm.Banda.text + except AttributeError: + pass + return data + + +class TitularRepresentanteGen(object): + + def __init__(self, data): + self.titular_representante_gen = data + + @property + def id_titular(self): + data = '' + try: + data = IdTitular(self.titular_representante_gen.IdTitular) + except AttributeError: + pass + return data + + @property + def nombre(self): + data = '' + try: + data = Nombre(self.titular_representante_gen.Nombre) + except AttributeError: + pass + return data + + @property + def telefono(self): + data = [] + try: + for telefono in self.titular_representante_gen.Telefono: + data.append((telefono.PrefijoPais.text, telefono.Numero.text)) + except AttributeError: + pass + return data + + @property + def correo_electronico(self): + data = '' + try: + data = self.titular_representante_gen.CorreoElectronico.text + except AttributeError: + pass + return data + + +class IdTitular(object): + + def __init__(self, data): + self.id_titular = data + + @property + def tipo_identificador(self): + data = '' + try: + data = self.id_titular.TipoIdentificador.text + except AttributeError: + pass + return data + + @property + def identificador(self): + data = '' + try: + data = self.id_titular.Identificador.text + except AttributeError: + pass + return data + + +class Nombre(object): + + def __init__(self, data): + self.nombre = data + + @property + def nombre_de_pila(self): + data = '' + try: + data = self.nombre.NombreDePila.text + except AttributeError: + pass + return data + + @property + def primer_apellido(self): + data = '' + try: + data = self.nombre.PrimerApellido.text + except AttributeError: + pass + return data + + @property + def segundo_apellido(self): + data = '' + try: + data = self.nombre.SegundoApellido.text + except AttributeError: + pass + return data + + @property + def razon_social(self): + data = '' + try: + data = self.nombre.RazonSocial.text + except AttributeError: + pass + return data \ No newline at end of file diff --git a/gestionatr/input/messages/C2.py b/gestionatr/input/messages/C2.py index 97b07065..8f2fc0f0 100644 --- a/gestionatr/input/messages/C2.py +++ b/gestionatr/input/messages/C2.py @@ -546,6 +546,15 @@ def validez_cie(self): pass return data + @property + def potencia_no_interrumpible(self): + data = '' + try: + data = self.datos_cie.PotenciaNoInterrumpible.text + except AttributeError: + pass + return data + class CIEPapel(object): @@ -570,15 +579,6 @@ def potencia_inst_bt(self): pass return data - @property - def potencia_no_interrumpible(self): - data = '' - try: - data = self.cie_papel.PotenciaNoInterrumpible.text - except AttributeError: - pass - return data - @property def fecha_emision_cie(self): data = False diff --git a/gestionatr/input/messages/D1.py b/gestionatr/input/messages/D1.py index 6d8dbe05..a5d7b3d1 100644 --- a/gestionatr/input/messages/D1.py +++ b/gestionatr/input/messages/D1.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from gestionatr.input.messages import C1 +from gestionatr.input.messages.C1 import Autoconsumo from gestionatr.utils import get_rec_attr @@ -15,6 +16,14 @@ def notificacion_cambios_atr_desde_distribuidor(self): data.append(NotificacionCambiosATRDesdeDistribuidor(d)) return data + @property + def anulacion_notificacion_cambios_atr_desde_distribuidor(self): + tree = 'AnulacionNotificacionCambiosATRDesdeDistribuidor' + data = [] + for d in get_rec_attr(self.obj, tree, False): + data.append(AnulacionNotificacionCambiosATRDesdeDistribuidor(d)) + return data + class NotificacionCambiosATRDesdeDistribuidor(object): @@ -40,649 +49,179 @@ def fecha_prevista_aplicacion_cambio_atr(self): return data @property - def periodicidad_facturacion(self): - data = '' - try: - data = self.notificacion_cambios_atr_desde_distribuidor.PeriodicidadFacturacion.text - except AttributeError: - pass - return data - - @property - def info_registro_autocons(self): - data = '' - try: - data = InfoRegistroAutocons(self.notificacion_cambios_atr_desde_distribuidor.InfoRegistroAutocons) - except AttributeError: - pass - return data - - @property - def info_retardo_activ_autocons(self): - data = [] - try: - for datos in self.notificacion_cambios_atr_desde_distribuidor.InfoRetardoActivAutocons: - data.append(InfoRetardoActivAutocons(datos)) - except AttributeError: - pass - return data - - -class InfoRetardoActivAutocons(object): - - def __init__(self, data): - self.info_retardo_activ_atuocons = data - - @property - def codigo_fiscal_factura(self): - data = '' - try: - data = self.info_retardo_activ_atuocons.CodigoFiscalFactura.text - except AttributeError: - pass - return data - - @property - def fecha_inicio_conteo_activ_autocons(self): + def fecha_maxima_rechazo(self): data = '' try: - data = self.info_retardo_activ_atuocons.FechaInicioConteoActivAutocons.text + data = self.notificacion_cambios_atr_desde_distribuidor.FechaMaximaRechazo.text except AttributeError: pass return data @property - def fecha_desde(self): - data = '' - try: - data = self.info_retardo_activ_atuocons.FechaDesde.text - except AttributeError: - pass - return data - - @property - def fecha_hasta(self): - data = '' - try: - data = self.info_retardo_activ_atuocons.FechaHasta.text - except AttributeError: - pass - return data - - @property - def dias_retardo_activ_autocons(self): - data = '' - try: - data = self.info_retardo_activ_atuocons.DiasRetardoActivAutocons.text - except AttributeError: - pass - return data - - @property - def valor_energia_anual_calculado(self): - data = '' - try: - data = self.info_retardo_activ_atuocons.ValorEnergiaAnualCalculada.text - except AttributeError: - pass - return data - - @property - def valor_energia_horaria_calculada(self): + def periodicidad_facturacion(self): data = '' try: - data = self.info_retardo_activ_atuocons.ValorEnergiaHorariaCalculada.text + data = self.notificacion_cambios_atr_desde_distribuidor.PeriodicidadFacturacion.text except AttributeError: pass return data @property - def pot_instalada_gen(self): - data = '' + def ind_esencial(self): + data = False try: - data = self.info_retardo_activ_atuocons.PotInstaladaGen.text + data = self.notificacion_cambios_atr_desde_distribuidor.IndEsencial.text except AttributeError: pass return data - -class InfoRegistroAutocons(object): - - def __init__(self, data): - self.info_registro_autocons = data - @property - def autoconsumo(self): - data = '' + def fecha_ultimo_movimiento_ind_esencial(self): + data = False try: - data = Autoconsumo(self.info_registro_autocons.Autoconsumo) + data = self.notificacion_cambios_atr_desde_distribuidor.FechaUltimoMovimientoIndEsencial.text except AttributeError: pass return data @property - def datos_suministro(self): + def info_registro_autocons(self): data = '' try: - data = DatosSuministro(self.info_registro_autocons.DatosSuministro) + data = InfoRegistroAutocons(self.notificacion_cambios_atr_desde_distribuidor.InfoRegistroAutocons) except AttributeError: pass return data @property - def datos_inst_gen(self): + def info_retardo_activ_autocons(self): data = [] try: - for datos in self.info_registro_autocons.DatosInstGen: - data.append(DatosInstGen(datos)) - except AttributeError: - pass - return data - - @property - def comentarios(self): - data = '' - try: - data = self.info_registro_autocons.Comentarios.text - except AttributeError: - pass - return data - - -class Autoconsumo(object): - - def __init__(self, data): - self.autoconsumo = data - - @property - def cau(self): - data = '' - try: - data = self.autoconsumo.CAU.text - except AttributeError: - pass - return data - - @property - def seccion_registro(self): - data = '' - try: - data = self.autoconsumo.SeccionRegistro.text - except AttributeError: - pass - return data - - @property - def sub_seccion(self): - data = '' - try: - data = self.autoconsumo.SubSeccion.text - except AttributeError: - pass - return data - - @property - def colectivo(self): - data = '' - try: - data = self.autoconsumo.Colectivo.text - except AttributeError: - pass - return data - - -class DatosSuministro(object): - - def __init__(self, data): - self.datos_suministro = data - - @property - def cups(self): - data = '' - try: - data = self.datos_suministro.CUPS.text - except AttributeError: - pass - return data - - @property - def tipo_cups(self): - data = '' - try: - data = self.datos_suministro.TipoCUPS.text - except AttributeError: - pass - return data - - @property - def ref_catastro(self): - data = '' - try: - data = self.datos_suministro.RefCatastro.text + for datos in self.notificacion_cambios_atr_desde_distribuidor.InfoRetardoActivAutocons: + data.append(InfoRetardoActivAutocons(datos)) except AttributeError: pass return data -class DatosInstGen(object): +class AnulacionNotificacionCambiosATRDesdeDistribuidor(object): def __init__(self, data): - self.datos_inst_gen = data - - @property - def cil(self): - data = '' - try: - data = self.datos_inst_gen.CIL.text - except AttributeError: - pass - return data - - @property - def tec_generador(self): - data = '' - try: - data = self.datos_inst_gen.TecGenerador.text - except AttributeError: - pass - return data - - @property - def combustible(self): - data = '' - try: - data = self.datos_inst_gen.Combustible.text - except AttributeError: - pass - return data - - @property - def pot_instalada_gen(self): - data = '' - try: - data = self.datos_inst_gen.PotInstaladaGen.text - except AttributeError: - pass - return data - - @property - def tipo_instalacion(self): - data = '' - try: - data = self.datos_inst_gen.TipoInstalacion.text - except AttributeError: - pass - return data - - @property - def esquema_medida(self): - data = '' - try: - data = self.datos_inst_gen.EsquemaMedida.text - except AttributeError: - pass - return data - - @property - def ssaa(self): - data = '' - try: - data = self.datos_inst_gen.SSAA.text - except AttributeError: - pass - return data - - @property - def ref_catastro(self): - data = '' - try: - data = self.datos_inst_gen.RefCatastro.text - except AttributeError: - pass - return data + self.anulacion_notificacion_cambios_atr_desde_distribuidor = data @property - def utm(self): + def datos_anulacion(self): data = '' try: - data = UTM(self.datos_inst_gen.UTM) - except AttributeError: - pass - return data - - @property - def titular_representante_gen(self): - data = '' - try: - data = TitularRepresentanteGen(self.datos_inst_gen.TitularRepresentanteGen) + data = DatosAnulacion(self.anulacion_notificacion_cambios_atr_desde_distribuidor.DatosAnulacion) except AttributeError: pass return data -class UTM(object): +class DatosAnulacion(object): def __init__(self, data): - self.utm = data + self.datos_anulacion = data @property - def x(self): + def fecha_anulacion(self): data = '' try: - data = self.utm.X.text + data = self.datos_anulacion.FechaAnulacion.text except AttributeError: pass return data - @property - def y(self): - data = '' - try: - data = self.utm.Y.text - except AttributeError: - pass - return data - - @property - def huso(self): - data = '' - try: - data = self.utm.Huso.text - except AttributeError: - pass - return data - @property - def banda(self): - data = '' - try: - data = self.utm.Banda.text - except AttributeError: - pass - return data - - -class TitularRepresentanteGen(object): +class InfoRetardoActivAutocons(object): def __init__(self, data): - self.titular_representante_gen = data - - @property - def id_titular(self): - data = '' - try: - data = IdTitular(self.titular_representante_gen.IdTitular) - except AttributeError: - pass - return data - - @property - def nombre(self): - data = '' - try: - data = Nombre(self.titular_representante_gen.Nombre) - except AttributeError: - pass - return data - - @property - def telefono(self): - data = [] - try: - for telefono in self.titular_representante_gen.Telefono: - data.append((telefono.PrefijoPais.text, telefono.Numero.text)) - except AttributeError: - pass - return data + self.info_retardo_activ_atuocons = data @property - def correo_electronico(self): + def codigo_fiscal_factura(self): data = '' try: - data = self.titular_representante_gen.CorreoElectronico.text + data = self.info_retardo_activ_atuocons.CodigoFiscalFactura.text except AttributeError: pass return data @property - def direccion(self): + def fecha_inicio_conteo_activ_autocons(self): data = '' try: - data = Direccion(self.titular_representante_gen.Direccion) + data = self.info_retardo_activ_atuocons.FechaInicioConteoActivAutocons.text except AttributeError: pass return data - -class IdTitular(object): - - def __init__(self, data): - self.id_titular = data - @property - def tipo_identificador(self): + def fecha_desde(self): data = '' try: - data = self.id_titular.TipoIdentificador.text + data = self.info_retardo_activ_atuocons.FechaDesde.text except AttributeError: pass return data @property - def identificador(self): + def fecha_hasta(self): data = '' try: - data = self.id_titular.Identificador.text + data = self.info_retardo_activ_atuocons.FechaHasta.text except AttributeError: pass return data - -class Nombre(object): - - def __init__(self, data): - self.nombre = data - @property - def nombre_de_pila(self): + def dias_retardo_activ_autocons(self): data = '' try: - data = self.nombre.NombreDePila.text + data = self.info_retardo_activ_atuocons.DiasRetardoActivAutocons.text except AttributeError: pass return data @property - def primer_apellido(self): + def valor_energia_anual_calculado(self): data = '' try: - data = self.nombre.PrimerApellido.text + data = self.info_retardo_activ_atuocons.ValorEnergiaAnualCalculada.text except AttributeError: pass return data @property - def segundo_apellido(self): + def valor_energia_horaria_calculada(self): data = '' try: - data = self.nombre.SegundoApellido.text + data = self.info_retardo_activ_atuocons.ValorEnergiaHorariaCalculada.text except AttributeError: pass return data @property - def razon_social(self): + def pot_instalada_gen(self): data = '' try: - data = self.nombre.RazonSocial.text + data = self.info_retardo_activ_atuocons.PotInstaladaGen.text except AttributeError: pass return data -class Direccion(object): +class InfoRegistroAutocons(object): def __init__(self, data): - self.direccion = data - - @property - def pais(self): - data = '' - try: - data = self.direccion.Pais.text.strip() - except AttributeError: - pass - return data - - @property - def provincia(self): - data = '' - try: - data = self.direccion.Provincia.text.strip() - except AttributeError: - pass - return data - - @property - def municipio(self): - data = '' - try: - data = self.direccion.Municipio.text.strip() - except AttributeError: - pass - return data - - @property - def poblacion(self): - data = '' - try: - data = self.direccion.Poblacion.text.strip() - except AttributeError: - pass - return data - - @property - def cod_postal(self): - data = '' - try: - data = self.direccion.CodPostal.text.strip() - except AttributeError: - pass - return data - - @property - def tipo_via(self): - data = '' - try: - data = self.direccion.Via.TipoVia.text.strip() - except AttributeError: - try: - data = self.direccion.TipoVia.text.strip() - except AttributeError: - pass - return data - - @property - def calle(self): - data = '' - try: - data = self.direccion.Via.Calle.text.strip() - except AttributeError: - try: - data = self.direccion.Calle.text.strip() - except AttributeError: - pass - return data - - @property - def numero_finca(self): - data = '' - try: - data = self.direccion.Via.NumeroFinca.text.strip() - except AttributeError: - try: - data = self.direccion.NumeroFinca.text.strip() - except AttributeError: - pass - return data - - @property - def duplicador_finca(self): - data = '' - try: - data = self.direccion.Via.DuplicadorFinca.text.strip() - except AttributeError: - try: - data = self.direccion.DuplicadorFinca.text.strip() - except AttributeError: - pass - return data - - @property - def escalera(self): - data = '' - try: - data = self.direccion.Via.Escalera.text.strip() - except AttributeError: - try: - data = self.direccion.Escalera.text.strip() - except AttributeError: - pass - return data - - @property - def piso(self): - data = '' - try: - data = self.direccion.Via.Piso.text.strip() - except AttributeError: - try: - data = self.direccion.Piso.text.strip() - except AttributeError: - pass - return data - - @property - def puerta(self): - data = '' - try: - data = self.direccion.Via.Puerta.text.strip() - except AttributeError: - try: - data = self.direccion.Puerta.text.strip() - except AttributeError: - pass - return data - - @property - def tipo_aclarador_finca(self): - data = '' - try: - data = self.direccion.Via.TipoAclaradorFinca.text.strip() - except AttributeError: - try: - data = self.direccion.TipoAclaradorFinca.text.strip() - except AttributeError: - pass - return data - - @property - def aclarador_finca(self): - data = '' - try: - data = self.direccion.Via.AclaradorFinca.text.strip() - except AttributeError: - try: - data = self.direccion.AclaradorFinca.text.strip() - except AttributeError: - pass - return data + self.info_registro_autocons = data @property - def apartado_de_correos(self): + def autoconsumo(self): data = '' try: - data = self.direccion.ApartadoDeCorreos.text.strip() + data = Autoconsumo(self.info_registro_autocons.Autoconsumo) except AttributeError: pass return data diff --git a/gestionatr/input/messages/message.py b/gestionatr/input/messages/message.py index d8c4ddeb..9035eeb7 100644 --- a/gestionatr/input/messages/message.py +++ b/gestionatr/input/messages/message.py @@ -59,7 +59,8 @@ '13': 'ContestacionIncidencia.xsd' }, 'D1': {'01': 'NotificacionCambiosATRDesdeDistribuidor.xsd', - '02': ('AceptacionNotificacionCambiosATRDesdeDistribuidor.xsd', 'RechazoD1.xsd'), + '02': 'RechazoD1.xsd', + '10': 'AnulacionD1.xsd', }, 'E1': {'01': 'SolicitudDesistimiento.xsd', '02': ('AceptacionDesistimiento.xsd', 'Rechazo.xsd'), @@ -316,6 +317,7 @@ def parse_xml(self, validate=True): try: self.obj = objectify.fromstring(self.str_xml, parser) except Exception as e: + import pudb;pu.db self.error = e if validate: raise except_f1('Error', u'Documento inv谩lido: {0}'.format(e)) diff --git a/gestionatr/output/messages/sw_c2.py b/gestionatr/output/messages/sw_c2.py index 61e5e2a9..801d1236 100644 --- a/gestionatr/output/messages/sw_c2.py +++ b/gestionatr/output/messages/sw_c2.py @@ -167,25 +167,25 @@ def __init__(self): class DatosCie(XmlModel): - _sort_order = ('datos_cie', 'cie_papel', 'cie_electronico', 'validez_cie') + _sort_order = ('datos_cie', 'cie_papel', 'cie_electronico', 'validez_cie', 'potencia_no_interrumpible') def __init__(self): self.datos_cie = XmlField('DatosCie') self.cie_papel = CIEPapel() self.cie_electronico = CIEElectronico() self.validez_cie = XmlField('ValidezCIE') + self.potencia_no_interrumpible = XmlField('PotenciaNoInterrumpible') super(DatosCie, self).__init__('DatosCie', 'datos_cie') class CIEPapel(XmlModel): - _sort_order = ('cie_papel', 'codigo_cie', 'potencia_inst_bt', 'potencia_no_interrumpible', 'fecha_emision_cie', 'fecha_caducidad_cie', 'nif_instalador', 'codigo_instalador', 'tension_suministro_cie', 'tipo_suministro') + _sort_order = ('cie_papel', 'codigo_cie', 'potencia_inst_bt', 'fecha_emision_cie', 'fecha_caducidad_cie', 'nif_instalador', 'codigo_instalador', 'tension_suministro_cie', 'tipo_suministro') def __init__(self): self.cie_papel = XmlField('CIEPapel') self.codigo_cie = XmlField('CodigoCie') self.potencia_inst_bt = XmlField('PotenciaInstBT') - self.potencia_no_interrumpible = XmlField('PotenciaNoInterrumpible') self.fecha_emision_cie = XmlField('FechaEmisionCie') self.fecha_caducidad_cie = XmlField('FechaCaducidadCie') self.nif_instalador = XmlField('NifInstalador') diff --git a/gestionatr/output/messages/sw_d1.py b/gestionatr/output/messages/sw_d1.py index e790cd87..9e1d5080 100644 --- a/gestionatr/output/messages/sw_d1.py +++ b/gestionatr/output/messages/sw_d1.py @@ -21,54 +21,66 @@ def __init__(self): class NotificacionCambiosATRDesdeDistribuidor(XmlModel): _sort_order = ('notificacion_cambios_atr_desde_distribuidor', 'motivo_cambio_atr_desde_distribuidora', - 'fecha_prevista_aplicacion_cambio_atr', 'periodicidad_facturacion', 'info_registro_autocons', - 'info_retardo_activ_autocons_list') + 'fecha_prevista_aplicacion_cambio_atr', 'fecha_maxima_rechazo', 'periodicidad_facturacion', + 'ind_esencial', 'fecha_ultimo_movimiento_ind_esencial', 'info_registro_autocons', + 'info_retardo_activ_autocons_list', 'registros_documento') def __init__(self): self.notificacion_cambios_atr_desde_distribuidor = XmlField('NotificacionCambiosATRDesdeDistribuidor') self.motivo_cambio_atr_desde_distribuidora = XmlField('MotivoCambioATRDesdeDistribuidora') self.fecha_prevista_aplicacion_cambio_atr = XmlField('FechaPrevistaAplicacionCambioATR') + self.fecha_maxima_rechazo = XmlField('FechaMaximaRechazo') self.periodicidad_facturacion = XmlField('PeriodicidadFacturacion') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') self.info_registro_autocons = InfoRegistroAutocons() self.info_retardo_activ_autocons_list = [] + self.registros_documento = RegistrosDocumento() super(NotificacionCambiosATRDesdeDistribuidor, self).__init__('NotificacionCambiosATRDesdeDistribuidor', 'notificacion_cambios_atr_desde_distribuidor') class InfoRegistroAutocons(XmlModel): - _sort_order = ('info_registro_autocons', 'autoconsumo', 'datos_suministro', 'datos_inst_gen', - 'comentarios') + _sort_order = ('info_registro_autocons', 'autoconsumo') def __init__(self): self.info_registro_autocons = XmlField('InfoRegistroAutocons') self.autoconsumo = Autoconsumo() - self.datos_suministro = DatosSuministro() - self.datos_inst_gen = DatosInstGen() - self.comentarios = XmlField('Comentarios') super(InfoRegistroAutocons, self).__init__('InfoRegistroAutocons', 'info_registro_autocons') class Autoconsumo(XmlModel): - _sort_order = ('autoconsumo', 'cau', 'seccion_registro', 'sub_seccion', 'colectivo') + _sort_order = ('autoconsumo', 'datos_suministro', 'datos_cau') def __init__(self): self.autoconsumo = XmlField('Autoconsumo') + self.datos_suministro = DatosSuministro() + self.datos_cau = DatosCAU() + super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') + + +class DatosCAU(XmlModel): + + _sort_order = ('datos_suministro', 'cau', 'tipo_autoconsumo', 'tipo_subseccion', 'colectivo', 'datos_inst_gen') + + def __init__(self): + self.datos_cau = XmlField('DatosCAU') self.cau = XmlField('CAU') - self.seccion_registro = XmlField('SeccionRegistro') - self.sub_seccion = XmlField('SubSeccion') + self.tipo_autoconsumo = XmlField('TipoAutoconsumo') + self.tipo_subseccion = XmlField('TipoSubseccion') self.colectivo = XmlField('Colectivo') - super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') + self.datos_inst_gen = DatosInstGen() + super(DatosCAU, self).__init__('DatosCAU', 'datos_cau') class DatosSuministro(XmlModel): - _sort_order = ('datos_suministro', 'cups', 'tipo_cups', 'ref_catastro') + _sort_order = ('datos_suministro', 'tipo_cups', 'ref_catastro') def __init__(self): self.datos_suministro = XmlField('DatosSuministro') - self.cups = XmlField('CUPS') self.tipo_cups = XmlField('TipoCUPS') self.ref_catastro = XmlField('RefCatastro') super(DatosSuministro, self).__init__('DatosSuministro', 'datos_suministro') @@ -77,7 +89,7 @@ def __init__(self): class DatosInstGen(XmlModel): _sort_order = ('datos_inst_gen', 'cil', 'tec_generador', 'combustible', 'pot_instalada_gen', 'tipo_instalacion', - 'esquema_medida', 'ssaa', 'ref_catastro', 'utm', 'titular_representante_gen') + 'esquema_medida', 'ssaa', 'unico_contrato', 'ref_catastro', 'utm', 'titular_representante_gen') def __init__(self): self.datos_inst_gen = XmlField('DatosInstGen') @@ -88,6 +100,7 @@ def __init__(self): self.tipo_instalacion = XmlField('TipoInstalacion') self.esquema_medida = XmlField('EsquemaMedida') self.ssaa = XmlField('SSAA') + self.unico_contrato = XmlField('UnicoContrato') self.ref_catastro = XmlField('RefCatastro') self.utm = UTM() self.titular_representante_gen = TitularRepresentanteGen() @@ -109,8 +122,7 @@ def __init__(self): class TitularRepresentanteGen(XmlModel): - _sort_order = ('titular_representante_gen', 'id_titular', 'nombre', 'telefono', 'correo_electronico', - 'direccion') + _sort_order = ('titular_representante_gen', 'id_titular', 'nombre', 'telefono', 'correo_electronico') def __init__(self): self.titular_representante_gen = XmlField('TitularRepresentanteGen') @@ -118,7 +130,6 @@ def __init__(self): self.nombre = Nombre() self.telefono = Telefono() self.correo_electronico = XmlField('CorreoElectronico') - self.direccion = Direccion() super(TitularRepresentanteGen, self).__init__('TitularRepresentanteGen', 'titular_representante_gen') @@ -157,42 +168,6 @@ def __init__(self): super(Telefono, self).__init__('Telefono', 'telefono') -class Direccion(XmlModel): - - _sort_order = ('direccion', 'pais', 'provincia', 'municipio', 'poblacion', 'cod_postal', 'via', - 'apartado_de_correos') - - def __init__(self): - self.direccion = XmlField('Direccion') - self.pais = XmlField('Pais') - self.provincia = XmlField('Provincia') - self.municipio = XmlField('Municipio') - self.poblacion = XmlField('Poblacion') - self.cod_postal = XmlField('CodPostal') - self.via = Via() - self.apartado_de_correos = XmlField('ApartadoDeCorreos') - super(Direccion, self).__init__('Direccion', 'direccion') - - -class Via(XmlModel): - - _sort_order = ('via', 'tipo_via', 'calle', 'numero_finca', 'duplicador_finca', 'escalera', 'piso', 'puerta', - 'tipo_aclarador_finca', 'aclarador_finca') - - def __init__(self): - self.via = XmlField('Via') - self.tipo_via = XmlField('TipoVia') - self.calle = XmlField('Calle') - self.numero_finca = XmlField('NumeroFinca') - self.duplicador_finca = XmlField('DuplicadorFinca') - self.escalera = XmlField('Escalera') - self.piso = XmlField('Piso') - self.puerta = XmlField('Puerta') - self.tipo_aclarador_finca = XmlField('TipoAclaradorFinca') - self.aclarador_finca = XmlField('AclaradorFinca') - super(Via, self).__init__('Via', 'via') - - class InfoRetardoActivAutocons(XmlModel): _sort_order = ('info_retardo_activ_autocons', 'codigo_fiscal_factura', 'fecha_inicio_conteo_activ_autocons', @@ -211,42 +186,6 @@ def __init__(self): super(InfoRetardoActivAutocons, self).__init__('InfoRetardoActivAutocons', 'info_retardo_activ_autocons') -# Paso 02 accept -class MensajeAceptacionNotificacionCambiosATRDesdeDistribuidor(XmlModel): - - _sort_order = ('mensaje', 'cabecera', 'aceptacion_notificacion_cambios_atr_desde_distribuidor') - - def __init__(self): - self.mensaje = XmlField('MensajeAceptacionNotificacionCambiosATRDesdeDistribuidor', - attributes={'xmlns': 'http://localhost/elegibilidad'}) - self.cabecera = Cabecera() - self.aceptacion_notificacion_cambios_atr_desde_distribuidor = AceptacionNotificacionCambiosATRDesdeDistribuidor() - super(MensajeAceptacionNotificacionCambiosATRDesdeDistribuidor, self)\ - .__init__('MensajeAceptacionNotificacionCambiosATRDesdeDistribuidor', 'mensaje') - - -class AceptacionNotificacionCambiosATRDesdeDistribuidor(XmlModel): - - _sort_order = ('aceptacion_notificacion_cambios_atr_desde_distribuidor', 'datos_aceptacion') - - def __init__(self): - self.aceptacion_notificacion_cambios_atr_desde_distribuidor = XmlField('AceptacionNotificacionCambiosATRDesdeDistribuidor') - self.datos_aceptacion = DatosAceptacion() - super(AceptacionNotificacionCambiosATRDesdeDistribuidor, self)\ - .__init__('AceptacionNotificacionCambiosATRDesdeDistribuidor', - 'aceptacion_notificacion_cambios_atr_desde_distribuidor') - - -class DatosAceptacion(XmlModel): - - _sort_order = ('datos_aceptacion', 'fecha_aceptacion') - - def __init__(self): - self.datos_aceptacion = XmlField('DatosAceptacion') - self.fecha_aceptacion = XmlField('FechaAceptacion') - super(DatosAceptacion, self).__init__('DatosAceptacion', 'datos_aceptacion') - - # Paso 02 (Rechazo) class MensajeRechazo(XmlModel): @@ -303,3 +242,25 @@ def __init__(self): self.tipo_doc_aportado = XmlField('TipoDocAportado') self.direccion_url = XmlField('DireccionUrl') super(RegistroDoc, self).__init__('RegistroDoc', 'registro_doc') + + +# Paso 10 +class MensajeAnulacionD1(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'datos_anulacion') + + def __init__(self): + self.mensaje = XmlField('MensajeAnulacionD1', attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.datos_anulacion = [] + super(MensajeAnulacionD1, self).__init__('MensajeAnulacionD1', 'mensaje') + + +class DatosAnulacion(XmlModel): + + _sort_order = ('datos_anulacion', 'fecha_anulacion') + + def __init__(self): + self.datos_anulacion = XmlField('DatosAnulacion') + self.fecha_anulacion = XmlField('FechaAnulacion') + super(DatosAnulacion, self).__init__('DatosAnulacion', 'datos_anulacion') diff --git a/tests/data/c105.xml b/tests/data/c105.xml index dcea08aa..5dec51f3 100644 --- a/tests/data/c105.xml +++ b/tests/data/c105.xml @@ -15,9 +15,9 @@ 2016-08-21 1 + 01 + 2016-06-06 - 01 - 2016-06-06 00001 diff --git a/tests/data/c201.xml b/tests/data/c201.xml index de811c42..328adecb 100644 --- a/tests/data/c201.xml +++ b/tests/data/c201.xml @@ -164,13 +164,13 @@ 1234567 3500 - 2000 2015-06-04 12345678Z 10 VI ES + 2000 1111111111 diff --git a/tests/data/c205.xml b/tests/data/c205.xml index 384b7d18..13433534 100644 --- a/tests/data/c205.xml +++ b/tests/data/c205.xml @@ -15,9 +15,9 @@ 2016-08-21 1 + 01 + 2016-06-06 - 01 - 2016-06-06 00001 diff --git a/tests/data/d101.xml b/tests/data/d101.xml index 83d9d026..e6d63b2e 100644 --- a/tests/data/d101.xml +++ b/tests/data/d101.xml @@ -13,6 +13,7 @@ 01 2016-06-09 + 2016-06-09 01 01 2016-06-06 @@ -111,11 +112,11 @@ - + 07 https://www.google.com/ - + diff --git a/tests/data/d110.xml b/tests/data/d110.xml index e852366c..9b6084e8 100644 --- a/tests/data/d110.xml +++ b/tests/data/d110.xml @@ -10,7 +10,9 @@ 2016-06-08T04:24:09 ES0116000000011531LK0F - - 2016-06-10 - + + + 2016-06-10 + + diff --git a/tests/data/e205.xml b/tests/data/e205.xml index 69f1d38b..860598ee 100644 --- a/tests/data/e205.xml +++ b/tests/data/e205.xml @@ -75,6 +75,22 @@ + 01 + ES1234000000000001JN0F + + 018 + 01 + 01 + + 1000 + 2000 + + 1 + S + 10 + 50 + 05 + ES1234000000000001JN0F @@ -140,6 +156,7 @@ + Comentario sobre Punto Medida diff --git a/tests/data/e215_accept.xml b/tests/data/e215_accept.xml deleted file mode 100644 index c7e00304..00000000 --- a/tests/data/e215_accept.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - 1234 - 4321 - E2 - 15 - 201607211259 - 01 - 2016-07-21T12:59:47 - ES1234000000000001JN0F - - - S - - diff --git a/tests/data/m101b.xml b/tests/data/m101b.xml index 1c42db88..ef8b6430 100644 --- a/tests/data/m101b.xml +++ b/tests/data/m101b.xml @@ -14,6 +14,8 @@ B 2222 + 01 + 2016-06-06 01 A 1 diff --git a/tests/data/m101m.xml b/tests/data/m101m.xml index 678db318..26f96497 100644 --- a/tests/data/m101m.xml +++ b/tests/data/m101m.xml @@ -14,6 +14,8 @@ M 2222 + 00 + 2016-06-06 01 A 1 diff --git a/tests/data/m205.xml b/tests/data/m205.xml index f8d91c50..1dc4b846 100644 --- a/tests/data/m205.xml +++ b/tests/data/m205.xml @@ -17,6 +17,8 @@ 2016-06-06 1 + N + 1900-01-01 diff --git a/tests/data/p002_accept.xml b/tests/data/p002_accept.xml index e0489151..bc74b675 100644 --- a/tests/data/p002_accept.xml +++ b/tests/data/p002_accept.xml @@ -126,21 +126,29 @@ ACC Y COMP DE COCINA MILLAN Y MU脩OZ + F Espa帽a 17 17079 17079000501 - PZ 17001 - MELA MUTERMILCH - 2 - n/a - 001 - 001 - 001 - BI - Bloque de Pisos + + PZ + MELA MUTERMILCH + 2 + n/a + 001 + 001 + 001 + BI + Bloque de Pisos + + 0034 + 633834841 + + a@mail.com + diff --git a/tests/data/q101.xml b/tests/data/q101.xml index d1eec27d..b75264de 100644 --- a/tests/data/q101.xml +++ b/tests/data/q101.xml @@ -8,6 +8,7 @@ 201412111009 01 2014-04-16T22:13:37 + ES1234000000000001JN0F 123456798 N 01 @@ -16,7 +17,6 @@ 123123132 333222111 - ES1234000000000001JN0F 11 diff --git a/tests/data/r101.xml b/tests/data/r101.xml index ebbb6fb1..0bb0ffff 100644 --- a/tests/data/r101.xml +++ b/tests/data/r101.xml @@ -40,7 +40,9 @@ 0000003106.00 - 01 + + 01 + 01 33333 01 diff --git a/tests/test_input.py b/tests/test_input.py index 6d1b7cd1..f2fab98e 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -1038,77 +1038,82 @@ def test_m101(self): # Comentarios self.assertFalse(m1.comentarios) - # def test_m101m(self): - # m1 = M1(self.xml_m101m) - # m1.parse_xml() - # # Datos Solicitud - # self.assertEqual(m1.datos_solicitud.cnae, u'2222') - # self.assertEqual(m1.datos_solicitud.ind_activacion, u'A') - # self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'M') - # self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') - # self.assertEqual(m1.datos_solicitud.bono_social, u'1') - # # Cliente - # cliente = m1.cliente - # self.assertEqual(cliente.correo_electronico, u'email@host') - # self.assertEqual(cliente.identificador, u'B36385870') - # self.assertEqual(cliente.indicador_tipo_direccion, u'S') - # self.assertEqual(cliente.nombre, u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') - # self.assertEqual(cliente.razon_social, - # u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') - # self.assertEqual(len(cliente.telefonos), 3) - # self.assertEqual(cliente.telefonos[0][1], u'666777666') - # self.assertEqual(cliente.telefonos[0][0], u'36') - # self.assertEqual(cliente.telefonos[2][1], u'666777888') - # self.assertEqual(cliente.telefonos[2][0], u'38') - # self.assertEqual(cliente.tipo_identificador, u'NI') - # self.assertEqual(cliente.tipo_persona, u'J') - # self.assertFalse(cliente.direccion) - # # Medida - # medida = m1.medida - # self.assertEqual(medida.propiedad_equipo, u'C') - # self.assertEqual(medida.tipo_equipo_medida, u'L00') - # mod = medida.modelos_aparato - # self.assertEqual(len(mod), 0) - # # DocTec - # self.assertFalse(m1.doc_tecnica) - # # Comentarios - # self.assertFalse(m1.comentarios) - # - # def test_m101b(self): - # m1 = M1(self.xml_m101b) - # m1.parse_xml() - # # Datos Solicitud - # self.assertEqual(m1.datos_solicitud.cnae, u'2222') - # self.assertEqual(m1.datos_solicitud.ind_activacion, u'A') - # self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'B') - # self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') - # self.assertEqual(m1.datos_solicitud.bono_social, u'1') - # # Cliente - # cliente = m1.cliente - # self.assertEqual(cliente.correo_electronico, u'email@host') - # self.assertEqual(cliente.identificador, u'B36385870') - # self.assertEqual(cliente.indicador_tipo_direccion, u'S') - # self.assertEqual(cliente.nombre, u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') - # self.assertEqual(cliente.razon_social, - # u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') - # self.assertEqual(len(cliente.telefonos), 3) - # self.assertEqual(cliente.telefonos[0][1], u'666777666') - # self.assertEqual(cliente.telefonos[0][0], u'36') - # self.assertEqual(cliente.telefonos[2][1], u'666777888') - # self.assertEqual(cliente.telefonos[2][0], u'38') - # self.assertEqual(cliente.tipo_identificador, u'NI') - # self.assertEqual(cliente.tipo_persona, u'J') - # self.assertFalse(cliente.direccion) - # # Medida - # medida = m1.medida - # self.assertEqual(medida.propiedad_equipo, u'C') - # self.assertEqual(medida.tipo_equipo_medida, u'L00') - # mod = medida.modelos_aparato - # self.assertEqual(len(mod), 0) - # # DocTec - # self.assertFalse(m1.doc_tecnica) - # # Comentarios - # self.assertFalse(m1.comentarios) + def test_m101m(self): + m1 = M1(self.xml_m101m) + m1.parse_xml() + # Datos Solicitud + self.assertEqual(m1.datos_solicitud.cnae, u'2222') + self.assertEqual(m1.datos_solicitud.ind_activacion, u'A') + self.assertEqual(m1.datos_solicitud.ind_esencial, u'01') + self.assertEqual(m1.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') + self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'M') + self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') + self.assertEqual(m1.datos_solicitud.bono_social, u'1') + # Cliente + cliente = m1.cliente + self.assertEqual(cliente.correo_electronico, u'email@host') + self.assertEqual(cliente.identificador, u'B36385870') + self.assertEqual(cliente.indicador_tipo_direccion, u'S') + self.assertEqual(cliente.nombre, u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') + self.assertEqual(cliente.razon_social, + u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') + self.assertEqual(len(cliente.telefonos), 3) + self.assertEqual(cliente.telefonos[0][1], u'666777666') + self.assertEqual(cliente.telefonos[0][0], u'36') + self.assertEqual(cliente.telefonos[2][1], u'666777888') + self.assertEqual(cliente.telefonos[2][0], u'38') + self.assertEqual(cliente.tipo_identificador, u'NI') + self.assertEqual(cliente.tipo_persona, u'J') + self.assertFalse(cliente.direccion) + # Medida + medida = m1.medida + self.assertEqual(medida.propiedad_equipo, u'C') + self.assertEqual(medida.tipo_equipo_medida, u'L00') + mod = medida.modelos_aparato + self.assertEqual(len(mod), 0) + # DocTec + self.assertFalse(m1.doc_tecnica) + # Comentarios + self.assertFalse(m1.comentarios) + + def test_m101b(self): + m1 = M1(self.xml_m101b) + m1.parse_xml() + # Datos Solicitud + self.assertEqual(m1.datos_solicitud.cnae, u'2222') + self.assertEqual(m1.datos_solicitud.ind_activacion, u'A') + self.assertEqual(m1.datos_solicitud.ind_esencial, u'00') + self.assertEqual(m1.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') + self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'B') + self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') + self.assertEqual(m1.datos_solicitud.bono_social, u'1') + # Cliente + cliente = m1.cliente + self.assertEqual(cliente.correo_electronico, u'email@host') + self.assertEqual(cliente.identificador, u'B36385870') + self.assertEqual(cliente.indicador_tipo_direccion, u'S') + self.assertEqual(cliente.nombre, u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') + self.assertEqual(cliente.razon_social, + u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') + self.assertEqual(len(cliente.telefonos), 3) + self.assertEqual(cliente.telefonos[0][1], u'666777666') + self.assertEqual(cliente.telefonos[0][0], u'36') + self.assertEqual(cliente.telefonos[2][1], u'666777888') + self.assertEqual(cliente.telefonos[2][0], u'38') + self.assertEqual(cliente.tipo_identificador, u'NI') + self.assertEqual(cliente.tipo_persona, u'J') + self.assertFalse(cliente.direccion) + # Medida + medida = m1.medida + self.assertEqual(medida.propiedad_equipo, u'C') + self.assertEqual(medida.tipo_equipo_medida, u'L00') + mod = medida.modelos_aparato + self.assertEqual(len(mod), 0) + # DocTec + self.assertFalse(m1.doc_tecnica) + # Comentarios + self.assertFalse(m1.comentarios) + def test_m101r(self): m1 = M1(self.xml_m101r) m1.parse_xml() @@ -1155,39 +1160,42 @@ def setUp(self): self.xml_d101 = open(get_data("d101.xml"), "rb") self.xml_d101_min_with_info = open(get_data("d101_min_with_info.xml"), "rb") self.xml_d101_fully_min = open(get_data("d101_fully_min.xml"), "rb") - self.xml_d102_accept = open(get_data("d102_accept.xml"), "rb") self.xml_d102_reject = open(get_data("d102_reject.xml"), "rb") self.xml_d101_motiu_11 = open(get_data("d101_motiu_11.xml"), "rb") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "rb") self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "rb") + self.xml_d110 = open(get_data("d110.xml"), "rb") def tearDown(self): self.xml_d101.close() self.xml_d101_fully_min.close() self.xml_d101_min_with_info.close() - self.xml_d102_accept.close() self.xml_d102_reject.close() self.xml_d101_motiu_11.close() self.xml_d101_motiu_13.close() - self.xml_d101_motiu_13_14.close() + self.xml_d110.close() def test_d101(self): d1 = D1(self.xml_d101) d1.parse_xml() self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].periodicidad_facturacion, u'01') self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].fecha_prevista_aplicacion_cambio_atr, u'2016-06-09') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].fecha_maxima_rechazo, u'2016-06-09') self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'01') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].ind_esencial, u'01') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_registro_autocons autoconsumo = info.autoconsumo - self.assertEqual(autoconsumo.cau, u'ES1234000000000001JN0FA001') - self.assertEqual(autoconsumo.seccion_registro, u'2') - self.assertEqual(autoconsumo.sub_seccion, u'a0') - self.assertEqual(autoconsumo.colectivo, u'S') - suministro = info.datos_suministro - self.assertEqual(suministro.cups, u'ES1234000000000001JN0F') + import pudb;pu.db + suministro = autoconsumo.datos_suministro self.assertEqual(suministro.tipo_cups, u'01') self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') - inst_gen_1 = info.datos_inst_gen[0] + datos_cau = autoconsumo.datos_cau + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') self.assertEqual(inst_gen_1.tec_generador, u'b12') self.assertEqual(inst_gen_1.combustible, u'Diesel') @@ -1195,6 +1203,7 @@ def test_d101(self): self.assertEqual(inst_gen_1.tipo_instalacion, u'01') self.assertEqual(inst_gen_1.esquema_medida, u'B') self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') utm_1 = inst_gen_1.utm self.assertEqual(utm_1.x, u'100') @@ -1202,13 +1211,14 @@ def test_d101(self): self.assertEqual(utm_1.huso, u'40') self.assertEqual(utm_1.banda, u'E') - inst_gen_2 = info.datos_inst_gen[1] + inst_gen_2 = datos_cau.datos_inst_gen[1] self.assertEqual(inst_gen_2.cil, u'ES1234000000000001JN0F002') self.assertEqual(inst_gen_2.tec_generador, u'b11') self.assertEqual(inst_gen_2.pot_instalada_gen, u'100') self.assertEqual(inst_gen_2.tipo_instalacion, u'01') self.assertEqual(inst_gen_2.esquema_medida, u'B') self.assertEqual(inst_gen_2.ssaa, u'S') + self.assertEqual(inst_gen_2.unico_contrato, u'S') self.assertEqual(inst_gen_2.ref_catastro, u'1234567890qwertyuidf') utm_2 = inst_gen_2.utm self.assertEqual(utm_2.x, u'100') @@ -1224,22 +1234,10 @@ def test_d101(self): self.assertEqual(titular.telefono[0][0], u'0034') self.assertEqual(titular.telefono[0][1], u'933834841') self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') - direccion = titular.direccion - self.assertEqual(direccion.pais, u'Espa帽a') - self.assertEqual(direccion.provincia, u'17') - self.assertEqual(direccion.municipio, u'171181') - self.assertEqual(direccion.poblacion, u'17118000400') - self.assertEqual(direccion.cod_postal, u'17230') - self.assertEqual(direccion.tipo_via, u'CL') - self.assertEqual(direccion.calle, u'Pau Casals') - self.assertEqual(direccion.numero_finca, u'18') - self.assertEqual(direccion.duplicador_finca, u'1') - self.assertEqual(direccion.escalera, u'D') - self.assertEqual(direccion.piso, u'3') - self.assertEqual(direccion.puerta, u'2') - self.assertEqual(direccion.tipo_aclarador_finca, u'BI') - self.assertEqual(direccion.aclarador_finca, u'Bar') - self.assertEqual(info.comentarios, u'Esto es un comentario') + self.assertEqual(len(d1.registros_documento), 1) + doc1 = d1.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') def test_d101_min_with_info(self): d1 = D1(self.xml_d101_min_with_info) @@ -1247,12 +1245,12 @@ def test_d101_min_with_info(self): self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'04') info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_registro_autocons autoconsumo = info.autoconsumo - self.assertEqual(autoconsumo.cau, u'ES1234000000000001JN0FA001') - self.assertEqual(autoconsumo.seccion_registro, u'2') - self.assertEqual(autoconsumo.colectivo, u'S') - suministro = info.datos_suministro - self.assertEqual(suministro.cups, u'ES1234000000000001JN0F') - inst_gen = info.datos_inst_gen[0] + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + datos_cau = autoconsumo.datos_cau + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + inst_gen = datos_cau.datos_inst_gen[0] self.assertEqual(inst_gen.tec_generador, u'b12') self.assertEqual(inst_gen.pot_instalada_gen, u'100') self.assertEqual(inst_gen.tipo_instalacion, u'01') @@ -1268,14 +1266,6 @@ def test_d101_min_with_info(self): self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') self.assertEqual(titular.telefono[0][0], u'0034') self.assertEqual(titular.telefono[0][1], u'933834841') - direccion = titular.direccion - self.assertEqual(direccion.pais, u'Espa帽a') - self.assertEqual(direccion.provincia, u'17') - self.assertEqual(direccion.municipio, u'171181') - self.assertEqual(direccion.cod_postal, u'17230') - self.assertEqual(direccion.tipo_via, u'CL') - self.assertEqual(direccion.calle, u'Pau Casals') - self.assertEqual(direccion.numero_finca, u'18') def test_d101_fully_min(self): d1 = D1(self.xml_d101_fully_min) @@ -1341,12 +1331,6 @@ def test_d101_motiu_13_14(self): self.assertEqual(info11.valor_energia_horaria_calculada, u'201') self.assertEqual(info11.pot_instalada_gen, u'6') - def test_d102_accept(self): - d1 = D1(self.xml_d102_accept) - d1.parse_xml() - # Datos Aceptacion - self.assertEqual(d1.datos_aceptacion.fecha_aceptacion, u'2016-06-06') - def test_d102_reject(self): d1 = D1(self.xml_d102_reject) d1.parse_xml() @@ -1364,6 +1348,13 @@ def test_d102_reject(self): self.assertEqual(rej.codigo_motivo, u'F1') self.assertEqual(rej.comentarios, u'Motiu de rebuig F1') + def test_d110(self): + d1 = D1(self.xml_d110) + d1.parse_xml() + datos_anulacion = d1.datos_anulacion[0] + self.assertEqual(datos_anulacion.fecha_anulacion, "2016-06-10") + + class test_W1(TestCaseCompat): def setUp(self): diff --git a/tests/test_output.py b/tests/test_output.py index b34a075a..037319fd 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -1584,15 +1584,14 @@ def setUp(self): self.xml_d101 = open(get_data("d101.xml"), "rb") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "rb") self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "rb") - self.xml_d102_accept = open(get_data("d102_accept.xml"), "rb") self.xml_d102_reject = open(get_data("d102_reject.xml"), "rb") + self.xml_d110 = open(get_data("d110.xml"), "rb") def tearDown(self): self.xml_d101.close() self.xml_d101_motiu_13.close() self.xml_d101_motiu_13_14.close() - self.xml_d102_accept.close() - self.xml_d102_reject.close() + self.xml_d110.close() def test_create_pas01(self): # MensajeNotificacionCambiosATRDesdeDistribuidor @@ -1612,24 +1611,13 @@ def test_create_pas01(self): } cabecera.feed(cabecera_fields) - # Autoconsumo - autoconsumo = d1.Autoconsumo() - autoconsumo_fields = { - 'cau': 'ES1234000000000001JN0FA001', - 'seccion_registro': '2', - 'sub_seccion': 'a0', - 'colectivo': 'S', - } - autoconsumo.feed(autoconsumo_fields) - # DatosSuministro - suministro = d1.DatosSuministro() - suministro_fields = { - 'cups': 'ES1234000000000001JN0F', + datos_suministro = d1.DatosSuministro() + datos_suministro_fields = { 'tipo_cups': '01', 'ref_catastro': '1234567890qwertyuiop', } - suministro.feed(suministro_fields) + datos_suministro.feed(datos_suministro_fields) # UTM utm = d1.UTM() @@ -1682,33 +1670,6 @@ def test_create_pas01(self): } telefono3.feed(telefono3_fields) - # Via - via = d1.Via() - via_fields = { - 'tipo_via': 'CL', - 'calle': 'Pau Casals', - 'numero_finca': '18', - 'duplicador_finca': '1', - 'escalera': 'D', - 'piso': '3', - 'puerta': '2', - 'tipo_aclarador_finca': 'BI', - 'aclarador_finca': 'Bar', - } - via.feed(via_fields) - - # Direccion - direccion = d1.Direccion() - direccion_fields = { - 'pais': 'Espa帽a', - 'provincia': '17', - 'municipio': '171181', - 'poblacion': '17118000400', - 'cod_postal': '17230', - 'via': via - } - direccion.feed(direccion_fields) - # TitularRepresentanteGen titular = d1.TitularRepresentanteGen() titular_representante_gen_fields = { @@ -1716,7 +1677,6 @@ def test_create_pas01(self): 'nombre': nombre, 'telefono': [telefono, telefono2, telefono3], 'correo_electronico': 'mail_falso@dominio.com', - 'direccion': direccion, } titular.feed(titular_representante_gen_fields) @@ -1730,6 +1690,7 @@ def test_create_pas01(self): 'tipo_instalacion': '01', 'esquema_medida': 'B', 'ssaa': 'S', + 'unico_contrato': 'S', 'ref_catastro': '1234567890qwertyuidf', 'utm': utm, 'titular_representante_gen': titular, @@ -1747,30 +1708,65 @@ def test_create_pas01(self): 'tipo_instalacion': '01', 'esquema_medida': 'B', 'ssaa': 'S', + 'unico_contrato': 'S', 'ref_catastro': '1234567890qwertyuidf', 'utm': utm2, 'titular_representante_gen': titular2, } datos_2.feed(datos_inst_gen_fields) + # DatosCAU + datos_cau = d1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1, datos_2], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = d1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) # InfoRegistroAutocons info = d1.InfoRegistroAutocons() info_registro_autocons_fields = { 'movimiento': 'A', 'autoconsumo': autoconsumo, - 'datos_suministro': suministro, - 'datos_inst_gen': [datos_1, datos_2], - 'comentarios': 'Esto es un comentario' } info.feed(info_registro_autocons_fields) + # RegistroDoc + doc1 = d1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + + # RegistrosDocumento + registros = d1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc': doc1, + } + registros.feed(registros_documento_fields) + # NotificacionCambiosATRDesdeDistribuidor notificacion = d1.NotificacionCambiosATRDesdeDistribuidor() notificacion_cambios_atr_desde_distribuidor_fields = { 'motivo_cambio_atr_desde_distribuidora': '01', 'fecha_prevista_aplicacion_cambio_atr': '2016-06-09', + 'fecha_maxima_rechazo': '2016-06-09', 'periodicidad_facturacion': '01', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'info_registro_autocons': info, + 'registros_documento': registros, } notificacion.feed(notificacion_cambios_atr_desde_distribuidor_fields) @@ -1921,47 +1917,6 @@ def test_create_pas01_motiu_13_14(self): xml = str(mensaje) assertXmlEqual(xml, self.xml_d101_motiu_13_14.read()) - def test_create_pas02_accept(self): - # Cabecera - cabecera = d1.Cabecera() - cabecera_fields = { - 'codigo_ree_empresa_emisora': '1234', - 'codigo_ree_empresa_destino': '4321', - 'codigo_del_proceso': 'D1', - 'codigo_del_paso': '02', - 'codigo_de_solicitud': '201607211259', - 'secuencial_de_solicitud': '01', - 'fecha': '2016-07-21T12:59:47', - 'cups': 'ES1234000000000001JN0F', - } - cabecera.feed(cabecera_fields) - - # DatosAceptacion - datos_aceptacion = d1.DatosAceptacion() - datos_aceptacion_fields = { - 'fecha_aceptacion': '2016-06-06', - } - datos_aceptacion.feed(datos_aceptacion_fields) - - # AceptacionNotificacionCambiosATRDesdeDistribuidor - acept_cambio = d1.AceptacionNotificacionCambiosATRDesdeDistribuidor() - aceptacion_notificacion_cambios_atr_desde_distribuidor_fields = { - 'datos_aceptacion': datos_aceptacion, - } - acept_cambio.feed(aceptacion_notificacion_cambios_atr_desde_distribuidor_fields) - - # MensajeAceptacionCambiodeComercializadorSinCambios - mensaje = d1.MensajeAceptacionNotificacionCambiosATRDesdeDistribuidor() - mensaje_aceptacion_notificacion_cambios_atr_desde_distribuidor_fields = { - 'cabecera': cabecera, - 'aceptacion_notificacion_cambios_atr_desde_distribuidor': acept_cambio, - } - mensaje.feed(mensaje_aceptacion_notificacion_cambios_atr_desde_distribuidor_fields) - - mensaje.build_tree() - xml = str(mensaje) - assertXmlEqual(xml, self.xml_d102_accept.read()) - def test_create_pas02_rej(self): # Cabecera cabecera = d1.Cabecera() @@ -2030,6 +1985,36 @@ def test_create_pas02_rej(self): xml = str(mensaje_rechazo) assertXmlEqual(xml, self.xml_d102_reject.read()) + def test_create_pas10(self): + # Cabecera + cabecera = d1.Cabecera() + cabecera_fields = { + 'codigo_ree_empresa_emisora': '1234', + 'codigo_ree_empresa_destino': '4321', + 'codigo_del_proceso': 'D1', + 'codigo_del_paso': '10', + 'codigo_de_solicitud': '201605219497', + 'secuencial_de_solicitud': '00', + 'fecha': '2016-06-08T04:24:09', + 'cups': 'ES0116000000011531LK0F', + } + cabecera.feed(cabecera_fields) + + datos_anulacion = d1.DatosAnulacion() + datos_anulacion.feed({'fecha_anulacion': "2016-06-10"}) + + # MensajeRechazo + mensaje_anulacion_d1 = d1.MensajeAnulacionD1() + mensaje_rechazo_fields = { + 'cabecera': cabecera, + 'datos_anulacion': datos_anulacion, + } + mensaje_anulacion_d1.feed(mensaje_rechazo_fields) + + mensaje_anulacion_d1.build_tree() + xml = str(mensaje_anulacion_d1) + assertXmlEqual(xml, self.xml_d110.read()) + class test_P0(unittest.TestCase): From d252a2ea88099454132d911f8dc8fd442b45c6ba Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 27 Nov 2024 17:57:35 +0100 Subject: [PATCH 06/19] new afegir proceso a1,c1,c2,e1,m2,po,r1,t1 --- gestionatr/data/AnulacionD1.xsd | 2 +- gestionatr/data/TipoMensajeC101.xsd | 2 +- gestionatr/input/messages/A1.py | 499 +++++++++++++++++++++++++- gestionatr/input/messages/C1.py | 27 +- gestionatr/input/messages/C2.py | 9 + gestionatr/input/messages/E1.py | 18 + gestionatr/input/messages/M2.py | 45 +++ gestionatr/input/messages/P0.py | 397 ++++++++++++-------- gestionatr/input/messages/R1.py | 28 ++ gestionatr/input/messages/T1.py | 27 ++ gestionatr/input/messages/__init__.py | 1 + gestionatr/input/messages/message.py | 5 + gestionatr/output/messages/sw_a1.py | 145 +++++++- gestionatr/output/messages/sw_a3.py | 2 +- gestionatr/output/messages/sw_c1.py | 112 +++++- gestionatr/output/messages/sw_c2.py | 25 +- gestionatr/output/messages/sw_d1.py | 138 +------ gestionatr/output/messages/sw_e1.py | 12 +- gestionatr/output/messages/sw_m1.py | 13 +- gestionatr/output/messages/sw_m2.py | 57 +++ gestionatr/output/messages/sw_p0.py | 102 ++++-- gestionatr/output/messages/sw_r1.py | 23 +- gestionatr/output/messages/sw_t1.py | 10 +- 23 files changed, 1362 insertions(+), 337 deletions(-) create mode 100644 gestionatr/input/messages/M2.py create mode 100644 gestionatr/output/messages/sw_m2.py diff --git a/gestionatr/data/AnulacionD1.xsd b/gestionatr/data/AnulacionD1.xsd index 69e818f3..3924890e 100644 --- a/gestionatr/data/AnulacionD1.xsd +++ b/gestionatr/data/AnulacionD1.xsd @@ -7,7 +7,7 @@ - + diff --git a/gestionatr/data/TipoMensajeC101.xsd b/gestionatr/data/TipoMensajeC101.xsd index 94d1244d..693884f3 100644 --- a/gestionatr/data/TipoMensajeC101.xsd +++ b/gestionatr/data/TipoMensajeC101.xsd @@ -28,7 +28,7 @@ Tabla 137 - + diff --git a/gestionatr/input/messages/A1.py b/gestionatr/input/messages/A1.py index 8cebcda6..a0360cec 100644 --- a/gestionatr/input/messages/A1.py +++ b/gestionatr/input/messages/A1.py @@ -3,7 +3,6 @@ from .message import Message from .Deadlines import ProcessDeadline from gestionatr.input.messages import except_f1 -from .C1 import DatosInstGen, DatosSuministro, Autoconsumo from gestionatr.utils import get_rec_attr @@ -176,6 +175,504 @@ def comentarios(self): pass return data +class Autoconsumo(object): + + def __init__(self, data): + self.autoconsumo = data + + @property + def cau(self): + data = '' + try: + data = self.autoconsumo.CAU.text + except AttributeError: + pass + return data + + @property + def seccion_registro(self): + data = '' + try: + data = self.autoconsumo.SeccionRegistro.text + except AttributeError: + pass + return data + + @property + def sub_seccion(self): + data = '' + try: + data = self.autoconsumo.SubSeccion.text + except AttributeError: + pass + return data + + @property + def colectivo(self): + data = '' + try: + data = self.autoconsumo.Colectivo.text + except AttributeError: + pass + return data + + +class DatosSuministro(object): + + def __init__(self, data): + self.datos_suministro = data + + @property + def cups(self): + data = '' + try: + data = self.datos_suministro.CUPS.text + except AttributeError: + pass + return data + + @property + def tipo_cups(self): + data = '' + try: + data = self.datos_suministro.TipoCUPS.text + except AttributeError: + pass + return data + + @property + def ref_catastro(self): + data = '' + try: + data = self.datos_suministro.RefCatastro.text + except AttributeError: + pass + return data + + +class DatosInstGen(object): + + def __init__(self, data): + self.datos_inst_gen = data + + @property + def cil(self): + data = '' + try: + data = self.datos_inst_gen.CIL.text + except AttributeError: + pass + return data + + @property + def tec_generador(self): + data = '' + try: + data = self.datos_inst_gen.TecGenerador.text + except AttributeError: + pass + return data + + @property + def combustible(self): + data = '' + try: + data = self.datos_inst_gen.Combustible.text + except AttributeError: + pass + return data + + @property + def pot_instalada_gen(self): + data = '' + try: + data = self.datos_inst_gen.PotInstaladaGen.text + except AttributeError: + pass + return data + + @property + def tipo_instalacion(self): + data = '' + try: + data = self.datos_inst_gen.TipoInstalacion.text + except AttributeError: + pass + return data + + @property + def esquema_medida(self): + data = '' + try: + data = self.datos_inst_gen.EsquemaMedida.text + except AttributeError: + pass + return data + + @property + def ssaa(self): + data = '' + try: + data = self.datos_inst_gen.SSAA.text + except AttributeError: + pass + return data + + @property + def ref_catastro(self): + data = '' + try: + data = self.datos_inst_gen.RefCatastro.text + except AttributeError: + pass + return data + + @property + def utm(self): + data = '' + try: + data = UTM(self.datos_inst_gen.UTM) + except AttributeError: + pass + return data + + @property + def titular_representante_gen(self): + data = '' + try: + data = TitularRepresentanteGen(self.datos_inst_gen.TitularRepresentanteGen) + except AttributeError: + pass + return data + + +class TitularRepresentanteGen(object): + + def __init__(self, data): + self.titular_representante_gen = data + + @property + def id_titular(self): + data = '' + try: + data = IdTitular(self.titular_representante_gen.IdTitular) + except AttributeError: + pass + return data + + @property + def nombre(self): + data = '' + try: + data = Nombre(self.titular_representante_gen.Nombre) + except AttributeError: + pass + return data + + @property + def telefono(self): + data = [] + try: + for telefono in self.titular_representante_gen.Telefono: + data.append((telefono.PrefijoPais.text, telefono.Numero.text)) + except AttributeError: + pass + return data + + @property + def correo_electronico(self): + data = '' + try: + data = self.titular_representante_gen.CorreoElectronico.text + except AttributeError: + pass + return data + + @property + def direccion(self): + data = '' + try: + data = Direccion(self.titular_representante_gen.Direccion) + except AttributeError: + pass + return data + + +class IdTitular(object): + + def __init__(self, data): + self.id_titular = data + + @property + def tipo_identificador(self): + data = '' + try: + data = self.id_titular.TipoIdentificador.text + except AttributeError: + pass + return data + + @property + def identificador(self): + data = '' + try: + data = self.id_titular.Identificador.text + except AttributeError: + pass + return data + + +class Nombre(object): + + def __init__(self, data): + self.nombre = data + + @property + def nombre_de_pila(self): + data = '' + try: + data = self.nombre.NombreDePila.text + except AttributeError: + pass + return data + + @property + def primer_apellido(self): + data = '' + try: + data = self.nombre.PrimerApellido.text + except AttributeError: + pass + return data + + @property + def segundo_apellido(self): + data = '' + try: + data = self.nombre.SegundoApellido.text + except AttributeError: + pass + return data + + @property + def razon_social(self): + data = '' + try: + data = self.nombre.RazonSocial.text + except AttributeError: + pass + return data + + +class UTM(object): + + def __init__(self, data): + self.utm = data + + @property + def x(self): + data = '' + try: + data = self.utm.X.text + except AttributeError: + pass + return data + + @property + def y(self): + data = '' + try: + data = self.utm.Y.text + except AttributeError: + pass + return data + + @property + def huso(self): + data = '' + try: + data = self.utm.Huso.text + except AttributeError: + pass + return data + + @property + def banda(self): + data = '' + try: + data = self.utm.Banda.text + except AttributeError: + pass + return data + + +class Direccion(object): + + def __init__(self, data): + self.direccion = data + + @property + def pais(self): + data = '' + try: + data = self.direccion.Pais.text.strip() + except AttributeError: + pass + return data + + @property + def provincia(self): + data = '' + try: + data = self.direccion.Provincia.text.strip() + except AttributeError: + pass + return data + + @property + def municipio(self): + data = '' + try: + data = self.direccion.Municipio.text.strip() + except AttributeError: + pass + return data + + @property + def poblacion(self): + data = '' + try: + data = self.direccion.Poblacion.text.strip() + except AttributeError: + pass + return data + + @property + def cod_postal(self): + data = '' + try: + data = self.direccion.CodPostal.text.strip() + except AttributeError: + pass + return data + + @property + def tipo_via(self): + data = '' + try: + data = self.direccion.Via.TipoVia.text.strip() + except AttributeError: + try: + data = self.direccion.TipoVia.text.strip() + except AttributeError: + pass + return data + + @property + def calle(self): + data = '' + try: + data = self.direccion.Via.Calle.text.strip() + except AttributeError: + try: + data = self.direccion.Calle.text.strip() + except AttributeError: + pass + return data + + @property + def numero_finca(self): + data = '' + try: + data = self.direccion.Via.NumeroFinca.text.strip() + except AttributeError: + try: + data = self.direccion.NumeroFinca.text.strip() + except AttributeError: + pass + return data + + @property + def duplicador_finca(self): + data = '' + try: + data = self.direccion.Via.DuplicadorFinca.text.strip() + except AttributeError: + try: + data = self.direccion.DuplicadorFinca.text.strip() + except AttributeError: + pass + return data + + @property + def escalera(self): + data = '' + try: + data = self.direccion.Via.Escalera.text.strip() + except AttributeError: + try: + data = self.direccion.Escalera.text.strip() + except AttributeError: + pass + return data + + @property + def piso(self): + data = '' + try: + data = self.direccion.Via.Piso.text.strip() + except AttributeError: + try: + data = self.direccion.Piso.text.strip() + except AttributeError: + pass + return data + + @property + def puerta(self): + data = '' + try: + data = self.direccion.Via.Puerta.text.strip() + except AttributeError: + try: + data = self.direccion.Puerta.text.strip() + except AttributeError: + pass + return data + + @property + def tipo_aclarador_finca(self): + data = '' + try: + data = self.direccion.Via.TipoAclaradorFinca.text.strip() + except AttributeError: + try: + data = self.direccion.TipoAclaradorFinca.text.strip() + except AttributeError: + pass + return data + + @property + def aclarador_finca(self): + data = '' + try: + data = self.direccion.Via.AclaradorFinca.text.strip() + except AttributeError: + try: + data = self.direccion.AclaradorFinca.text.strip() + except AttributeError: + pass + return data + + @property + def apartado_de_correos(self): + data = '' + try: + data = self.direccion.ApartadoDeCorreos.text.strip() + except AttributeError: + pass + return data + class MinimumFieldsChecker(object): diff --git a/gestionatr/input/messages/C1.py b/gestionatr/input/messages/C1.py index 9832c487..2e66dca6 100644 --- a/gestionatr/input/messages/C1.py +++ b/gestionatr/input/messages/C1.py @@ -169,6 +169,24 @@ def ind_activacion(self): pass return data + @property + def ind_esencial(self): + data = False + try: + data = self.datos_solicitud.IndEsencial.text + except AttributeError: + pass + return data + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + data = False + try: + data = self.datos_solicitud.FechaUltimoMovimientoIndEsencial.text + except AttributeError: + pass + return data + @property def fecha_prevista_accion(self): data = False @@ -600,7 +618,7 @@ def bono_social(self): def ind_esencial(self): data = False try: - data = self.datos_solicitud.IndEsencial.text + data = self.datos_activacion.IndEsencial.text except AttributeError: pass return data @@ -609,7 +627,7 @@ def ind_esencial(self): def fecha_ultimo_movimiento_ind_esencial(self): data = False try: - data = self.datos_solicitud.FechaUltimoMovimientoIndEsencial.text + data = self.datos_activacion.FechaUltimoMovimientoIndEsencial.text except AttributeError: pass return data @@ -1087,9 +1105,10 @@ def datos_suministro(self): @property def datos_cau(self): - data = '' + data = [] try: - data = DatosCAU(self.autoconsumo.DatosCAU) + for datos in self.autoconsumo.DatosCAU: + data.append(DatosCAU(datos)) except AttributeError: pass return data diff --git a/gestionatr/input/messages/C2.py b/gestionatr/input/messages/C2.py index 8f2fc0f0..94b2e207 100644 --- a/gestionatr/input/messages/C2.py +++ b/gestionatr/input/messages/C2.py @@ -200,6 +200,15 @@ def consumo_anual_estimado(self): pass return data + @property + def cups_principal(self): + data = '' + try: + data = self.contrato.CUPSPrincipal.text + except AttributeError: + pass + return data + class Contacto(object): diff --git a/gestionatr/input/messages/E1.py b/gestionatr/input/messages/E1.py index a32e5069..8afd7fb0 100644 --- a/gestionatr/input/messages/E1.py +++ b/gestionatr/input/messages/E1.py @@ -18,6 +18,24 @@ def codigo_de_solicitud_ref(self): else: return False + @property + def ind_esencial(self): + tree = '{0}.IndEsencial'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + tree = '{0}.FechaUltimoMovimientoIndEsencial'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + @property def tipo_de_solicitud(self): tree = '{0}.TipoDeSolicitud'.format(self._header) diff --git a/gestionatr/input/messages/M2.py b/gestionatr/input/messages/M2.py new file mode 100644 index 00000000..4ca1c232 --- /dev/null +++ b/gestionatr/input/messages/M2.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, unicode_literals +from .M1 import M1 +from .C1 import DatosActivacion +from gestionatr.utils import get_rec_attr + + +class M2(M1): + """Classe que implementa M2.""" + + # Datos paso 05 + @property + def datos_activacion(self): + tree = '{0}.DatosActivacion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return DatosActivacion(data) + else: + return False + + +class DatosActivacion(DatosActivacion): + @property + def motivo_activacion_unidireccional(self): + data = [] + try: + for datos in self.datos_activacion.MotivoActivacionUnidireccional: + data.append(MotivoActivacionUnidireccional(datos)) + except AttributeError: + pass + return data + +class MotivoActivacionUnidireccional(object): + + def __init__(self, data): + self.motivo_activacion_unidireccional = data + + @property + def motivo(self): + data = False + try: + data = self.motivo_activacion_unidireccional.Motivo.text + except AttributeError: + pass + return data diff --git a/gestionatr/input/messages/P0.py b/gestionatr/input/messages/P0.py index cbf89d70..46753dc5 100644 --- a/gestionatr/input/messages/P0.py +++ b/gestionatr/input/messages/P0.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals -from gestionatr.input.messages.C1 import Rechazo +from gestionatr.input.messages.C1 import Rechazo, Autoconsumo +from gestionatr.input.messages.C2 import Cliente, Direccion from .message import Message from .Deadlines import ProcessDeadline from gestionatr.utils import get_rec_attr @@ -83,6 +84,152 @@ def contrato(self): else: return False + @property + def fecha_ultimo_movimiento_tipo_autocons(self): + tree = '{0}.FechaUltimoMovimientoTipoAutocons'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def ind_bono_social(self): + tree = '{0}.IndBonoSocial'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def ind_esencial(self): + tree = '{0}.IndEsencial'.format(self._header) + data = get_rec_attr(self.obj, tree, '') + # pot ser que IndEsencial tingui valor '00' indicant que no te. Llavors get_rec_attr el retorna com '0' que + # s'interpreta com False pero despres fent data.text retorna '00' per tant es posa default com a '' + if data != '': + return data.text + else: + return False + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + tree = '{0}.FechaUltimoMovimientoIndEsencial'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def vivienda_habitual(self): + tree = '{0}.ViviendaHabitual'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def cnae(self): + tree = '{0}.CNAE'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def condiciones_contractuales(self): + tree = '{0}.CondicionesContractuales'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def modo_facturacion_potencia(self): + tree = '{0}.ModoFacturacionPotencia'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def no_interrumpible(self): + tree = '{0}.NoInterrumpible'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def potencia_no_interrumpible(self): + tree = '{0}.PotenciaNoInterrumpible'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def vas_trafo(self): + tree = '{0}.VAsTrafo'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def periodicidad_facturacion(self): + tree = '{0}.PeriodicidadFacturacion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def tipo_de_telegestion(self): + tree = '{0}.TipodeTelegestion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def icp_activado_telegestion(self): + tree = '{0}.ICPActivadoTelegestion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def peaje_directo(self): + tree = '{0}.PeajeDirecto'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + @property + def deposito_garantia(self): + tree = '{0}.DepositoGarantia'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + @property def potencia_maxima_autorizada(self): tree = '{0}.PotenciaMaxAutorizada'.format(self._header) @@ -128,6 +275,15 @@ def historia(self): else: return False + @property + def cliente(self): + tree = '{0}.Cliente'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return Cliente(data) + else: + return False + @property def equipo(self): data = [] @@ -148,6 +304,16 @@ def doc_tecnica(self): else: return False + @property + def puntos_de_medida(self): + data = [] + obj = get_rec_attr(self.obj, self._header, False) + if (hasattr(obj, 'PuntosDeMedida') and + hasattr(obj.PuntosDeMedida, 'PuntoDeMedida')): + for d in obj.PuntosDeMedida.PuntoDeMedida: + data.append(PuntoDeMedida(d)) + return data + @property def expediente_anomalia_fraude(self): tree = '{0}.ExpedienteAnomaliaFraude'.format(self._header) @@ -188,139 +354,37 @@ def rechazo(self): return False -class EstadoContratable(object): - - def __init__(self, data): - self.estado_contratable = data - - @property - def contratable(self): - data = '' - try: - data = self.estado_contratable.Contratable.text - except AttributeError: - pass - return data +class Cliente(Cliente): @property - def motivo(self): + def direccion_suministro(self): data = '' try: - data = self.estado_contratable.Motivo.text + data = Direccion(self.cliente.DireccionSuministro) except AttributeError: pass return data -class Contrato(object): +class EstadoContratable(object): def __init__(self, data): - self.contrato = data - - @property - def tipo_contrato_atr(self): - data = '' - try: - data = self.contrato.TipoContratoATR.text - except AttributeError: - pass - return data - - @property - def fecha_finalizacion(self): - data = '' - try: - data = self.contrato.FechaFinalizacion.text - except AttributeError: - pass - return data - - @property - def tipo_autoconsumo(self): - data = '' - try: - data = self.contrato.TipoAutoconsumo.text - except AttributeError: - pass - return data - - @property - def fecha_ultimo_movimiento_tipo_autocons(self): - data = '' - try: - data = self.contrato.FechaUltimoMovimientoTipoAutocons.text - except AttributeError: - pass - return data - - @property - def ind_bono_social(self): - data = '' - try: - data = self.contrato.IndBonoSocial.text - except AttributeError: - pass - return data - - @property - def ind_esencial(self): - data = '' - try: - data = self.contrato.IndEsencial.text - except AttributeError: - pass - return data - - @property - def vivienda_habitual(self): - data = '' - try: - data = self.contrato.ViviendaHabitual.text - except AttributeError: - pass - return data - - @property - def cnae(self): - data = '' - try: - data = self.contrato.CNAE.text - except AttributeError: - pass - return data - - @property - def condiciones_contractuales(self): - data = '' - try: - data = CondicionesContractuales(self.contrato.CondicionesContractuales) - except AttributeError: - pass - return data - - @property - def modo_facturacion_potencia(self): - data = '' - try: - data = self.contrato.ModoFacturacionPotencia.text - except AttributeError: - pass - return data + self.estado_contratable = data @property - def no_interrumpible(self): + def contratable(self): data = '' try: - data = self.contrato.NoInterrumpible.text + data = self.estado_contratable.Contratable.text except AttributeError: pass return data @property - def potencia_no_interrumpible(self): + def motivo(self): data = '' try: - data = self.contrato.PotenciaNoInterrumpible.text + data = self.estado_contratable.Motivo.text except AttributeError: pass return data @@ -329,61 +393,40 @@ def potencia_no_interrumpible(self): def potencia_max_sin_expediente(self): data = '' try: - data = self.contrato.PotenciaMaxSinExpediente.text + data = self.estado_contratable.PotenciaMaxSinExpediente.text except AttributeError: pass return data - @property - def vas_trafo(self): - data = '' - try: - data = self.contrato.VAsTrafo.text - except AttributeError: - pass - return data - @property - def periodicidad_facturacion(self): - data = '' - try: - data = self.contrato.PeriodicidadFacturacion.text - except AttributeError: - pass - return data +class Contrato(object): - @property - def tipo_de_telegestion(self): - data = '' - try: - data = self.contrato.TipodeTelegestion.text - except AttributeError: - pass - return data + def __init__(self, data): + self.contrato = data @property - def icp_activado_telegestion(self): + def tipo_contrato_atr(self): data = '' try: - data = self.contrato.ICPActivadoTelegestion.text + data = self.contrato.TipoContratoATR.text except AttributeError: pass return data @property - def peaje_directo(self): + def fecha_finalizacion(self): data = '' try: - data = self.contrato.PeajeDirecto.text + data = self.contrato.FechaFinalizacion.text except AttributeError: pass return data @property - def deposito_garantia(self): + def autoconsumo(self): data = '' try: - data = self.contrato.DepositoGarantia.text + data = Autoconsumo(self.contrato.Autoconsumo) except AttributeError: pass return data @@ -479,15 +522,6 @@ def tension_pm(self): pass return data - @property - def relacion_transformacion_intensidad(self): - data = '' - try: - data = self.caracteristicas_pm.RelacionTransformacionIntensidad.text - except AttributeError: - pass - return data - class Historia(object): @@ -590,12 +624,30 @@ def tipo_dh_edm(self): pass return data + @property + def relacion_transformacion_intensidad(self): + data = '' + try: + data = self.equipo.RelacionTransformacionIntensidad.text + except AttributeError: + pass + return data + class DocTecnica(object): def __init__(self, data): self.doc_tecnica = data + @property + def cie_disponible(self): + data = '' + try: + data = self.doc_tecnica.CIEDisponible.text + except AttributeError: + pass + return data + @property def datos_cie(self): data = '' @@ -620,6 +672,15 @@ class DatosCie(object): def __init__(self, data): self.datos_cie = data + @property + def potencia_ins_bt(self): + data = '' + try: + data = self.datos_cie.PotenciaInsBT.text + except AttributeError: + pass + return data + @property def cie_papel(self): data = '' @@ -813,6 +874,38 @@ def codigo_motivo_expediente(self): return data +class PuntoDeMedida(object): + + def __init__(self, data): + self.punto_de_medida = data + + @property + def direccion_enlace(self): + data = '' + try: + data = self.punto_de_medida.DireccionEnlace.text + except AttributeError: + pass + return data + + @property + def telefono_telemedida(self): + data = '' + try: + data = self.punto_de_medida.TelefonoTelemedida.text + except AttributeError: + pass + return data + + @property + def clave_acceso(self): + data = '' + try: + data = self.punto_de_medida.ClaveAcceso.text + except AttributeError: + pass + return data + # class MinimumFieldsChecker(object): # # def __init__(self, p0): diff --git a/gestionatr/input/messages/R1.py b/gestionatr/input/messages/R1.py index e812aed4..f1d6fdc8 100644 --- a/gestionatr/input/messages/R1.py +++ b/gestionatr/input/messages/R1.py @@ -338,6 +338,15 @@ def tipo_dhedm(self): pass return data + @property + def cau(self): + data = '' + try: + data = self.variable.CAU.text + except AttributeError: + pass + return data + @property def codigo_incidencia(self): data = '' @@ -383,6 +392,15 @@ def tipo_de_atencion_incorrecta(self): pass return data + @property + def motivo_consulta(self): + data = '' + try: + data = self.variable.MotivoConsulta.text + except AttributeError: + pass + return data + @property def iban(self): data = '' @@ -438,6 +456,16 @@ def lecturas_aportadas(self): data.append(LecturaAportada(d)) return data + @property + def disconformidad_autoconsumo(self): + data = [] + obj = self.variable + if (hasattr(obj, 'DisconformidadAutoconsumo') and + hasattr(obj.DisconformidadAutoconsumo, 'TipoDisconformidadAutoconsumo')): + for d in obj.DisconformidadAutoconsumo.TipoDisconformidadAutoconsumo: + data.append(d.text) + return data + @property def contacto(self): data = '' diff --git a/gestionatr/input/messages/T1.py b/gestionatr/input/messages/T1.py index 859da6e3..456af3ea 100644 --- a/gestionatr/input/messages/T1.py +++ b/gestionatr/input/messages/T1.py @@ -88,6 +88,15 @@ def ind_esencial(self): pass return data + @property + def fecha_ultimo_movimiento_ind_esencial(self): + data = False + try: + data = self.datos_solicitud.FechaUltimoMovimientoIndEsencial.text + except AttributeError: + pass + return data + @property def susp_baja_impago_en_curso(self): data = '' @@ -121,6 +130,24 @@ def en_servicio(self): pass return data + @property + def ind_esencial(self): + data = '' + try: + data = self.datos_activacion.IndEsencial.text + except AttributeError: + pass + return data + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + data = False + try: + data = self.datos_activacion.FechaUltimoMovimientoIndEsencial.text + except AttributeError: + pass + return data + class DatosNotificacion(object): diff --git a/gestionatr/input/messages/__init__.py b/gestionatr/input/messages/__init__.py index 8d1ebc1a..c691ba1d 100644 --- a/gestionatr/input/messages/__init__.py +++ b/gestionatr/input/messages/__init__.py @@ -8,6 +8,7 @@ from .B1 import B1 from .B2 import B2 from .M1 import M1 +from .M2 import M2 from .D1 import D1 from .E1 import E1 from .W1 import W1 diff --git a/gestionatr/input/messages/message.py b/gestionatr/input/messages/message.py index 9035eeb7..409ff182 100644 --- a/gestionatr/input/messages/message.py +++ b/gestionatr/input/messages/message.py @@ -87,6 +87,10 @@ 'Rechazo.xsd'), '13': 'ContestacionIncidencia.xsd', }, + 'M2': { + '02': 'Rechazo.xsd', + '05': 'ActivacionModificacionDeATRUnidir.xsd', + }, 'P0': {'01': 'SolicitudInformacionAlRegistroDePS.xsd', '02': ('EnvioInformacionPS.xsd', 'RechazoPeticion.xsd'), @@ -156,6 +160,7 @@ 'ModificacionDeATR': 'ModificacionDeATR', 'AceptacionModificacionDeATR': 'AceptacionModificacionDeATR', 'ActivacionModificacionDeATR': 'ActivacionModificaciones', + 'ActivacionModificacionDeATRUnidir': 'ActivacionModificaciones', 'ReclamacionPeticion': 'SolicitudReclamacion', 'AceptacionReclamacion': 'AceptacionReclamacion', 'RechazoReclamacion': 'Rechazos', diff --git a/gestionatr/output/messages/sw_a1.py b/gestionatr/output/messages/sw_a1.py index 98c442f1..b7383d56 100644 --- a/gestionatr/output/messages/sw_a1.py +++ b/gestionatr/output/messages/sw_a1.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals from libcomxml.core import XmlModel, XmlField -from gestionatr.output.messages.sw_d1 import Autoconsumo, DatosSuministro, DatosInstGen from gestionatr.output.messages.base import CabeceraAutoconsumo, CabeceraAutoconsumoRechazo @@ -80,3 +79,147 @@ def __init__(self): self.codigo_motivo = XmlField('CodigoMotivo') self.comentarios = XmlField('Comentarios') super(Rechazo, self).__init__('Rechazo', 'rechazo') + + +class Autoconsumo(XmlModel): + + _sort_order = ('autoconsumo', 'cau', 'seccion_registro', 'sub_seccion', 'colectivo') + + def __init__(self): + self.autoconsumo = XmlField('Autoconsumo') + self.cau = XmlField('CAU') + self.seccion_registro = XmlField('SeccionRegistro') + self.sub_seccion = XmlField('SubSeccion') + self.colectivo = XmlField('Colectivo') + super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') + + +class DatosSuministro(XmlModel): + + _sort_order = ('datos_suministro', 'cups', 'tipo_cups', 'ref_catastro') + + def __init__(self): + self.datos_suministro = XmlField('DatosSuministro') + self.cups = XmlField('CUPS') + self.tipo_cups = XmlField('TipoCUPS') + self.ref_catastro = XmlField('RefCatastro') + super(DatosSuministro, self).__init__('DatosSuministro', 'datos_suministro') + + +class DatosInstGen(XmlModel): + + _sort_order = ('datos_inst_gen', 'cil', 'tec_generador', 'combustible', 'pot_instalada_gen', 'tipo_instalacion', + 'esquema_medida', 'ssaa', 'ref_catastro', 'utm', 'titular_representante_gen') + + def __init__(self): + self.datos_inst_gen = XmlField('DatosInstGen') + self.cil = XmlField('CIL') + self.tec_generador = XmlField('TecGenerador') + self.combustible = XmlField('Combustible') + self.pot_instalada_gen = XmlField('PotInstaladaGen') + self.tipo_instalacion = XmlField('TipoInstalacion') + self.esquema_medida = XmlField('EsquemaMedida') + self.ssaa = XmlField('SSAA') + self.ref_catastro = XmlField('RefCatastro') + self.utm = UTM() + self.titular_representante_gen = TitularRepresentanteGen() + super(DatosInstGen, self).__init__('DatosInstGen', 'datos_inst_gen') + + +class UTM(XmlModel): + + _sort_order = ('utm', 'x', 'y', 'huso', 'banda') + + def __init__(self): + self.utm = XmlField('UTM') + self.x = XmlField('X') + self.y = XmlField('Y') + self.huso = XmlField('Huso') + self.banda = XmlField('Banda') + super(UTM, self).__init__('UTM', 'utm') + + +class TitularRepresentanteGen(XmlModel): + + _sort_order = ('titular_representante_gen', 'id_titular', 'nombre', 'telefono', 'correo_electronico', + 'direccion') + + def __init__(self): + self.titular_representante_gen = XmlField('TitularRepresentanteGen') + self.id_titular = IdTitular() + self.nombre = Nombre() + self.telefono = Telefono() + self.correo_electronico = XmlField('CorreoElectronico') + self.direccion = Direccion() + super(TitularRepresentanteGen, self).__init__('TitularRepresentanteGen', 'titular_representante_gen') + + +class IdTitular(XmlModel): + + _sort_order = ('id_titular', 'tipo_identificador', 'identificador') + + def __init__(self): + self.id_titular = XmlField('IdTitular') + self.tipo_identificador = XmlField('TipoIdentificador') + self.identificador = XmlField('Identificador') + super(IdTitular, self).__init__('IdTitular', 'id_titular') + + +class Nombre(XmlModel): + + _sort_order = ('nombre', 'nombre_de_pila', 'primer_apellido', 'segundo_apellido', 'razon_social') + + def __init__(self): + self.nombre = XmlField('Nombre') + self.nombre_de_pila = XmlField('NombreDePila') + self.primer_apellido = XmlField('PrimerApellido') + self.segundo_apellido = XmlField('SegundoApellido') + self.razon_social = XmlField('RazonSocial') + super(Nombre, self).__init__('Nombre', 'nombre') + + +class Telefono(XmlModel): + + _sort_order = ('telefono', 'prefijo_pais', 'numero') + + def __init__(self): + self.telefono = XmlField('Telefono') + self.prefijo_pais = XmlField('PrefijoPais') + self.numero = XmlField('Numero') + super(Telefono, self).__init__('Telefono', 'telefono') + + +class Direccion(XmlModel): + + _sort_order = ('direccion', 'pais', 'provincia', 'municipio', 'poblacion', 'cod_postal', 'via', + 'apartado_de_correos') + + def __init__(self): + self.direccion = XmlField('Direccion') + self.pais = XmlField('Pais') + self.provincia = XmlField('Provincia') + self.municipio = XmlField('Municipio') + self.poblacion = XmlField('Poblacion') + self.cod_postal = XmlField('CodPostal') + self.via = Via() + self.apartado_de_correos = XmlField('ApartadoDeCorreos') + super(Direccion, self).__init__('Direccion', 'direccion') + + +class Via(XmlModel): + + _sort_order = ('via', 'tipo_via', 'calle', 'numero_finca', 'duplicador_finca', 'escalera', 'piso', 'puerta', + 'tipo_aclarador_finca', 'aclarador_finca') + + def __init__(self): + self.via = XmlField('Via') + self.tipo_via = XmlField('TipoVia') + self.calle = XmlField('Calle') + self.numero_finca = XmlField('NumeroFinca') + self.duplicador_finca = XmlField('DuplicadorFinca') + self.escalera = XmlField('Escalera') + self.piso = XmlField('Piso') + self.puerta = XmlField('Puerta') + self.tipo_aclarador_finca = XmlField('TipoAclaradorFinca') + self.aclarador_finca = XmlField('AclaradorFinca') + super(Via, self).__init__('Via', 'via') diff --git a/gestionatr/output/messages/sw_a3.py b/gestionatr/output/messages/sw_a3.py index 4ee51a13..c0aece55 100644 --- a/gestionatr/output/messages/sw_a3.py +++ b/gestionatr/output/messages/sw_a3.py @@ -25,7 +25,7 @@ def __init__(self): self.datos_solicitud = DatosSolicitud() self.contrato = Contrato() self.cliente = Cliente() - self.medida = Medida() + self.medida = MedidaResto() self.doc_tecnica = DocTecnica() self.comentarios = XmlField('Comentarios') self.registros_documento = RegistrosDocumento() diff --git a/gestionatr/output/messages/sw_c1.py b/gestionatr/output/messages/sw_c1.py index ac8e94e3..1380653f 100644 --- a/gestionatr/output/messages/sw_c1.py +++ b/gestionatr/output/messages/sw_c1.py @@ -37,11 +37,15 @@ def __init__(self): class DatosSolicitud(XmlModel): - _sort_order = ('datos_solicitud', 'ind_activacion', 'fecha_prevista_accion', 'contratacion_incondicional_ps', 'contratacion_incondicional_bs', 'bono_social', 'solicitud_tension') + _sort_order = ('datos_solicitud', 'ind_activacion', 'ind_esencial', 'fecha_ultimo_movimiento_ind_esencial', + 'fecha_prevista_accion', 'contratacion_incondicional_ps', 'contratacion_incondicional_bs', + 'bono_social', 'solicitud_tension') def __init__(self): self.datos_solicitud = XmlField('DatosSolicitud') self.ind_activacion = XmlField('IndActivacion') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') self.fecha_prevista_accion = XmlField('FechaPrevistaAccion') self.contratacion_incondicional_ps = XmlField('ContratacionIncondicionalPS') self.contratacion_incondicional_bs = XmlField('ContratacionIncondicionalBS') @@ -99,6 +103,100 @@ def __init__(self): super(Telefono, self).__init__('Telefono', 'telefono') +class Autoconsumo(XmlModel): + + _sort_order = ('autoconsumo', 'datos_suministro', 'datos_cau') + + def __init__(self): + self.autoconsumo = XmlField('Autoconsumo') + self.datos_suministro = DatosSuministro() + self.datos_cau = DatosCAU() + super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') + + +class DatosCAU(XmlModel): + + _sort_order = ('datos_suministro', 'cau', 'tipo_autoconsumo', 'tipo_subseccion', 'colectivo', 'datos_inst_gen') + + def __init__(self): + self.datos_cau = XmlField('DatosCAU') + self.cau = XmlField('CAU') + self.tipo_autoconsumo = XmlField('TipoAutoconsumo') + self.tipo_subseccion = XmlField('TipoSubseccion') + self.colectivo = XmlField('Colectivo') + self.datos_inst_gen = DatosInstGen() + super(DatosCAU, self).__init__('DatosCAU', 'datos_cau') + + +class DatosSuministro(XmlModel): + + _sort_order = ('datos_suministro', 'tipo_cups', 'ref_catastro') + + def __init__(self): + self.datos_suministro = XmlField('DatosSuministro') + self.tipo_cups = XmlField('TipoCUPS') + self.ref_catastro = XmlField('RefCatastro') + super(DatosSuministro, self).__init__('DatosSuministro', 'datos_suministro') + + +class DatosInstGen(XmlModel): + + _sort_order = ('datos_inst_gen', 'cil', 'tec_generador', 'combustible', 'pot_instalada_gen', 'tipo_instalacion', + 'esquema_medida', 'ssaa', 'unico_contrato', 'ref_catastro', 'utm', 'titular_representante_gen') + + def __init__(self): + self.datos_inst_gen = XmlField('DatosInstGen') + self.cil = XmlField('CIL') + self.tec_generador = XmlField('TecGenerador') + self.combustible = XmlField('Combustible') + self.pot_instalada_gen = XmlField('PotInstaladaGen') + self.tipo_instalacion = XmlField('TipoInstalacion') + self.esquema_medida = XmlField('EsquemaMedida') + self.ssaa = XmlField('SSAA') + self.unico_contrato = XmlField('UnicoContrato') + self.ref_catastro = XmlField('RefCatastro') + self.utm = UTM() + self.titular_representante_gen = TitularRepresentanteGen() + super(DatosInstGen, self).__init__('DatosInstGen', 'datos_inst_gen') + + +class UTM(XmlModel): + + _sort_order = ('utm', 'x', 'y', 'huso', 'banda') + + def __init__(self): + self.utm = XmlField('UTM') + self.x = XmlField('X') + self.y = XmlField('Y') + self.huso = XmlField('Huso') + self.banda = XmlField('Banda') + super(UTM, self).__init__('UTM', 'utm') + + +class TitularRepresentanteGen(XmlModel): + + _sort_order = ('titular_representante_gen', 'id_titular', 'nombre', 'telefono', 'correo_electronico') + + def __init__(self): + self.titular_representante_gen = XmlField('TitularRepresentanteGen') + self.id_titular = IdTitular() + self.nombre = Nombre() + self.telefono = Telefono() + self.correo_electronico = XmlField('CorreoElectronico') + super(TitularRepresentanteGen, self).__init__('TitularRepresentanteGen', 'titular_representante_gen') + + +class IdTitular(XmlModel): + + _sort_order = ('id_titular', 'tipo_identificador', 'identificador') + + def __init__(self): + self.id_titular = XmlField('IdTitular') + self.tipo_identificador = XmlField('TipoIdentificador') + self.identificador = XmlField('Identificador') + super(IdTitular, self).__init__('IdTitular', 'id_titular') + + class RegistrosDocumento(XmlModel): _sort_order = ('registros_documento', 'registro_doc_list') @@ -160,13 +258,13 @@ def __init__(self): class Contrato(XmlModel): - _sort_order = ('contrato', 'id_contrato', 'data_finalitzacio', 'tipo_autoconsumo', 'tipo_contrato_atr', 'condiciones_contractuales', 'tipo_activacion_prevista', 'fecha_activacion_prevista') + _sort_order = ('contrato', 'id_contrato', 'data_finalitzacio', 'autoconsumo', 'tipo_contrato_atr', 'condiciones_contractuales', 'tipo_activacion_prevista', 'fecha_activacion_prevista') def __init__(self): self.contrato = XmlField('Contrato') self.id_contrato = IdContrato() self.data_finalitzacio = XmlField('FechaFinalizacion') - self.tipo_autoconsumo = XmlField('TipoAutoconsumo') + self.autoconsumo = Autoconsumo() self.tipo_contrato_atr = XmlField('TipoContratoATR') self.condiciones_contractuales = CondicionesContractuales() self.tipo_activacion_prevista = XmlField('TipoActivacionPrevista') @@ -273,24 +371,28 @@ def __init__(self): class ActivacionCambiodeComercializadorSinCambios(XmlModel): - _sort_order = ('activacion_cambiode_comercializador_sin_cambios', 'datos_activacion', 'contrato', 'puntos_de_medida') + _sort_order = ('activacion_cambiode_comercializador_sin_cambios', 'datos_activacion', 'contrato', + 'puntos_de_medida', 'registros_documento') def __init__(self): self.activacion_cambiode_comercializador_sin_cambios = XmlField('ActivacionCambiodeComercializadorSinCambios') self.datos_activacion = DatosActivacion() self.contrato = Contrato() self.puntos_de_medida = PuntosDeMedida() + self.registros_documento = RegistrosDocumento() super(ActivacionCambiodeComercializadorSinCambios, self).__init__('ActivacionCambiodeComercializadorSinCambios', 'activacion_cambiode_comercializador_sin_cambios') class DatosActivacion(XmlModel): - _sort_order = ('datos_activacion', 'fecha', 'bono_social') + _sort_order = ('datos_activacion', 'fecha', 'bono_social', 'ind_esencial', 'fecha_ultimo_movimiento_ind_esencial') def __init__(self): self.datos_activacion = XmlField('DatosActivacion') self.fecha = XmlField('Fecha') self.bono_social = XmlField('BonoSocial') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') super(DatosActivacion, self).__init__('DatosActivacion', 'datos_activacion') diff --git a/gestionatr/output/messages/sw_c2.py b/gestionatr/output/messages/sw_c2.py index 801d1236..668bfb1a 100644 --- a/gestionatr/output/messages/sw_c2.py +++ b/gestionatr/output/messages/sw_c2.py @@ -30,7 +30,7 @@ def __init__(self): self.datos_solicitud = DatosSolicitud() self.contrato = Contrato() self.cliente = Cliente() - self.medida = Medida() + self.medida = MedidaResto() self.doc_tecnica = DocTecnica() self.comentarios = XmlField('Comentarios') self.registros_documento = RegistrosDocumento() @@ -39,7 +39,10 @@ def __init__(self): class DatosSolicitud(DatosSolicitud): - _sort_order = ('datos_solicitud', 'tipo_modificacion', 'tipo_solicitud_administrativa', 'cnae', 'ind_activacion', 'fecha_prevista_accion', 'contratacion_incondicional_ps', 'contratacion_incondicional_bs', 'bono_social', 'solicitud_tension', 'tension_solicitada') + _sort_order = ('datos_solicitud', 'tipo_modificacion', 'tipo_solicitud_administrativa', 'cnae', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial', 'ind_activacion', 'fecha_prevista_accion', + 'contratacion_incondicional_ps', 'contratacion_incondicional_bs', 'bono_social', + 'solicitud_tension', 'tension_solicitada') def __init__(self): super(DatosSolicitud, self).__init__() @@ -51,12 +54,16 @@ def __init__(self): class Contrato(Contrato): - _sort_order = ('contrato', 'id_contrato', 'fecha_finalizacion', 'tipo_autoconsumo', 'tipo_contrato_atr', 'condiciones_contractuales', 'periodicidad_facturacion', 'consumo_anual_estimado', 'contacto', 'tipo_activacion_prevista', 'fecha_activacion_prevista') + _sort_order = ('contrato', 'id_contrato', 'fecha_finalizacion', 'autoconsumo', 'tipo_contrato_atr', + 'cups_principal', 'condiciones_contractuales', 'periodicidad_facturacion', + 'consumo_anual_estimado', 'contacto', 'tipo_activacion_prevista', 'fecha_activacion_prevista') def __init__(self): super(Contrato, self).__init__() self.fecha_finalizacion = XmlField('FechaFinalizacion') + self.autoconsumo = Autoconsumo() self.tipo_contrato_atr = XmlField('TipoContratoATR') + self.cups_principal = XmlField('CUPSPrincipal') self.periodicidad_facturacion = XmlField('PeriodicidadFacturacion') self.consumo_anual_estimado = XmlField('ConsumoAnualEstimado') self.contacto = Contacto() @@ -120,16 +127,16 @@ def __init__(self, name='Via'): super(Via, self).__init__(name, 'via') -class Medida(XmlModel): +class MedidaResto(XmlModel): - _sort_order = ('medida', 'propiedad_equipo', 'tipo_equipo_medida', 'modelos_aparato') + _sort_order = ('medida_resto', 'propiedad_equipo', 'tipo_equipo_medida', 'modelos_aparato') def __init__(self): - self.medida = XmlField('Medida') + self.medida_resto = XmlField('Medida') self.propiedad_equipo = XmlField('PropiedadEquipo') self.tipo_equipo_medida = XmlField('TipoEquipoMedida') self.modelos_aparato = ModelosAparato() - super(Medida, self).__init__('Medida', 'medida') + super(MedidaResto, self).__init__('medida_resto', 'medida_resto') class ModelosAparato(XmlModel): @@ -299,13 +306,15 @@ def __init__(self): class ActivacionCambiodeComercializadorConCambios(XmlModel): - _sort_order = ('activacion_cambiode_comercializador_con_cambios', 'datos_activacion', 'contrato', 'puntos_de_medida') + _sort_order = ('activacion_cambiode_comercializador_con_cambios', 'datos_activacion', 'contrato', + 'puntos_de_medida', 'registros_documento') def __init__(self): self.activacion_cambiode_comercializador_con_cambios = XmlField('ActivacionCambiodeComercializadorConCambios') self.datos_activacion = DatosActivacion() self.contrato = Contrato() self.puntos_de_medida = PuntosDeMedida() + self.registros_documento = RegistrosDocumento() super(ActivacionCambiodeComercializadorConCambios, self).__init__('ActivacionCambiodeComercializadorConCambios', 'activacion_cambiode_comercializador_con_cambios') diff --git a/gestionatr/output/messages/sw_d1.py b/gestionatr/output/messages/sw_d1.py index 9e1d5080..bc9ae2f1 100644 --- a/gestionatr/output/messages/sw_d1.py +++ b/gestionatr/output/messages/sw_d1.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals from libcomxml.core import XmlModel, XmlField from gestionatr.output.messages.base import Cabecera +from gestionatr.output.messages.sw_c1 import Autoconsumo # Paso 01 @@ -49,125 +50,6 @@ def __init__(self): self.autoconsumo = Autoconsumo() super(InfoRegistroAutocons, self).__init__('InfoRegistroAutocons', 'info_registro_autocons') - -class Autoconsumo(XmlModel): - - _sort_order = ('autoconsumo', 'datos_suministro', 'datos_cau') - - def __init__(self): - self.autoconsumo = XmlField('Autoconsumo') - self.datos_suministro = DatosSuministro() - self.datos_cau = DatosCAU() - super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') - - -class DatosCAU(XmlModel): - - _sort_order = ('datos_suministro', 'cau', 'tipo_autoconsumo', 'tipo_subseccion', 'colectivo', 'datos_inst_gen') - - def __init__(self): - self.datos_cau = XmlField('DatosCAU') - self.cau = XmlField('CAU') - self.tipo_autoconsumo = XmlField('TipoAutoconsumo') - self.tipo_subseccion = XmlField('TipoSubseccion') - self.colectivo = XmlField('Colectivo') - self.datos_inst_gen = DatosInstGen() - super(DatosCAU, self).__init__('DatosCAU', 'datos_cau') - - -class DatosSuministro(XmlModel): - - _sort_order = ('datos_suministro', 'tipo_cups', 'ref_catastro') - - def __init__(self): - self.datos_suministro = XmlField('DatosSuministro') - self.tipo_cups = XmlField('TipoCUPS') - self.ref_catastro = XmlField('RefCatastro') - super(DatosSuministro, self).__init__('DatosSuministro', 'datos_suministro') - - -class DatosInstGen(XmlModel): - - _sort_order = ('datos_inst_gen', 'cil', 'tec_generador', 'combustible', 'pot_instalada_gen', 'tipo_instalacion', - 'esquema_medida', 'ssaa', 'unico_contrato', 'ref_catastro', 'utm', 'titular_representante_gen') - - def __init__(self): - self.datos_inst_gen = XmlField('DatosInstGen') - self.cil = XmlField('CIL') - self.tec_generador = XmlField('TecGenerador') - self.combustible = XmlField('Combustible') - self.pot_instalada_gen = XmlField('PotInstaladaGen') - self.tipo_instalacion = XmlField('TipoInstalacion') - self.esquema_medida = XmlField('EsquemaMedida') - self.ssaa = XmlField('SSAA') - self.unico_contrato = XmlField('UnicoContrato') - self.ref_catastro = XmlField('RefCatastro') - self.utm = UTM() - self.titular_representante_gen = TitularRepresentanteGen() - super(DatosInstGen, self).__init__('DatosInstGen', 'datos_inst_gen') - - -class UTM(XmlModel): - - _sort_order = ('utm', 'x', 'y', 'huso', 'banda') - - def __init__(self): - self.utm = XmlField('UTM') - self.x = XmlField('X') - self.y = XmlField('Y') - self.huso = XmlField('Huso') - self.banda = XmlField('Banda') - super(UTM, self).__init__('UTM', 'utm') - - -class TitularRepresentanteGen(XmlModel): - - _sort_order = ('titular_representante_gen', 'id_titular', 'nombre', 'telefono', 'correo_electronico') - - def __init__(self): - self.titular_representante_gen = XmlField('TitularRepresentanteGen') - self.id_titular = IdTitular() - self.nombre = Nombre() - self.telefono = Telefono() - self.correo_electronico = XmlField('CorreoElectronico') - super(TitularRepresentanteGen, self).__init__('TitularRepresentanteGen', 'titular_representante_gen') - - -class IdTitular(XmlModel): - - _sort_order = ('id_titular', 'tipo_identificador', 'identificador') - - def __init__(self): - self.id_titular = XmlField('IdTitular') - self.tipo_identificador = XmlField('TipoIdentificador') - self.identificador = XmlField('Identificador') - super(IdTitular, self).__init__('IdTitular', 'id_titular') - - -class Nombre(XmlModel): - - _sort_order = ('nombre', 'nombre_de_pila', 'primer_apellido', 'segundo_apellido', 'razon_social') - - def __init__(self): - self.nombre = XmlField('Nombre') - self.nombre_de_pila = XmlField('NombreDePila') - self.primer_apellido = XmlField('PrimerApellido') - self.segundo_apellido = XmlField('SegundoApellido') - self.razon_social = XmlField('RazonSocial') - super(Nombre, self).__init__('Nombre', 'nombre') - - -class Telefono(XmlModel): - - _sort_order = ('telefono', 'prefijo_pais', 'numero') - - def __init__(self): - self.telefono = XmlField('Telefono') - self.prefijo_pais = XmlField('PrefijoPais') - self.numero = XmlField('Numero') - super(Telefono, self).__init__('Telefono', 'telefono') - - class InfoRetardoActivAutocons(XmlModel): _sort_order = ('info_retardo_activ_autocons', 'codigo_fiscal_factura', 'fecha_inicio_conteo_activ_autocons', @@ -247,15 +129,29 @@ def __init__(self): # Paso 10 class MensajeAnulacionD1(XmlModel): - _sort_order = ('mensaje', 'cabecera', 'datos_anulacion') + _sort_order = ('mensaje', 'cabecera', 'anulacion_notificacion_cambios_atr_desde_distribuidor') def __init__(self): self.mensaje = XmlField('MensajeAnulacionD1', attributes={'xmlns': 'http://localhost/elegibilidad'}) self.cabecera = Cabecera() - self.datos_anulacion = [] + self.anulacion_notificacion_cambios_atr_desde_distribuidor = [] super(MensajeAnulacionD1, self).__init__('MensajeAnulacionD1', 'mensaje') +class AnulacionNotificacionCambiosATRDesdeDistribuidor(XmlModel): + + _sort_order = ('anulacion_notificacion_cambios_atr_desde_distribuidor', 'datos_anulacion') + + def __init__(self): + self.anulacion_notificacion_cambios_atr_desde_distribuidor = XmlField( + 'AnulacionNotificacionCambiosATRDesdeDistribuidor' + ) + self.datos_anulacion = DatosAnulacion() + super(AnulacionNotificacionCambiosATRDesdeDistribuidor, self).__init__( + 'AnulacionNotificacionCambiosATRDesdeDistribuidor', 'anulacion_notificacion_cambios_atr_desde_distribuidor' + ) + + class DatosAnulacion(XmlModel): _sort_order = ('datos_anulacion', 'fecha_anulacion') diff --git a/gestionatr/output/messages/sw_e1.py b/gestionatr/output/messages/sw_e1.py index a9261328..643c360e 100644 --- a/gestionatr/output/messages/sw_e1.py +++ b/gestionatr/output/messages/sw_e1.py @@ -112,20 +112,23 @@ def __init__(self): class NotificacionActivacionPorDesistimiento(XmlModel): - _sort_order = ('notificacion_activacion_desistimiento', 'datos_activacion', 'contrato', 'puntos_de_medida') + _sort_order = ('notificacion_activacion_desistimiento', 'datos_activacion', 'contrato', 'puntos_de_medida', + 'registros_documento') def __init__(self): self.notificacion_activacion_desistimiento = XmlField('NotificacionActivacionPorDesistimiento') self.datos_activacion = DatosActivacion() self.contrato = Contrato() self.puntos_de_medida = PuntosDeMedida() + self.registros_documento = RegistrosDocumento() super(NotificacionActivacionPorDesistimiento, self).__init__('NotificacionActivacionPorDesistimiento', 'notificacion_activacion_desistimiento') class DatosActivacion(DatosActivacion): - _sort_order = ('datos_activacion', 'fecha', 'en_servicio', 'ind_anulable') + _sort_order = ('datos_activacion', 'fecha', 'en_servicio', 'ind_anulable', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial') def __init__(self): super(DatosActivacion, self).__init__() @@ -144,11 +147,12 @@ def __init__(self): class Contrato(Contrato): - _sort_order = ('contrato', 'id_contrato', 'tipo_autoconsumo', 'tipo_contrato_atr', 'condiciones_contractuales') + _sort_order = ('contrato', 'id_contrato', 'autoconsumo', 'tipo_contrato_atr', 'cups_principal', + 'condiciones_contractuales') def __init__(self): super(Contrato, self).__init__() - + self.cups_principal = XmlField('CUPSPrincipal') # Paso 12 diff --git a/gestionatr/output/messages/sw_m1.py b/gestionatr/output/messages/sw_m1.py index 305973ad..0ffccccd 100644 --- a/gestionatr/output/messages/sw_m1.py +++ b/gestionatr/output/messages/sw_m1.py @@ -25,7 +25,7 @@ def __init__(self): self.datos_solicitud = DatosSolicitud() self.contrato = Contrato() self.cliente = Cliente() - self.medida = Medida() + self.medida = MedidaResto() self.doc_tecnica = DocTecnica() self.comentarios = XmlField('Comentarios') self.registros_documento = RegistrosDocumento() @@ -34,7 +34,10 @@ def __init__(self): class DatosSolicitud(DatosSolicitud): - _sort_order = ('datos_solicitud', 'tipo_modificacion', 'tipo_solicitud_administrativa', 'cnae', 'periodicidad_facturacion', 'ind_activacion', 'fecha_prevista_accion', 'contratacion_incondicional_ps', 'bono_social', 'solicitud_tension', 'tension_solicitada') + _sort_order = ('datos_solicitud', 'tipo_modificacion', 'tipo_solicitud_administrativa', 'cnae', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial', 'periodicidad_facturacion', 'ind_activacion', + 'fecha_prevista_accion', 'contratacion_incondicional_ps', 'bono_social', 'solicitud_tension', + 'tension_solicitada') def __init__(self): super(DatosSolicitud, self).__init__() @@ -83,13 +86,17 @@ def __init__(self): class ActivacionModificaciones(XmlModel): - _sort_order = ('activacion_modificaciones', 'datos_activacion', 'contrato', 'puntos_de_medida') + _sort_order = ('activacion_modificaciones', 'datos_activacion', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial', 'contrato', 'puntos_de_medida', 'registros_documento') def __init__(self): self.activacion_modificaciones = XmlField('ActivacionModificaciones') self.datos_activacion = DatosActivacion() + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') self.contrato = Contrato() self.puntos_de_medida = PuntosDeMedida() + self.registros_documento = RegistrosDocumento() super(ActivacionModificaciones, self).__init__('ActivacionModificaciones', 'activacion_modificaciones') diff --git a/gestionatr/output/messages/sw_m2.py b/gestionatr/output/messages/sw_m2.py new file mode 100644 index 00000000..e7d349e4 --- /dev/null +++ b/gestionatr/output/messages/sw_m2.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, unicode_literals +from gestionatr.output.messages.sw_m1 import * + +# Paso 02 -> C1 MensajeRechazo + + +# Paso 05 +class MensajeActivacionModificacionDeATRUnidir(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'activacion_modificaciones') + + def __init__(self): + self.mensaje = XmlField('MensajeActivacionModificacionDeATRUnidir', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.activacion_modificaciones = ActivacionModificaciones() + super(MensajeActivacionModificacionDeATRUnidir, self).__init__( + 'MensajeActivacionModificacionDeATRUnidir', 'mensaje' + ) + + +class ActivacionModificaciones(XmlModel): + + _sort_order = ('activacion_modificaciones', 'datos_activacion', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial', 'contrato', 'puntos_de_medida') + + def __init__(self): + self.activacion_modificaciones = XmlField('ActivacionModificaciones') + self.datos_activacion = DatosActivacion() + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') + self.contrato = Contrato() + self.puntos_de_medida = PuntosDeMedida() + super(ActivacionModificaciones, self).__init__('ActivacionModificaciones', 'activacion_modificaciones') + + +class DatosActivacion(DatosActivacion): + + _sort_order = ('datos_activacion', 'motivo_activacion_list', 'fecha', 'bono_social', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial') + + def __init__(self): + super(DatosActivacion, self).__init__() + self.motivo_activacion_list = [] + + +class MotivoActivacionUnidireccional(XmlModel): + + _sort_order = ('motivo_activacion_unidireccional', 'motivo') + + def __init__(self): + self.motivo_activacion_unidireccional = XmlField('MotivoActivacionUnidireccional') + self.motivo = XmlField('Motivo') + super(MotivoActivacionUnidireccional, self).__init__( + 'MotivoActivacionUnidireccional', 'motivo_activacion_unidireccional' + ) diff --git a/gestionatr/output/messages/sw_p0.py b/gestionatr/output/messages/sw_p0.py index a401d9fb..3c2bd420 100644 --- a/gestionatr/output/messages/sw_p0.py +++ b/gestionatr/output/messages/sw_p0.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from libcomxml.core import XmlModel, XmlField from gestionatr.output.messages.base import Cabecera +from gestionatr.output.messages.sw_c1 import Autoconsumo +from gestionatr.output.messages.sw_c2 import Cliente, Direccion # Paso 01 @@ -43,9 +45,14 @@ def __init__(self): class EnvioInformacionPS(XmlModel): _sort_order = ('envio_informacion_ps', 'resultado_validacion_cliente', 'en_vigor', 'estado_contratable', - 'existe_solicitud_en_curso', 'tipo_solicitud_en_curso', 'contrato', 'potencia_maxima_autorizada', - 'tension_del_suministro', 'derechos_reconocidos', 'caracteristicas_pm', 'historia', 'equipo_list', - 'doc_tecnica', 'expediente_anomalia_fraude', 'expediente_acometida') + 'existe_solicitud_en_curso', 'tipo_solicitud_en_curso', 'contrato', + 'fecha_ultimo_movimiento_tipo_autocons', 'ind_bono_social', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial','vivienda_habitual','cnae', 'condiciones_contractuales', + 'modo_facturacion_potencia', 'no_interrumpible', 'potencia_no_interrumpible', 'vas_trafo', + 'periodicidad_facturacion', 'tipo_de_telegestion', 'icp_activado_telegestion', 'peaje_directo', + 'deposito_garantia', 'potencia_maxima_autorizada', 'tension_del_suministro', 'derechos_reconocidos', + 'caracteristicas_pm', 'historia', 'cliente', 'equipo_list', 'doc_tecnica', + 'expediente_anomalia_fraude', 'expediente_acometida', 'puntos_de_medida') def __init__(self): self.envio_informacion_ps = XmlField('EnvioInformacionPS') @@ -55,59 +62,68 @@ def __init__(self): self.existe_solicitud_en_curso = XmlField('ExisteSolicitudEnCurso') self.tipo_solicitud_en_curso = XmlField('TipoSolicitudEnCurso') self.contrato = Contrato() + self.fecha_ultimo_movimiento_tipo_autocons = XmlField('FechaUltimoMovimientoTipoAutocons') + self.ind_bono_social = XmlField('IndBonoSocial') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') + self.vivienda_habitual = XmlField('ViviendaHabitual') + self.cnae = XmlField('CNAE') + self.condiciones_contractuales = CondicionesContractuales() + self.modo_facturacion_potencia = XmlField('ModoFacturacionPotencia') + self.no_interrumpible = XmlField('NoInterrumpible') + self.potencia_no_interrumpible = XmlField('PotenciaNoInterrumpible') + self.vas_trafo = XmlField('VAsTrafo') + self.periodicidad_facturacion = XmlField('PeriodicidadFacturacion') + self.tipo_de_telegestion = XmlField('TipodeTelegestion') + self.icp_activado_telegestion = XmlField('ICPActivadoTelegestion') + self.peaje_directo = XmlField('PeajeDirecto') + self.deposito_garantia = XmlField('DepositoGarantia') self.potencia_maxima_autorizada = XmlField('PotenciaMaxAutorizada') self.tension_del_suministro = XmlField('TensionDelSuministro') self.derechos_reconocidos = DerechosReconocidos() self.caracteristicas_pm = CaracteristicasPM() + self.cliente = Cliente() self.historia = Historia() self.equipo_list = [] self.doc_tecnica = DocTecnica() self.expediente_anomalia_fraude = ExpedienteAnomaliaFraude() self.expediente_acometida = ExpedienteAcometida() + self.puntos_de_medida = PuntosDeMedida() super(EnvioInformacionPS, self).__init__('EnvioInformacionPS', 'envio_informacion_ps') class EstadoContratable(XmlModel): - _sort_order = ('estado_contratable', 'contratable', 'motivo') + _sort_order = ('estado_contratable', 'contratable', 'motivo', 'potencia_max_sin_expediente') def __init__(self): self.estado_contratable = XmlField('EstadoContratable') self.contratable = XmlField('Contratable') self.motivo = XmlField('Motivo') + self.potencia_max_sin_expediente = XmlField('PotenciaMaxSinExpediente') super(EstadoContratable, self).__init__('EstadoContratable', 'estado_contratable') +class Cliente(Cliente): + _sort_order = ('cliente', 'id_cliente', 'nombre', 'indicador_tipo_direccion', 'direccion_suministro', 'telefonos', + 'correo_electronico') + + def __init__(self): + super(Cliente, self).__init__() + self.direccion_suministro = Direccion(name='DireccionSuministro') + + class Contrato(XmlModel): - _sort_order = ('contrato', 'tipo_contrato_atr', 'fecha_finalizacion', 'tipo_autoconsumo', - 'fecha_ultimo_movimiento_tipo_autocons', 'ind_bono_social', 'ind_esencial', 'vivienda_habitual', - 'cnae', 'condiciones_contractuales', 'modo_facturacion_potencia', 'no_interrumpible', - 'potencia_no_interrumpible', 'potencia_max_sin_expediente', 'vas_trafo', 'periodicidad_facturacion', - 'tipo_de_telegestion', 'icp_activado_telegestion', 'peaje_directo', 'deposito_garantia') + _sort_order = ('contrato', 'tipo_contrato_atr', 'fecha_finalizacion', 'autoconsumo',) def __init__(self): self.contrato = XmlField('Contrato') self.tipo_contrato_atr = XmlField('TipoContratoATR') self.fecha_finalizacion = XmlField('FechaFinalizacion') - self.tipo_autoconsumo = XmlField('TipoAutoconsumo') - self.fecha_ultimo_movimiento_tipo_autocons = XmlField('FechaUltimoMovimientoTipoAutocons') - self.ind_bono_social = XmlField('IndBonoSocial') - self.ind_esencial = XmlField('IndEsencial') - self.vivienda_habitual = XmlField('ViviendaHabitual') - self.cnae = XmlField('CNAE') - self.condiciones_contractuales = CondicionesContractuales() - self.modo_facturacion_potencia = XmlField('ModoFacturacionPotencia') - self.no_interrumpible = XmlField('NoInterrumpible') - self.potencia_no_interrumpible = XmlField('PotenciaNoInterrumpible') - self.potencia_max_sin_expediente = XmlField('PotenciaMaxSinExpediente') - self.vas_trafo = XmlField('VAsTrafo') - self.periodicidad_facturacion = XmlField('PeriodicidadFacturacion') - self.tipo_de_telegestion = XmlField('TipodeTelegestion') - self.icp_activado_telegestion = XmlField('ICPActivadoTelegestion') - self.peaje_directo = XmlField('PeajeDirecto') - self.deposito_garantia = XmlField('DepositoGarantia') + self.autoconsumo = Autoconsumo() + super(Contrato, self).__init__('Contrato', 'contrato') @@ -151,13 +167,12 @@ def __init__(self): class CaracteristicasPM(XmlModel): - _sort_order = ('caracteristicas_pm', 'tipo_pm', 'tension_pm', 'relacion_transformacion_intensidad') + _sort_order = ('caracteristicas_pm', 'tipo_pm', 'tension_pm') def __init__(self): self.caracteristicas_pm = XmlField('CaracteristicasPM') self.tipo_pm = XmlField('TipoPM') self.tension_pm = XmlField('TensionPM') - self.relacion_transformacion_intensidad = XmlField('RelacionTransformacionIntensidad') super(CaracteristicasPM, self).__init__('CaracteristicasPM', 'caracteristicas_pm') @@ -179,7 +194,7 @@ def __init__(self): class Equipo(XmlModel): _sort_order = ('equipo', 'tipo_aparato', 'tipo_equipo', 'tipo_propiedad', - 'codigo_fases_equipo_medida', 'tipo_dh_edm') + 'codigo_fases_equipo_medida', 'tipo_dh_edm', 'relacion_transformacion_intensidad') def __init__(self): self.equipo = XmlField('Equipo') @@ -188,15 +203,17 @@ def __init__(self): self.tipo_propiedad = XmlField('TipoPropiedad') self.codigo_fases_equipo_medida = XmlField('CodigoFasesEquipoMedida') self.tipo_dh_edm = XmlField('TipoDHEdM') + self.relacion_transformacion_intensidad = XmlField('RelacionTransformacionIntensidad') super(Equipo, self).__init__('Equipo', 'equipo') class DocTecnica(XmlModel): - _sort_order = ('doc_tecnica', 'datos_cie', 'datos_apm') + _sort_order = ('doc_tecnica', 'cie_disponible', 'datos_cie', 'datos_apm') def __init__(self): self.doc_tecnica = XmlField('DocTecnica') + self.cie_disponible = XmlField('CIEDisponible') self.datos_cie = DatosCie() self.datos_apm = DatosAPM() super(DocTecnica, self).__init__('DocTecnica', 'doc_tecnica') @@ -204,10 +221,11 @@ def __init__(self): class DatosCie(XmlModel): - _sort_order = ('datos_cie', 'cie_papel', 'cie_electronico', 'validez_cie') + _sort_order = ('datos_cie', 'potencia_ins_bt', 'cie_papel', 'cie_electronico', 'validez_cie') def __init__(self): self.datos_cie = XmlField('DatosCie') + self.potencia_ins_bt = XmlField('PotenciaInsBT') self.cie_papel = CIEPapel() self.cie_electronico = CIEElectronico() self.validez_cie = XmlField('ValidezCIE') @@ -274,6 +292,28 @@ def __init__(self): super(ExpedienteAcometida, self).__init__('ExpedienteAcometida', 'expediente_acometida') +class PuntosDeMedida(XmlModel): + + _sort_order = ('puntos_de_medida', 'puntos_de_medida_list') + + def __init__(self): + self.puntos_de_medida = XmlField('PuntosDeMedida') + self.puntos_de_medida_list = [] + super(PuntosDeMedida, self).__init__('PuntosDeMedida', 'puntos_de_medida') + + +class PuntoDeMedida(XmlModel): + + _sort_order = ('punto_de_medida', 'direccion_enlace', 'telefono_telemedida', 'clave_acceso') + + def __init__(self): + self.punto_de_medida = XmlField('PuntoDeMedida') + self.direccion_enlace = XmlField('DireccionEnlace') + self.telefono_telemedida = XmlField('TelefonoTelemedida') + self.clave_acceso = XmlField('ClaveAcceso') + super(PuntoDeMedida, self).__init__('PuntoDeMedida', 'punto_de_medida') + + # Paso 02 (Rechazo) class MensajeRechazo(XmlModel): diff --git a/gestionatr/output/messages/sw_r1.py b/gestionatr/output/messages/sw_r1.py index 727f7165..d6bab6f8 100644 --- a/gestionatr/output/messages/sw_r1.py +++ b/gestionatr/output/messages/sw_r1.py @@ -102,7 +102,12 @@ def __init__(self): class VariableDetalleReclamacion(XmlModel): - _sort_order = ('variable_detalle_reclamacion', 'num_expediente_acometida', 'num_expediente_fraude', 'fecha_incidente', 'num_factura_atr', 'tipo_concepto_facturado', 'fecha_lectura', 'tipo_dhedm', 'lecturas_aportadas', 'codigo_incidencia', 'codigo_solicitud', 'parametro_contratacion', 'concepto_disconformidad', 'tipo_de_atencion_incorrecta', 'iban', 'contacto', 'codigo_solicitud_reclamacion', 'fecha_desde', 'fecha_hasta', 'importe_reclamado', 'ubicacion_incidencia') + _sort_order = ('variable_detalle_reclamacion', 'num_expediente_acometida', 'num_expediente_fraude', + 'fecha_incidente', 'num_factura_atr', 'tipo_concepto_facturado', 'fecha_lectura', 'tipo_dhedm', + 'cau', 'lecturas_aportadas', 'disconformidad_autoconsumo', 'codigo_incidencia', 'codigo_solicitud', + 'parametro_contratacion', 'concepto_disconformidad', 'tipo_de_atencion_incorrecta', + 'motivo_consulta', 'iban', 'contacto', 'codigo_solicitud_reclamacion', 'fecha_desde', 'fecha_hasta', + 'importe_reclamado', 'ubicacion_incidencia') def __init__(self): self.variable_detalle_reclamacion = XmlField('VariableDetalleReclamacion') @@ -113,12 +118,15 @@ def __init__(self): self.tipo_concepto_facturado = XmlField('TipoConceptoFacturado') self.fecha_lectura = XmlField('FechaLectura') self.tipo_dhedm = XmlField('TipoDHEdM') + self.cau = XmlField('CAU') self.lecturas_aportadas = LecturasAportadas() + self.disconformidad_autoconsumo = DisconformidadAutoconsumo() self.codigo_incidencia = XmlField('CodigoIncidencia') self.codigo_solicitud = XmlField('CodigoSolicitud') self.parametro_contratacion = XmlField('ParametroContratacion') self.concepto_disconformidad = XmlField('ConceptoDisconformidad') self.tipo_de_atencion_incorrecta = XmlField('TipoDeAtencionIncorrecta') + self.motivo_consulta = XmlField('MotivoConsulta') self.iban = XmlField('IBAN') self.contacto = Contacto() self.codigo_solicitud_reclamacion = XmlField('CodigoSolicitudReclamacion') @@ -151,6 +159,19 @@ def __init__(self): super(LecturaAportada, self).__init__('LecturaAportada', 'lectura_aportada') +class DisconformidadAutoconsumo(XmlModel): + + _sort_order = ('disconformidad_autoconsumo', 'tipo_disconformidad_1', 'tipo_disconformidad_2', + 'tipo_disconformidad_3') + + def __init__(self): + self.disconformidad_autoconsumo = XmlField('DisconformidadAutoconsumo') + self.tipo_disconformidad_1 = XmlField('TipoDisconformidadAutoconsumo') + self.tipo_disconformidad_2 = XmlField('TipoDisconformidadAutoconsumo') + self.tipo_disconformidad_3 = XmlField('TipoDisconformidadAutoconsumo') + super(DisconformidadAutoconsumo, self).__init__('DisconformidadAutoconsumo', 'disconformidad_autoconsumo') + + class UbicacionIncidencia(XmlModel): _sort_order = ('ubicacion_incidencia', 'des_ubicacion_incidencia', 'provincia', 'municipio', 'poblacion', 'cod_postal') diff --git a/gestionatr/output/messages/sw_t1.py b/gestionatr/output/messages/sw_t1.py index e586b745..cf3b2ccb 100644 --- a/gestionatr/output/messages/sw_t1.py +++ b/gestionatr/output/messages/sw_t1.py @@ -37,7 +37,7 @@ def __init__(self): class DatosSolicitud(XmlModel): _sort_order = ('datos_solicitud', 'motivo_traspaso', 'fecha_prevista_accion', 'cnae', - 'ind_esencial', 'susp_baja_impago_en_curso') + 'ind_esencial', 'fecha_ultimo_movimiento_ind_esencial', 'susp_baja_impago_en_curso') def __init__(self): self.datos_solicitud = XmlField('DatosSolicitud') @@ -45,6 +45,7 @@ def __init__(self): self.fecha_prevista_accion = XmlField('FechaPrevistaAccion') self.cnae = XmlField('CNAE') self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') self.susp_baja_impago_en_curso = XmlField('SuspBajaImpagoEnCurso') super(DatosSolicitud, self).__init__('DatosSolicitud', 'datos_solicitud') @@ -52,7 +53,7 @@ def __init__(self): class ContratoT101(Contrato): - _sort_order = ('contrato', 'fecha_finalizacion', 'tipo_autoconsumo', 'tipo_contrato_atr', + _sort_order = ('contrato', 'fecha_finalizacion', 'autoconsumo', 'tipo_contrato_atr', 'condiciones_contractuales', 'periodicidad_facturacion', 'consumo_anual_estimado', 'contacto') def __init__(self): @@ -141,12 +142,15 @@ def __init__(self): class DatosActivacion(XmlModel): - _sort_order = ('datos_activacion', 'fecha_activacion', 'en_servicio') + _sort_order = ('datos_activacion', 'fecha_activacion', 'en_servicio', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial') def __init__(self): self.datos_activacion = XmlField('DatosActivacion') self.fecha_activacion = XmlField('FechaActivacion') self.en_servicio = XmlField('EnServicio') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') super(DatosActivacion, self).__init__('DatosActivacion', 'datos_activacion') From f6be9f98d0407f1d3b21fd27f8683fcba6e29807 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 27 Nov 2024 17:57:51 +0100 Subject: [PATCH 07/19] new Testafegir proceso a1,c1,c2,e1,m2,po,r1,t1 --- tests/data/a301.xml | 6 +- tests/data/a301_correos.xml | 54 - tests/data/a305_elec.xml | 14 +- tests/data/c105.xml | 10 +- tests/data/c205.xml | 20 +- tests/data/c205_only_changes.xml | 89 ++ tests/data/d110.xml | 4 +- tests/data/m101b.xml | 2 +- tests/data/m101m.xml | 2 +- tests/data/m101r.xml | 2 - tests/data/m105.xml | 14 +- tests/data/m205.xml | 11 +- tests/data/p002_accept.xml | 60 +- tests/data/r101.xml | 1 + tests/data/t101.xml | 2 +- tests/data/t105.xml | 2 +- tests/test_input.py | 815 +++++++++++- tests/test_output.py | 2023 ++++++++++++++++++++++++++---- tests/utils.py | 8 +- 19 files changed, 2713 insertions(+), 426 deletions(-) create mode 100644 tests/data/c205_only_changes.xml diff --git a/tests/data/a301.xml b/tests/data/a301.xml index 9912003b..f963bdf9 100644 --- a/tests/data/a301.xml +++ b/tests/data/a301.xml @@ -31,12 +31,12 @@ ES1234000000000001JN0FA001 11 10 - N + S - ES1234000000000001JN0FA00 + ES1234000000000001JN0F001 100 01 - C + B S S 1234567890qwertyuidf diff --git a/tests/data/a301_correos.xml b/tests/data/a301_correos.xml index e3b6f785..4a2aff72 100644 --- a/tests/data/a301_correos.xml +++ b/tests/data/a301_correos.xml @@ -13,66 +13,12 @@ 2222 - 01 - 2016-06-06 L 2016-06-06 2018-01-01 - - - 01 - 1234567890qwertyuiop - - ES1234000000000001JN0FA001 - 11 - 10 - N - - ES1234000000000001JN0FA00 - 100 - 01 - C - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - - - 02 - ES1234000000000001JN0F 018 diff --git a/tests/data/a305_elec.xml b/tests/data/a305_elec.xml index dac01322..a384ddb6 100644 --- a/tests/data/a305_elec.xml +++ b/tests/data/a305_elec.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -30,14 +30,14 @@ ES1234000000000001JN0FA001 11 10 - N + S - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar + ES1234000000000001JN0F001 + b12 + Diesel 100 01 - C + B S S 1234567890qwertyuidf @@ -161,4 +161,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tests/data/c105.xml b/tests/data/c105.xml index 5dec51f3..499a67a9 100644 --- a/tests/data/c105.xml +++ b/tests/data/c105.xml @@ -32,14 +32,14 @@ ES1234000000000001JN0FA001 11 10 - N + S - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar + ES1234000000000001JN0F001 + b12 + Diesel 100 01 - C + B S S 1234567890qwertyuidf diff --git a/tests/data/c205.xml b/tests/data/c205.xml index 13433534..56b1ce7c 100644 --- a/tests/data/c205.xml +++ b/tests/data/c205.xml @@ -1,5 +1,5 @@ - 1234 @@ -11,7 +11,7 @@ 2016-07-21T12:59:47 ES1234000000000001JN0F - + 2016-08-21 1 @@ -32,14 +32,14 @@ ES1234000000000001JN0FA001 11 10 - N + S - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar + ES1234000000000001JN0F001 + b12 + Diesel 100 01 - C + B S S 1234567890qwertyuidf @@ -76,8 +76,8 @@ - ES1234000000000001JN0F 02 + ES1234000000000001JN0F 018 01 @@ -167,5 +167,5 @@ https://www.google.com/ - - + + diff --git a/tests/data/c205_only_changes.xml b/tests/data/c205_only_changes.xml new file mode 100644 index 00000000..2248a668 --- /dev/null +++ b/tests/data/c205_only_changes.xml @@ -0,0 +1,89 @@ + + + + 1234 + 4321 + C2 + 05 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + 2016-08-21 + 1 + 01 + 2016-06-06 + + + + 00001 + + 2020-01-01 + + + 01 + 1234567890qwertyuiop + + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + + + 02 + ES1234000000000001JN0F + + + + 07 + https://www.google.com/ + + + + diff --git a/tests/data/d110.xml b/tests/data/d110.xml index 9b6084e8..6785bed6 100644 --- a/tests/data/d110.xml +++ b/tests/data/d110.xml @@ -10,9 +10,9 @@ 2016-06-08T04:24:09 ES0116000000011531LK0F - + 2016-06-10 - + diff --git a/tests/data/m101b.xml b/tests/data/m101b.xml index ef8b6430..88fb2b95 100644 --- a/tests/data/m101b.xml +++ b/tests/data/m101b.xml @@ -14,7 +14,7 @@ B 2222 - 01 + 00 2016-06-06 01 A diff --git a/tests/data/m101m.xml b/tests/data/m101m.xml index 26f96497..7e3c53b3 100644 --- a/tests/data/m101m.xml +++ b/tests/data/m101m.xml @@ -14,7 +14,7 @@ M 2222 - 00 + 01 2016-06-06 01 A diff --git a/tests/data/m101r.xml b/tests/data/m101r.xml index e2c24291..1a4f3e21 100644 --- a/tests/data/m101r.xml +++ b/tests/data/m101r.xml @@ -19,8 +19,6 @@ L 2016-06-06 1 - 01 - 2016-06-06 2018-01-01 diff --git a/tests/data/m105.xml b/tests/data/m105.xml index 92118f2c..0a889f4e 100644 --- a/tests/data/m105.xml +++ b/tests/data/m105.xml @@ -1,5 +1,5 @@ - 1234 @@ -32,14 +32,14 @@ ES1234000000000001JN0FA001 11 10 - N + S - ES1234000000000001JN0FA00 - b11 - radiaci贸n solar + ES1234000000000001JN0F001 + b12 + Diesel 100 01 - C + B S S 1234567890qwertyuidf @@ -170,4 +170,4 @@ - + diff --git a/tests/data/m205.xml b/tests/data/m205.xml index 1dc4b846..63d88d2b 100644 --- a/tests/data/m205.xml +++ b/tests/data/m205.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -13,11 +13,14 @@ - Cambio motivado por presencia autoconsumo + 01 + + + 02 2016-06-06 1 - N + 00 1900-01-01 @@ -148,4 +151,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tests/data/p002_accept.xml b/tests/data/p002_accept.xml index bc74b675..c1e75a82 100644 --- a/tests/data/p002_accept.xml +++ b/tests/data/p002_accept.xml @@ -74,30 +74,29 @@ - 2020-01-01 - N - N - 2016-05-05 - S - 9820 - - 018 - - 6000 - - 1 - - 9 - S - 6000 - 8000 - 50 - 01 - 01 - S - S - N + 2020-01-01 + N + 00 + 2016-05-05 + S + 9820 + + 018 + + 6000 + + 1 + + 9 + S + 6000 + 50 + 01 + 01 + S + S + N 10000 02 @@ -108,7 +107,6 @@ 05 220 - 20/1000 1900-01-01 @@ -143,13 +141,13 @@ 001 BI Bloque de Pisos - - 0034 - 633834841 - - a@mail.com + + 0034 + 633834841 + + a@mail.com TT @@ -168,9 +166,9 @@ 10/100 - S + S - 2000 + 2000 12345678901234567890123456789012345 2020-03-01 diff --git a/tests/data/r101.xml b/tests/data/r101.xml index 0bb0ffff..7c1749d9 100644 --- a/tests/data/r101.xml +++ b/tests/data/r101.xml @@ -42,6 +42,7 @@ 01 + 03 01 33333 diff --git a/tests/data/t101.xml b/tests/data/t101.xml index 636451ea..8918068c 100644 --- a/tests/data/t101.xml +++ b/tests/data/t101.xml @@ -15,7 +15,7 @@ 03 2020-05-01 9820 - S + 01 2016-06-06 S diff --git a/tests/data/t105.xml b/tests/data/t105.xml index 36e05a7c..08006bcf 100644 --- a/tests/data/t105.xml +++ b/tests/data/t105.xml @@ -14,7 +14,7 @@ 2016-08-21 S - S + 01 2016-06-06 diff --git a/tests/test_input.py b/tests/test_input.py index f2fab98e..fe08c94a 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from gestionatr.input.messages import A1, A3, B1, B2, C1, C2, D1, E1, M1, P0, Q1, R1, T1, W1, F1, Deadlines +from gestionatr.input.messages import A1, A3, B1, B2, C1, C2, D1, E1, M1, M2, P0, Q1, R1, T1, W1, F1, Deadlines from gestionatr.input.messages import A1_41, A1_02, A1_05, A1_44, A1_03, A1_48, A1_04, A1_46, A1_38, A1_49, A1_42, A1_43 from gestionatr.input.messages import B7031, B7032, A12_24, A12_26, A19_45, A20_36, A13_50 from gestionatr.input.messages.F1 import agrupar_lectures_per_data, obtenir_data_inici_i_final @@ -89,6 +89,8 @@ def test_c101_completo(self): c.parse_xml() # Datos Solicitud self.assertEqual(c.datos_solicitud.ind_activacion, u'L') + self.assertEqual(c.datos_solicitud.ind_esencial, u'01') + self.assertEqual(c.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(c.datos_solicitud.fecha_prevista_accion, u'2016-06-06') self.assertEqual(c.datos_solicitud.contratacion_incondicional_ps, u'S') self.assertEqual(c.datos_solicitud.bono_social, u'0') @@ -194,7 +196,42 @@ def test_c105(self): # Contrato self.assertEqual(c.contrato.cod_contrato, u'00001') self.assertEqual(c.contrato.data_finalitzacio, u'2020-01-01') - self.assertEqual(c.contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = c.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte self.assertEqual(c.contrato.tipo_contrato_atr, u'02') self.assertEqual(c.contrato.tarifa_atr, u'018') self.assertEqual(c.contrato.periodicidad_facturacion, u'01') @@ -267,6 +304,10 @@ def test_c105(self): self.assertFalse(md2.anomalia) self.assertFalse(md2.comentarios) self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + self.assertEqual(len(c.registros_documento), 1) + doc1 = c.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') def test_c106(self): c = C1(self.xml_c106) @@ -361,6 +402,7 @@ def setUp(self): self.xml_c201_completo = open(get_data("c201.xml"), "rb") self.xml_c202_accept = open(get_data("c202_accept.xml"), "rb") self.xml_c203 = open(get_data("c203.xml"), "rb") + self.xml_c205 = open(get_data("c205.xml"), "rb") self.xml_c213 = open(get_data("c213.xml"), "rb") def tearDown(self): @@ -377,6 +419,8 @@ def test_c201_completo(self): self.assertEqual(c.datos_solicitud.contratacion_incondicional_ps, u'S') self.assertEqual(c.datos_solicitud.fecha_prevista_accion, u'2016-06-06') self.assertEqual(c.datos_solicitud.ind_activacion, u'L') + self.assertEqual(c.datos_solicitud.ind_esencial, u'01') + self.assertEqual(c.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(c.datos_solicitud.tipo_modificacion, u'S') self.assertEqual(c.datos_solicitud.tipo_solicitud_administrativa, u'S') self.assertEqual(c.datos_solicitud.contratacion_incondicional_bs, u'N') @@ -400,7 +444,41 @@ def test_c201_completo(self): self.assertEqual(pots[0][1], 1000) self.assertEqual(pots[1][1], 2000) self.assertEqual(contrato.tarifa_atr, u'018') - self.assertEqual(contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = c.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.cups_principal, u'ES1234000000000001JN0F') self.assertEqual(contrato.tipo_contrato_atr, u'02') # Cliente cliente = c.cliente @@ -449,6 +527,7 @@ def test_c201_completo(self): datos_cie = c.doc_tecnica.datos_cie self.assertFalse(datos_cie.cie_electronico) self.assertEqual(datos_cie.validez_cie, u'ES') + self.assertEqual(datos_cie.potencia_no_interrumpible, u'2000') cie_p = datos_cie.cie_papel self.assertEqual(cie_p.codigo_cie, u'1234567') self.assertFalse(cie_p.codigo_instalador) @@ -456,7 +535,6 @@ def test_c201_completo(self): self.assertEqual(cie_p.fecha_emision_cie, u'2015-06-04') self.assertEqual(cie_p.nif_instalador, u'12345678Z') self.assertEqual(cie_p.potencia_inst_bt, u'3500') - self.assertEqual(cie_p.potencia_no_interrumpible, u'2000') self.assertEqual(cie_p.tension_suministro_cie, u'10') self.assertEqual(cie_p.tipo_suministro, u'VI') # Datos APM @@ -470,7 +548,11 @@ def test_c201_completo(self): self.assertEqual(datos_apm.tension_suministro_apm, u'20') # Comentarios self.assertEqual(c.comentarios, u'Comentario') - self.assertFalse(c.registros_documento) + # Registros Documento + self.assertEqual(len(c.registros_documento), 1) + doc1 = c.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') def test_c202_accept(self): c = C2(self.xml_c202_accept) @@ -508,6 +590,125 @@ def test_c203(self): self.assertEqual(i2.secuencial, u'2') self.assertEqual(i2.comentarios, u'Com 2') + def test_c205_completo(self): + c = C2(self.xml_c205) + c.parse_xml() + # Datos Solicitud + + self.assertEqual(c.datos_activacion.ind_esencial, u'01') + self.assertEqual(c.datos_activacion.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') + self.assertEqual(c.datos_activacion.bono_social, u'1') + self.assertEqual(c.datos_activacion.fecha, u'2016-08-21') + + # Contrato + contrato = c.contrato + + pots = contrato.potencias_contratadas + self.assertEqual(len(pots), 2) + self.assertEqual(pots[0][1], 1000) + self.assertEqual(pots[1][1], 2000) + self.assertEqual(contrato.tarifa_atr, u'018') + # validem la informacio de autoconsum + autoconsumo = c.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.cups_principal, u'ES1234000000000001JN0F') + self.assertEqual(contrato.tipo_contrato_atr, u'02') + + # Puntos Medida + self.assertEqual(len(c.puntos_medida), 1) + pm = c.puntos_medida[0] + self.assertEqual(pm.cod_pm, u'ES1234000000000001JN0F') + self.assertEqual(pm.tipo_movimiento, u'A') + self.assertEqual(pm.tipo_pm, u'03') + self.assertEqual(pm.cod_pm_principal, u'ES1234000000000002JN0F') + self.assertEqual(pm.modo_lectura, u'1') + self.assertEqual(pm.funcion, u'P') + self.assertEqual(pm.direccion_enlace, u'39522') + self.assertEqual(pm.direccion_punto_medida, u'000000001') + self.assertEqual(pm.num_linea, u'12') + self.assertEqual(pm.telefono_telemedida, u'987654321') + self.assertEqual(pm.estado_telefono, u'1') + self.assertEqual(pm.clave_acceso, u'0000000007') + self.assertEqual(pm.tension_pm, u'0') + self.assertEqual(pm.fecha_vigor, u'2003-01-01') + self.assertEqual(pm.fecha_alta, u'2003-01-01') + self.assertEqual(pm.fecha_baja, u'2003-02-01') + self.assertEqual(pm.comentarios, u'Comentarios Varios') + # Aparatos + self.assertEqual(len(pm.aparatos), 1) + ap = pm.aparatos[0] + self.assertEqual(ap.cod_precinto, u'02') + self.assertEqual(ap.constante_energia, u'1.000') + self.assertEqual(ap.constante_maximetro, u'1.000') + self.assertEqual(ap.funcion_aparato, u'M') + self.assertEqual(ap.lectura_directa, u'N') + self.assertEqual(ap.marca_aparato, u'132') + self.assertEqual(ap.modelo_marca, u'011') + self.assertEqual(ap.modo_medida_potencia, u'9') + self.assertEqual(ap.num_integradores, u'18') + self.assertEqual(ap.numero_serie, u'0000539522') + self.assertEqual(ap.periodo_fabricacion, u'2005') + self.assertEqual(ap.propietario, u'Desc. Propietario') + self.assertEqual(ap.ruedas_decimales, u'02') + self.assertEqual(ap.ruedas_enteras, u'08') + self.assertEqual(ap.tipo_aparato, u'CG') + self.assertEqual(ap.tipo_dhedm, u'6') + self.assertEqual(ap.tipo_equipo_medida, u'L03') + self.assertEqual(ap.tipo_movimiento, u'CX') + self.assertEqual(ap.tipo_propiedad_aparato, u'1') + # Medidas + self.assertEqual(len(ap.medidas), 2) + md = ap.medidas[0] + self.assertEqual(md.anomalia, u'01') + self.assertEqual(md.comentarios, u'Comentario sobre anomalia') + self.assertEqual(md.fecha_lectura_firme, u'2003-01-02') + self.assertEqual(md.magnitud_medida, u'PM') + self.assertEqual(md.periodo, u'65') + self.assertEqual(md.procedencia, u'30') + self.assertEqual(md.tipo_dhedm, u'6') + self.assertEqual(md.ultima_lectura_firme, u'0.00') + md2 = ap.medidas[1] + self.assertFalse(md2.anomalia) + self.assertFalse(md2.comentarios) + self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + self.assertEqual(len(c.registros_documento), 1) + doc1 = c.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') + def test_c213(self): c = C2(self.xml_c213) c.parse_xml() @@ -650,11 +851,13 @@ class test_A3(TestCaseCompat): def setUp(self): self.xml_a301 = open(get_data("a301.xml"), "rb") self.xml_a301_correos = open(get_data("a301_correos.xml"), "rb") + self.xml_a305_elec = open(get_data("a305_elec.xml"), "rb") self.xml_a313 = open(get_data("a313.xml"), "rb") def tearDown(self): self.xml_a301.close() self.xml_a301_correos.close() + self.xml_a305_elec.close() self.xml_a313.close() def test_a301_completo(self): @@ -664,6 +867,8 @@ def test_a301_completo(self): self.assertEqual(a3.datos_solicitud.cnae, u'2222') self.assertEqual(a3.datos_solicitud.fecha_prevista_accion, u'2016-06-06') self.assertEqual(a3.datos_solicitud.ind_activacion, u'L') + self.assertEqual(a3.datos_solicitud.ind_esencial, u'01') + self.assertEqual(a3.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') # Contrato contrato = a3.contrato contacto = contrato.contacto @@ -678,7 +883,41 @@ def test_a301_completo(self): self.assertEqual(pots[0][1], 1000) self.assertEqual(pots[1][1], 2000) self.assertEqual(contrato.tarifa_atr, u'018') - self.assertEqual(contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = a3.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.cups_principal, u'ES1234000000000001JN0F') self.assertEqual(contrato.tipo_contrato_atr, u'02') self.assertEqual(contrato.consumo_anual_estimado, u'5000') # Cliente @@ -756,6 +995,119 @@ def test_a301_correos(self): self.assertEqual(direccion.provincia, u'17') self.assertEqual(direccion.apartado_de_correos, u'A1234') + def test_a305(self): + a3 = A3(self.xml_a305_elec) + a3.parse_xml() + # Datos Solicitud + self.assertEqual(a3.datos_activacion.ind_esencial, u'01') + self.assertEqual(a3.datos_activacion.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') + self.assertEqual(a3.datos_activacion.fecha, u'2018-05-05') + + # Contrato + contrato = a3.contrato + + pots = contrato.potencias_contratadas + self.assertEqual(len(pots), 2) + self.assertEqual(pots[0][1], 1000) + self.assertEqual(pots[1][1], 2000) + self.assertEqual(contrato.tarifa_atr, u'018') + # validem la informacio de autoconsum + autoconsumo = a3.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.cups_principal, u'ES1234000000000001JN0F') + self.assertEqual(contrato.tipo_contrato_atr, u'02') + + # Puntos Medida + self.assertEqual(len(a3.puntos_medida), 1) + pm = a3.puntos_medida[0] + self.assertEqual(pm.cod_pm, u'ES1234000000000001JN0F') + self.assertEqual(pm.tipo_movimiento, u'A') + self.assertEqual(pm.tipo_pm, u'03') + self.assertEqual(pm.cod_pm_principal, u'ES1234000000000002JN0F') + self.assertEqual(pm.modo_lectura, u'1') + self.assertEqual(pm.funcion, u'P') + self.assertEqual(pm.direccion_enlace, u'39522') + self.assertEqual(pm.direccion_punto_medida, u'000000001') + self.assertEqual(pm.num_linea, u'12') + self.assertEqual(pm.telefono_telemedida, u'987654321') + self.assertEqual(pm.estado_telefono, u'1') + self.assertEqual(pm.clave_acceso, u'0000000007') + self.assertEqual(pm.tension_pm, u'0') + self.assertEqual(pm.fecha_vigor, u'2003-01-01') + self.assertEqual(pm.fecha_alta, u'2003-01-01') + self.assertEqual(pm.fecha_baja, u'2003-02-01') + self.assertEqual(pm.comentarios, u'Comentarios Varios') + # Aparatos + self.assertEqual(len(pm.aparatos), 1) + ap = pm.aparatos[0] + self.assertEqual(ap.cod_precinto, u'02') + self.assertEqual(ap.constante_energia, u'1.000') + self.assertEqual(ap.constante_maximetro, u'1.000') + self.assertEqual(ap.funcion_aparato, u'M') + self.assertEqual(ap.lectura_directa, u'N') + self.assertEqual(ap.marca_aparato, u'132') + self.assertEqual(ap.modelo_marca, u'011') + self.assertEqual(ap.modo_medida_potencia, u'9') + self.assertEqual(ap.num_integradores, u'18') + self.assertEqual(ap.numero_serie, u'0000539522') + self.assertEqual(ap.periodo_fabricacion, u'2005') + self.assertEqual(ap.propietario, u'Desc. Propietario') + self.assertEqual(ap.ruedas_decimales, u'02') + self.assertEqual(ap.ruedas_enteras, u'08') + self.assertEqual(ap.tipo_aparato, u'CG') + self.assertEqual(ap.tipo_dhedm, u'6') + self.assertEqual(ap.tipo_equipo_medida, u'L03') + self.assertEqual(ap.tipo_movimiento, u'CX') + self.assertEqual(ap.tipo_propiedad_aparato, u'1') + # Medidas + self.assertEqual(len(ap.medidas), 2) + md = ap.medidas[0] + self.assertEqual(md.anomalia, u'01') + self.assertEqual(md.comentarios, u'Comentario sobre anomalia') + self.assertEqual(md.fecha_lectura_firme, u'2003-01-02') + self.assertEqual(md.magnitud_medida, u'PM') + self.assertEqual(md.periodo, u'65') + self.assertEqual(md.procedencia, u'30') + self.assertEqual(md.tipo_dhedm, u'6') + self.assertEqual(md.ultima_lectura_firme, u'0.00') + md2 = ap.medidas[1] + self.assertFalse(md2.anomalia) + self.assertFalse(md2.comentarios) + self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + def test_a313(self): a = A3(self.xml_a313) a.parse_xml() @@ -991,6 +1343,8 @@ def test_m101(self): self.assertEqual(m1.datos_solicitud.cnae, u'2222') self.assertEqual(m1.datos_solicitud.fecha_prevista_accion, u'2016-06-06') self.assertEqual(m1.datos_solicitud.ind_activacion, u'L') + self.assertEqual(m1.datos_solicitud.ind_esencial, u'01') + self.assertEqual(m1.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'S') self.assertEqual(m1.datos_solicitud.tipo_solicitud_administrativa, u'S') self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') @@ -1009,7 +1363,41 @@ def test_m101(self): self.assertEqual(pots[0][1], 1000) self.assertEqual(pots[1][1], 2000) self.assertEqual(contrato.tarifa_atr, u'018') - self.assertEqual(contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = m1.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.cups_principal, u'ES1234000000000001JN0F') self.assertEqual(contrato.tipo_contrato_atr, u'02') # Cliente cliente = m1.cliente @@ -1114,16 +1502,67 @@ def test_m101b(self): # Comentarios self.assertFalse(m1.comentarios) - def test_m101r(self): - m1 = M1(self.xml_m101r) - m1.parse_xml() - # Datos Solicitud - self.assertEqual(m1.datos_solicitud.cnae, u'2222') - self.assertEqual(m1.datos_solicitud.ind_activacion, u'L') - self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'S') - self.assertEqual(m1.datos_solicitud.tipo_solicitud_administrativa, u'R') - self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') - self.assertEqual(m1.datos_solicitud.bono_social, u'1') + def test_m101r(self): + m1 = M1(self.xml_m101r) + m1.parse_xml() + # Datos Solicitud + self.assertEqual(m1.datos_solicitud.cnae, u'2222') + self.assertEqual(m1.datos_solicitud.ind_activacion, u'L') + self.assertEqual(m1.datos_solicitud.tipo_modificacion, u'S') + self.assertEqual(m1.datos_solicitud.tipo_solicitud_administrativa, u'R') + self.assertEqual(m1.datos_solicitud.periodicidad_facturacion, u'01') + self.assertEqual(m1.datos_solicitud.bono_social, u'1') + + # Contrato + contrato = m1.contrato + contacto = contrato.contacto + self.assertEqual(contacto.persona_de_contacto, u'Nombre Inventado') + self.assertEqual(len(contacto.telefonos), 2) + self.assertEqual(contacto.telefonos[1][1], u'666777999') + self.assertEqual(contacto.telefonos[1][0], u'34') + self.assertEqual(contrato.fecha_finalizacion, u'2018-01-01') + self.assertEqual(contrato.modo_control_potencia, u'1') + pots = contrato.potencias_contratadas + self.assertEqual(len(pots), 2) + self.assertEqual(pots[0][1], 1000) + self.assertEqual(pots[1][1], 2000) + self.assertEqual(contrato.tarifa_atr, u'018') + # validem la informacio de autoconsum + autoconsumo = m1.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte + self.assertEqual(contrato.tipo_contrato_atr, u'02') + # Cliente cliente = m1.cliente self.assertEqual(cliente.correo_electronico, u'email@host') @@ -1154,6 +1593,148 @@ def test_m101r(self): self.assertEqual(documento.tipo_doc_aportado, u'12') +class test_M2(TestCaseCompat): + + def setUp(self): + self.xml_m202_rej = open(get_data("m202_reject.xml"), "rb") + self.xml_m205 = open(get_data("m205.xml"), "rb") + + def tearDown(self): + self.xml_m202_rej.close() + self.xml_m205.close() + + def test_m202_rej(self): + m2 = M2(self.xml_m202_rej) + m2.parse_xml() + self.assertEqual(m2.fecha_rechazo, u'2016-07-20') + self.assertEqual(len(m2.registros_documento), 2) + doc1 = m2.registros_documento[0] + doc2 = m2.registros_documento[1] + self.assertEqual(doc1.tipo_doc_aportado, u'08') + self.assertEqual(doc1.direccion_url, u'http://eneracme.com/docs/NIF11111111H.pdf') + self.assertEqual(doc2.tipo_doc_aportado, u'07') + self.assertEqual(doc2.direccion_url, u'http://eneracme.com/docs/NIF11111111H.pdf') + self.assertEqual(len(m2.rechazos), 2) + rej1 = m2.rechazos[0] + rej2 = m2.rechazos[1] + self.assertEqual(rej1.secuencial, u'1') + self.assertEqual(rej1.codigo_motivo, u'01') + self.assertEqual(rej1.comentarios, u'Motiu de rebuig 01: No existe Punto de Suministro asociado al CUPS') + self.assertEqual(rej2.secuencial, u'2') + self.assertEqual(rej2.codigo_motivo, u'03') + self.assertEqual(rej2.comentarios, + u'Cuando el CIF-NIF no coincide con el que figura en la base de datos del Distribuidor') + + def test_m205(self): + m2 = M2(self.xml_m205) + m2.parse_xml() + # Datos Solicitud + motivos_activacion_uni = m2.datos_activacion.motivo_activacion_unidireccional + self.assertEqual(len(motivos_activacion_uni), 2) + self.assertEqual(motivos_activacion_uni[0].motivo, "01") + self.assertEqual(motivos_activacion_uni[1].motivo, "02") + self.assertEqual(m2.datos_activacion.fecha, u'2016-06-06') + self.assertEqual(m2.datos_activacion.bono_social, u'1') + self.assertEqual(m2.datos_activacion.ind_esencial, u'00') + self.assertEqual(m2.datos_activacion.fecha_ultimo_movimiento_ind_esencial, u'1900-01-01') + + # Contrato + contrato = m2.contrato + self.assertEquals(contrato.cod_contrato, "00001") + self.assertEquals(contrato.fecha_finalizacion, "2016-05-05") + # validem la informacio de autoconsum + autoconsumo = m2.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Puntos Medida + self.assertEqual(len(m2.puntos_medida), 1) + pm = m2.puntos_medida[0] + self.assertEqual(pm.cod_pm, u'ES1234000000000001JN0F') + self.assertEqual(pm.tipo_movimiento, u'A') + self.assertEqual(pm.tipo_pm, u'03') + self.assertEqual(pm.cod_pm_principal, u'ES1234000000000002JN0F') + self.assertEqual(pm.modo_lectura, u'1') + self.assertEqual(pm.funcion, u'P') + self.assertEqual(pm.direccion_enlace, u'39522') + self.assertEqual(pm.direccion_punto_medida, u'000000001') + self.assertEqual(pm.num_linea, u'12') + self.assertEqual(pm.telefono_telemedida, u'987654321') + self.assertEqual(pm.estado_telefono, u'1') + self.assertEqual(pm.clave_acceso, u'0000000007') + self.assertEqual(pm.tension_pm, u'0') + self.assertEqual(pm.fecha_vigor, u'2003-01-01') + self.assertEqual(pm.fecha_alta, u'2003-01-01') + self.assertEqual(pm.fecha_baja, u'2003-02-01') + self.assertEqual(pm.comentarios, u'Comentarios Varios') + # Aparatos + self.assertEqual(len(pm.aparatos), 1) + ap = pm.aparatos[0] + self.assertEqual(ap.cod_precinto, u'02') + self.assertEqual(ap.constante_energia, u'1.000') + self.assertEqual(ap.constante_maximetro, u'1.000') + self.assertEqual(ap.funcion_aparato, u'M') + self.assertEqual(ap.lectura_directa, u'N') + self.assertEqual(ap.marca_aparato, u'132') + self.assertEqual(ap.modelo_marca, u'011') + self.assertEqual(ap.modo_medida_potencia, u'9') + self.assertEqual(ap.num_integradores, u'18') + self.assertEqual(ap.numero_serie, u'0000539522') + self.assertEqual(ap.periodo_fabricacion, u'2005') + self.assertEqual(ap.propietario, u'Desc. Propietario') + self.assertEqual(ap.ruedas_decimales, u'02') + self.assertEqual(ap.ruedas_enteras, u'08') + self.assertEqual(ap.tipo_aparato, u'CG') + self.assertEqual(ap.tipo_dhedm, u'6') + self.assertEqual(ap.tipo_equipo_medida, u'L03') + self.assertEqual(ap.tipo_movimiento, u'CX') + self.assertEqual(ap.tipo_propiedad_aparato, u'1') + # Medidas + self.assertEqual(len(ap.medidas), 2) + md = ap.medidas[0] + self.assertEqual(md.anomalia, u'01') + self.assertEqual(md.comentarios, u'Comentario sobre anomalia') + self.assertEqual(md.fecha_lectura_firme, u'2003-01-02') + self.assertEqual(md.magnitud_medida, u'PM') + self.assertEqual(md.periodo, u'65') + self.assertEqual(md.procedencia, u'30') + self.assertEqual(md.tipo_dhedm, u'6') + self.assertEqual(md.ultima_lectura_firme, u'0.00') + md2 = ap.medidas[1] + self.assertFalse(md2.anomalia) + self.assertFalse(md2.comentarios) + self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + class test_D1(TestCaseCompat): def setUp(self): @@ -1186,11 +1767,10 @@ def test_d101(self): self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_registro_autocons autoconsumo = info.autoconsumo - import pudb;pu.db suministro = autoconsumo.datos_suministro self.assertEqual(suministro.tipo_cups, u'01') self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') - datos_cau = autoconsumo.datos_cau + datos_cau = autoconsumo.datos_cau[0] self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') self.assertEqual(datos_cau.tipo_autoconsumo, u'11') self.assertEqual(datos_cau.tipo_subseccion, u'10') @@ -1247,7 +1827,7 @@ def test_d101_min_with_info(self): autoconsumo = info.autoconsumo suministro = autoconsumo.datos_suministro self.assertEqual(suministro.tipo_cups, u'01') - datos_cau = autoconsumo.datos_cau + datos_cau = autoconsumo.datos_cau[0] self.assertEqual(datos_cau.tipo_autoconsumo, u'11') self.assertEqual(datos_cau.tipo_subseccion, u'10') inst_gen = datos_cau.datos_inst_gen[0] @@ -1351,8 +1931,8 @@ def test_d102_reject(self): def test_d110(self): d1 = D1(self.xml_d110) d1.parse_xml() - datos_anulacion = d1.datos_anulacion[0] - self.assertEqual(datos_anulacion.fecha_anulacion, "2016-06-10") + node_anullacio = d1.anulacion_notificacion_cambios_atr_desde_distribuidor[0] + self.assertEqual(node_anullacio.datos_anulacion.fecha_anulacion, "2016-06-10") class test_W1(TestCaseCompat): @@ -1510,7 +2090,13 @@ def test_r101(self): self.assertEqual(var1.parametro_contratacion, u'01') self.assertEqual(var1.tipo_concepto_facturado, u'01') self.assertEqual(var1.tipo_de_atencion_incorrecta, u'05') + self.assertEqual(var1.motivo_consulta, u'01') self.assertEqual(var1.tipo_dhedm, u'1') + self.assertEqual(var1.cau, u'ES1234000000000001JN0FA001') + disconformidad_autoconsumo = var1.disconformidad_autoconsumo + self.assertEqual(len(disconformidad_autoconsumo), 2) + self.assertEqual(disconformidad_autoconsumo[0], u'01') + self.assertEqual(disconformidad_autoconsumo[1], u'03') ubi = var1.ubicacion_incidencia self.assertEqual(ubi.des_ubicacion_incidencia, u'Destino') self.assertEqual(ubi.cod_postal, u'17001') @@ -3234,7 +3820,74 @@ def test_p002_accept(self): p0 = P0(self.xml_p002_accept) p0.parse_xml() # Datos Aceptacion + self.assertEqual(p0.ind_esencial, '00') + self.assertEqual(p0.fecha_ultimo_movimiento_ind_esencial, '2016-05-05') + # validem camps de autoconsumo + autoconsumo = p0.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + # validem camps de client + cliente = p0.cliente + self.assertEqual(cliente.tipo_identificador, u'NI') + self.assertEqual(cliente.identificador, u'B36385870') + self.assertEqual(cliente.tipo_persona, u'J') + self.assertEqual(cliente.razon_social, u'ACC Y COMP DE COCINA MILLAN Y MU脩OZ') + self.assertEqual(cliente.indicador_tipo_direccion, u'F') + self.assertEqual(cliente.telefonos[0][0], u'0034') + self.assertEqual(cliente.telefonos[0][1], u'633834841') + self.assertEqual(cliente.correo_electronico, u'a@mail.com') + direccion_suministro = cliente.direccion_suministro + self.assertEqual(direccion_suministro.pais, u'Espa帽a') + self.assertEqual(direccion_suministro.provincia, u'17') + self.assertEqual(direccion_suministro.municipio, u'17079') + self.assertEqual(direccion_suministro.cod_postal, u'17001') + self.assertEqual(direccion_suministro.tipo_via, u'PZ') + self.assertEqual(direccion_suministro.calle, u'MELA MUTERMILCH') + self.assertEqual(direccion_suministro.numero_finca, u'2') + self.assertEqual(direccion_suministro.duplicador_finca, u'n/a') + self.assertEqual(direccion_suministro.escalera, u'001') + self.assertEqual(direccion_suministro.piso, u'001') + self.assertEqual(direccion_suministro.puerta, u'001') + self.assertEqual(direccion_suministro.tipo_aclarador_finca, u'BI') + self.assertEqual(direccion_suministro.aclarador_finca, u'Bloque de Pisos') + # validem caps de instalacio + self.assertEqual(p0.estado_contratable.potencia_max_sin_expediente, '3600') self.assertEqual(p0.expediente_acometida.expediente_abierto, 'S') + self.assertEqual(p0.equipo[0].relacion_transformacion_intensidad, '10/100') + self.assertEqual(p0.doc_tecnica.cie_disponible, 'S') + self.assertEqual(p0.doc_tecnica.datos_cie.potencia_ins_bt, '2000') + self.assertEqual(len(p0.puntos_de_medida), 1) + self.assertEqual(p0.puntos_de_medida[0].direccion_enlace, '39522') + self.assertEqual(p0.puntos_de_medida[0].telefono_telemedida, '987654321') + self.assertEqual(p0.puntos_de_medida[0].clave_acceso, '1234') def test_p002_accept_min(self): p0 = P0(self.xml_p002_accept_min) @@ -3277,6 +3930,8 @@ def test_e101(self): e1.parse_xml() self.assertEqual(e1.codigo_de_solicitud_ref, u'201605219400') self.assertEqual(e1.tipo_de_solicitud, u'01') + self.assertEqual(e1.ind_esencial, u'01') + self.assertEqual(e1.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(e1.id_cliente.tipo_identificador, u'NI') self.assertEqual(e1.id_cliente.identificador, u'11111111H') self.assertEqual(e1.id_cliente.tipo_persona, u'F') @@ -3420,11 +4075,48 @@ def test_e105(self): def test_e106(self): e1 = E1(self.xml_e106) e1.parse_xml() + self.assertEqual(e1.datos_activacion.ind_esencial, u'01') + self.assertEqual(e1.datos_activacion.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(e1.datos_activacion.fecha, u'2016-08-21') self.assertEqual(e1.datos_activacion.en_servicio, u'S') self.assertEqual(e1.datos_activacion.ind_anulable, u'S') # Contrato self.assertEqual(e1.contrato.cod_contrato, u'00001') + self.assertEqual(e1.contrato.cups_principal, u'ES1234000000000001JN0F') + # validem la informacio de autoconsum + autoconsumo = e1.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') # Puntos Medida self.assertEqual(len(e1.puntos_medida), 1) pm = e1.puntos_medida[0] @@ -3483,6 +4175,11 @@ def test_e106(self): self.assertFalse(md2.comentarios) self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + self.assertEqual(len(e1.registros_documento), 1) + doc1 = e1.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') + def test_e112(self): e1 = E1(self.xml_e112) e1.parse_xml() @@ -3519,7 +4216,8 @@ def test_t101(self): self.assertEqual(t1.datos_solicitud.motivo_traspaso, u'03') self.assertEqual(t1.datos_solicitud.fecha_prevista_accion, u'2020-05-01') self.assertEqual(t1.datos_solicitud.cnae, u'9820') - self.assertEqual(t1.datos_solicitud.ind_esencial, u'S') + self.assertEqual(t1.datos_solicitud.ind_esencial, u'01') + self.assertEqual(t1.datos_solicitud.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') self.assertEqual(t1.datos_solicitud.susp_baja_impago_en_curso, u'S') # Contrato self.assertEqual(t1.contrato.contacto.persona_de_contacto, u'Nombre Inventado') @@ -3532,7 +4230,38 @@ def test_t101(self): self.assertEqual(t1.contrato.potencias_contratadas[0][1], 1000) self.assertEqual(t1.contrato.potencias_contratadas[1][1], 2000) self.assertEqual(t1.contrato.tarifa_atr, u'018') - self.assertEqual(t1.contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = t1.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') self.assertEqual(t1.contrato.tipo_contrato_atr, u'02') self.assertEqual(t1.contrato.consumo_anual_estimado, u'5000') # Cliente @@ -3611,9 +4340,45 @@ def test_t105(self): t1.parse_xml() self.assertEqual(t1.datos_activacion.fecha_activacion, u'2016-08-21') self.assertEqual(t1.datos_activacion.en_servicio, u'S') + + self.assertEqual(t1.datos_activacion.ind_esencial, u'01') + self.assertEqual(t1.datos_activacion.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') # Contrato self.assertEqual(t1.contrato.cod_contrato, u'00001') - self.assertEqual(t1.contrato.tipo_autoconsumo, u'00') + # validem la informacio de autoconsum + autoconsumo = t1.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + + # Seguim amb la resta de dades del contracte self.assertEqual(t1.contrato.tipo_contrato_atr, u'02') self.assertEqual(t1.contrato.tarifa_atr, u'018') self.assertEqual(t1.contrato.periodicidad_facturacion, u'01') diff --git a/tests/test_output.py b/tests/test_output.py index 037319fd..1c4972d1 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -27,13 +27,248 @@ from gestionatr.output.messages import sw_e1 as e1 from gestionatr.output.messages import sw_f1 as f1 from gestionatr.output.messages import sw_m1 as m1 +from gestionatr.output.messages import sw_m2 as m2 from gestionatr.output.messages import sw_p0 as p0 from gestionatr.output.messages import sw_q1 as q1 from gestionatr.output.messages import sw_r1 as r1 from gestionatr.output.messages import sw_t1 as t1 from gestionatr.output.messages import sw_w1 as w1 from . import unittest -from .utils import get_data, assertXmlEqual, get_header, get_cliente, get_contacto, get_medida +from .utils import get_data, assertXmlEqual, get_header, get_cliente, get_contacto, get_medida_resto + + +def get_puntos_medida(obj_proces): + + # El obj_proces equival a c1,c2,m1... + + # PuntosDeMedida + puntos_de_medida = obj_proces.PuntosDeMedida() + # PuntoDeMedida + punto_de_medida = obj_proces.PuntoDeMedida() + # Aparatos + aparatos = obj_proces.Aparatos() + # Aparato + aparato = obj_proces.Aparato() + + # ModeloAparato + modelo_aparato = obj_proces.ModeloAparato() + modelo_aparato_fields = { + 'tipo_aparato': 'CG', + 'marca_aparato': '132', + 'modelo_marca': '011', + } + modelo_aparato.feed(modelo_aparato_fields) + + # DatosAparato + datos_aparato = obj_proces.DatosAparato() + datos_aparato_fields = { + 'periodo_fabricacion': '2005', + 'numero_serie': '0000539522', + 'funcion_aparato': 'M', + 'num_integradores': '18', + 'constante_energia': '1.000', + 'constante_maximetro': '1.000', + 'ruedas_enteras': '08', + 'ruedas_decimales': '02', + } + datos_aparato.feed(datos_aparato_fields) + # Medidas + medidas = obj_proces.Medidas() + # Medida 1 + medida1 = obj_proces.Medida() + medida_fields = { + 'tipo_dhedm': '6', + 'periodo': '65', + 'magnitud_medida': 'PM', + 'procedencia': '30', + 'ultima_lectura_firme': '0.00', + 'fecha_lectura_firme': '2003-01-02', + 'anomalia': '01', + 'comentarios': 'Comentario sobre anomalia', + } + medida1.feed(medida_fields) + # Medida 2 + medida2 = obj_proces.Medida() + medida_fields = { + 'tipo_dhedm': '6', + 'periodo': '66', + 'magnitud_medida': 'PM', + 'procedencia': '30', + 'ultima_lectura_firme': '6.00', + 'fecha_lectura_firme': '2003-01-03', + } + medida2.feed(medida_fields) + medidas_fields = { + 'medida_list': [medida1, medida2], + } + medidas.feed(medidas_fields) + + aparato_fields = { + 'modelo_aparato': modelo_aparato, + 'tipo_movimiento': 'CX', + 'tipo_equipo_medida': 'L03', + 'tipo_propiedad_aparato': '1', + 'propietario': 'Desc. Propietario', + 'tipo_dhedm': '6', + 'modo_medida_potencia': '9', + 'lectura_directa': 'N', + 'cod_precinto': '02', + 'datos_aparato': datos_aparato, + 'medidas': medidas + } + + aparato.feed(aparato_fields) + aparatos_fields = { + 'aparato_list': [aparato], + } + aparatos.feed(aparatos_fields) + + punto_de_medida_fields = { + 'cod_pm': 'ES1234000000000001JN0F', + 'tipo_movimiento': 'A', + 'tipo_pm': '03', + 'cod_pm_principal': 'ES1234000000000002JN0F', + 'modo_lectura': '1', + 'funcion': 'P', + 'direccion_enlace': '39522', + 'direccion_punto_medida': '000000001', + 'num_linea': '12', + 'telefono_telemedida': '987654321', + 'estado_telefono': '1', + 'clave_acceso': '0000000007', + 'tension_pm': '0', + 'fecha_vigor': '2003-01-01', + 'fecha_alta': '2003-01-01', + 'fecha_baja': '2003-02-01', + 'aparatos': aparatos, + 'comentarios': 'Comentarios Varios', + } + punto_de_medida.feed(punto_de_medida_fields) + + puntos_de_medida_fields = { + 'punto_de_medida_list': [punto_de_medida], + } + puntos_de_medida.feed(puntos_de_medida_fields) + + return puntos_de_medida + + +def get_autoconsumo(obj_proces, tipus_info='comer'): + ''' + + :param obj: fitxer c1, c2, a1 ... + :param tipus_info: depenent de si es un pas que emet comer o distri es pasa la info de generador i combustible + :return: instancia de classe Autoconsumo + ''' + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c1.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + if tipus_info == 'distri': + datos_inst_gen_fields.update({ + 'tec_generador': 'b12', + 'combustible': 'Diesel' + }) + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + return autoconsumo class test_C1(unittest.TestCase): @@ -71,115 +306,7 @@ def setUp(self): self.cliente = get_cliente() - # PuntosDeMedida - self.puntos_de_medida = c1.PuntosDeMedida() - # PuntoDeMedida - punto_de_medida = c1.PuntoDeMedida() - # Aparatos - aparatos = c1.Aparatos() - # Aparato - aparato = c1.Aparato() - - # ModeloAparato - modelo_aparato = c1.ModeloAparato() - modelo_aparato_fields = { - 'tipo_aparato': 'CG', - 'marca_aparato': '132', - 'modelo_marca': '011', - } - modelo_aparato.feed(modelo_aparato_fields) - - # DatosAparato - datos_aparato = c1.DatosAparato() - datos_aparato_fields = { - 'periodo_fabricacion': '2005', - 'numero_serie': '0000539522', - 'funcion_aparato': 'M', - 'num_integradores': '18', - 'constante_energia': '1.000', - 'constante_maximetro': '1.000', - 'ruedas_enteras': '08', - 'ruedas_decimales': '02', - } - datos_aparato.feed(datos_aparato_fields) - - # Medidas - medidas = c1.Medidas() - # Medida 1 - medida1 = c1.Medida() - medida_fields = { - 'tipo_dhedm': '6', - 'periodo': '65', - 'magnitud_medida': 'PM', - 'procedencia': '30', - 'ultima_lectura_firme': '0.00', - 'fecha_lectura_firme': '2003-01-02', - 'anomalia': '01', - 'comentarios': 'Comentario sobre anomalia', - } - medida1.feed(medida_fields) - # Medida 2 - medida2 = c1.Medida() - medida_fields = { - 'tipo_dhedm': '6', - 'periodo': '66', - 'magnitud_medida': 'PM', - 'procedencia': '30', - 'ultima_lectura_firme': '6.00', - 'fecha_lectura_firme': '2003-01-03', - } - medida2.feed(medida_fields) - medidas_fields = { - 'medida_list': [medida1, medida2], - } - medidas.feed(medidas_fields) - - aparato_fields = { - 'modelo_aparato': modelo_aparato, - 'tipo_movimiento': 'CX', - 'tipo_equipo_medida': 'L03', - 'tipo_propiedad_aparato': '1', - 'propietario': 'Desc. Propietario', - 'tipo_dhedm': '6', - 'modo_medida_potencia': '9', - 'lectura_directa': 'N', - 'cod_precinto': '02', - 'datos_aparato': datos_aparato, - 'medidas': medidas - } - - aparato.feed(aparato_fields) - aparatos_fields = { - 'aparato_list': [aparato], - } - aparatos.feed(aparatos_fields) - - punto_de_medida_fields = { - 'cod_pm': 'ES1234000000000001JN0F', - 'tipo_movimiento': 'A', - 'tipo_pm': '03', - 'cod_pm_principal': 'ES1234000000000002JN0F', - 'modo_lectura': '1', - 'funcion': 'P', - 'direccion_enlace': '39522', - 'direccion_punto_medida': '000000001', - 'num_linea': '12', - 'telefono_telemedida': '987654321', - 'estado_telefono': '1', - 'clave_acceso': '0000000007', - 'tension_pm': '0', - 'fecha_vigor': '2003-01-01', - 'fecha_alta': '2003-01-01', - 'fecha_baja': '2003-02-01', - 'aparatos': aparatos, - 'comentarios': 'Comentarios Varios', - } - punto_de_medida.feed(punto_de_medida_fields) - - puntos_de_medida_fields = { - 'punto_de_medida_list': [punto_de_medida], - } - self.puntos_de_medida.feed(puntos_de_medida_fields) + self.puntos_de_medida = get_puntos_medida(c1) def tearDown(self): self.xml_c101_completo.close() @@ -205,6 +332,8 @@ def test_create_pas01(self): datos_solicitud = c1.DatosSolicitud() datos_solicitud_fields = { 'ind_activacion': 'L', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'fecha_prevista_accion': '2016-06-06', 'contratacion_incondicional_ps': 'S', 'contratacion_incondicional_bs': 'S', @@ -354,6 +483,8 @@ def test_create_pas05(self): datos_activacion_fields = { 'fecha': '2016-08-21', 'bono_social': '1', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', } datos_activacion.feed(datos_activacion_fields) @@ -387,10 +518,115 @@ def test_create_pas05(self): } condiciones_contractuales.feed(condiciones_contractuales_fields) + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c1.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tec_generador': 'b11', + 'combustible': 'radiaci贸n solar', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + contrato_fields = { 'id_contrato': id_contrato, 'data_finalitzacio': '2020-01-01', - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', 'condiciones_contractuales': condiciones_contractuales, } @@ -399,10 +635,25 @@ def test_create_pas05(self): # Puntos de Medida puntos_de_medida = self.puntos_de_medida + # RegistroDoc + doc1 = c1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + # RegistrosDocumento + registros = c1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc_list': doc1, + } + registros.feed(registros_documento_fields) + activacion_cambiode_comercializador_sin_cambios_fields = { 'datos_activacion': datos_activacion, 'contrato': contrato, 'puntos_de_medida': puntos_de_medida, + 'registros_documento': registros } act_cambio.feed( activacion_cambiode_comercializador_sin_cambios_fields) @@ -414,6 +665,7 @@ def test_create_pas05(self): mensaje.feed(mensaje_activacion_cambiode_comercializador_sin_cambios_fields) mensaje.build_tree() xml = str(mensaje) + assertXmlEqual(xml, self.xml_c105.read()) def test_create_pas06(self): @@ -540,12 +792,14 @@ def setUp(self): self.xml_c201_completo = open(get_data("c201.xml"), "rb") self.xml_c202_accept = open(get_data("c202_accept.xml"), "rb") self.xml_c203 = open(get_data("c203.xml"), "rb") + self.xml_c205 = open(get_data("c205_only_changes.xml"), "rb") self.xml_c213 = open(get_data("c213.xml"), "rb") def tearDown(self): self.xml_c201_completo.close() self.xml_c202_accept.close() self.xml_c203.close() + self.xml_c205.close() self.xml_c213.close() def test_create_pas01(self): @@ -564,6 +818,8 @@ def test_create_pas01(self): 'tipo_modificacion': 'S', 'tipo_solicitud_administrativa': 'S', 'cnae': '2222', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'ind_activacion': 'L', 'fecha_prevista_accion': '2016-06-06', 'contratacion_incondicional_ps': 'S', @@ -574,30 +830,134 @@ def test_create_pas01(self): } datos_solicitud.feed(datos_solicitud_fields) - # Contrato - contrato = c2.Contrato() - - # CondicionesContractuales - condiciones_contractuales = c2.CondicionesContractuales() + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) - # PotenciasContratadas - potencias_contratadas = c2.PotenciasContratadas() - potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) - condiciones_contractuales_fields = { - 'tarifa_atr': '018', - 'potencias_contratadas': potencias_contratadas, - 'modo_control_potencia': '1', + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', } - condiciones_contractuales.feed(condiciones_contractuales_fields) + id_titular.feed(id_titular_fields) - # Contacto - contacto = get_contacto() + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c2.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + # Contrato + contrato = c2.Contrato() + + # CondicionesContractuales + condiciones_contractuales = c2.CondicionesContractuales() + + # PotenciasContratadas + potencias_contratadas = c2.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + + # Contacto + contacto = get_contacto() contrato_fields = { 'fecha_finalizacion': '2018-01-01', - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', + 'cups_principal': "ES1234000000000001JN0F", 'condiciones_contractuales': condiciones_contractuales, 'periodicidad_facturacion': '01', 'consumo_anual_estimado': '5000', @@ -609,7 +969,7 @@ def test_create_pas01(self): cliente = get_cliente(dir=True, tipo_dir='F') # Medida - medida = get_medida() + medida = get_medida_resto() # DocTecnica doc_tecnica = c2.DocTecnica() @@ -622,7 +982,6 @@ def test_create_pas01(self): cie_papel_fields = { 'codigo_cie': '1234567', 'potencia_inst_bt': '3500', - 'potencia_no_interrumpible': '2000', 'fecha_emision_cie': '2015-06-04', 'fecha_caducidad_cie': '', 'nif_instalador': '12345678Z', @@ -634,6 +993,7 @@ def test_create_pas01(self): datos_cie_fields = { 'cie_papel': cie_papel, 'validez_cie': 'ES', + 'potencia_no_interrumpible': '2000', } datos_cie.feed(datos_cie_fields) @@ -655,6 +1015,21 @@ def test_create_pas01(self): } doc_tecnica.feed(doc_tecnica_fields) + # RegistroDoc + doc1 = d1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + + # RegistrosDocumento + registros = d1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc': doc1, + } + registros.feed(registros_documento_fields) + cambiode_comercializador_con_cambios_fields = { 'datos_solicitud': datos_solicitud, 'contrato': contrato, @@ -662,6 +1037,8 @@ def test_create_pas01(self): 'medida': medida, 'doc_tecnica': doc_tecnica, 'comentarios': 'Comentario', + 'registros_documento': registros + } cambiode_comercializador_con_cambios.feed( cambiode_comercializador_con_cambios_fields) @@ -778,6 +1155,182 @@ def test_create_pas03(self): xml = str(mensaje) assertXmlEqual(xml, self.xml_c203.read()) + def test_create_pas05(self): + # MensajeActivacionCambiodeComercializadorConCambios + mensaje = c2.MensajeActivacionCambiodeComercializadorConCambios() + + # Cabecera + cabecera = get_header(process='C2', step='05') + + # ActivacionCambiodeComercializadorSinCambios + act_cambio = c2.ActivacionCambiodeComercializadorConCambios() + + # DatosActivacion + datos_activacion = c2.DatosActivacion() + datos_activacion_fields = { + 'fecha': '2016-08-21', + 'bono_social': '1', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', + } + datos_activacion.feed(datos_activacion_fields) + + # Contrato + contrato = c2.Contrato() + + # IdContrato + id_contrato = c2.IdContrato() + id_contrato_fields = { + 'cod_contrato': '00001', + } + id_contrato.feed(id_contrato_fields) + + # DatosSuministro + datos_suministro = c2.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c2.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c2.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c2.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c2.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c2.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c2.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c2.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c2.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tec_generador': 'b12', + 'combustible': 'Diesel', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c2.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c2.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + contrato_fields = { + 'id_contrato': id_contrato, + 'fecha_finalizacion': '2020-01-01', + 'autoconsumo': autoconsumo, + 'tipo_contrato_atr': '02', + 'cups_principal': "ES1234000000000001JN0F" + } + contrato.feed(contrato_fields) + + # RegistroDoc + doc1 = c2.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + + # RegistrosDocumento + registros = c2.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc_list': doc1, + } + registros.feed(registros_documento_fields) + + activacion_cambiode_comercializador_con_cambios_fields = { + 'datos_activacion': datos_activacion, + 'contrato': contrato, + 'registros_documento': registros + } + act_cambio.feed( + activacion_cambiode_comercializador_con_cambios_fields) + + mensaje_activacion_cambiode_comercializador_con_cambios_fields = { + 'cabecera': cabecera, + 'activacion_cambiode_comercializador_con_cambios': act_cambio, + } + mensaje.feed(mensaje_activacion_cambiode_comercializador_con_cambios_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_c205.read()) + def test_create_pas13(self): # MensajeContestacionIncidencia mensaje = c2.MensajeContestacionIncidencia() @@ -850,7 +1403,7 @@ def test_create_pas01(self): cabecera.feed(cabecera_fields) # Autoconsumo - autoconsumo = d1.Autoconsumo() + autoconsumo = a1.Autoconsumo() autoconsumo_fields = { 'cau': 'ES1234000000000001JN0FA001', 'seccion_registro': '1', @@ -860,7 +1413,7 @@ def test_create_pas01(self): autoconsumo.feed(autoconsumo_fields) # DatosSuministro - suministro_1 = d1.DatosSuministro() + suministro_1 = a1.DatosSuministro() suministro_fields = { 'cups': 'ES1234000000000001JN0F', 'tipo_cups': '01', @@ -868,7 +1421,7 @@ def test_create_pas01(self): } suministro_1.feed(suministro_fields) - suministro_2 = d1.DatosSuministro() + suministro_2 = a1.DatosSuministro() suministro_fields = { 'cups': 'ES1234000000000002JN0F', 'tipo_cups': '01', @@ -876,7 +1429,7 @@ def test_create_pas01(self): } suministro_2.feed(suministro_fields) - suministro_3 = d1.DatosSuministro() + suministro_3 = a1.DatosSuministro() suministro_fields = { 'cups': 'ES1234000000000003JN0F', 'tipo_cups': '01', @@ -885,7 +1438,7 @@ def test_create_pas01(self): suministro_3.feed(suministro_fields) # UTM - utm = d1.UTM() + utm = a1.UTM() utm_fields = { 'x': '100', 'y': '200', @@ -895,7 +1448,7 @@ def test_create_pas01(self): utm.feed(utm_fields) # IdTitular - id_titular = d1.IdTitular() + id_titular = a1.IdTitular() id_titular_fields = { 'tipo_identificador': 'NI', 'identificador': '111111111H', @@ -903,7 +1456,7 @@ def test_create_pas01(self): id_titular.feed(id_titular_fields) # Nombre - nombre = d1.Nombre() + nombre = a1.Nombre() nombre_fields = { 'nombre_de_pila': 'Juan', 'primer_apellido': 'L贸pez', @@ -912,7 +1465,7 @@ def test_create_pas01(self): nombre.feed(nombre_fields) # Telefono - telefono = d1.Telefono() + telefono = a1.Telefono() telefono_fields = { 'prefijo_pais': '0034', 'numero': '933834841', @@ -920,7 +1473,7 @@ def test_create_pas01(self): telefono.feed(telefono_fields) # Telefono 2 - telefono2 = d1.Telefono() + telefono2 = a1.Telefono() telefono2_fields = { 'prefijo_pais': '0034', 'numero': '633834841', @@ -928,7 +1481,7 @@ def test_create_pas01(self): telefono2.feed(telefono2_fields) # Telefono 3 - telefono3 = d1.Telefono() + telefono3 = a1.Telefono() telefono3_fields = { 'prefijo_pais': '0034', 'numero': '683834841', @@ -936,7 +1489,7 @@ def test_create_pas01(self): telefono3.feed(telefono3_fields) # Via - via = d1.Via() + via = a1.Via() via_fields = { 'tipo_via': 'CL', 'calle': 'Pau Casals', @@ -951,7 +1504,7 @@ def test_create_pas01(self): via.feed(via_fields) # Direccion - direccion = d1.Direccion() + direccion = a1.Direccion() direccion_fields = { 'pais': 'Espa帽a', 'provincia': '17', @@ -963,7 +1516,7 @@ def test_create_pas01(self): direccion.feed(direccion_fields) # TitularRepresentanteGen - titular = d1.TitularRepresentanteGen() + titular = a1.TitularRepresentanteGen() titular_representante_gen_fields = { 'id_titular': id_titular, 'nombre': nombre, @@ -974,7 +1527,7 @@ def test_create_pas01(self): titular.feed(titular_representante_gen_fields) # DatosInstGen - datos_1 = d1.DatosInstGen() + datos_1 = a1.DatosInstGen() datos_inst_gen_fields = { 'cil': 'ES1234000000000001JN0F001', 'tec_generador': 'b12', @@ -992,7 +1545,7 @@ def test_create_pas01(self): # utm2 = copy.deepcopy(utm) # titular2 = copy.deepcopy(titular) - datos_2 = d1.DatosInstGen() + datos_2 = a1.DatosInstGen() datos_inst_gen_fields = { 'cil': 'ES1234000000000002JN0F001', 'tec_generador': 'b11', @@ -1153,10 +1706,12 @@ class test_A3(unittest.TestCase): def setUp(self): self.xml_a301 = open(get_data("a301.xml"), "rb") self.xml_a301_correos = open(get_data("a301_correos.xml"), "rb") + self.xml_a305_elec = open(get_data("a305_elec.xml"), "rb") def tearDown(self): self.xml_a301.close() self.xml_a301_correos.close() + self.xml_a305_elec.close() def test_create_pas01(self): # MensajeAlta @@ -1172,6 +1727,8 @@ def test_create_pas01(self): datos_solicitud = a3.DatosSolicitud() datos_solicitud_fields = { 'cnae': '2222', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'ind_activacion': 'L', 'fecha_prevista_accion': '2016-06-06', 'solicitud_tension': 'S', @@ -1200,10 +1757,114 @@ def test_create_pas01(self): # Contacto contacto = get_contacto(email=False) + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c2.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + contrato_fields = { 'fecha_finalizacion': '2018-01-01', - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', + 'cups_principal': "ES1234000000000001JN0F", 'condiciones_contractuales': condiciones_contractuales, 'consumo_anual_estimado': '5000', 'contacto': contacto, @@ -1214,7 +1875,7 @@ def test_create_pas01(self): cliente = get_cliente(dir=True, tipo_dir='F') # Medida - medida = get_medida() + medida = get_medida_resto() # DocTecnica doc_tecnica = a3.DocTecnica() @@ -1328,7 +1989,7 @@ def test_create_pas01_correos(self): cliente = get_cliente(dir="correo", tipo_dir='F') # Medida - medida = get_medida() + medida = get_medida_resto() # DocTecnica doc_tecnica = a3.DocTecnica() @@ -1389,14 +2050,205 @@ def test_create_pas01_correos(self): assertXmlEqual(xml, self.xml_a301_correos.read()) + def test_create_pas05(self): + # MensajeActivacionAlta + mensaje = a3.MensajeActivacionAlta() + + # Cabecera + cabecera = get_header(process='A3', step='05', date='2014-04-16T22:13:37', code='201412111009') + + # ActivacionCambiodeComercializadorSinCambios + act_cambio = a3.ActivacionAlta() + + # DatosActivacion + datos_activacion = a3.DatosActivacion() + datos_activacion_fields = { + 'fecha': '2018-05-05', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', + } + datos_activacion.feed(datos_activacion_fields) + + # Contrato + contrato = a3.Contrato() + + # IdContrato + id_contrato = a3.IdContrato() + id_contrato_fields = { + 'cod_contrato': '00001', + } + id_contrato.feed(id_contrato_fields) + + # DatosSuministro + datos_suministro = a3.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = a3.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = a3.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = a3.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = a3.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = a3.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = a3.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = a3.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = a3.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tec_generador': 'b12', + 'combustible': 'Diesel', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = a3.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = a3.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + # CondicionesContractuales + condiciones_contractuales = a3.CondicionesContractuales() + + # PotenciasContratadas + potencias_contratadas = a3.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'periodicidad_facturacion': '01', + 'tipode_telegestion': '01', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + 'marca_medida_con_perdidas': 'S', + 'tension_del_suministro': '10', + 'vas_trafo': '50', + 'porcentaje_perdidas': '05', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + + contrato_fields = { + 'id_contrato': id_contrato, + 'fecha_finalizacion': '2020-01-01', + 'autoconsumo': autoconsumo, + 'tipo_contrato_atr': '02', + 'condiciones_contractuales': condiciones_contractuales, + 'cups_principal': "ES1234000000000001JN0F" + } + contrato.feed(contrato_fields) + + # RegistroDoc + doc1 = a3.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + puntos_de_medida = get_puntos_medida(a3) + activacion_alta_fields = { + 'datos_activacion': datos_activacion, + 'contrato': contrato, + 'puntos_de_medida': puntos_de_medida + } + act_cambio.feed(activacion_alta_fields) + + mensaje_activacion_alta_fields = { + 'cabecera': cabecera, + 'activacion_alta': act_cambio, + } + mensaje.feed(mensaje_activacion_alta_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_a305_elec.read()) + + class test_M1(unittest.TestCase): def setUp(self): self.xml_m101 = open(get_data("m101.xml"), "rb") self.xml_m101r = open(get_data("m101r.xml"), "rb") + self.xml_m105 = open(get_data("m105.xml"), "rb") def tearDown(self): self.xml_m101.close() self.xml_m101r.close() + self.xml_m105.close() def test_create_pas01(self): # MensajeModificacionDeATR @@ -1417,6 +2269,8 @@ def test_create_pas01(self): 'ind_activacion': 'L', 'fecha_prevista_accion': '2016-06-06', 'cnae': '2222', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'bono_social': '1' } datos_solicitud.feed(datos_solicitud_fields) @@ -1442,140 +2296,675 @@ def test_create_pas01(self): # Contacto contacto = get_contacto(email=False) - contrato_fields = { - 'fecha_finalizacion': '2018-01-01', - 'tipo_autoconsumo': '00', + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c2.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + contrato_fields = { + 'fecha_finalizacion': '2018-01-01', + 'autoconsumo': autoconsumo, + 'tipo_contrato_atr': '02', + 'cups_principal': "ES1234000000000001JN0F", + 'condiciones_contractuales': condiciones_contractuales, + 'contacto': contacto, + } + contrato.feed(contrato_fields) + + # Cliente + cliente = get_cliente(dir=False, tipo_dir='S') + + # Medida + medida = m1.MedidaResto() + medida_fields = { + 'propiedad_equipo': 'C', + 'tipo_equipo_medida': 'L00', + } + medida.feed(medida_fields) + + modificacion_de_atr_fields = { + 'datos_solicitud': datos_solicitud, + 'contrato': contrato, + 'cliente': cliente, + 'medida': medida, + } + modificacion_de_atr.feed(modificacion_de_atr_fields) + + mensaje_modificacion_de_atr_fields = { + 'cabecera': cabecera, + 'modificacion_de_atr': modificacion_de_atr, + } + mensaje_modificacion_de_atr.feed(mensaje_modificacion_de_atr_fields) + mensaje_modificacion_de_atr.build_tree() + xml = str(mensaje_modificacion_de_atr) + assertXmlEqual(xml, self.xml_m101.read()) + + def test_create_pas01_r(self): + # MensajeModificacionDeATR + mensaje_modificacion_de_atr = m1.MensajeModificacionDeATR() + + # Cabecera + cabecera = get_header(process='M1', step='01', date='2014-04-16T22:13:37', code='201412111009') + + # ModificacionDeATR + modificacion_de_atr = m1.ModificacionDeATR() + + # DatosSolicitud + datos_solicitud = m1.DatosSolicitud() + datos_solicitud_fields = { + 'tipo_modificacion': 'S', + 'tipo_solicitud_administrativa': 'R', + 'periodicidad_facturacion': '01', + 'ind_activacion': 'L', + 'fecha_prevista_accion': '2016-06-06', + 'cnae': '2222', + 'bono_social': '1' + } + datos_solicitud.feed(datos_solicitud_fields) + + # Contrato + contrato = m1.Contrato() + + # CondicionesContractuales + condiciones_contractuales = m1.CondicionesContractuales() + + # PotenciasContratadas + potencias_contratadas = a3.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + # DatosSuministro + datos_suministro = c1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = c1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = c1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = c1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = c1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = c1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = c1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = c1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = c2.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = c1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = c1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + + + # Contacto + contacto = get_contacto(email=False) + + contrato_fields = { + 'fecha_finalizacion': '2018-01-01', + 'autoconsumo': autoconsumo, + 'tipo_contrato_atr': '02', + 'condiciones_contractuales': condiciones_contractuales, + 'contacto': contacto, + } + contrato.feed(contrato_fields) + + # Cliente + cliente = get_cliente(dir=False, tipo_dir='S') + + # Medida + medida = m1.MedidaResto() + medida_fields = { + 'propiedad_equipo': 'C', + 'tipo_equipo_medida': 'L00', + } + medida.feed(medida_fields) + + # RegistroDoc + doc = m1.RegistroDoc() + registro_doc_fields = { + 'tipo_doc_aportado': '12', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', + } + doc.feed(registro_doc_fields) + + # RegistrosDocumento + registros = d1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc': [doc], + } + registros.feed(registros_documento_fields) + + modificacion_de_atr_fields = { + 'datos_solicitud': datos_solicitud, + 'contrato': contrato, + 'cliente': cliente, + 'medida': medida, + 'registros_documento': registros, + } + modificacion_de_atr.feed(modificacion_de_atr_fields) + + mensaje_modificacion_de_atr_fields = { + 'cabecera': cabecera, + 'modificacion_de_atr': modificacion_de_atr, + } + mensaje_modificacion_de_atr.feed(mensaje_modificacion_de_atr_fields) + mensaje_modificacion_de_atr.build_tree() + + xml = str(mensaje_modificacion_de_atr) + assertXmlEqual(xml, self.xml_m101r.read()) + + def test_create_pas05(self): + mensaje = m1.MensajeActivacionModificacionDeATR() + + # Cabecera + cabecera = get_header(process='M1', step='05') + + # ActivacionModificaciones + act_cambio = m1.ActivacionModificaciones() + + # DatosActivacion + datos_activacion = m1.DatosActivacion() + datos_activacion_fields = { + 'fecha': '2016-08-21', + 'bono_social': '1', + } + datos_activacion.feed(datos_activacion_fields) + + # Contrato + contrato = m1.Contrato() + + # IdContrato + id_contrato = m1.IdContrato() + id_contrato_fields = { + 'cod_contrato': '00001', + } + id_contrato.feed(id_contrato_fields) + + # DatosSuministro + datos_suministro = m1.DatosSuministro() + datos_suministro_fields = { + 'tipo_cups': '01', + 'ref_catastro': '1234567890qwertyuiop', + } + datos_suministro.feed(datos_suministro_fields) + + # UTM + utm = m1.UTM() + utm_fields = { + 'x': '100', + 'y': '200', + 'huso': '40', + 'banda': 'E', + } + utm.feed(utm_fields) + + # IdTitular + id_titular = m1.IdTitular() + id_titular_fields = { + 'tipo_identificador': 'NI', + 'identificador': '111111111H', + } + id_titular.feed(id_titular_fields) + + # Nombre + nombre = m1.Nombre() + nombre_fields = { + 'nombre_de_pila': 'Juan', + 'primer_apellido': 'L贸pez', + 'segundo_apellido': 'S谩nchez', + } + nombre.feed(nombre_fields) + + # Telefono + telefono = m1.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '933834841', + } + telefono.feed(telefono_fields) + + # Telefono 2 + telefono2 = m1.Telefono() + telefono2_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono2.feed(telefono2_fields) + + # Telefono 3 + telefono3 = m1.Telefono() + telefono3_fields = { + 'prefijo_pais': '0034', + 'numero': '683834841', + } + telefono3.feed(telefono3_fields) + + # TitularRepresentanteGen + titular = m1.TitularRepresentanteGen() + titular_representante_gen_fields = { + 'id_titular': id_titular, + 'nombre': nombre, + 'telefono': [telefono, telefono2, telefono3], + 'correo_electronico': 'mail_falso@dominio.com', + } + titular.feed(titular_representante_gen_fields) + + # DatosInstGen + datos_1 = m1.DatosInstGen() + datos_inst_gen_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tec_generador': 'b12', + 'combustible': 'Diesel', + 'pot_instalada_gen': '100', + 'tipo_instalacion': '01', + 'esquema_medida': 'B', + 'ssaa': 'S', + 'unico_contrato': 'S', + 'ref_catastro': '1234567890qwertyuidf', + 'utm': utm, + 'titular_representante_gen': titular, + } + datos_1.feed(datos_inst_gen_fields) + + # DatosCAU + datos_cau = m1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'colectivo': 'S', + 'datos_inst_gen': [datos_1], + } + datos_cau.feed(datos_cau_fields) + + # Autoconsumo + autoconsumo = m1.Autoconsumo() + autoconsumo_fields = { + 'datos_suministro': datos_suministro, + 'datos_cau': datos_cau, + } + autoconsumo.feed(autoconsumo_fields) + + # CondicionesContractuales + condiciones_contractuales = m1.CondicionesContractuales() + + # PotenciasContratadas + potencias_contratadas = c1.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'periodicidad_facturacion': '01', + 'tipode_telegestion': '01', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + 'marca_medida_con_perdidas': 'S', + 'tension_del_suministro': '10', + 'vas_trafo': '50', + 'porcentaje_perdidas': '05', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + + contrato_fields = { + 'id_contrato': id_contrato, + 'fecha_finalizacion': '2020-01-01', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', 'condiciones_contractuales': condiciones_contractuales, - 'contacto': contacto, + 'cups_principal': "ES1234000000000001JN0F" } contrato.feed(contrato_fields) - # Cliente - cliente = get_cliente(dir=False, tipo_dir='S') + # RegistroDoc + doc1 = m1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) - # Medida - medida = m1.Medida() - medida_fields = { - 'propiedad_equipo': 'C', - 'tipo_equipo_medida': 'L00', + # RegistrosDocumento + registros = d1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc': doc1, } - medida.feed(medida_fields) + registros.feed(registros_documento_fields) - modificacion_de_atr_fields = { - 'datos_solicitud': datos_solicitud, + puntos_de_medida = get_puntos_medida(a3) + activacion_alta_fields = { + 'datos_activacion': datos_activacion, + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'contrato': contrato, - 'cliente': cliente, - 'medida': medida, + 'puntos_de_medida': puntos_de_medida, + 'registros_documento': registros } - modificacion_de_atr.feed(modificacion_de_atr_fields) + act_cambio.feed(activacion_alta_fields) - mensaje_modificacion_de_atr_fields = { + mensaje_activacion_alta_fields = { 'cabecera': cabecera, - 'modificacion_de_atr': modificacion_de_atr, + 'activacion_modificaciones': act_cambio, } - mensaje_modificacion_de_atr.feed(mensaje_modificacion_de_atr_fields) - mensaje_modificacion_de_atr.build_tree() - xml = str(mensaje_modificacion_de_atr) - assertXmlEqual(xml, self.xml_m101.read()) + mensaje.feed(mensaje_activacion_alta_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_m105.read()) - def test_create_pas01_r(self): - # MensajeModificacionDeATR - mensaje_modificacion_de_atr = m1.MensajeModificacionDeATR() +class test_M2(unittest.TestCase): + def setUp(self): + self.xml_m202_reject = open(get_data("m202_reject.xml"), "rb") + self.xml_m205 = open(get_data("m205.xml"), "rb") + + def tearDown(self): + self.xml_m202_reject.close() + self.xml_m205.close() + + def test_create_pas02_rej(self): + # MensajeRechazo + mensaje_rechazo = m2.MensajeRechazo() # Cabecera - cabecera = get_header(process='M1', step='01', date='2014-04-16T22:13:37', code='201412111009') + cabecera = get_header(process='M2', step='02') - # ModificacionDeATR - modificacion_de_atr = m1.ModificacionDeATR() + # MensageRechazos + rechazos = m2.Rechazos() - # DatosSolicitud - datos_solicitud = m1.DatosSolicitud() - datos_solicitud_fields = { - 'tipo_modificacion': 'S', - 'tipo_solicitud_administrativa': 'R', - 'periodicidad_facturacion': '01', - 'ind_activacion': 'L', - 'fecha_prevista_accion': '2016-06-06', - 'cnae': '2222', - 'bono_social': '1' - } - datos_solicitud.feed(datos_solicitud_fields) + # Rechazos + r1 = m2.Rechazo() + r1.feed({ + 'secuencial': '1', + 'codigo_motivo': '01', + 'comentarios': 'Motiu de rebuig 01: No existe Punto de Suministro asociado al CUPS' + }) + r2 = m2.Rechazo() + r2.feed({ + 'secuencial': '2', + 'codigo_motivo': '03', + 'comentarios': 'Cuando el CIF-NIF no coincide con el que figura en la base de datos del Distribuidor' + }) - # Contrato - contrato = m1.Contrato() + # RegistrosDocumento + registros_documento = c1.RegistrosDocumento() + # RegistroDoc + registro_doc1 = c1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '08', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf' + } + registro_doc1.feed(registro_doc_fields1) - # CondicionesContractuales - condiciones_contractuales = m1.CondicionesContractuales() + registro_doc2 = c1.RegistroDoc() + registro_doc_fields2 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf' + } + registro_doc2.feed(registro_doc_fields2) + registros_documento_fields = { + 'registro_doc_list': [registro_doc1, registro_doc2], + } + registros_documento.feed(registros_documento_fields) - # PotenciasContratadas - potencias_contratadas = a3.PotenciasContratadas() - potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + rechazos_fields = { + 'fecha_rechazo': '2016-07-20', + 'rechazo_list': [r1, r2], + 'registros_documento': registros_documento, + } + rechazos.feed(rechazos_fields) - condiciones_contractuales_fields = { - 'tarifa_atr': '018', - 'potencias_contratadas': potencias_contratadas, - 'modo_control_potencia': '1', + mensaje_rechazo_fields = { + 'cabecera': cabecera, + 'rechazos': rechazos, } - condiciones_contractuales.feed(condiciones_contractuales_fields) + mensaje_rechazo.feed(mensaje_rechazo_fields) + mensaje_rechazo.build_tree() + xml = str(mensaje_rechazo) + assertXmlEqual(xml, self.xml_m202_reject.read()) + def test_create_pas05(self): + mensaje = m2.MensajeActivacionModificacionDeATRUnidir() - # Contacto - contacto = get_contacto(email=False) + # Cabecera + cabecera = get_header(process='M2', step='05') - contrato_fields = { - 'fecha_finalizacion': '2018-01-01', - 'tipo_autoconsumo': '00', - 'tipo_contrato_atr': '02', - 'condiciones_contractuales': condiciones_contractuales, - 'contacto': contacto, + # ActivacionModificaciones + act_cambio = m2.ActivacionModificaciones() + motivo_activacion_1 = m2.MotivoActivacionUnidireccional() + motivo_activacion_1.feed({'motivo': '01'}) + motivo_activacion_2 = m2.MotivoActivacionUnidireccional() + motivo_activacion_2.feed({'motivo': '02'}) + motivo_activacion_list = [motivo_activacion_1, motivo_activacion_2] + + # DatosActivacion + datos_activacion = m2.DatosActivacion() + datos_activacion_fields = { + 'motivo_activacion_list': motivo_activacion_list, + 'fecha': '2016-06-06', + 'bono_social': '1', + 'ind_esencial': '00', + 'fecha_ultimo_movimiento_ind_esencial': '1900-01-01', } - contrato.feed(contrato_fields) + datos_activacion.feed(datos_activacion_fields) - # Cliente - cliente = get_cliente(dir=False, tipo_dir='S') + # Contrato + contrato = m2.Contrato() - # Medida - medida = m1.Medida() - medida_fields = { - 'propiedad_equipo': 'C', - 'tipo_equipo_medida': 'L00', + # IdContrato + id_contrato = m2.IdContrato() + id_contrato_fields = { + 'cod_contrato': '00001', } - medida.feed(medida_fields) + id_contrato.feed(id_contrato_fields) - # RegistroDoc - doc = m1.RegistroDoc() - registro_doc_fields = { - 'tipo_doc_aportado': '12', - 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', - } - doc.feed(registro_doc_fields) + autoconsumo = get_autoconsumo(m2, 'distri') - # RegistrosDocumento - registros = d1.RegistrosDocumento() - registros_documento_fields = { - 'registro_doc': [doc], + contrato_fields = { + 'id_contrato': id_contrato, + 'fecha_finalizacion': '2016-05-05', + 'autoconsumo': autoconsumo, } - registros.feed(registros_documento_fields) + contrato.feed(contrato_fields) - modificacion_de_atr_fields = { - 'datos_solicitud': datos_solicitud, + puntos_de_medida = get_puntos_medida(m2) + activacion_alta_fields = { + 'datos_activacion': datos_activacion, 'contrato': contrato, - 'cliente': cliente, - 'medida': medida, - 'registros_documento': registros, + 'puntos_de_medida': puntos_de_medida, } - modificacion_de_atr.feed(modificacion_de_atr_fields) + act_cambio.feed(activacion_alta_fields) - mensaje_modificacion_de_atr_fields = { + mensaje_activacion_alta_fields = { 'cabecera': cabecera, - 'modificacion_de_atr': modificacion_de_atr, + 'activacion_modificaciones': act_cambio, } - mensaje_modificacion_de_atr.feed(mensaje_modificacion_de_atr_fields) - mensaje_modificacion_de_atr.build_tree() - - xml = str(mensaje_modificacion_de_atr) - assertXmlEqual(xml, self.xml_m101r.read()) + mensaje.feed(mensaje_activacion_alta_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_m205.read()) class test_D1(unittest.TestCase): @@ -1591,6 +2980,7 @@ def tearDown(self): self.xml_d101.close() self.xml_d101_motiu_13.close() self.xml_d101_motiu_13_14.close() + self.xml_d102_reject.close() self.xml_d110.close() def test_create_pas01(self): @@ -2002,12 +3392,14 @@ def test_create_pas10(self): datos_anulacion = d1.DatosAnulacion() datos_anulacion.feed({'fecha_anulacion': "2016-06-10"}) + node_anulacio = d1.AnulacionNotificacionCambiosATRDesdeDistribuidor() + node_anulacio.feed({'datos_anulacion': datos_anulacion}) # MensajeRechazo mensaje_anulacion_d1 = d1.MensajeAnulacionD1() mensaje_rechazo_fields = { 'cabecera': cabecera, - 'datos_anulacion': datos_anulacion, + 'anulacion_notificacion_cambios_atr_desde_distribuidor': node_anulacio, } mensaje_anulacion_d1.feed(mensaje_rechazo_fields) @@ -2084,7 +3476,8 @@ def test_create_pas02_accept(self): estado_contratable = p0.EstadoContratable() estado_contratable_fields = { 'contratable': 'N', - 'motivo': '03' + 'motivo': '03', + 'potencia_max_sin_expediente': 3600 } estado_contratable.feed(estado_contratable_fields) @@ -2104,28 +3497,13 @@ def test_create_pas02_accept(self): } condiciones_contractuales.feed(condiciones_contractuales_fields) + autoconsumo = get_autoconsumo(p0, 'comer') # Contrato contrato = p0.Contrato() contrato_fields = { 'tipo_contrato_atr': '03', 'fecha_finalizacion': '2020-03-31', - 'tipo_autoconsumo': '01', - 'fecha_ultimo_movimiento_tipo_autocons': '2020-01-01', - 'ind_bono_social': 'N', - 'ind_esencial': 'N', - 'vivienda_habitual': 'S', - 'cnae': '9820', - 'condiciones_contractuales': condiciones_contractuales, - 'modo_facturacion_potencia': '9', - 'no_interrumpible': 'S', - 'potencia_no_interrumpible': '6000', - 'potencia_max_sin_expediente': '8000', - 'vas_trafo': '50', - 'periodicidad_facturacion': '01', - 'tipo_de_telegestion': '01', - 'icp_activado_telegestion': 'S', - 'peaje_directo': 'S', - 'deposito_garantia': 'N', + 'autoconsumo': autoconsumo, } contrato.feed(contrato_fields) @@ -2165,7 +3543,8 @@ def test_create_pas02_accept(self): 'tipo_equipo': 'L09', 'tipo_propiedad': '1', 'codigo_fases_equipo_medida': 'T', - 'tipo_dh_edm': '2' + 'tipo_dh_edm': '2', + 'relacion_transformacion_intensidad': '10/100' } equipo1.feed(equipo1_fields) @@ -2176,7 +3555,8 @@ def test_create_pas02_accept(self): 'tipo_equipo': 'L09', 'tipo_propiedad': '1', 'codigo_fases_equipo_medida': 'T', - 'tipo_dh_edm': '2' + 'tipo_dh_edm': '2', + 'relacion_transformacion_intensidad': '10/100' } equipo2.feed(equipo2_fields) @@ -2194,6 +3574,7 @@ def test_create_pas02_accept(self): # DatosCie datos_cie = p0.DatosCie() datos_cie_fields = { + 'potencia_ins_bt': "2000", 'cie_papel': cie_papel, 'validez_cie': 'AU' } @@ -2212,6 +3593,7 @@ def test_create_pas02_accept(self): # DocTecnica doc_tecnica = p0.DocTecnica() doc_tecnica_fields = { + 'cie_disponible': "S", 'datos_cie': datos_cie, 'datos_apm': datos_apm, } @@ -2233,6 +3615,56 @@ def test_create_pas02_accept(self): } expediente_acometida.feed(expediente_acometida_fields) + # Cliente + cliente_fields = get_cliente(dir=False, tipo_dir='F', + get_only_fields=True) + + telefono1 = c2.Telefono() + telefono_fields = { + 'prefijo_pais': '0034', + 'numero': '633834841', + } + telefono1.feed(telefono_fields) + telefonos = [telefono1] + via = c2.Via() + via.feed({ + 'tipo_via': 'PZ', + 'calle': 'MELA MUTERMILCH', + 'numero_finca': '2', + 'duplicador_finca': 'n/a', + 'escalera': '001', + 'piso': '001', + 'puerta': '001', + 'tipo_aclarador_finca': 'BI', + 'aclarador_finca': 'Bloque de Pisos', + }) + # Direccion + direccion = c2.Direccion(name="DireccionSuministro") + direccion_fields = { + 'pais': 'Espa帽a', + 'provincia': '17', + 'municipio': '17079', + 'poblacion': '17079000501', + 'via': via, + 'cod_postal': '17001', + } + direccion.feed(direccion_fields) + cliente = p0.Cliente() + + cliente_fields['direccion_suministro'] = direccion + cliente_fields['telefonos'] = telefonos + cliente_fields['correo_electronico'] = "a@mail.com" + cliente.feed(cliente_fields) + puntos_de_medida = p0.PuntosDeMedida() + punto_medida = p0.PuntoDeMedida() + punto_medida_fields = { + "direccion_enlace": "39522", + "telefono_telemedida": "987654321", + "clave_acceso": "1234" + } + punto_medida.feed(punto_medida_fields) + puntos_de_medida.feed({'puntos_de_medida_list': [punto_medida]}) + # EnvioInformacionPS envio_informacion_ps = p0.EnvioInformacionPS() envio_informacion_ps_fields = { @@ -2242,15 +3674,34 @@ def test_create_pas02_accept(self): 'existe_solicitud_en_curso': 'S', 'tipo_solicitud_en_curso': 'C100', 'contrato': contrato, + 'fecha_ultimo_movimiento_tipo_autocons': '2020-01-01', + 'ind_bono_social': 'N', + 'ind_esencial': '00', + 'fecha_ultimo_movimiento_ind_esencial': '2016-05-05', + 'vivienda_habitual': 'S', + 'cnae': '9820', + 'condiciones_contractuales': condiciones_contractuales, + 'modo_facturacion_potencia': '9', + 'no_interrumpible': 'S', + 'potencia_no_interrumpible': '6000', + 'potencia_max_sin_expediente': '8000', + 'vas_trafo': '50', + 'periodicidad_facturacion': '01', + 'tipo_de_telegestion': '01', + 'icp_activado_telegestion': 'S', + 'peaje_directo': 'S', + 'deposito_garantia': 'N', 'potencia_maxima_autorizada': '10000', 'tension_del_suministro': '02', 'derechos_reconocidos': derechos_reconocidos, 'caracteristicas_pm': caracteristicas_pm, 'historia': historia, + 'cliente': cliente, 'equipo_list': [equipo1, equipo2], 'doc_tecnica': doc_tecnica, 'expediente_anomalia_fraude': expediente_anomalia_fraude, - 'expediente_acometida': expediente_acometida + 'expediente_acometida': expediente_acometida, + 'puntos_de_medida': puntos_de_medida } envio_informacion_ps.feed(envio_informacion_ps_fields) @@ -3271,6 +4722,8 @@ def test_create_pas01(self): solicitud_desistimiento_fields = { 'codigo_de_solicitud_ref': '201605219400', 'tipo_de_solicitud': '01', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'id_cliente': id_cliente, 'registros_Documento': registros_documento, } @@ -3547,6 +5000,8 @@ def test_create_pas06(self): 'fecha': '2016-08-21', 'en_servicio': 'S', 'ind_anulable': 'S', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', } datos_activacion.feed(datos_activacion_fields) @@ -3575,13 +5030,15 @@ def test_create_pas06(self): 'porcentaje_perdidas': '05', } condiciones_contractuales.feed(condiciones_contractuales_fields) + autoconsumo = get_autoconsumo(e1, 'distri') # Contrato contrato = e1.Contrato() contrato_fields = { 'id_contrato': id_contrato, - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', + 'cups_principal': 'ES1234000000000001JN0F', 'condiciones_contractuales': condiciones_contractuales, } contrato.feed(contrato_fields) @@ -3589,12 +5046,27 @@ def test_create_pas06(self): # PuntosDeMedida puntos_de_medida = self.puntos_de_medida + # RegistroDoc + doc1 = c1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + # RegistrosDocumento + registros = c1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc_list': doc1, + } + registros.feed(registros_documento_fields) + # ActivacionDesistimiento notificacion_activacion_desistimiento = e1.NotificacionActivacionPorDesistimiento() notificacion_activacion_desistimiento_fields = { 'datos_activacion': datos_activacion, 'contrato': contrato, 'puntos_de_medida': puntos_de_medida, + 'registros_documento': registros } notificacion_activacion_desistimiento.feed(notificacion_activacion_desistimiento_fields) @@ -3819,10 +5291,12 @@ def test_create_pas01(self): 'motivo_traspaso': '03', 'fecha_prevista_accion': '2020-05-01', 'cnae': '9820', - 'ind_esencial': 'S', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'susp_baja_impago_en_curso': 'S', } datos_solicitud.feed(datos_solicitud_fields) + autoconsumo = get_autoconsumo(t1) # Contrato contrato = t1.ContratoT101() @@ -3846,7 +5320,7 @@ def test_create_pas01(self): contrato_fields = { 'fecha_finalizacion': '2018-01-01', - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', 'condiciones_contractuales': condiciones_contractuales, 'periodicidad_facturacion': '01', @@ -4023,6 +5497,8 @@ def test_create_pas05(self): datos_activacion_fields = { 'fecha_activacion': '2016-08-21', 'en_servicio': 'S', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', } datos_activacion.feed(datos_activacion_fields) @@ -4051,12 +5527,12 @@ def test_create_pas05(self): 'porcentaje_perdidas': '05', } condiciones_contractuales.feed(condiciones_contractuales_fields) - + autoconsumo = get_autoconsumo(t1) # Contrato contrato = t1.Contrato() contrato_fields = { 'id_contrato': id_contrato, - 'tipo_autoconsumo': '00', + 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', 'condiciones_contractuales': condiciones_contractuales, } @@ -4271,6 +5747,12 @@ def test_create_pas01(self): } ubicacion_incidencia.feed(ubicacion_incidencia_fields) + disconformidad_autoconsumo = r1.DisconformidadAutoconsumo() + disconformidad_autoconsumo.feed({ + 'tipo_disconformidad_1': '01', + 'tipo_disconformidad_2': '03' + }) + variable_detalle_reclamacion_fields = { 'num_expediente_acometida': '11111', 'num_expediente_fraude': '22222', @@ -4279,12 +5761,15 @@ def test_create_pas01(self): 'tipo_concepto_facturado': '01', 'fecha_lectura': '2016-01-20', 'tipo_dhedm': '1', + 'cau': 'ES1234000000000001JN0FA001', 'lecturas_aportadas': lecturas_aportadas, + 'disconformidad_autoconsumo': disconformidad_autoconsumo, 'codigo_incidencia': '01', 'codigo_solicitud': '33333', 'parametro_contratacion': '01', 'concepto_disconformidad': '100', 'tipo_de_atencion_incorrecta': '05', + 'motivo_consulta': '01', 'iban': '4444222211113333', 'contacto': contacto, 'codigo_solicitud_reclamacion': '11111', diff --git a/tests/utils.py b/tests/utils.py index 1f40623f..9e8b0b61 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -29,7 +29,7 @@ def get_header(process='C1', step='01', code='201607211259', date='2016-07-21T12 return header -def get_cliente(dir=False, tipo_dir=None): +def get_cliente(dir=False, tipo_dir=None, get_only_fields=False): # Cliente cliente = c2.Cliente() @@ -120,6 +120,8 @@ def get_cliente(dir=False, tipo_dir=None): 'indicador_tipo_direccion': indicador_tipo_direccion, 'direccion': direccion } + if get_only_fields: + return cliente_fields cliente.feed(cliente_fields) return cliente @@ -155,9 +157,9 @@ def get_contacto(email=True): return contacto -def get_medida(): +def get_medida_resto(): # Medida - medida = c2.Medida() + medida = c2.MedidaResto() # ModelosAparato md1 = c2.ModeloAparato() From 795669cd3492f87f1db0abf655c8568942d32184 Mon Sep 17 00:00:00 2001 From: aorellana Date: Fri, 29 Nov 2024 15:00:05 +0100 Subject: [PATCH 08/19] Check minimum fields methods (R1) --- gestionatr/input/messages/R1.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gestionatr/input/messages/R1.py b/gestionatr/input/messages/R1.py index f1d6fdc8..77fd554f 100644 --- a/gestionatr/input/messages/R1.py +++ b/gestionatr/input/messages/R1.py @@ -1119,6 +1119,24 @@ def check(self): errors.append(field) return errors + def check_tipo_disconforme_autoconsumo(self): + for var in self.r1.variables_detalle_reclamacion: + if not var.disconformidad_autoconsumo: + return False + return len(self.r1.variables_detalle_reclamacion) > 0 + + def check_CAU(self): + for var in self.r1.variables_detalle_reclamacion: + if not var.CAU: + return False + return len(self.r1.variables_detalle_reclamacion) > 0 + + def check_motivo_consulta(self): + for var in self.r1.variables_detalle_reclamacion: + if not var.motivo_consulta: + return False + return len(self.r1.variables_detalle_reclamacion) > 0 + def check_nif_cliente(self): return get_rec_attr(self.r1, "cliente.identificador", False) From fe763e909380687ef6a01b60a8c8ed404e76b092 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 2 Dec 2024 11:51:46 +0100 Subject: [PATCH 09/19] new revisio ATR de novembre --- gestionatr/data/AnulacionD1.xsd | 1 + .../data/EnvioInformacionReclamacion.xsd | 3 +- gestionatr/data/RechazoReposicionReceptor.xsd | 3 +- gestionatr/data/TipoMensajeC205.xsd | 2 +- gestionatr/data/TipoMensajeE2.xsd | 34 +--- gestionatr/data/TipoMensajeE205.xsd | 2 +- gestionatr/data/TipoMensajeR104.xsd | 169 ++++++++++++++++++ gestionatr/data/TiposComplejos.xsd | 2 +- gestionatr/data/TiposSencillos.xsd | 7 +- gestionatr/input/messages/P0.py | 4 +- gestionatr/output/messages/sw_p0.py | 4 +- gestionatr/output/messages/sw_r1.py | 8 +- 12 files changed, 194 insertions(+), 45 deletions(-) create mode 100644 gestionatr/data/TipoMensajeR104.xsd diff --git a/gestionatr/data/AnulacionD1.xsd b/gestionatr/data/AnulacionD1.xsd index 3924890e..cc50ea56 100644 --- a/gestionatr/data/AnulacionD1.xsd +++ b/gestionatr/data/AnulacionD1.xsd @@ -1,4 +1,5 @@ + diff --git a/gestionatr/data/EnvioInformacionReclamacion.xsd b/gestionatr/data/EnvioInformacionReclamacion.xsd index 68a4c3bb..0ea06356 100644 --- a/gestionatr/data/EnvioInformacionReclamacion.xsd +++ b/gestionatr/data/EnvioInformacionReclamacion.xsd @@ -1,7 +1,8 @@ + - + diff --git a/gestionatr/data/RechazoReposicionReceptor.xsd b/gestionatr/data/RechazoReposicionReceptor.xsd index a339ac90..9727e1af 100644 --- a/gestionatr/data/RechazoReposicionReceptor.xsd +++ b/gestionatr/data/RechazoReposicionReceptor.xsd @@ -1,9 +1,10 @@ + - + diff --git a/gestionatr/data/TipoMensajeC205.xsd b/gestionatr/data/TipoMensajeC205.xsd index e79f1310..0654f0d6 100644 --- a/gestionatr/data/TipoMensajeC205.xsd +++ b/gestionatr/data/TipoMensajeC205.xsd @@ -41,7 +41,7 @@ Tabla 9 - + diff --git a/gestionatr/data/TipoMensajeE2.xsd b/gestionatr/data/TipoMensajeE2.xsd index 066d5563..2fc3d414 100644 --- a/gestionatr/data/TipoMensajeE2.xsd +++ b/gestionatr/data/TipoMensajeE2.xsd @@ -71,12 +71,12 @@ - + - + @@ -97,36 +97,6 @@ - - - - - - - - - - - - - - - - - - - Tabla 27 - - - - - - - - - - - diff --git a/gestionatr/data/TipoMensajeE205.xsd b/gestionatr/data/TipoMensajeE205.xsd index 23dce5f8..feedacac 100644 --- a/gestionatr/data/TipoMensajeE205.xsd +++ b/gestionatr/data/TipoMensajeE205.xsd @@ -43,7 +43,7 @@ Tabla 9 - + diff --git a/gestionatr/data/TipoMensajeR104.xsd b/gestionatr/data/TipoMensajeR104.xsd new file mode 100644 index 00000000..1c488612 --- /dev/null +++ b/gestionatr/data/TipoMensajeR104.xsd @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 85 + + + + + + + + + + + + Tabla 76 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tabla 77 + + + + + + Tabla 35 + + + + + + + + + Tabla 139 + + + + + + + + Tabla 86 + + + + + + + + + + + + Tabla 79 + + + + + + + + + + + + Tabla 87 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gestionatr/data/TiposComplejos.xsd b/gestionatr/data/TiposComplejos.xsd index edb7a106..57f02eb1 100644 --- a/gestionatr/data/TiposComplejos.xsd +++ b/gestionatr/data/TiposComplejos.xsd @@ -1881,7 +1881,7 @@ - + diff --git a/gestionatr/data/TiposSencillos.xsd b/gestionatr/data/TiposSencillos.xsd index 7134aca5..33e0f2ba 100644 --- a/gestionatr/data/TiposSencillos.xsd +++ b/gestionatr/data/TiposSencillos.xsd @@ -3279,9 +3279,10 @@ la reclamacion RD RONDA RS RESIDENCIAL SD SENDA + SU SUBIDA TR TRAVES虯 UR URBANIZACI覰 - VI VIAL + VI VIAL ZN ZONA AD ALDEA CJ CALLEJA @@ -3348,6 +3349,7 @@ la reclamacion + @@ -4132,7 +4134,7 @@ la reclamacion 01 Vuelta a la situacion anterior En servicio La reposicion ha finalizado devolviendo el PS a la situacion anterior a la peticion que se ha repuesto 02 Vuelta a la situacion anterior En servicio (cortado) Reposicion de una solicitud de C1/C2 en la que se produjo un reenganche del PS. Se vuelve a la situacion anterior en la que el PS se encontraba cortado. En el caso de desear la reconexion del PS, la peticion se deber realizar por fuera del sistema al no existir una solicitud de corte en curso. 03 Traspaso a la CORTraspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. -04 Baja del contrato por rechazo de la COR Traspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. +04 Baja del contrato por rechazo de la COR Traspaso a la COR en las condiciones originales, en caso de rechazo por parte del receptor. Se da de baja el 26-09-2024 05 Baja por cese de actividad Concurrencia de procesos: se prioriza la baja (en la medida de lo posible) por cese de actividad solicitada por el consumidor sobre el traspaso a la COR. 06 Activacion de cambio de comercializador Concurrencia de procesos: se prioriza el cambio de comercializador sobre el traspaso a la COR. @@ -4140,7 +4142,6 @@ la reclamacion - diff --git a/gestionatr/input/messages/P0.py b/gestionatr/input/messages/P0.py index 46753dc5..d83a3a95 100644 --- a/gestionatr/input/messages/P0.py +++ b/gestionatr/input/messages/P0.py @@ -673,10 +673,10 @@ def __init__(self, data): self.datos_cie = data @property - def potencia_ins_bt(self): + def potencia_inst_bt(self): data = '' try: - data = self.datos_cie.PotenciaInsBT.text + data = self.datos_cie.PotenciaInstBT.text except AttributeError: pass return data diff --git a/gestionatr/output/messages/sw_p0.py b/gestionatr/output/messages/sw_p0.py index 3c2bd420..7411f2a9 100644 --- a/gestionatr/output/messages/sw_p0.py +++ b/gestionatr/output/messages/sw_p0.py @@ -221,11 +221,11 @@ def __init__(self): class DatosCie(XmlModel): - _sort_order = ('datos_cie', 'potencia_ins_bt', 'cie_papel', 'cie_electronico', 'validez_cie') + _sort_order = ('datos_cie', 'potencia_inst_bt', 'cie_papel', 'cie_electronico', 'validez_cie') def __init__(self): self.datos_cie = XmlField('DatosCie') - self.potencia_ins_bt = XmlField('PotenciaInsBT') + self.potencia_inst_bt = XmlField('PotenciaInstBT') self.cie_papel = CIEPapel() self.cie_electronico = CIEElectronico() self.validez_cie = XmlField('ValidezCIE') diff --git a/gestionatr/output/messages/sw_r1.py b/gestionatr/output/messages/sw_r1.py index d6bab6f8..242e5c69 100644 --- a/gestionatr/output/messages/sw_r1.py +++ b/gestionatr/output/messages/sw_r1.py @@ -456,7 +456,12 @@ def __init__(self): class VariableAportacionInformacionParaRetipificacion(XmlModel): - _sort_order = ('variable_aportacion_informacion_para_retipificacion', 'num_expediente_acometida', 'num_expediente_fraude', 'fecha_incidente', 'num_factura_atr', 'tipo_concepto_facturado', 'fecha_lectura', 'tipo_dhedm', 'lecturas_aportadas', 'codigo_incidencia', 'codigo_solicitud', 'parametro_contratacion', 'concepto_disconformidad', 'tipo_de_atencion_incorrecta', 'iban', 'contacto', 'codigo_solicitud_reclamacion', 'fecha_desde', 'fecha_hasta', 'importe_reclamado', 'ubicacion_incidencia') + _sort_order = ('variable_aportacion_informacion_para_retipificacion', 'num_expediente_acometida', + 'num_expediente_fraude', 'fecha_incidente', 'num_factura_atr', 'tipo_concepto_facturado', + 'fecha_lectura', 'tipo_dhedm', 'lecturas_aportadas', 'disconformidad_autoconsumo', + 'codigo_incidencia', 'codigo_solicitud', 'parametro_contratacion', 'concepto_disconformidad', + 'tipo_de_atencion_incorrecta', 'iban', 'contacto', 'codigo_solicitud_reclamacion', 'fecha_desde', + 'fecha_hasta', 'importe_reclamado', 'ubicacion_incidencia') def __init__(self): self.variable_aportacion_informacion_para_retipificacion = XmlField('VariableAportacionInformacionParaRetipificacion') @@ -468,6 +473,7 @@ def __init__(self): self.fecha_lectura = XmlField('FechaLectura') self.tipo_dhedm = XmlField('TipoDHEdM') self.lecturas_aportadas = LecturasAportadas() + self.disconformidad_autoconsumo = DisconformidadAutoconsumo() self.codigo_incidencia = XmlField('CodigoIncidencia') self.codigo_solicitud = XmlField('CodigoSolicitud') self.parametro_contratacion = XmlField('ParametroContratacion') From 8aa7aa5cfd908dcd13b457f74e80f882d631460c Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 2 Dec 2024 11:52:47 +0100 Subject: [PATCH 10/19] new TEST revisio ATR de novembre --- tests/data/p002_accept.xml | 2 +- tests/data/r104.xml | 4 ++++ tests/test_input.py | 6 +++++- tests/test_output.py | 33 ++++++++++++++++++++------------- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/tests/data/p002_accept.xml b/tests/data/p002_accept.xml index c1e75a82..44d79a03 100644 --- a/tests/data/p002_accept.xml +++ b/tests/data/p002_accept.xml @@ -168,7 +168,7 @@ S - 2000 + 2000 12345678901234567890123456789012345 2020-03-01 diff --git a/tests/data/r104.xml b/tests/data/r104.xml index 40a97b81..a77d3f90 100644 --- a/tests/data/r104.xml +++ b/tests/data/r104.xml @@ -47,6 +47,10 @@ 0000003106.00 + + 01 + 03 + 01 33333 01 diff --git a/tests/test_input.py b/tests/test_input.py index fe08c94a..602a908b 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -2296,6 +2296,10 @@ def test_r104(self): self.assertEqual(cont.telefonos[1][0], u'34') self.assertEqual(len(varr1.lecturas_aportadas), 2) lect1 = varr1.lecturas_aportadas[0] + disconformidad_autoconsumo = varr1.disconformidad_autoconsumo + self.assertEqual(len(disconformidad_autoconsumo), 2) + self.assertEqual(disconformidad_autoconsumo[0], u'01') + self.assertEqual(disconformidad_autoconsumo[1], u'03') self.assertEqual(lect1.codigo_periodo_dh, u'21') self.assertEqual(lect1.integrador, u'AE') self.assertEqual(lect1.lectura_propuesta, u'0000001162.00') @@ -3883,7 +3887,7 @@ def test_p002_accept(self): self.assertEqual(p0.expediente_acometida.expediente_abierto, 'S') self.assertEqual(p0.equipo[0].relacion_transformacion_intensidad, '10/100') self.assertEqual(p0.doc_tecnica.cie_disponible, 'S') - self.assertEqual(p0.doc_tecnica.datos_cie.potencia_ins_bt, '2000') + self.assertEqual(p0.doc_tecnica.datos_cie.potencia_inst_bt, '2000') self.assertEqual(len(p0.puntos_de_medida), 1) self.assertEqual(p0.puntos_de_medida[0].direccion_enlace, '39522') self.assertEqual(p0.puntos_de_medida[0].telefono_telemedida, '987654321') diff --git a/tests/test_output.py b/tests/test_output.py index 1c4972d1..2477e51d 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -3002,7 +3002,7 @@ def test_create_pas01(self): cabecera.feed(cabecera_fields) # DatosSuministro - datos_suministro = d1.DatosSuministro() + datos_suministro = c1.DatosSuministro() datos_suministro_fields = { 'tipo_cups': '01', 'ref_catastro': '1234567890qwertyuiop', @@ -3010,7 +3010,7 @@ def test_create_pas01(self): datos_suministro.feed(datos_suministro_fields) # UTM - utm = d1.UTM() + utm = c1.UTM() utm_fields = { 'x': '100', 'y': '200', @@ -3020,7 +3020,7 @@ def test_create_pas01(self): utm.feed(utm_fields) # IdTitular - id_titular = d1.IdTitular() + id_titular = c1.IdTitular() id_titular_fields = { 'tipo_identificador': 'NI', 'identificador': '111111111H', @@ -3028,7 +3028,7 @@ def test_create_pas01(self): id_titular.feed(id_titular_fields) # Nombre - nombre = d1.Nombre() + nombre = c1.Nombre() nombre_fields = { 'nombre_de_pila': 'Juan', 'primer_apellido': 'L贸pez', @@ -3037,7 +3037,7 @@ def test_create_pas01(self): nombre.feed(nombre_fields) # Telefono - telefono = d1.Telefono() + telefono = c1.Telefono() telefono_fields = { 'prefijo_pais': '0034', 'numero': '933834841', @@ -3045,7 +3045,7 @@ def test_create_pas01(self): telefono.feed(telefono_fields) # Telefono 2 - telefono2 = d1.Telefono() + telefono2 = c1.Telefono() telefono2_fields = { 'prefijo_pais': '0034', 'numero': '633834841', @@ -3053,7 +3053,7 @@ def test_create_pas01(self): telefono2.feed(telefono2_fields) # Telefono 3 - telefono3 = d1.Telefono() + telefono3 = c1.Telefono() telefono3_fields = { 'prefijo_pais': '0034', 'numero': '683834841', @@ -3061,7 +3061,7 @@ def test_create_pas01(self): telefono3.feed(telefono3_fields) # TitularRepresentanteGen - titular = d1.TitularRepresentanteGen() + titular = c1.TitularRepresentanteGen() titular_representante_gen_fields = { 'id_titular': id_titular, 'nombre': nombre, @@ -3071,7 +3071,7 @@ def test_create_pas01(self): titular.feed(titular_representante_gen_fields) # DatosInstGen - datos_1 = d1.DatosInstGen() + datos_1 = c1.DatosInstGen() datos_inst_gen_fields = { 'cil': 'ES1234000000000001JN0F001', 'tec_generador': 'b12', @@ -3090,7 +3090,7 @@ def test_create_pas01(self): utm2 = copy.deepcopy(utm) titular2 = copy.deepcopy(titular) - datos_2 = d1.DatosInstGen() + datos_2 = c1.DatosInstGen() datos_inst_gen_fields = { 'cil': 'ES1234000000000001JN0F002', 'tec_generador': 'b11', @@ -3106,7 +3106,7 @@ def test_create_pas01(self): datos_2.feed(datos_inst_gen_fields) # DatosCAU - datos_cau = d1.DatosCAU() + datos_cau = c1.DatosCAU() datos_cau_fields = { 'cau': 'ES1234000000000001JN0FA001', 'tipo_autoconsumo': '11', @@ -3117,7 +3117,7 @@ def test_create_pas01(self): datos_cau.feed(datos_cau_fields) # Autoconsumo - autoconsumo = d1.Autoconsumo() + autoconsumo = c1.Autoconsumo() autoconsumo_fields = { 'datos_suministro': datos_suministro, 'datos_cau': datos_cau, @@ -3574,7 +3574,7 @@ def test_create_pas02_accept(self): # DatosCie datos_cie = p0.DatosCie() datos_cie_fields = { - 'potencia_ins_bt': "2000", + 'potencia_inst_bt': "2000", 'cie_papel': cie_papel, 'validez_cie': 'AU' } @@ -6234,6 +6234,12 @@ def test_create_pas04(self): } ubicacion_incidencia.feed(ubicacion_incidencia_fields) + disconformidad_autoconsumo = r1.DisconformidadAutoconsumo() + disconformidad_autoconsumo.feed({ + 'tipo_disconformidad_1': '01', + 'tipo_disconformidad_2': '03' + }) + vair_fields = { 'num_expediente_acometida': '11111', 'num_expediente_fraude': '22222', @@ -6243,6 +6249,7 @@ def test_create_pas04(self): 'fecha_lectura': '2016-01-20', 'tipo_dhedm': '1', 'lecturas_aportadas': lecturas_aportadas, + 'disconformidad_autoconsumo': disconformidad_autoconsumo, 'codigo_incidencia': '01', 'codigo_solicitud': '33333', 'parametro_contratacion': '01', From 75802fd857e6eb121d88f634081b464c16174013 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 2 Dec 2024 12:38:04 +0100 Subject: [PATCH 11/19] new treure pudb --- gestionatr/input/messages/message.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gestionatr/input/messages/message.py b/gestionatr/input/messages/message.py index 409ff182..643384a1 100644 --- a/gestionatr/input/messages/message.py +++ b/gestionatr/input/messages/message.py @@ -322,7 +322,6 @@ def parse_xml(self, validate=True): try: self.obj = objectify.fromstring(self.str_xml, parser) except Exception as e: - import pudb;pu.db self.error = e if validate: raise except_f1('Error', u'Documento inv谩lido: {0}'.format(e)) From 8a57e18974c2cf31d62659e53e2438335bdd72a5 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 5 Dec 2024 10:37:25 +0100 Subject: [PATCH 12/19] new input de E1,E2, F1, Q1, output f1,q1 --- gestionatr/defs.py | 2 +- gestionatr/input/messages/E1.py | 10 ++ gestionatr/input/messages/E2.py | 152 +++++++++++++++++++++ gestionatr/input/messages/F1.py | 94 ++++++++----- gestionatr/input/messages/Q1.py | 182 +++++++++++++++++++++++++- gestionatr/input/messages/__init__.py | 1 + gestionatr/input/messages/message.py | 15 +++ gestionatr/output/messages/sw_f1.py | 44 +++++-- gestionatr/output/messages/sw_q1.py | 44 ++++++- 9 files changed, 487 insertions(+), 57 deletions(-) create mode 100644 gestionatr/input/messages/E2.py diff --git a/gestionatr/defs.py b/gestionatr/defs.py index 2688a62a..55c10dfd 100644 --- a/gestionatr/defs.py +++ b/gestionatr/defs.py @@ -913,7 +913,6 @@ ('036', 'EGA'), ('037', 'EGUREN'), ('038', 'ELIOP'), - ('134', 'ENEL'), ('039', 'ERICSON'), ('040', 'FECHA'), ('041', 'FIERRO'), @@ -2402,6 +2401,7 @@ # es posa NEW perque no es un canvi que afecti a tot el ERP ja que REE encara utilitza els formats antics. Quan REE # utilitzi la versio tambe s'adaptara la TABLA_113 amb les dades de TABLA_113_NEW TABLA_113_NEW = [ + ('00', u'Sin Autoconsumo'), ('11', u'Sin excedentes'), ('12', u'Con excedentes'), ('0C', u'Baja como miembro de autoconsumo colectivo'), diff --git a/gestionatr/input/messages/E1.py b/gestionatr/input/messages/E1.py index 8afd7fb0..a5fb63fc 100644 --- a/gestionatr/input/messages/E1.py +++ b/gestionatr/input/messages/E1.py @@ -103,6 +103,16 @@ def contestacion_incidencia(self): else: return False + @property + def contactos(self): + data = [] + try: + for contacto in get_rec_attr(self.obj, 'ContestacionIncidencia.Contacto', []): + data.append(Contacto(contacto)) + except AttributeError: + pass + return data + class IDCliente(object): diff --git a/gestionatr/input/messages/E2.py b/gestionatr/input/messages/E2.py new file mode 100644 index 00000000..c600e4e9 --- /dev/null +++ b/gestionatr/input/messages/E2.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, unicode_literals +from .E1 import E1, DatosActivacion, DatosNotificacion +from .C2 import Direccion +from .C1 import RegistroDoc +from gestionatr.utils import get_rec_attr + + +class E2(E1): + """Classe que implementa E2.""" + + # Datos paso 01 + + @property + def tipo_de_reposicion(self): + tree = '{0}.TipoDeReposicion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data: + return data.text + else: + return False + + + @property + def datos_notificacion(self): + tree = '{0}.DatosNotificacion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return DatosNotificacion(data) + else: + return False + + @property + def datos_activacion(self): + tree = '{0}.DatosActivacion'.format(self._header) + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return DatosActivacion(data) + else: + return False + + # Dades de E214 + @property + def solicitud_reposicion(self): + tree = 'SolicitudReposicion' + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return SolicitudReposicion(data) + else: + return False + + @property + def direccion_ps(self): + tree = 'DireccionPS' + data = get_rec_attr(self.obj, tree, False) + if data not in [None, False]: + return Direccion(data) + else: + return False + + @property + def registros_documento(self): + data = [] + obj = get_rec_attr(self.obj, self._header, False) + if (hasattr(obj, 'RegistrosDocumento') and + hasattr(obj.RegistrosDocumento, 'RegistroDoc')): + for d in obj.RegistrosDocumento.RegistroDoc: + data.append(RegistroDoc(d)) + return data + + +class DatosNotificacion(DatosNotificacion): + + @property + def codigo_sol_corte(self): + data = '' + try: + data = self.datos_notificacion.CodigoSolCorte.text + except AttributeError: + pass + return data + + @property + def ind_esencial(self): + data = '' + try: + data = self.datos_notificacion.IndEsencial.text + except AttributeError: + pass + return data + + @property + def fecha_ultimo_movimiento_ind_esencial(self): + data = False + try: + data = self.datos_notificacion.FechaUltimoMovimientoIndEsencial.text + except AttributeError: + pass + return data + + +class DatosActivacion(DatosActivacion): + @property + def resultado_activacion(self): + data = False + try: + data = self.datos_activacion.ResultadoActivacion.text + except AttributeError: + pass + return data + + +class SolicitudReposicion(object): + + def __init__(self, data): + self.solicitud_reposicion = data + + @property + def codigo_de_solicitud_ref(self): + data = False + try: + data = self.solicitud_reposicion.CodigoDeSolicitudRef.text + except AttributeError: + pass + return data + + @property + def tipo_de_reposicion(self): + data = False + try: + data = self.solicitud_reposicion.TipoDeReposicion.text + except AttributeError: + pass + return data + + @property + def fecha_prevista_accion(self): + data = False + try: + data = self.solicitud_reposicion.FechaPrevistaAccion.text + except AttributeError: + pass + return data + + @property + def actuacion_campo(self): + data = False + try: + data = self.solicitud_reposicion.ActuacionCampo.text + except AttributeError: + pass + return data \ No newline at end of file diff --git a/gestionatr/input/messages/F1.py b/gestionatr/input/messages/F1.py index a9898724..ceaa9da8 100644 --- a/gestionatr/input/messages/F1.py +++ b/gestionatr/input/messages/F1.py @@ -323,9 +323,14 @@ def tipo_autoconsumo(self): return self._datos_factura_atr.TipoAutoconsumo.text.strip() @property - def cau(self): - if hasattr(self._datos_factura_atr, 'CAU'): - return self._datos_factura_atr.CAU.text.strip() + def tipo_subseccion(self): + if hasattr(self._datos_factura_atr, 'TipoSubseccion'): + return self._datos_factura_atr.TipoSubseccion.text.strip() + + @property + def tipo_cups(self): + if hasattr(self._datos_factura_atr, 'TipoCUPS'): + return self._datos_factura_atr.TipoCUPS.text.strip() @property def duracion_inf_anio(self): @@ -932,18 +937,6 @@ def valor_energia_neta_gen(self): return float(self.periodo.ValorEnergiaNetaGen.text.strip()) return None - @property - def beta(self): - if hasattr(self.periodo, 'Beta'): - return float(self.periodo.Beta.text.strip()) - return None - - @property - def relacion_generacion(self): - if hasattr(self.periodo, 'RelacionGeneracion'): - return float(self.periodo.RelacionGeneracion.text.strip()) - return None - class PeriodoEnergiaAutoconsumida(Periodo): @@ -1037,6 +1030,12 @@ class InstalacionGenAutoconsumo(object): def __init__(self, data): self.instalacion_gen_autoconsumo = data + @property + def cil(self): + if hasattr(self.instalacion_gen_autoconsumo, 'CIL'): + return self.instalacion_gen_autoconsumo.CIL.text.strip() + return None + @property def tipo_instalacion(self): if hasattr(self.instalacion_gen_autoconsumo, 'TipoInstalacion'): @@ -1055,12 +1054,6 @@ def energia_neta_gen(self): return EnergiaNetaGen(self.instalacion_gen_autoconsumo.EnergiaNetaGen) return None - @property - def energia_autoconsumida(self): - if hasattr(self.instalacion_gen_autoconsumo, 'EnergiaAutoconsumida'): - return EnergiaAutoconsumida(self.instalacion_gen_autoconsumo.EnergiaAutoconsumida) - return None - class EnergiaReactiva(object): @@ -1115,12 +1108,6 @@ def terminos_energia_neta_gen(self): data.append(TerminoEnergiaNetaGen(d)) return data - @property - def importe_total(self): - if hasattr(self.energia_neta_gen, 'TotalEnergiaNetaGenBeta'): - return float(self.energia_neta_gen.TotalEnergiaNetaGenBeta.text.strip()) - return None - class EnergiaAutoconsumida(object): @@ -1194,12 +1181,16 @@ def __init__(self, data): self.autoconsumo = data @property - def instalacion_gen_autoconsumo(self): - data = [] - if hasattr(self.autoconsumo, 'InstalacionGenAutoconsumo'): - for d in self.autoconsumo.InstalacionGenAutoconsumo: - data.append(InstalacionGenAutoconsumo(d)) - return data + def energia_neta_gen(self): + if hasattr(self.autoconsumo, 'EnergiaNetaGen'): + return EnergiaNetaGen(self.autoconsumo.EnergiaNetaGen) + return None + + @property + def energia_autoconsumida(self): + if hasattr(self.autoconsumo, 'EnergiaAutoconsumida'): + return EnergiaAutoconsumida(self.autoconsumo.EnergiaAutoconsumida) + return None @property def energia_excedentaria(self): @@ -1207,6 +1198,41 @@ def energia_excedentaria(self): return EnergiaExcedentaria(self.autoconsumo.EnergiaExcedentaria) return None + @property + def datos_cau(self): + if hasattr(self.autoconsumo, 'DatosCAU'): + return DatosCAU(self.autoconsumo.DatosCAU) + return None + + +class DatosCAU(object): + + def __init__(self, data): + self.datos_cau = data + + @property + def cau(self): + if hasattr(self.datos_cau, 'CAU'): + return self.datos_cau.CAU.text.strip() + + @property + def colectivo(self): + if hasattr(self.datos_cau, 'Colectivo'): + return self.datos_cau.Colectivo.text.strip() + + @property + def esquema_medida(self): + if hasattr(self.datos_cau, 'EsquemaMedida'): + return self.datos_cau.EsquemaMedida.text.strip() + + @property + def instalacion_gen_autoconsumo(self): + data = [] + if hasattr(self.datos_cau, 'InstalacionGenAutoconsumo'): + for d in self.datos_cau.InstalacionGenAutoconsumo: + data.append(InstalacionGenAutoconsumo(d)) + return data + class Cargos(object): @@ -1787,7 +1813,7 @@ class InformacionAlConsumidor(object): PERIODO_TYPE = PeriodoMaximetroConsumidor - def __init__(self, data): + def __init__(self, data): self.informacion_al_consumidor = data @property diff --git a/gestionatr/input/messages/Q1.py b/gestionatr/input/messages/Q1.py index fcd87eb4..d5c7df79 100644 --- a/gestionatr/input/messages/Q1.py +++ b/gestionatr/input/messages/Q1.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals -from .message import Message +from .message import Message, except_f1 from datetime import datetime from gestionatr.utils import get_rec_attr from .Deadlines import ProcessDeadline +from .F1 import EnergiaActiva, Autoconsumo, InformacionAlConsumidor, Expediente MAGNITUDS_OCSUM = { 'AE': 'A', @@ -58,13 +59,56 @@ class Q1(Message, ProcessDeadline): """Clase que implementa Q1.""" @property - def cod_pm(self): - tree = '{0}.CodPM'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data: - return data.text - else: + def get_cabecera_codigo_fiscal_factura(self): + val = self.head.CodigoFiscalFactura.text + if not val: + raise except_f1('Error', u'Q1 sin CodigoFiscalFactura') + return val + + @property + def get_cabecera_tipo_factura(self): + val = self.head.TipoFactura.text + if not val: + raise except_f1('Error', u'Q1 sin TipoFactura') + return val + + @property + def get_cabecera_motivo_facturacion(self): + val = self.head.MotivoFacturacion.text + if not val: + raise except_f1('Error', u'Q1 sin MotivoFacturacion') + return val + + @property + def get_cabecera_codigo_factura_rectificada_anulada(self): + val = self.head.CodigoFacturaRectificadaAnulada.text + if not val: return False + return val + + @property + def get_cabecera_expediente(self): + if hasattr(self.head, 'Expediente'): + return Expediente(self.head.Expediente) + return None + + @property + def datos(self): + if hasattr(self.obj, 'Datos'): + return Datos(self.obj.Datos) + return None + + @property + def energia_activa(self): + if hasattr(self.obj, 'EnergiaActiva'): + return EnergiaActiva(self.obj.EnergiaActiva) + return None + + @property + def autoconsumo(self): + if hasattr(self.obj, 'Autoconsumo'): + return Autoconsumo(self.obj.Autoconsumo) + return None @property def medidas(self): @@ -92,6 +136,130 @@ def comptadors(self): contadores.append((fd, fh, aparato)) return [a[2] for a in sorted(contadores, key=lambda x: x[0])] + @property + def informacion_al_consumidor(self): + if hasattr(self.obj, 'InformacionAlConsumidor'): + return InformacionAlConsumidor(self.obj.InformacionAlConsumidor) + return None + + +class Datos(object): + + def __init__(self, data): + self.datos = data + + @property + def tipo_autoconsumo(self): + data = '' + try: + data = self.datos.TipoAutoconsumo.text + except AttributeError: + pass + return data + + @property + def tipo_subseccion(self): + data = '' + try: + data = self.datos.TipoSubseccion.text + except AttributeError: + pass + return data + + @property + def tipo_cups(self): + data = '' + try: + data = self.datos.TipoCUPS.text + except AttributeError: + pass + return data + + @property + def marca_medida_con_perdidas(self): + data = '' + try: + data = self.datos.MarcaMedidaConPerdidas.text + except AttributeError: + pass + return data + + @property + def vas_trafo(self): + data = '' + try: + data = self.datos.VAsTrafo.text + except AttributeError: + pass + return data + + @property + def porcentaje_perdidas(self): + data = '' + try: + data = self.datos.PorcentajePerdidas.text + except AttributeError: + pass + return data + + @property + def indicativo_curva_carga(self): + data = '' + try: + data = self.datos.IndicativoCurvaCarga.text + except AttributeError: + pass + return data + + @property + def _periodo_cch(self): + if hasattr(self.datos, 'PeriodoCCH'): + return self.datos.PeriodoCCH + return None + + @property + def fecha_desde_cch(self): + if hasattr(self._periodo_cch, 'FechaDesdeCCH'): + return self._periodo_cch.FechaDesdeCCH.text.strip() + return None + + @property + def fecha_hasta_cch(self): + if hasattr(self._periodo_cch, 'FechaHastaCCH'): + return self._periodo_cch.FechaHastaCCH.text.strip() + return None + + @property + def _periodo(self): + if hasattr(self.datos, 'Periodo'): + return self.datos.Periodo + return None + + @property + def fecha_desde_factura(self): + if hasattr(self._periodo, 'FechaDesdeFactura'): + return self._periodo.FechaDesdeFactura.text.strip() + return None + + @property + def fecha_hasta_factura(self): + if hasattr(self._periodo, 'FechaHastaFactura'): + return self._periodo.FechaHastaFactura.text.strip() + return None + + @property + def numero_dias(self): + if hasattr(self._periodo, 'NumeroDias'): + return int(self._periodo.NumeroDias.text.strip()) + return None + + @property + def tipo_pm(self): + if hasattr(self.datos, 'TipoPM'): + return int(self.datos.TipoPM.text.strip()) + return None + + class Medida(object): def __init__(self, data): self.datos_medida = data diff --git a/gestionatr/input/messages/__init__.py b/gestionatr/input/messages/__init__.py index c691ba1d..d087d845 100644 --- a/gestionatr/input/messages/__init__.py +++ b/gestionatr/input/messages/__init__.py @@ -11,6 +11,7 @@ from .M2 import M2 from .D1 import D1 from .E1 import E1 +from .E2 import E2 from .W1 import W1 from .P0 import P0 from .Q1 import Q1 diff --git a/gestionatr/input/messages/message.py b/gestionatr/input/messages/message.py index 643384a1..75b15271 100644 --- a/gestionatr/input/messages/message.py +++ b/gestionatr/input/messages/message.py @@ -76,6 +76,21 @@ '12': 'RechazoDesistimiento.xsd', '13': 'ContestacionIncidencia.xsd' }, + 'E2': {'01': 'SolicitudReposicion.xsd', + '02': ('AceptacionReposicion.xsd', 'Rechazo.xsd'), + '03': 'IncidenciasATRDistribuidor.xsd', + '04': 'Rechazo.xsd', + '05': 'ActivacionReposicion.xsd', + '06': 'NotificacionActivacionPorReposicion.xsd', + '08': 'AnulacionSolicitud.xsd', + '09': ('AceptacionAnulacion.xsd', + 'Rechazo.xsd'), + '10': 'AceptacionAnulacion.xsd', + '12': 'RechazoReposicion.xsd', + '13': 'ContestacionIncidencia.xsd', + '14': 'ConsultaSolicitudReposicion.xsd', + '15': ('AceptacionReposicionReceptor.xsd', 'RechazoReposicionReceptor.xsd') + }, 'M1': {'01': 'ModificacionDeATR.xsd', '02': ('AceptacionModificacionDeATR.xsd', 'Rechazo.xsd'), diff --git a/gestionatr/output/messages/sw_f1.py b/gestionatr/output/messages/sw_f1.py index 42171b37..c3af704e 100644 --- a/gestionatr/output/messages/sw_f1.py +++ b/gestionatr/output/messages/sw_f1.py @@ -135,7 +135,7 @@ def __init__(self): class DatosFacturaATR(XmlModel): _sort_order = ( - 'datos_factura_atr', 'fecha_boe', 'tipo_autoconsumo', 'cau', + 'datos_factura_atr', 'fecha_boe', 'tipo_autoconsumo', 'tipo_subseccion', 'tipo_cups', 'cau', 'duracion_inf_anio', 'tarifa_atr_fact', 'modo_control_potencia', 'marca_medida_con_perdidas', 'vas_trafo', 'porcentaje_perdidas', 'indicativo_curva_carga', 'periodo_cch', 'periodo', 'tipo_pm' @@ -145,6 +145,8 @@ def __init__(self): self.datos_factura_atr = XmlField('DatosFacturaATR') self.fecha_boe = XmlField('FechaBOE', rep=rep_fecha_sin_hora) self.tipo_autoconsumo = XmlField('TipoAutoconsumo') + self.tipo_subseccion = XmlField('TipoSubseccion') + self.tipo_cups = XmlField('TipoCUPS') self.cau = XmlField('CAU') self.duracion_inf_anio = XmlField('DuracionInfAnio') self.tarifa_atr_fact = XmlField('TarifaATRFact') @@ -358,16 +360,13 @@ def __init__(self): class EnergiaNetaGen(XmlModel): _sort_order = ( - 'energia_neta_gen', 'termino_energia_neta_gen', - 'total_energia_neta_gen' + 'energia_neta_gen', 'termino_energia_neta_gen' ) def __init__(self): self.energia_neta_gen = XmlField('EnergiaNetaGen') self.termino_energia_neta_gen = TerminoEnergiaNetaGen() - self.total_energia_neta_gen = XmlField( - 'TotalEnergiaNetaGenBeta', rep=rep_decimal(2) - ) + super(EnergiaNetaGen, self).__init__( 'EnergiaNetaGen', 'energia_neta_gen' ) @@ -555,15 +554,13 @@ def __init__(self): class PeriodoEnergiaNetaGen(XmlModel): - _sort_order = ('periodo', 'valor_energia_neta_gen', 'beta', 'relacion_generacion') + _sort_order = ('periodo', 'valor_energia_neta_gen') def __init__(self): self.periodo = XmlField('Periodo') self.valor_energia_neta_gen = XmlField( 'ValorEnergiaNetaGen', rep=rep_decimal(2) ) - self.beta = XmlField('Beta') - self.relacion_generacion = XmlField('RelacionGeneracion') super(PeriodoEnergiaNetaGen, self).__init__('Periodo', 'periodo') @@ -606,16 +603,16 @@ def __init__(self): class InstalacionGenAutoconsumo(XmlModel): _sort_order = ( - 'instalacion_gen_autoconsumo', 'tipo_instalacion', 'exento_cargos', - 'energia_neta_gen', 'energia_autoconsumida' + 'instalacion_gen_autoconsumo', 'cil', 'tipo_instalacion', 'exento_cargos', + 'energia_neta_gen', ) def __init__(self): self.instalacion_gen_autoconsumo = XmlField('InstalacionGenAutoconsumo') + self.cil = XmlField('CIL') self.tipo_instalacion = XmlField('TipoInstalacion') self.exento_cargos = XmlField('ExentoCargos') self.energia_neta_gen = EnergiaNetaGen() - self.energia_autoconsumida = EnergiaAutoconsumida() super(InstalacionGenAutoconsumo, self).__init__( 'InstalacionGenAutoconsumo', 'instalacion_gen_autoconsumo' ) @@ -624,18 +621,37 @@ def __init__(self): class Autoconsumo(XmlModel): _sort_order = ( - 'autoconsumo', 'instalacion_gen_autoconsumo', 'energia_excedentaria' + 'autoconsumo', 'energia_neta_gen', 'energia_autoconsumida', 'energia_excedentaria', 'datos_cau_list' ) def __init__(self): self.autoconsumo = XmlField('Autoconsumo') - self.instalacion_gen_autoconsumo = InstalacionGenAutoconsumo() + self.energia_neta_gen = EnergiaNetaGen() + self.energia_autoconsumida = EnergiaAutoconsumida() self.energia_excedentaria = EnergiaExcedentaria() + self.datos_cau_list = [] super(Autoconsumo, self).__init__( 'Autoconsumo', 'autoconsumo' ) +class DatosCAU(XmlModel): + + _sort_order = ( + 'datos_cau', 'cau', 'colectivo', 'esquema_medida', 'instalacion_gen_autoconsumo_list' + ) + + def __init__(self): + self.datos_cau = XmlField('DatosCAU') + self.cau = XmlField('CAU') + self.colectivo = XmlField('Colectivo') + self.esquema_medida = XmlField('EsquemaMedida') + self.instalacion_gen_autoconsumo_list = [] + super(DatosCAU, self).__init__( + 'DatosCAU', 'datos_cau' + ) + + class Cargos(XmlModel): _sort_order = ( diff --git a/gestionatr/output/messages/sw_q1.py b/gestionatr/output/messages/sw_q1.py index 6acd6a01..5306dee3 100644 --- a/gestionatr/output/messages/sw_q1.py +++ b/gestionatr/output/messages/sw_q1.py @@ -2,20 +2,62 @@ from __future__ import absolute_import, unicode_literals from libcomxml.core import XmlModel, XmlField from gestionatr.output.messages.base import Cabecera +from gestionatr.output.messages.sw_f1 import PeriodoCCH, Periodo, EnergiaActiva, Expediente, InformacionAlConsumidor, Autoconsumo class MensajeSaldoLecturasFacturacion(XmlModel): - _sort_order = ('mensaje', 'cabecera', 'medidas') + _sort_order = ('mensaje', 'cabecera', 'datos', 'energia_activa', 'autoconsumo', 'medidas', 'informacion_consumidor') def __init__(self): self.mensaje = XmlField('MensajeSaldoLecturasFacturacion', attributes={'xmlns': 'http://localhost/elegibilidad'}) self.cabecera = Cabecera() + self.datos = Datos() + self.energia_activa = EnergiaActiva() + self.autoconsumo = Autoconsumo() self.medidas = Medidas() + self.informacion_consumidor = InformacionAlConsumidor() super(MensajeSaldoLecturasFacturacion, self).__init__('MensajeSaldoLecturasFacturacion', 'mensaje') +class Cabecera(Cabecera): + + _sort_order = ('cabecera', 'codigo_ree_empresa_emisora', 'codigo_ree_empresa_destino', 'codigo_del_proceso', + 'codigo_del_paso', 'codigo_de_solicitud', 'secuencial_de_solicitud', 'fecha', 'cups', + 'codigo_fiscal_factura', 'tipo_factura', 'motivo_facturacion', 'codigo_factura_rectificada_anulada', + 'expediente') + + def __init__(self): + super(Cabecera, self).__init__() + self.codigo_fiscal_factura = XmlField('CodigoFiscalFactura') + self.tipo_factura = XmlField('TipoFactura') + self.motivo_facturacion = XmlField('MotivoFacturacion') + self.codigo_factura_rectificada_anulada = XmlField('CodigoFacturaRectificadaAnulada') + self.expediente = Expediente() + + +class Datos(XmlModel): + + _sort_order = ('datos', 'tipo_autoconsumo', 'tipo_subseccion', 'datos_cau', 'tipo_cups', + 'marca_medida_con_perdidas', 'vas_trafo', 'porcentaje_perdidas', 'indicativo_curva_carga', + 'periodo_cch', 'periodo', 'tipo_pm') + + def __init__(self): + self.datos = XmlField('Datos') + self.tipo_autoconsumo = XmlField('TipoAutoconsumo') + self.tipo_subseccion = XmlField('TipoSubseccion') + self.tipo_cups = XmlField('TipoCUPS') + self.marca_medida_con_perdidas = XmlField('MarcaMedidaConPerdidas') + self.vas_trafo = XmlField('VAsTrafo') + self.porcentaje_perdidas = XmlField('PorcentajePerdidas') + self.indicativo_curva_carga = XmlField('IndicativoCurvaCarga') + self.periodo_cch = PeriodoCCH() + self.periodo = Periodo() + self.tipo_pm = XmlField('TipoPM') + super(Datos, self).__init__('Datos', 'datos') + + class Medidas(XmlModel): _sort_order = ('medidas', 'cod_pm', 'modelo_aparato_list') From 6a940b5d56a7e807a3dfa7d6fa91b6a7178f306f Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 5 Dec 2024 10:43:05 +0100 Subject: [PATCH 13/19] new test input de E1,E2, F1, Q1, output f1,q1 --- tests/data/e201.xml | 4 +- tests/data/e202_accept.xml | 4 +- tests/data/e205.xml | 138 +++---- tests/data/e206.xml | 19 +- tests/data/e209_accept.xml | 4 +- tests/data/e212.xml | 8 +- tests/data/e213.xml | 8 + tests/data/e214.xml | 56 +-- .../data/f101_factura_atr_autoconsum_20td.xml | 7 +- .../f101_factura_atr_autoconsumo_output.xml | 220 ++++++++++ tests/data/q101.xml | 12 +- tests/test_input.py | 385 +++++++++++++++++- tests/test_output.py | 346 +++++++++++++++- tests/utils.py | 6 +- 14 files changed, 1085 insertions(+), 132 deletions(-) create mode 100644 tests/data/f101_factura_atr_autoconsumo_output.xml diff --git a/tests/data/e201.xml b/tests/data/e201.xml index 8ca4149e..10750613 100644 --- a/tests/data/e201.xml +++ b/tests/data/e201.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -29,4 +29,4 @@ - + diff --git a/tests/data/e202_accept.xml b/tests/data/e202_accept.xml index 630ecb91..062d29ae 100644 --- a/tests/data/e202_accept.xml +++ b/tests/data/e202_accept.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -15,4 +15,4 @@ S 2020-05-06 - + diff --git a/tests/data/e205.xml b/tests/data/e205.xml index 860598ee..63218fd5 100644 --- a/tests/data/e205.xml +++ b/tests/data/e205.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -91,72 +91,73 @@ 50 05 - - - ES1234000000000001JN0F - A - 03 - ES1234000000000002JN0F - 1 - P - 39522 - 000000001 - 12 - 987654321 - 1 - 0000000007 - 0 - 2003-01-01 - 2003-01-01 - 2003-02-01 - - - - CG - 132 - 011 - - CX - L03 - 1 - Desc. Propietario - 6 - 9 - N - 02 - - 2005 - 0000539522 - M - 18 - 1.000 - 1.000 - 08 - 02 - - - - 6 - 65 - PM - 30 - 0.00 - 2003-01-02 - 01 - Comentario sobre anomalia - - - 6 - 66 - PM - 30 - 6.00 - 2003-01-03 - - - - - Comentario sobre Punto Medida + + + + ES1234000000000001JN0F + A + 03 + ES1234000000000002JN0F + 1 + P + 39522 + 000000001 + 12 + 987654321 + 1 + 0000000007 + 0 + 2003-01-01 + 2003-01-01 + 2003-02-01 + + + + CG + 132 + 011 + + CX + L03 + 1 + Desc. Propietario + 6 + 9 + N + 02 + + 2005 + 0000539522 + M + 18 + 1.000 + 1.000 + 08 + 02 + + + + 6 + 65 + PM + 30 + 0.00 + 2003-01-02 + 01 + Comentario sobre anomalia + + + 6 + 66 + PM + 30 + 6.00 + 2003-01-03 + + + + + Comentario sobre Punto Medida @@ -164,7 +165,6 @@ B36385870 J - 07 @@ -173,4 +173,4 @@ Comentarios Varios - \ No newline at end of file + \ No newline at end of file diff --git a/tests/data/e206.xml b/tests/data/e206.xml index 876227ef..82e8c37d 100644 --- a/tests/data/e206.xml +++ b/tests/data/e206.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -20,7 +20,8 @@ 00001 - + + ES1234000000000001JN0F A @@ -88,17 +89,5 @@ Comentarios Varios - - NI - B36385870 - J - - - - - 07 - https://www.google.com/ - - - \ No newline at end of file + \ No newline at end of file diff --git a/tests/data/e209_accept.xml b/tests/data/e209_accept.xml index 40dddf1b..33d67636 100644 --- a/tests/data/e209_accept.xml +++ b/tests/data/e209_accept.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -13,4 +13,4 @@ 2020-05-01 - + diff --git a/tests/data/e212.xml b/tests/data/e212.xml index a855a5b1..56c87207 100644 --- a/tests/data/e212.xml +++ b/tests/data/e212.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -10,7 +10,7 @@ 2016-07-21T12:59:47 ES1234000000000001JN0F - + 2020-05-01 - - + + diff --git a/tests/data/e213.xml b/tests/data/e213.xml index fc33aa61..42f359fb 100644 --- a/tests/data/e213.xml +++ b/tests/data/e213.xml @@ -20,5 +20,13 @@ mail_falso@dominio.com + + Nombre Inventado 2 + + 34 + 683834241 + + mail_falso2@dominio.com + diff --git a/tests/data/e214.xml b/tests/data/e214.xml index 9277ebdb..1266f810 100644 --- a/tests/data/e214.xml +++ b/tests/data/e214.xml @@ -1,5 +1,5 @@ - + 1234 4321 @@ -15,31 +15,31 @@ 01 2016-05-05 N - - Espa帽a - 17 - 17079 - 17079000501 - PZ - 17001 - MELA MUTERMILCH - 2 - n/a - 001 - 001 - 001 - BI - Bloque de Pisos - - - - 08 - http://eneracme.com/docs/NIF11111111H.pdf - - - 07 - http://eneracme.com/docs/NIF11111111H.pdf - - - + + Espa帽a + 17 + 17079 + 17079000501 + PZ + 17001 + MELA MUTERMILCH + 2 + n/a + 001 + 001 + 001 + BI + Bloque de Pisos + + + + 08 + http://eneracme.com/docs/NIF11111111H.pdf + + + 07 + http://eneracme.com/docs/NIF11111111H.pdf + + + diff --git a/tests/data/f101_factura_atr_autoconsum_20td.xml b/tests/data/f101_factura_atr_autoconsum_20td.xml index 6f535cd9..f955071e 100644 --- a/tests/data/f101_factura_atr_autoconsum_20td.xml +++ b/tests/data/f101_factura_atr_autoconsum_20td.xml @@ -43,8 +43,7 @@ 2021-12-16 - 53 - ES0304000016006825GV0FA000 + 12 10 01 N @@ -175,8 +174,8 @@ S - 2016-04-04 - 2016-05-05 + 2021-12-31 + 2022-01-31 1.00 diff --git a/tests/data/f101_factura_atr_autoconsumo_output.xml b/tests/data/f101_factura_atr_autoconsumo_output.xml new file mode 100644 index 00000000..c03c5dc9 --- /dev/null +++ b/tests/data/f101_factura_atr_autoconsumo_output.xml @@ -0,0 +1,220 @@ + + + 1234 + 4321 + F1 + 01 + 201607211259 + 01 + 2016-07-21T12:59:47 + ES1234000000000001JN0F + + + + + + Espa帽a + 17 + 17079 + 17003 + Nom carrer + 3 + 1 + 1 + 1 + + + NI + 70876712G + F + + 111111 + + F0001 + N + 01 + 2017-05-01 + B11254455 + . + 100 + 100 + 02 + + + 2016-01-01 + 12 + 10 + 01 + N + 001 + 1 + N + 02 + + 2017-03-31 + 2017-04-30 + 30 + + 01 + + + + + 2017-03-31 + 2017-04-30 + + 1000 + 1000 + 1000 + 0.050000000 + 0.00 + + + N + 50.00 + + + + 2017-03-31 + 2017-04-30 + + 300.00 + 0.044027000 + + + 13.21 + + + + + 2021-12-31 + 2022-01-31 + + 1.00 + + + 2.00 + + + 3.00 + + + + + + 2021-12-31 + 2022-01-31 + + 11.00 + 0 + + + 12.00 + 0 + + + 13.00 + 0 + + + 33.00 + + + + 2021-12-31 + 2022-01-31 + + 134.19 + + + 73.15 + + + 116.76 + + + 0.00 + + + ES1234000000000001JN0FA001 + S + B + + ES1234000000000001JN0F001 + 01 + S + + + 2021-12-31 + 2022-01-31 + + 1.00 + + + 2.00 + + + 3.00 + + + + + + + + 0.00 + 0.00000000 + 0.00 + + + 63.21 + 21.00 + 13.27 + + + ES1234000000000001JN0F + + CC + 199 + C99999 + 1 + + AE + 10 + 1.0 + 5 + 0 + 300.00 + + 2017-03-31 + 30 + 100.00 + + + 2017-04-30 + 30 + 400.00 + + + + + + 2017-03-31 + + 3000 + + 61083.25 + + + + 76.48 + 76.48 + 1 + 02 + 2017-05-01 + 2017-06-01 + ES7712341234161234567890 + 0 + + + diff --git a/tests/data/q101.xml b/tests/data/q101.xml index b75264de..adb14240 100644 --- a/tests/data/q101.xml +++ b/tests/data/q101.xml @@ -25,7 +25,7 @@ N 0 0 - 1 + 01 2016-04-04 2016-05-05 @@ -202,4 +202,14 @@ + + 2021-01-31 + + 3115 + + + 4045 + + 61083.25 + diff --git a/tests/test_input.py b/tests/test_input.py index 602a908b..ec18758a 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from gestionatr.input.messages import A1, A3, B1, B2, C1, C2, D1, E1, M1, M2, P0, Q1, R1, T1, W1, F1, Deadlines +from gestionatr.input.messages import A1, A3, B1, B2, C1, C2, D1, E1, E2, M1, M2, P0, Q1, R1, T1, W1, F1, Deadlines from gestionatr.input.messages import A1_41, A1_02, A1_05, A1_44, A1_03, A1_48, A1_04, A1_46, A1_38, A1_49, A1_42, A1_43 from gestionatr.input.messages import B7031, B7032, A12_24, A12_26, A19_45, A20_36, A13_50 from gestionatr.input.messages.F1 import agrupar_lectures_per_data, obtenir_data_inici_i_final @@ -1997,9 +1997,79 @@ def tearDown(self): def test_q101(self): q1 = Q1(self.xml_q101) q1.parse_xml() - self.assertEqual(q1.cod_pm, u'1112223334445556667779') + # cabecera + cabecera = q1.head + self.assertEqual(q1.get_cabecera_codigo_fiscal_factura, u'123456798') + self.assertEqual(q1.get_cabecera_tipo_factura, u'N') + self.assertEqual(q1.get_cabecera_motivo_facturacion, u'01') + self.assertEqual(q1.get_cabecera_codigo_factura_rectificada_anulada, u'33333') + self.assertEqual(q1.get_cabecera_expediente.numero_expediente, u'123123132') + self.assertEqual(q1.get_cabecera_expediente.codigo_solicitud, u'333222111') + # Datos + datos = q1.datos + self.assertEqual(datos.tipo_autoconsumo, u'11') + self.assertEqual(datos.tipo_subseccion, u'10') + self.assertEqual(datos.tipo_cups, u'01') + self.assertEqual(datos.marca_medida_con_perdidas, u'N') + self.assertEqual(datos.vas_trafo, u'0') + self.assertEqual(datos.porcentaje_perdidas, u'0') + self.assertEqual(datos.indicativo_curva_carga, u'01') + self.assertEqual(datos.fecha_desde_cch, u'2016-04-04') + self.assertEqual(datos.fecha_hasta_cch, u'2016-05-05') + self.assertEqual(datos.fecha_desde_factura, u'2016-04-04') + self.assertEqual(datos.fecha_hasta_factura, u'2016-05-05') + self.assertEqual(datos.numero_dias, 30) + self.assertEqual(datos.tipo_pm, 05) + # Energia Activa + energia_activa = q1.energia_activa + terminos_energia_activa = energia_activa.terminos_energia_activa + self.assertEqual(len(terminos_energia_activa), 1) + termino_energia_activa = terminos_energia_activa[0] + self.assertEqual(termino_energia_activa.fecha_desde, u'2016-04-04') + self.assertEqual(termino_energia_activa.fecha_hasta, u'2016-05-05') + periodos_energia = termino_energia_activa.periodos + self.assertEqual(len(periodos_energia), 3) + periodo_energia1 = periodos_energia[0] + self.assertEqual(periodo_energia1.valor_energia_activa, 100) + periodo_energia2 = periodos_energia[1] + self.assertEqual(periodo_energia2.valor_energia_activa, 200) + periodo_energia3 = periodos_energia[2] + self.assertEqual(periodo_energia3.valor_energia_activa, 300) + # autoconsumo + autoconsumo = q1.autoconsumo + # nomes validem les dates perque imprementen la mateixa classe + terminos_energia_neta_gen = autoconsumo.energia_neta_gen.terminos_energia_neta_gen + terminos_energia_autoconsumida = autoconsumo.energia_autoconsumida.terminos_energia_autoconsumida + self.assertEqual(len(terminos_energia_neta_gen), 1) + self.assertEqual(len(terminos_energia_autoconsumida), 1) + + termino_energia_neta_gen = terminos_energia_neta_gen[0] + self.assertEqual(termino_energia_neta_gen.fecha_desde, u'2016-04-04') + self.assertEqual(termino_energia_neta_gen.fecha_hasta, u'2016-05-05') + + termino_energia_autoconsumida = terminos_energia_autoconsumida[0] + self.assertEqual(termino_energia_autoconsumida.fecha_desde, u'2016-04-04') + self.assertEqual(termino_energia_autoconsumida.fecha_hasta, u'2016-05-05') + + # datos cau + datos_cau = autoconsumo.datos_cau + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.colectivo, u'S') + self.assertEqual(datos_cau.esquema_medida, u'B') + # instalacion gen + instalacion_gen_auto = datos_cau.instalacion_gen_autoconsumo[0] + self.assertEqual(instalacion_gen_auto.cil, u'ES1234000000000001JN0F001') + self.assertEqual(instalacion_gen_auto.tipo_instalacion, u'01') + # energia neta gen + terminos_energia_neta_gen_inst = instalacion_gen_auto.energia_neta_gen.terminos_energia_neta_gen + self.assertEqual(len(terminos_energia_neta_gen_inst), 1) + termino_energia_neta_gen_inst = terminos_energia_neta_gen_inst[0] + self.assertEqual(termino_energia_neta_gen_inst.fecha_desde, u'2016-04-04') + self.assertEqual(termino_energia_neta_gen_inst.fecha_hasta, u'2016-05-05') + medidas = q1.medidas self.assertEqual(len(medidas), 1) + self.assertEqual(q1.medidas[0].cod_pm, 1112223334445556667779) models = q1.medidas[0].aparatos self.assertEqual(len(models), 2) self.assertEqual(models[1].tipo_aparato, u'CG') @@ -2031,6 +2101,14 @@ def test_q101(self): anomalia = int2.anomalia self.assertEqual(anomalia.comentarios, u'Comentarios Anomalia') self.assertEqual(anomalia.tipo_anomalia, u'05') + # Informacion al consumidor + info_al_consumidor = q1.informacion_al_consumidor + self.assertEqual(len(info_al_consumidor.periodos), 2) + periodo_max_1 = info_al_consumidor.periodos[0] + self.assertEqual(periodo_max_1.potencia_max_demandada_anio_movil, 3115) + periodo_max_2 = info_al_consumidor.periodos[1] + self.assertEqual(periodo_max_2.potencia_max_demandada_anio_movil, 4045) + self.assertEqual(info_al_consumidor.valor_energia_media_cp, 61083.25) class test_R1(TestCaseCompat): @@ -2753,6 +2831,9 @@ def test_factura_atr_autoconsum_20TD(self): self.assertEqual(datos_factura.saldo_factura, 100) self.assertEqual(datos_factura.tipo_moneda, u'02') self.assertEqual(datos_factura.fecha_boe, u'2021-12-16') + self.assertEqual(datos_factura.tipo_autoconsumo, u'12') + self.assertEqual(datos_factura.tipo_subseccion, u'10') + self.assertEqual(datos_factura.tipo_cups, u'01') self.assertEqual(datos_factura.tarifa_atr_fact, u'018') self.assertEqual(datos_factura.modo_control_potencia, u'1') self.assertEqual(datos_factura.marca_medida_con_perdidas, u'N') @@ -2882,6 +2963,35 @@ def test_factura_atr_autoconsum_20TD(self): self.assertEqual(periodo_excedentaria_3.es_facturable(), True) self.assertEqual(periodo_excedentaria_3.fecha_desde, u'2021-12-31') self.assertEqual(periodo_excedentaria_3.fecha_hasta, u'2022-01-31') + # nomes validem les dates perque imprementen la mateixa classe + terminos_energia_neta_gen = autoconsumo.energia_neta_gen.terminos_energia_neta_gen + terminos_energia_autoconsumida = autoconsumo.energia_autoconsumida.terminos_energia_autoconsumida + self.assertEqual(len(terminos_energia_neta_gen), 1) + self.assertEqual(len(terminos_energia_autoconsumida), 1) + + termino_energia_neta_gen = terminos_energia_neta_gen[0] + self.assertEqual(termino_energia_neta_gen.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_neta_gen.fecha_hasta, u'2022-01-31') + + termino_energia_autoconsumida = terminos_energia_autoconsumida[0] + self.assertEqual(termino_energia_autoconsumida.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_autoconsumida.fecha_hasta, u'2022-01-31') + # datos cau + datos_cau = autoconsumo.datos_cau + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.colectivo, u'S') + self.assertEqual(datos_cau.esquema_medida, u'B') + # instalacion gen + instalacion_gen_auto = datos_cau.instalacion_gen_autoconsumo[0] + self.assertEqual(instalacion_gen_auto.cil, u'ES1234000000000001JN0F001') + self.assertEqual(instalacion_gen_auto.tipo_instalacion, u'01') + self.assertEqual(instalacion_gen_auto.exento_cargos, u'S') + # energia neta gen + terminos_energia_neta_gen_inst = instalacion_gen_auto.energia_neta_gen.terminos_energia_neta_gen + self.assertEqual(len(terminos_energia_neta_gen_inst), 1) + termino_energia_neta_gen_inst = terminos_energia_neta_gen_inst[0] + self.assertEqual(termino_energia_neta_gen_inst.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_neta_gen_inst.fecha_hasta, u'2022-01-31') cargos = fact.cargos.cargo self.assertEqual(len(cargos), 2) @@ -4195,6 +4305,277 @@ def test_e113(self): self.assertEqual(e1.contestacion_incidencia, u'02') +class test_E2(unittest.TestCase): + + def setUp(self): + self.xml_e201 = open(get_data("e201.xml"), "rb") + self.xml_e202_accept = open(get_data("e202_accept.xml"), "rb") + self.xml_e205 = open(get_data("e205.xml"), "rb") + self.xml_e206 = open(get_data("e206.xml"), "rb") + self.xml_e209_accept = open(get_data("e209_accept.xml"), "rb") + self.xml_e212 = open(get_data("e212.xml"), "rb") + self.xml_e213 = open(get_data("e213.xml"), "rb") + self.xml_e214 = open(get_data("e214.xml"), "rb") + + def tearDown(self): + self.xml_e201.close() + self.xml_e202_accept.close() + self.xml_e205.close() + self.xml_e206.close() + self.xml_e209_accept.close() + self.xml_e212.close() + self.xml_e213.close() + self.xml_e214.close() + + def test_e201(self): + e2 = E2(self.xml_e201) + e2.parse_xml() + self.assertEqual(e2.codigo_de_solicitud_ref, u'201605219400') + self.assertEqual(e2.tipo_de_reposicion, u'01') + self.assertEqual(e2.id_cliente.tipo_identificador, u'NI') + self.assertEqual(e2.id_cliente.identificador, u'11111111H') + self.assertEqual(e2.id_cliente.tipo_persona, u'F') + # RegistrosDocumento + self.assertEqual(len(e2.registros_documento), 2) + self.assertEqual(e2.registros_documento[0].tipo_doc_aportado, u'08') + self.assertEqual(e2.registros_documento[0].direccion_url, u'http://eneracme.com/docs/NIF11111111H.pdf') + self.assertEqual(e2.registros_documento[1].tipo_doc_aportado, u'07') + self.assertEqual(e2.registros_documento[1].direccion_url, u'http://eneracme.com/docs/NIF11111111H.pdf') + + def test_e202_accept(self): + e2 = E2(self.xml_e202_accept) + e2.parse_xml() + self.assertEqual(e2.fecha_aceptacion, u'2020-05-01') + self.assertEqual(e2.actuacion_campo, u'S') + self.assertEqual(e2.fecha_activacion_prevista, u'2020-05-06') + # E202 RECHAZO == E102 RECHAZO + # E203 == e203 + + def test_e205(self): + e2 = E2(self.xml_e205) + e2.parse_xml() + self.assertEqual(e2.datos_notificacion.fecha_activacion, u'2016-08-21') + self.assertEqual(e2.datos_notificacion.resultado_activacion, u'01') + self.assertEqual(e2.datos_notificacion.codigo_sol_corte, u'33222111') + self.assertEqual(e2.datos_notificacion.ind_esencial, u'01') + self.assertEqual(e2.datos_notificacion.fecha_ultimo_movimiento_ind_esencial, u'2016-06-06') + # Contrato + self.assertEqual(e2.contrato.cod_contrato, u'00001') + self.assertEqual(e2.contrato.cups_principal, u'ES1234000000000001JN0F') + # validem la informacio de autoconsum + autoconsumo = e2.contrato.autoconsumo + suministro = autoconsumo.datos_suministro + self.assertEqual(suministro.tipo_cups, u'01') + self.assertEqual(suministro.ref_catastro, u'1234567890qwertyuiop') + datos_cau = autoconsumo.datos_cau[0] + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.tipo_autoconsumo, u'11') + self.assertEqual(datos_cau.tipo_subseccion, u'10') + self.assertEqual(datos_cau.colectivo, u'S') + inst_gen_1 = datos_cau.datos_inst_gen[0] + self.assertEqual(inst_gen_1.cil, u'ES1234000000000001JN0F001') + self.assertEqual(inst_gen_1.tec_generador, u'b12') + self.assertEqual(inst_gen_1.combustible, u'Diesel') + self.assertEqual(inst_gen_1.pot_instalada_gen, u'100') + self.assertEqual(inst_gen_1.tipo_instalacion, u'01') + self.assertEqual(inst_gen_1.esquema_medida, u'B') + self.assertEqual(inst_gen_1.ssaa, u'S') + self.assertEqual(inst_gen_1.unico_contrato, u'S') + self.assertEqual(inst_gen_1.ref_catastro, u'1234567890qwertyuidf') + utm_1 = inst_gen_1.utm + self.assertEqual(utm_1.x, u'100') + self.assertEqual(utm_1.y, u'200') + self.assertEqual(utm_1.huso, u'40') + self.assertEqual(utm_1.banda, u'E') + titular = inst_gen_1.titular_representante_gen + self.assertEqual(titular.id_titular.tipo_identificador, u'NI') + self.assertEqual(titular.id_titular.identificador, u'111111111H') + self.assertEqual(titular.nombre.nombre_de_pila, u'Juan') + self.assertEqual(titular.nombre.primer_apellido, u'L贸pez') + self.assertEqual(titular.nombre.segundo_apellido, u'S谩nchez') + self.assertEqual(titular.telefono[0][0], u'0034') + self.assertEqual(titular.telefono[0][1], u'933834841') + self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') + # Puntos Medida + self.assertEqual(len(e2.puntos_medida), 1) + pm = e2.puntos_medida[0] + self.assertEqual(pm.cod_pm, u'ES1234000000000001JN0F') + self.assertEqual(pm.tipo_movimiento, u'A') + self.assertEqual(pm.tipo_pm, u'03') + self.assertEqual(pm.cod_pm_principal, u'ES1234000000000002JN0F') + self.assertEqual(pm.modo_lectura, u'1') + self.assertEqual(pm.funcion, u'P') + self.assertEqual(pm.direccion_enlace, u'39522') + self.assertEqual(pm.direccion_punto_medida, u'000000001') + self.assertEqual(pm.num_linea, u'12') + self.assertEqual(pm.telefono_telemedida, u'987654321') + self.assertEqual(pm.estado_telefono, u'1') + self.assertEqual(pm.clave_acceso, u'0000000007') + self.assertEqual(pm.tension_pm, u'0') + self.assertEqual(pm.fecha_vigor, u'2003-01-01') + self.assertEqual(pm.fecha_alta, u'2003-01-01') + self.assertEqual(pm.fecha_baja, u'2003-02-01') + self.assertEqual(pm.comentarios, u'Comentario sobre Punto Medida') + # Aparatos + self.assertEqual(len(pm.aparatos), 1) + ap = pm.aparatos[0] + self.assertEqual(ap.cod_precinto, u'02') + self.assertEqual(ap.constante_energia, u'1.000') + self.assertEqual(ap.constante_maximetro, u'1.000') + self.assertEqual(ap.funcion_aparato, u'M') + self.assertEqual(ap.lectura_directa, u'N') + self.assertEqual(ap.marca_aparato, u'132') + self.assertEqual(ap.modelo_marca, u'011') + self.assertEqual(ap.modo_medida_potencia, u'9') + self.assertEqual(ap.num_integradores, u'18') + self.assertEqual(ap.numero_serie, u'0000539522') + self.assertEqual(ap.periodo_fabricacion, u'2005') + self.assertEqual(ap.propietario, u'Desc. Propietario') + self.assertEqual(ap.ruedas_decimales, u'02') + self.assertEqual(ap.ruedas_enteras, u'08') + self.assertEqual(ap.tipo_aparato, u'CG') + self.assertEqual(ap.tipo_dhedm, u'6') + self.assertEqual(ap.tipo_equipo_medida, u'L03') + self.assertEqual(ap.tipo_movimiento, u'CX') + self.assertEqual(ap.tipo_propiedad_aparato, u'1') + # Medidas + self.assertEqual(len(ap.medidas), 2) + md = ap.medidas[0] + self.assertEqual(md.anomalia, u'01') + self.assertEqual(md.comentarios, u'Comentario sobre anomalia') + self.assertEqual(md.fecha_lectura_firme, u'2003-01-02') + self.assertEqual(md.magnitud_medida, u'PM') + self.assertEqual(md.periodo, u'65') + self.assertEqual(md.procedencia, u'30') + self.assertEqual(md.tipo_dhedm, u'6') + self.assertEqual(md.ultima_lectura_firme, u'0.00') + md2 = ap.medidas[1] + self.assertFalse(md2.anomalia) + self.assertFalse(md2.comentarios) + self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + # Cliente + self.assertEqual(e2.id_cliente.tipo_identificador, u'NI') + self.assertEqual(e2.id_cliente.identificador, u'B36385870') + self.assertEqual(e2.id_cliente.tipo_persona, u'J') + self.assertEqual(len(e2.registros_documento), 1) + doc1 = e2.registros_documento[0] + self.assertEqual(doc1.tipo_doc_aportado, u'07') + self.assertEqual(doc1.direccion_url, u'https://www.google.com/') + self.assertEqual(e2.comentarios, u'Comentarios Varios') + + def test_e206(self): + e2 = E2(self.xml_e206) + e2.parse_xml() + self.assertEqual(e2.datos_activacion.fecha, u'2016-08-21') + self.assertEqual(e2.datos_activacion.resultado_activacion, u'01') + self.assertEqual(e2.datos_activacion.en_servicio, u'S') + # Contrato + self.assertEqual(e2.contrato.cod_contrato, u'00001') + # Puntos Medida + self.assertEqual(len(e2.puntos_medida), 1) + pm = e2.puntos_medida[0] + self.assertEqual(pm.cod_pm, u'ES1234000000000001JN0F') + self.assertEqual(pm.tipo_movimiento, u'A') + self.assertEqual(pm.tipo_pm, u'03') + self.assertEqual(pm.cod_pm_principal, u'ES1234000000000002JN0F') + self.assertEqual(pm.modo_lectura, u'1') + self.assertEqual(pm.funcion, u'P') + self.assertEqual(pm.direccion_enlace, u'39522') + self.assertEqual(pm.direccion_punto_medida, u'000000001') + self.assertEqual(pm.num_linea, u'12') + self.assertEqual(pm.telefono_telemedida, u'987654321') + self.assertEqual(pm.estado_telefono, u'1') + self.assertEqual(pm.clave_acceso, u'0000000007') + self.assertEqual(pm.tension_pm, u'0') + self.assertEqual(pm.fecha_vigor, u'2003-01-01') + self.assertEqual(pm.fecha_alta, u'2003-01-01') + self.assertEqual(pm.fecha_baja, u'2003-02-01') + self.assertEqual(pm.comentarios, u'Comentarios Varios') + # Aparatos + self.assertEqual(len(pm.aparatos), 1) + ap = pm.aparatos[0] + self.assertEqual(ap.cod_precinto, u'02') + self.assertEqual(ap.constante_energia, u'1.000') + self.assertEqual(ap.constante_maximetro, u'1.000') + self.assertEqual(ap.funcion_aparato, u'M') + self.assertEqual(ap.lectura_directa, u'N') + self.assertEqual(ap.marca_aparato, u'132') + self.assertEqual(ap.modelo_marca, u'011') + self.assertEqual(ap.modo_medida_potencia, u'9') + self.assertEqual(ap.num_integradores, u'18') + self.assertEqual(ap.numero_serie, u'0000539522') + self.assertEqual(ap.periodo_fabricacion, u'2005') + self.assertEqual(ap.propietario, u'Desc. Propietario') + self.assertEqual(ap.ruedas_decimales, u'02') + self.assertEqual(ap.ruedas_enteras, u'08') + self.assertEqual(ap.tipo_aparato, u'CG') + self.assertEqual(ap.tipo_dhedm, u'6') + self.assertEqual(ap.tipo_equipo_medida, u'L03') + self.assertEqual(ap.tipo_movimiento, u'CX') + self.assertEqual(ap.tipo_propiedad_aparato, u'1') + # Medidas + self.assertEqual(len(ap.medidas), 2) + md = ap.medidas[0] + self.assertEqual(md.anomalia, u'01') + self.assertEqual(md.comentarios, u'Comentario sobre anomalia') + self.assertEqual(md.fecha_lectura_firme, u'2003-01-02') + self.assertEqual(md.magnitud_medida, u'PM') + self.assertEqual(md.periodo, u'65') + self.assertEqual(md.procedencia, u'30') + self.assertEqual(md.tipo_dhedm, u'6') + self.assertEqual(md.ultima_lectura_firme, u'0.00') + md2 = ap.medidas[1] + self.assertFalse(md2.anomalia) + self.assertFalse(md2.comentarios) + self.assertEqual(md2.fecha_lectura_firme, u'2003-01-03') + + def test_e209_accept(self): + e2 = E2(self.xml_e209_accept) + e2.parse_xml() + self.assertEqual(e2.fecha_aceptacion, u'2020-05-01') + + def test_e212(self): + e2 = E2(self.xml_e212) + e2.parse_xml() + self.assertEqual(e2.fecha_rechazo, u'2020-05-01') + + def test_e213(self): + e2 = E2(self.xml_e213) + e2.parse_xml() + self.assertEqual(e2.contestacion_incidencia, u'02') + self.assertEqual(len(e2.contactos), 2) + self.assertEqual(e2.contactos[0].persona_de_contacto, 'Nombre Inventado') + telefonos = e2.contactos[0].telefonos + self.assertEqual(len(telefonos), 1) + self.assertEqual(telefonos[0][0], "34") + self.assertEqual(telefonos[0][1], "683834841") + self.assertEqual(e2.contactos[0].correo_electronico, "mail_falso@dominio.com") + + def test_e214(self): + e2 = E2(self.xml_e214) + e2.parse_xml() + + self.assertEqual(e2.solicitud_reposicion.codigo_de_solicitud_ref, u'201605219400') + self.assertEqual(e2.solicitud_reposicion.tipo_de_reposicion, u'01') + self.assertEqual(e2.solicitud_reposicion.fecha_prevista_accion, u'2016-05-05') + self.assertEqual(e2.solicitud_reposicion.actuacion_campo, u'N') + # DireccionPS + self.assertEqual(e2.direccion_ps.pais, u'Espa帽a') + self.assertEqual(e2.direccion_ps.provincia, u'17') + self.assertEqual(e2.direccion_ps.municipio, u'17079') + self.assertEqual(e2.direccion_ps.poblacion, u'17079000501') + self.assertEqual(e2.direccion_ps.tipo_via, u'PZ') + self.assertEqual(e2.direccion_ps.cod_postal, u'17001') + self.assertEqual(e2.direccion_ps.calle, u'MELA MUTERMILCH') + self.assertEqual(e2.direccion_ps.numero_finca, u'2') + self.assertEqual(e2.direccion_ps.duplicador_finca, u'n/a') + self.assertEqual(e2.direccion_ps.escalera, u'001') + self.assertEqual(e2.direccion_ps.piso, u'001') + self.assertEqual(e2.direccion_ps.puerta, u'001') + self.assertEqual(e2.direccion_ps.tipo_aclarador_finca, u'BI') + self.assertEqual(e2.direccion_ps.aclarador_finca, u'Bloque de Pisos') + + class test_T1(unittest.TestCase): def setUp(self): diff --git a/tests/test_output.py b/tests/test_output.py index 2477e51d..2575eb04 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -3776,7 +3776,17 @@ def test_create_pas01(self): # Cabecera cabecera = get_header(process='Q1', step='01', date='2014-04-16T22:13:37', code='201412111009') + expediente = f1.Expediente() + expediente.feed({'numero_expediente': "123123132", 'codigo_solicitud': "333222111"}) + cabecera_fields = { + 'codigo_fiscal_factura': "123456798", + 'tipo_factura': "N", + 'motivo_facturacion': "01", + 'codigo_factura_rectificada_anulada': "33333", + 'expediente': expediente + } + cabecera.feed(cabecera_fields) # Medidas medidas = q1.Medidas() @@ -3927,10 +3937,190 @@ def test_create_pas01(self): 'modelo_aparato_list': [ma1, ma2], } medidas.feed(medidas_fields) + energia_neta_gen = f1.EnergiaNetaGen() + termino_energia_neta_gen = f1.TerminoEnergiaNetaGen() + periodo1 = f1.PeriodoEnergiaNetaGen() + periodo1.feed({ + 'valor_energia_neta_gen': 1.00, + }) + periodo2 = f1.PeriodoEnergiaNetaGen() + periodo2.feed({ + 'valor_energia_neta_gen': 2.00, + }) + periodo3 = f1.PeriodoEnergiaNetaGen() + periodo3.feed({ + 'valor_energia_neta_gen': 3.00, + }) + termino_energia_neta_gen.feed({ + 'fecha_desde': '2016-04-04', + 'fecha_hasta': '2016-05-05', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_neta_gen.feed({'termino_energia_neta_gen': termino_energia_neta_gen}) + + energia_autoconsumida = f1.EnergiaAutoconsumida() + termino_energia_autoconsumida = f1.TerminoEnergiaAutoconsumida() + periodo1 = f1.PeriodoEnergiaAutoconsumida() + periodo1.feed({ + 'valor_energia_autoconsumida': 11.00, + }) + periodo2 = f1.PeriodoEnergiaAutoconsumida() + periodo2.feed({ + 'valor_energia_autoconsumida': 12.00, + }) + periodo3 = f1.PeriodoEnergiaAutoconsumida() + periodo3.feed({ + 'valor_energia_autoconsumida': 13.00, + }) + termino_energia_autoconsumida.feed({ + 'fecha_desde': '2016-04-04', + 'fecha_hasta': '2016-05-05', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_autoconsumida.feed({ + 'termino_energia_autoconsumida': termino_energia_autoconsumida, + }) + + energia_excedentaria = f1.EnergiaExcedentaria() + termino_energia_excedentaria = f1.TerminoEnergiaExcedentaria() + periodo1 = f1.PeriodoEnergiaExcedentaria() + periodo1.feed({ + 'valor_energia_excedentaria': 21.00, + }) + periodo2 = f1.PeriodoEnergiaExcedentaria() + periodo2.feed({ + 'valor_energia_excedentaria': 22.00 + }) + periodo3 = f1.PeriodoEnergiaExcedentaria() + periodo3.feed({ + 'valor_energia_excedentaria': 23.00, + }) + termino_energia_excedentaria.feed({ + 'fecha_desde': '2016-04-04', + 'fecha_hasta': '2016-05-05', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_excedentaria.feed({ + 'termino_energia_excedentaria': termino_energia_excedentaria, + }) + energia_neta_gen_inst = copy.deepcopy(energia_neta_gen) + inst_gen_autoconsumo = f1.InstalacionGenAutoconsumo() + inst_gen_autoconsumo_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tipo_instalacion': '01', + 'energia_neta_gen': energia_neta_gen_inst, + } + inst_gen_autoconsumo.feed(inst_gen_autoconsumo_fields) + datos_cau = f1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'colectivo': 'S', + 'esquema_medida': 'B', + 'instalacion_gen_autoconsumo_list': [inst_gen_autoconsumo], + } + datos_cau.feed(datos_cau_fields) + + autoconsumo = f1.Autoconsumo() + autoconsumo_fields = { + 'energia_neta_gen': energia_neta_gen, + 'energia_autoconsumida': energia_autoconsumida, + 'energia_excedentaria': energia_excedentaria, + 'datos_cau_list': [datos_cau] + } + autoconsumo.feed(autoconsumo_fields) + # Datos + datos = q1.Datos() + + # Periodo CCH + periodo_cch = q1.PeriodoCCH() + periodo_cch_fields = { + 'fecha_desde_cch': '2016-04-04', + 'fecha_hasta_cch': '2016-05-05' + } + periodo_cch.feed(periodo_cch_fields) + + # Periodo + periodo = q1.Periodo() + periodo_fields = { + 'fecha_desde_factura': '2016-04-04', + 'fecha_hasta_factura': '2016-05-05', + 'numero_dias': 30 + } + periodo.feed(periodo_fields) + + datos_fields = { + 'tipo_autoconsumo': '11', + 'tipo_subseccion': '10', + 'tipo_cups': '01', + 'marca_medida_con_perdidas': 'N', + 'vas_trafo': 0, + 'porcentaje_perdidas': 0, + 'indicativo_curva_carga': '01', + 'periodo_cch': periodo_cch, + 'periodo': periodo, + 'tipo_pm': '05', + } + datos.feed(datos_fields) + + # Energia activa + energia_activa = q1.EnergiaActiva() + + # Periodo energia activa 1 + periodo_energia1 = f1.PeriodoEnergiaActiva() + periodo_energia1_fields = { + 'valor_energia_activa': 100.0 + } + periodo_energia1.feed(periodo_energia1_fields) + + # Periodo energia activa 2 + periodo_energia2 = f1.PeriodoEnergiaActiva() + periodo_energia2_fields = { + 'valor_energia_activa': 200.0 + } + periodo_energia2.feed(periodo_energia2_fields) + + # Periodo energia activa 3 + periodo_energia3 = f1.PeriodoEnergiaActiva() + periodo_energia3_fields = { + 'valor_energia_activa': 300.0 + } + periodo_energia3.feed(periodo_energia3_fields) + + # Termino energia activa + termino = f1.TerminoEnergiaActiva() + termino_fields = { + 'fecha_desde': '2016-04-04', + 'fecha_hasta': '2016-05-05', + 'periodos': [periodo_energia1, periodo_energia2, periodo_energia3] + } + termino.feed(termino_fields) + + energia_activa_fields = { + 'termino_energia_activa': termino + } + energia_activa.feed(energia_activa_fields) + + periodo_max = f1.PeriodoInfoAlConsumidor() + periodo_max.feed({'potencia_max_demandada_anio_movil': 3115}) + periodo_max2 = f1.PeriodoInfoAlConsumidor() + periodo_max2.feed({'potencia_max_demandada_anio_movil': 4045}) + periodos_maximetros = [periodo_max, periodo_max2] + informacion_al_consumidor = f1.InformacionAlConsumidor() + informacion_al_consumidor.feed( + { + 'fecha_inicio_anio_movil': '2021-01-31', + 'periodos': periodos_maximetros, + 'valor_energia_media_cp': 61083.25 + } + ) mensaje_saldo_lecturas_facturacion_fields = { 'cabecera': cabecera, + 'datos': datos, + 'energia_activa': energia_activa, + 'autoconsumo': autoconsumo, 'medidas': medidas, + 'informacion_consumidor': informacion_al_consumidor, } mensaje.feed(mensaje_saldo_lecturas_facturacion_fields) mensaje.build_tree() @@ -6523,6 +6713,7 @@ class test_F1(unittest.TestCase): def setUp(self): self.xml_f101_factura_atr = open(get_data("f101_factura_atr.xml"), "rb") + self.xml_f101_factura_atr_autoconsumo_output = open(get_data("f101_factura_atr_autoconsumo_output.xml"), "rb") self.xml_f101_factura_otros = open( get_data("f101_factura_otros.xml"), "rb" ) @@ -6638,7 +6829,7 @@ def setUp(self): atr_data.feed( { 'fecha_boe': '2016-01-01', - 'tarifa_atr_fact': '001', 'tipo_autoconsumo': '00', 'duracion_inf_anio': 'N', + 'tarifa_atr_fact': '001', 'tipo_autoconsumo': '00', 'tipo_cups': '01', 'duracion_inf_anio': 'N', 'modo_control_potencia': 1, 'marca_medida_con_perdidas': 'N', 'vas_trafo': None, @@ -6655,7 +6846,7 @@ def setUp(self): self.atr_data_lb.feed( { 'fecha_boe': '2016-01-01', - 'tarifa_atr_fact': '001', 'tipo_autoconsumo': '00', 'duracion_inf_anio': 'N', + 'tarifa_atr_fact': '001', 'tipo_autoconsumo': '00', 'tipo_cups': '01', 'duracion_inf_anio': 'N', 'modo_control_potencia': 1, 'marca_medida_con_perdidas': 'S', 'vas_trafo': 50000.0, @@ -6953,6 +7144,7 @@ def setUp(self): def tearDown(self): self.xml_f101_factura_atr.close() + self.xml_f101_factura_atr_autoconsumo_output.close() self.xml_f101_factura_otros.close() self.xml_f101_factura_atr_direccion_suministro.close() self.xml_f101_factura_atr_medidas_baja.close() @@ -6994,6 +7186,148 @@ def with_factura_atr(self): return facturacion + def with_factura_atr_autoconsumo(self): + cabecera = get_header(process='F1', step='01') + + facturacion = f1.Facturacion() + + facturas = f1.Facturas() + + registo_fin = f1.RegistroFin() + registo_fin.feed( + { + 'importe_total': 76.48, + 'saldo_total_facturacion': 76.48, + 'total_recibos': 1, + 'tipo_moneda': '02', + 'fecha_valor': '2017-05-01', + 'fecha_limite_pago': '2017-06-01', + 'iban': 'ES7712341234161234567890', + 'id_remesa': '0', + } + ) + factura_atr = copy.deepcopy(self.factura_atr) + factura_atr.datos_generales_factura_atr.datos_factura_atr.feed({ + + 'tipo_autoconsumo': '12', + 'tipo_subseccion': '10', + }) + + energia_neta_gen = f1.EnergiaNetaGen() + termino_energia_neta_gen = f1.TerminoEnergiaNetaGen() + periodo1 = f1.PeriodoEnergiaNetaGen() + periodo1.feed({ + 'valor_energia_neta_gen': 1.00, + }) + periodo2 = f1.PeriodoEnergiaNetaGen() + periodo2.feed({ + 'valor_energia_neta_gen': 2.00, + }) + periodo3 = f1.PeriodoEnergiaNetaGen() + periodo3.feed({ + 'valor_energia_neta_gen': 3.00, + }) + termino_energia_neta_gen.feed({ + 'fecha_desde': '2021-12-31', + 'fecha_hasta': '2022-01-31', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_neta_gen.feed({'termino_energia_neta_gen': termino_energia_neta_gen}) + + energia_autoconsumida = f1.EnergiaAutoconsumida() + termino_energia_autoconsumida = f1.TerminoEnergiaAutoconsumida() + periodo1 = f1.PeriodoEnergiaAutoconsumida() + periodo1.feed({ + 'valor_energia_autoconsumida': 11.00, + 'pago_tda': 0, + }) + periodo2 = f1.PeriodoEnergiaAutoconsumida() + periodo2.feed({ + 'valor_energia_autoconsumida': 12.00, + 'pago_tda': 0, + }) + periodo3 = f1.PeriodoEnergiaAutoconsumida() + periodo3.feed({ + 'valor_energia_autoconsumida': 13.00, + 'pago_tda': 0, + }) + termino_energia_autoconsumida.feed({ + 'fecha_desde': '2021-12-31', + 'fecha_hasta': '2022-01-31', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_autoconsumida.feed({ + 'termino_energia_autoconsumida': termino_energia_autoconsumida, + 'importe_total_energia_activa_autoconsumida': 33.00 + }) + + energia_excedentaria = f1.EnergiaExcedentaria() + termino_energia_excedentaria = f1.TerminoEnergiaExcedentaria() + periodo1 = f1.PeriodoEnergiaExcedentaria() + periodo1.feed({ + 'valor_energia_excedentaria': 134.19, + }) + periodo2 = f1.PeriodoEnergiaExcedentaria() + periodo2.feed({ + 'valor_energia_excedentaria': 73.15, + }) + periodo3 = f1.PeriodoEnergiaExcedentaria() + periodo3.feed({ + 'valor_energia_excedentaria': 116.76, + }) + termino_energia_excedentaria.feed({ + 'fecha_desde': '2021-12-31', + 'fecha_hasta': '2022-01-31', + 'periodos': [periodo1, periodo2, periodo3] + }) + energia_excedentaria.feed({ + 'termino_energia_excedentaria': termino_energia_excedentaria, + 'valor_total_energia_excedentaria': 0, + }) + energia_neta_gen_inst = copy.deepcopy(energia_neta_gen) + inst_gen_autoconsumo = f1.InstalacionGenAutoconsumo() + inst_gen_autoconsumo_fields = { + 'cil': 'ES1234000000000001JN0F001', + 'tipo_instalacion': '01', + 'exento_cargos': 'S', + 'energia_neta_gen': energia_neta_gen_inst, + } + inst_gen_autoconsumo.feed(inst_gen_autoconsumo_fields) + datos_cau = f1.DatosCAU() + datos_cau_fields = { + 'cau': 'ES1234000000000001JN0FA001', + 'colectivo': 'S', + 'esquema_medida': 'B', + 'instalacion_gen_autoconsumo_list': [inst_gen_autoconsumo], + } + datos_cau.feed(datos_cau_fields) + + autoconsumo = f1.Autoconsumo() + autoconsumo_fields = { + 'energia_neta_gen': energia_neta_gen, + 'energia_autoconsumida': energia_autoconsumida, + 'energia_excedentaria': energia_excedentaria, + 'datos_cau_list': [datos_cau] + } + autoconsumo.feed(autoconsumo_fields) + factura_atr.feed({'autoconsumo': autoconsumo}) + autoconsumo.build_tree() + facturas.feed( + { + 'factura_atr': factura_atr, + 'registro_fin': registo_fin + } + ) + + facturacion.feed( + { + 'cabecera': cabecera, + 'facturas': facturas, + } + ) + + return facturacion + def with_factura_otros(self): cabecera = get_header(process='F1', step='01') @@ -7039,6 +7373,14 @@ def test_create_pas01_atr_invoice(self): xml = str(mensaje) assertXmlEqual(xml, self.xml_f101_factura_atr.read()) + def test_create_pas01_atr_invoice_autoconsumo(self): + mensaje = self.with_factura_atr_autoconsumo() + + mensaje.build_tree() + + xml = str(mensaje) + assertXmlEqual(xml, self.xml_f101_factura_atr_autoconsumo_output.read()) + def test_create_pas01_atr_invoice_direccion_suministro(self): mensaje = self.with_factura_atr() diff --git a/tests/utils.py b/tests/utils.py index 9e8b0b61..6b072318 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -3,6 +3,7 @@ from gestionatr.output.messages.base import Cabecera from gestionatr.output.messages import sw_c1 as c1 from gestionatr.output.messages import sw_c2 as c2 +from gestionatr.output.messages import sw_q1 as q1 from . import unittest _ROOT = os.path.abspath(os.path.dirname(__file__)) @@ -14,7 +15,10 @@ def get_data(path): def get_header(process='C1', step='01', code='201607211259', date='2016-07-21T12:59:47'): - header = Cabecera() + if process == 'Q1': + header = q1.Cabecera() + else: + header = Cabecera() vals = { 'codigo_del_proceso': process, 'codigo_del_paso': step, From 542aa34434a602d1697c0ef5b11991ed59318a82 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 5 Dec 2024 17:55:39 +0100 Subject: [PATCH 14/19] new E1, E2 --- gestionatr/input/messages/E1.py | 10 -- gestionatr/input/messages/E2.py | 1 + gestionatr/output/messages/sw_c1.py | 2 +- gestionatr/output/messages/sw_e1.py | 8 +- gestionatr/output/messages/sw_e2.py | 216 ++++++++++++++++++++++++++++ 5 files changed, 223 insertions(+), 14 deletions(-) create mode 100644 gestionatr/output/messages/sw_e2.py diff --git a/gestionatr/input/messages/E1.py b/gestionatr/input/messages/E1.py index a5fb63fc..8afd7fb0 100644 --- a/gestionatr/input/messages/E1.py +++ b/gestionatr/input/messages/E1.py @@ -103,16 +103,6 @@ def contestacion_incidencia(self): else: return False - @property - def contactos(self): - data = [] - try: - for contacto in get_rec_attr(self.obj, 'ContestacionIncidencia.Contacto', []): - data.append(Contacto(contacto)) - except AttributeError: - pass - return data - class IDCliente(object): diff --git a/gestionatr/input/messages/E2.py b/gestionatr/input/messages/E2.py index c600e4e9..775b0dbd 100644 --- a/gestionatr/input/messages/E2.py +++ b/gestionatr/input/messages/E2.py @@ -110,6 +110,7 @@ def resultado_activacion(self): return data +# Dades del pas 14 class SolicitudReposicion(object): def __init__(self, data): diff --git a/gestionatr/output/messages/sw_c1.py b/gestionatr/output/messages/sw_c1.py index 1380653f..77e98660 100644 --- a/gestionatr/output/messages/sw_c1.py +++ b/gestionatr/output/messages/sw_c1.py @@ -110,7 +110,7 @@ class Autoconsumo(XmlModel): def __init__(self): self.autoconsumo = XmlField('Autoconsumo') self.datos_suministro = DatosSuministro() - self.datos_cau = DatosCAU() + self.datos_cau = [] super(Autoconsumo, self).__init__('Autoconsumo', 'autoconsumo') diff --git a/gestionatr/output/messages/sw_e1.py b/gestionatr/output/messages/sw_e1.py index 643c360e..e35f71fd 100644 --- a/gestionatr/output/messages/sw_e1.py +++ b/gestionatr/output/messages/sw_e1.py @@ -19,15 +19,17 @@ def __init__(self): class SolicitudDesistimiento(XmlModel): - _sort_order = ('solicitud_desistimiento', 'codigo_de_solicitud_ref', - 'tipo_de_solicitud', 'id_cliente', 'registros_Documento') + _sort_order = ('solicitud_desistimiento', 'codigo_de_solicitud_ref', 'tipo_de_solicitud', 'ind_esencial', + 'fecha_ultimo_movimiento_ind_esencial', 'id_cliente', 'registros_documento') def __init__(self): self.solicitud_desistimiento = XmlField('SolicitudDesistimiento') self.codigo_de_solicitud_ref = XmlField('CodigoDeSolicitudRef') self.tipo_de_solicitud = XmlField('TipoDeSolicitud') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') self.id_cliente = IdCliente() - self.registros_Documento = RegistrosDocumento() + self.registros_documento = RegistrosDocumento() super(SolicitudDesistimiento, self).__init__('SolicitudDesistimiento', 'solicitud_desistimiento') diff --git a/gestionatr/output/messages/sw_e2.py b/gestionatr/output/messages/sw_e2.py new file mode 100644 index 00000000..58423be0 --- /dev/null +++ b/gestionatr/output/messages/sw_e2.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- +from gestionatr.output.messages.sw_c2 import * +from gestionatr.output.messages.sw_c1 import Medida, Contrato +from gestionatr.output.messages.sw_t1 import DireccionPS + +# Paso 01 + +class MensajeSolicitudReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'solicitud_reposicion') + + def __init__(self): + self.mensaje = XmlField('MensajeSolicitudReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.solicitud_reposicion = SolicitudReposicion() + super(MensajeSolicitudReposicion, self).__init__('MensajeSolicitudReposicion', 'mensaje') + + +class SolicitudReposicion(XmlModel): + + _sort_order = ('solicitud_reposicion', 'codigo_de_solicitud_ref', + 'tipo_de_reposicion', 'id_cliente', 'registros_documento', 'comentarios') + + def __init__(self): + self.solicitud_reposicion = XmlField('SolicitudReposicion') + self.codigo_de_solicitud_ref = XmlField('CodigoDeSolicitudRef') + self.tipo_de_reposicion = XmlField('TipoDeReposicion') + self.id_cliente = IdCliente() + self.registros_documento = RegistrosDocumento() + self.comentarios = XmlField('Comentarios') + super(SolicitudReposicion, self).__init__('SolicitudReposicion', 'solicitud_reposicion') + + +# Paso 02 + +class MensajeAceptacionReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'aceptacion_reposicion') + + def __init__(self): + self.mensaje = XmlField('MensajeAceptacionReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.aceptacion_reposicion = AceptacionReposicion() + super(MensajeAceptacionReposicion, self).__init__('MensajeAceptacionReposicion', 'mensaje') + + +class AceptacionReposicion(XmlModel): + + _sort_order = ('aceptacion_reposicion', 'fecha_aceptacion', + 'actuacion_campo', 'fecha_activacion_prevista') + + def __init__(self): + self.aceptacion_reposicion = XmlField('AceptacionReposicion') + self.fecha_aceptacion = XmlField('FechaAceptacion') + self.actuacion_campo = XmlField('ActuacionCampo') + self.fecha_activacion_prevista = XmlField('FechaActivacionPrevista') + super(AceptacionReposicion, self).__init__('AceptacionReposicion', 'aceptacion_reposicion') + + +# Paso 05 + +class MensajeActivacionReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'activacion_reposicion') + + def __init__(self): + self.mensaje = XmlField('MensajeActivacionReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.activacion_reposicion = ActivacionReposicion() + super(MensajeActivacionReposicion, self).__init__('MensajeActivacionReposicion', 'mensaje') + + +class ActivacionReposicion(XmlModel): + + _sort_order = ('activacion_reposicion', 'datos_notificacion', 'contrato', 'puntos_de_medida', + 'id_cliente', 'registros_documento', 'comentarios') + + def __init__(self): + self.activacion_reposicion = XmlField('ActivacionReposicion') + self.datos_notificacion = DatosNotificacion() + self.contrato = Contrato() + self.puntos_de_medida = PuntosDeMedida() + self.id_cliente = IdCliente() + self.registros_documento = RegistrosDocumento() + self.comentarios = XmlField('Comentarios') + super(ActivacionReposicion, self).__init__('ActivacionReposicion', 'activacion_reposicion') + + +class DatosNotificacion(XmlModel): + + _sort_order = ('datos_notificacion', 'fecha_activacion', 'resultado_activacion', 'codigo_sol_corte', + 'ind_esencial', 'fecha_ultimo_movimiento_ind_esencial') + + def __init__(self): + self.datos_notificacion = XmlField('DatosNotificacion') + self.fecha_activacion = XmlField('FechaActivacion') + self.resultado_activacion = XmlField('ResultadoActivacion') + self.codigo_sol_corte = XmlField('CodigoSolCorte') + self.ind_esencial = XmlField('IndEsencial') + self.fecha_ultimo_movimiento_ind_esencial = XmlField('FechaUltimoMovimientoIndEsencial') + super(DatosNotificacion, self).__init__('DatosNotificacion', 'datos_notificacion') + + +# Paso 06 +class MensajeNotificacionActivacionPorReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'notificacion_activacion_reposicion') + + def __init__(self): + self.mensaje = XmlField('MensajeNotificacionActivacionPorReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.notificacion_activacion_reposicion = NotificacionActivacionPorReposicion() + super(MensajeNotificacionActivacionPorReposicion, self)\ + .__init__('MensajeNotificacionActivacionPorReposicion', 'mensaje') + + +class NotificacionActivacionPorReposicion(XmlModel): + + _sort_order = ('notificacion_activacion_reposicion', 'datos_activacion', 'contrato', 'puntos_de_medida') + + def __init__(self): + self.notificacion_activacion_reposicion = XmlField('NotificacionActivacionPorReposicion') + self.datos_activacion = DatosActivacion() + self.contrato = Contrato() + self.puntos_de_medida = PuntosDeMedida() + super(NotificacionActivacionPorReposicion, self).__init__('NotificacionActivacionPorReposicion', + 'notificacion_activacion_reposicion') + + +class DatosActivacion(XmlModel): + + _sort_order = ('datos_activacion', 'fecha', 'resultado_activacion', 'en_servicio',) + + def __init__(self): + self.datos_activacion = XmlField('DatosActivacion') + self.fecha = XmlField('Fecha') + self.resultado_activacion = XmlField('ResultadoActivacion') + self.en_servicio = XmlField('EnServicio') + super(DatosActivacion, self).__init__('DatosActivacion', 'datos_activacion') + + +class Medida(Medida): + + _sort_order = ('medida', 'tipo_dhedm', 'periodo', 'magnitud_medida', 'procedencia', 'ultima_lectura_firme', + 'fecha_lectura_firme', 'anomalia', 'comentarios') + + def __init__(self): + super(Medida, self).__init__() + + +class Contrato(Contrato): + + _sort_order = ('contrato', 'id_contrato', 'autoconsumo', 'tipo_contrato_atr', 'cups_principal', + 'condiciones_contractuales') + + def __init__(self): + super(Contrato, self).__init__() + self.cups_principal = XmlField('CUPSPrincipal') + +# Paso 12 + +class MensajeRechazoReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'rechazo_reposicion') + + def __init__(self): + self.mensaje = XmlField('MensajeRechazoReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.rechazo_reposicion = RechazoReposicion() + super(MensajeRechazoReposicion, self).__init__('MensajeRechazoReposicion', 'mensaje') + + +class RechazoReposicion(XmlModel): + + _sort_order = ('rechazo_reposicion', 'fecha_rechazo') + + def __init__(self): + self.rechazo_reposicion = XmlField('RechazoReposicion') + self.fecha_rechazo = XmlField('FechaRechazo') + super(RechazoReposicion, self).__init__('RechazoReposicion', 'rechazo_reposicion') + + +# paso 14 +class MensajeConsultaSolicitudReposicion(XmlModel): + + _sort_order = ('mensaje', 'cabecera', 'solicitud_reposicion', 'direccion_ps', 'registros_documentos') + + def __init__(self): + self.mensaje = XmlField('MensajeConsultaSolicitudReposicion', + attributes={'xmlns': 'http://localhost/elegibilidad'}) + self.cabecera = Cabecera() + self.solicitud_reposicion = SolicitudReposicionConsulta() + self.direccion_ps = DireccionPS() + self.registros_documentos = RegistrosDocumento() + super(MensajeConsultaSolicitudReposicion, self).__init__('MensajeConsultaSolicitudReposicion', 'mensaje') + + +class SolicitudReposicionConsulta(XmlModel): + + _sort_order = ('solicitud_reposicion_consulta', 'codigo_de_solicitud_ref', + 'tipo_de_reposicion', 'fecha_prevista_accion', 'actuacion_campo') + + def __init__(self): + self.solicitud_reposicion_consulta = XmlField('SolicitudReposicion') + self.codigo_de_solicitud_ref = XmlField('CodigoDeSolicitudRef') + self.tipo_de_reposicion = XmlField('TipoDeReposicion') + self.fecha_prevista_accion = XmlField('FechaPrevistaAccion') + self.actuacion_campo = XmlField('ActuacionCampo') + + super(SolicitudReposicionConsulta, self).__init__('SolicitudReposicionConsulta', + 'solicitud_reposicion_consulta') From a9d4868b6e12045e9ccd045493e369ba4025d35b Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 5 Dec 2024 17:55:52 +0100 Subject: [PATCH 15/19] new TEST --- tests/data/c105.xml | 47 ++ tests/data/c205_only_changes.xml | 89 ---- tests/data/e213.xml | 8 - tests/test_input.py | 15 +- tests/test_output.py | 822 +++++++++++++++++++++++-------- 5 files changed, 670 insertions(+), 311 deletions(-) delete mode 100644 tests/data/c205_only_changes.xml diff --git a/tests/data/c105.xml b/tests/data/c105.xml index 499a67a9..cbde3835 100644 --- a/tests/data/c105.xml +++ b/tests/data/c105.xml @@ -75,6 +75,53 @@ + + ES1234000000000001JN0FA001 + 11 + 10 + S + + ES1234000000000001JN0F001 + b12 + Diesel + 100 + 01 + B + S + S + 1234567890qwertyuidf + + 100 + 200 + 40 + E + + + + NI + 111111111H + + + Juan + L贸pez + S谩nchez + + + 0034 + 933834841 + + + 0034 + 633834841 + + + 0034 + 683834841 + + mail_falso@dominio.com + + + 02 diff --git a/tests/data/c205_only_changes.xml b/tests/data/c205_only_changes.xml deleted file mode 100644 index 2248a668..00000000 --- a/tests/data/c205_only_changes.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - 1234 - 4321 - C2 - 05 - 201607211259 - 01 - 2016-07-21T12:59:47 - ES1234000000000001JN0F - - - - 2016-08-21 - 1 - 01 - 2016-06-06 - - - - 00001 - - 2020-01-01 - - - 01 - 1234567890qwertyuiop - - - ES1234000000000001JN0FA001 - 11 - 10 - S - - ES1234000000000001JN0F001 - b12 - Diesel - 100 - 01 - B - S - S - 1234567890qwertyuidf - - 100 - 200 - 40 - E - - - - NI - 111111111H - - - Juan - L贸pez - S谩nchez - - - 0034 - 933834841 - - - 0034 - 633834841 - - - 0034 - 683834841 - - mail_falso@dominio.com - - - - - 02 - ES1234000000000001JN0F - - - - 07 - https://www.google.com/ - - - - diff --git a/tests/data/e213.xml b/tests/data/e213.xml index 42f359fb..fc33aa61 100644 --- a/tests/data/e213.xml +++ b/tests/data/e213.xml @@ -20,13 +20,5 @@ mail_falso@dominio.com - - Nombre Inventado 2 - - 34 - 683834241 - - mail_falso2@dominio.com - diff --git a/tests/test_input.py b/tests/test_input.py index ec18758a..86ccd18b 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -230,7 +230,9 @@ def test_c105(self): self.assertEqual(titular.telefono[0][0], u'0034') self.assertEqual(titular.telefono[0][1], u'933834841') self.assertEqual(titular.correo_electronico, u'mail_falso@dominio.com') - + # validem el cau 2 + datos_cau2 = autoconsumo.datos_cau[1] + self.assertEqual(datos_cau2.cau, u'ES1234000000000001JN0FA001') # Seguim amb la resta de dades del contracte self.assertEqual(c.contrato.tipo_contrato_atr, u'02') self.assertEqual(c.contrato.tarifa_atr, u'018') @@ -409,6 +411,7 @@ def tearDown(self): self.xml_c201_completo.close() self.xml_c202_accept.close() self.xml_c203.close() + self.xml_c205.close() self.xml_c213.close() def test_c201_completo(self): @@ -2499,6 +2502,8 @@ def setUp(self): self.xml_f101_integradores_dh = f.read() with open(get_data("f101_factura_atr_autoconsum_20td.xml"), "rb") as f: self.xml_f101_atr_autoconsum_20td = f.read() + with open(get_data("f101_factura_atr_autoconsumo_output.xml"), "rb") as f: + self.xml_f101_factura_atr_autoconsumo_output = f.read() def testATRInvoice(self): f1 = F1(self.xml_f101_atr_invoice) @@ -4543,13 +4548,13 @@ def test_e213(self): e2 = E2(self.xml_e213) e2.parse_xml() self.assertEqual(e2.contestacion_incidencia, u'02') - self.assertEqual(len(e2.contactos), 2) - self.assertEqual(e2.contactos[0].persona_de_contacto, 'Nombre Inventado') - telefonos = e2.contactos[0].telefonos + + self.assertEqual(e2.contacto.persona_de_contacto, 'Nombre Inventado') + telefonos = e2.contacto.telefonos self.assertEqual(len(telefonos), 1) self.assertEqual(telefonos[0][0], "34") self.assertEqual(telefonos[0][1], "683834841") - self.assertEqual(e2.contactos[0].correo_electronico, "mail_falso@dominio.com") + self.assertEqual(e2.contacto.correo_electronico, "mail_falso@dominio.com") def test_e214(self): e2 = E2(self.xml_e214) diff --git a/tests/test_output.py b/tests/test_output.py index 2575eb04..4f036e70 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -25,6 +25,7 @@ from gestionatr.output.messages import sw_c2 as c2 from gestionatr.output.messages import sw_d1 as d1 from gestionatr.output.messages import sw_e1 as e1 +from gestionatr.output.messages import sw_e2 as e2 from gestionatr.output.messages import sw_f1 as f1 from gestionatr.output.messages import sw_m1 as m1 from gestionatr.output.messages import sw_m2 as m2 @@ -153,7 +154,7 @@ def get_puntos_medida(obj_proces): return puntos_de_medida -def get_autoconsumo(obj_proces, tipus_info='comer'): +def get_autoconsumo(tipus_info='comer', multi=False): ''' :param obj: fitxer c1, c2, a1 ... @@ -264,8 +265,11 @@ def get_autoconsumo(obj_proces, tipus_info='comer'): autoconsumo = c1.Autoconsumo() autoconsumo_fields = { 'datos_suministro': datos_suministro, - 'datos_cau': datos_cau, + 'datos_cau': [datos_cau], } + if multi: + datos_cau2 = copy.deepcopy(datos_cau) + autoconsumo_fields['datos_cau'].append(datos_cau2) autoconsumo.feed(autoconsumo_fields) return autoconsumo @@ -518,111 +522,7 @@ def test_create_pas05(self): } condiciones_contractuales.feed(condiciones_contractuales_fields) - # DatosSuministro - datos_suministro = c1.DatosSuministro() - datos_suministro_fields = { - 'tipo_cups': '01', - 'ref_catastro': '1234567890qwertyuiop', - } - datos_suministro.feed(datos_suministro_fields) - - # UTM - utm = c1.UTM() - utm_fields = { - 'x': '100', - 'y': '200', - 'huso': '40', - 'banda': 'E', - } - utm.feed(utm_fields) - - # IdTitular - id_titular = c1.IdTitular() - id_titular_fields = { - 'tipo_identificador': 'NI', - 'identificador': '111111111H', - } - id_titular.feed(id_titular_fields) - - # Nombre - nombre = c1.Nombre() - nombre_fields = { - 'nombre_de_pila': 'Juan', - 'primer_apellido': 'L贸pez', - 'segundo_apellido': 'S谩nchez', - } - nombre.feed(nombre_fields) - - # Telefono - telefono = c1.Telefono() - telefono_fields = { - 'prefijo_pais': '0034', - 'numero': '933834841', - } - telefono.feed(telefono_fields) - - # Telefono 2 - telefono2 = c1.Telefono() - telefono2_fields = { - 'prefijo_pais': '0034', - 'numero': '633834841', - } - telefono2.feed(telefono2_fields) - - # Telefono 3 - telefono3 = c1.Telefono() - telefono3_fields = { - 'prefijo_pais': '0034', - 'numero': '683834841', - } - telefono3.feed(telefono3_fields) - - # TitularRepresentanteGen - titular = c1.TitularRepresentanteGen() - titular_representante_gen_fields = { - 'id_titular': id_titular, - 'nombre': nombre, - 'telefono': [telefono, telefono2, telefono3], - 'correo_electronico': 'mail_falso@dominio.com', - } - titular.feed(titular_representante_gen_fields) - - # DatosInstGen - datos_1 = c1.DatosInstGen() - datos_inst_gen_fields = { - 'cil': 'ES1234000000000001JN0F001', - 'tec_generador': 'b11', - 'combustible': 'radiaci贸n solar', - 'pot_instalada_gen': '100', - 'tipo_instalacion': '01', - 'esquema_medida': 'B', - 'ssaa': 'S', - 'unico_contrato': 'S', - 'ref_catastro': '1234567890qwertyuidf', - 'utm': utm, - 'titular_representante_gen': titular, - } - datos_1.feed(datos_inst_gen_fields) - - # DatosCAU - datos_cau = c1.DatosCAU() - datos_cau_fields = { - 'cau': 'ES1234000000000001JN0FA001', - 'tipo_autoconsumo': '11', - 'tipo_subseccion': '10', - 'colectivo': 'S', - 'datos_inst_gen': [datos_1], - } - datos_cau.feed(datos_cau_fields) - - # Autoconsumo - autoconsumo = c1.Autoconsumo() - autoconsumo_fields = { - 'datos_suministro': datos_suministro, - 'datos_cau': datos_cau, - } - autoconsumo.feed(autoconsumo_fields) - + autoconsumo = get_autoconsumo(tipus_info='distri', multi=True) contrato_fields = { 'id_contrato': id_contrato, 'data_finalitzacio': '2020-01-01', @@ -792,7 +692,7 @@ def setUp(self): self.xml_c201_completo = open(get_data("c201.xml"), "rb") self.xml_c202_accept = open(get_data("c202_accept.xml"), "rb") self.xml_c203 = open(get_data("c203.xml"), "rb") - self.xml_c205 = open(get_data("c205_only_changes.xml"), "rb") + self.xml_c205 = open(get_data("c205.xml"), "rb") self.xml_c213 = open(get_data("c213.xml"), "rb") def tearDown(self): @@ -1185,6 +1085,26 @@ def test_create_pas05(self): } id_contrato.feed(id_contrato_fields) + # CondicionesContractuales + condiciones_contractuales = c1.CondicionesContractuales() + + # PotenciasContratadas + potencias_contratadas = c1.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'periodicidad_facturacion': '01', + 'tipode_telegestion': '01', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + 'marca_medida_con_perdidas': 'S', + 'tension_del_suministro': '10', + 'vas_trafo': '50', + 'porcentaje_perdidas': '05', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + # DatosSuministro datos_suministro = c2.DatosSuministro() datos_suministro_fields = { @@ -1193,105 +1113,13 @@ def test_create_pas05(self): } datos_suministro.feed(datos_suministro_fields) - # UTM - utm = c2.UTM() - utm_fields = { - 'x': '100', - 'y': '200', - 'huso': '40', - 'banda': 'E', - } - utm.feed(utm_fields) - - # IdTitular - id_titular = c2.IdTitular() - id_titular_fields = { - 'tipo_identificador': 'NI', - 'identificador': '111111111H', - } - id_titular.feed(id_titular_fields) - - # Nombre - nombre = c2.Nombre() - nombre_fields = { - 'nombre_de_pila': 'Juan', - 'primer_apellido': 'L贸pez', - 'segundo_apellido': 'S谩nchez', - } - nombre.feed(nombre_fields) - - # Telefono - telefono = c2.Telefono() - telefono_fields = { - 'prefijo_pais': '0034', - 'numero': '933834841', - } - telefono.feed(telefono_fields) - - # Telefono 2 - telefono2 = c2.Telefono() - telefono2_fields = { - 'prefijo_pais': '0034', - 'numero': '633834841', - } - telefono2.feed(telefono2_fields) - - # Telefono 3 - telefono3 = c2.Telefono() - telefono3_fields = { - 'prefijo_pais': '0034', - 'numero': '683834841', - } - telefono3.feed(telefono3_fields) - - # TitularRepresentanteGen - titular = c2.TitularRepresentanteGen() - titular_representante_gen_fields = { - 'id_titular': id_titular, - 'nombre': nombre, - 'telefono': [telefono, telefono2, telefono3], - 'correo_electronico': 'mail_falso@dominio.com', - } - titular.feed(titular_representante_gen_fields) - - # DatosInstGen - datos_1 = c2.DatosInstGen() - datos_inst_gen_fields = { - 'cil': 'ES1234000000000001JN0F001', - 'tec_generador': 'b12', - 'combustible': 'Diesel', - 'pot_instalada_gen': '100', - 'tipo_instalacion': '01', - 'esquema_medida': 'B', - 'ssaa': 'S', - 'unico_contrato': 'S', - 'ref_catastro': '1234567890qwertyuidf', - 'utm': utm, - 'titular_representante_gen': titular, - } - datos_1.feed(datos_inst_gen_fields) - - # DatosCAU - datos_cau = c2.DatosCAU() - datos_cau_fields = { - 'cau': 'ES1234000000000001JN0FA001', - 'tipo_autoconsumo': '11', - 'tipo_subseccion': '10', - 'colectivo': 'S', - 'datos_inst_gen': [datos_1], - } - datos_cau.feed(datos_cau_fields) + autoconsumo = get_autoconsumo('distri') - # Autoconsumo - autoconsumo = c2.Autoconsumo() - autoconsumo_fields = { - 'datos_suministro': datos_suministro, - 'datos_cau': datos_cau, - } - autoconsumo.feed(autoconsumo_fields) + puntos_de_medida = get_puntos_medida(c2) contrato_fields = { 'id_contrato': id_contrato, + 'condiciones_contractuales': condiciones_contractuales, 'fecha_finalizacion': '2020-01-01', 'autoconsumo': autoconsumo, 'tipo_contrato_atr': '02', @@ -1317,6 +1145,7 @@ def test_create_pas05(self): activacion_cambiode_comercializador_con_cambios_fields = { 'datos_activacion': datos_activacion, 'contrato': contrato, + 'puntos_de_medida': puntos_de_medida, 'registros_documento': registros } act_cambio.feed( @@ -2940,7 +2769,7 @@ def test_create_pas05(self): } id_contrato.feed(id_contrato_fields) - autoconsumo = get_autoconsumo(m2, 'distri') + autoconsumo = get_autoconsumo('distri') contrato_fields = { 'id_contrato': id_contrato, @@ -3497,7 +3326,7 @@ def test_create_pas02_accept(self): } condiciones_contractuales.feed(condiciones_contractuales_fields) - autoconsumo = get_autoconsumo(p0, 'comer') + autoconsumo = get_autoconsumo('comer') # Contrato contrato = p0.Contrato() contrato_fields = { @@ -4915,7 +4744,7 @@ def test_create_pas01(self): 'ind_esencial': '01', 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', 'id_cliente': id_cliente, - 'registros_Documento': registros_documento, + 'registros_documento': registros_documento, } solicitud_desistimiento.feed(solicitud_desistimiento_fields) @@ -5220,7 +5049,7 @@ def test_create_pas06(self): 'porcentaje_perdidas': '05', } condiciones_contractuales.feed(condiciones_contractuales_fields) - autoconsumo = get_autoconsumo(e1, 'distri') + autoconsumo = get_autoconsumo('distri') # Contrato contrato = e1.Contrato() @@ -5334,6 +5163,581 @@ def test_create_pas13(self): assertXmlEqual(xml, self.xml_e113.read()) +class test_E2(unittest.TestCase): + + def setUp(self): + self.xml_e201 = open(get_data("e201.xml"), "rb") + self.xml_e202_accept = open(get_data("e202_accept.xml"), "rb") + self.xml_e205 = open(get_data("e205.xml"), "rb") + self.xml_e206 = open(get_data("e206.xml"), "rb") + self.xml_e209_accept = open(get_data("e209_accept.xml"), "rb") + self.xml_e212 = open(get_data("e212.xml"), "rb") + self.xml_e213 = open(get_data("e213.xml"), "rb") + self.xml_e214 = open(get_data("e214.xml"), "rb") + + # PuntosDeMedida + self.puntos_de_medida = e1.PuntosDeMedida() + + # PuntoDeMedida + punto_de_medida = e1.PuntoDeMedida() + + # Aparatos + aparatos = e1.Aparatos() + + # Aparato + aparato = e1.Aparato() + + # ModeloAparato + modelo_aparato = e1.ModeloAparato() + modelo_aparato_fields = { + 'tipo_aparato': 'CG', + 'marca_aparato': '132', + 'modelo_marca': '011', + } + modelo_aparato.feed(modelo_aparato_fields) + + # DatosAparato + datos_aparato = e1.DatosAparato() + datos_aparato_fields = { + 'periodo_fabricacion': '2005', + 'numero_serie': '0000539522', + 'funcion_aparato': 'M', + 'num_integradores': '18', + 'constante_energia': '1.000', + 'constante_maximetro': '1.000', + 'ruedas_enteras': '08', + 'ruedas_decimales': '02', + } + datos_aparato.feed(datos_aparato_fields) + + # Medidas + medidas = e1.Medidas() + + # Medida 1 + medida1 = e1.Medida() + medida_fields = { + 'tipo_dhedm': '6', + 'periodo': '65', + 'magnitud_medida': 'PM', + 'procedencia': '30', + 'ultima_lectura_firme': '0.00', + 'fecha_lectura_firme': '2003-01-02', + 'anomalia': '01', + 'comentarios': 'Comentario sobre anomalia', + } + medida1.feed(medida_fields) + + # Medida 2 + medida2 = e1.Medida() + medida_fields = { + 'tipo_dhedm': '6', + 'periodo': '66', + 'magnitud_medida': 'PM', + 'procedencia': '30', + 'ultima_lectura_firme': '6.00', + 'fecha_lectura_firme': '2003-01-03', + } + medida2.feed(medida_fields) + + medidas_fields = { + 'medida_list': [medida1, medida2], + } + medidas.feed(medidas_fields) + + aparato_fields = { + 'modelo_aparato': modelo_aparato, + 'tipo_movimiento': 'CX', + 'tipo_equipo_medida': 'L03', + 'tipo_propiedad_aparato': '1', + 'propietario': 'Desc. Propietario', + 'tipo_dhedm': '6', + 'modo_medida_potencia': '9', + 'lectura_directa': 'N', + 'cod_precinto': '02', + 'datos_aparato': datos_aparato, + 'medidas': medidas + } + + aparato.feed(aparato_fields) + aparatos_fields = { + 'aparato_list': [aparato], + } + aparatos.feed(aparatos_fields) + + punto_de_medida_fields = { + 'cod_pm': 'ES1234000000000001JN0F', + 'tipo_movimiento': 'A', + 'tipo_pm': '03', + 'cod_pm_principal': 'ES1234000000000002JN0F', + 'modo_lectura': '1', + 'funcion': 'P', + 'direccion_enlace': '39522', + 'direccion_punto_medida': '000000001', + 'num_linea': '12', + 'telefono_telemedida': '987654321', + 'estado_telefono': '1', + 'clave_acceso': '0000000007', + 'tension_pm': '0', + 'fecha_vigor': '2003-01-01', + 'fecha_alta': '2003-01-01', + 'fecha_baja': '2003-02-01', + 'aparatos': aparatos, + 'comentarios': 'Comentarios Varios', + } + punto_de_medida.feed(punto_de_medida_fields) + + puntos_de_medida_fields = { + 'punto_de_medida_list': [punto_de_medida], + } + self.puntos_de_medida.feed(puntos_de_medida_fields) + + def tearDown(self): + self.xml_e201.close() + self.xml_e205.close() + self.xml_e206.close() + self.xml_e209_accept.close() + self.xml_e212.close() + self.xml_e213.close() + self.xml_e214.close() + + def test_create_pas01(self): + # MensajeSolicitudReposicion + mensaje = e2.MensajeSolicitudReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='01') + + # IdCliente + id_cliente = e2.IdCliente() + id_cliente_fields = { + 'tipo_identificador': 'NI', + 'identificador': '11111111H', + 'tipo_persona': 'F', + } + id_cliente.feed(id_cliente_fields) + + # RegistrosDocumento + registros_documento = r1.RegistrosDocumento() + # RegistroDoc + rd1 = w1.RegistroDoc() + registro_doc_fields = { + 'tipo_doc_aportado': '08', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', + } + rd1.feed(registro_doc_fields) + rd2 = w1.RegistroDoc() + registro_doc_fields = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', + } + rd2.feed(registro_doc_fields) + registros_documento_fields = { + 'registro_doc_list': [rd1, rd2], + } + registros_documento.feed(registros_documento_fields) + + # SolicitudReposicion + solicitud_reposicion = e2.SolicitudReposicion() + solicitud_reposicion_fields = { + 'codigo_de_solicitud_ref': '201605219400', + 'tipo_de_reposicion': '01', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', + 'id_cliente': id_cliente, + 'registros_documento': registros_documento, + } + solicitud_reposicion.feed(solicitud_reposicion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'solicitud_reposicion': solicitud_reposicion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e201.read()) + + def test_create_pas02_accept(self): + # MensajeAceptacionReposicion + mensaje = e2.MensajeAceptacionReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='02') + + # AceptacionReposicion + aceptacion_reposicion = e2.AceptacionReposicion() + aceptacion_reposicion_fields = { + 'fecha_aceptacion': '2020-05-01', + 'actuacion_campo': 'S', + 'fecha_activacion_prevista': '2020-05-06', + } + aceptacion_reposicion.feed(aceptacion_reposicion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'aceptacion_reposicion': aceptacion_reposicion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e202_accept.read()) + + def test_create_pas05(self): + # MensajeNotificacionActivacionReposicion + mensaje = e2.MensajeActivacionReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='05') + + # DatosActivacion + datos_notificacion = e2.DatosNotificacion() + datos_notificacion_fields = { + 'fecha_activacion': '2016-08-21', + 'resultado_activacion': '01', + 'codigo_sol_corte': '33222111', + 'ind_esencial': '01', + 'fecha_ultimo_movimiento_ind_esencial': '2016-06-06', + + } + datos_notificacion.feed(datos_notificacion_fields) + + # IdContrato + id_contrato = e2.IdContrato() + id_contrato_fields = { + 'cod_contrato': '00001', + } + id_contrato.feed(id_contrato_fields) + + # PotenciasContratadas + potencias_contratadas = e2.PotenciasContratadas() + potencias_contratadas.feed({'p1': 1000, 'p2': 2000}) + + # CondicionesContractuales + condiciones_contractuales = e2.CondicionesContractuales() + condiciones_contractuales_fields = { + 'tarifa_atr': '018', + 'periodicidad_facturacion': '01', + 'tipode_telegestion': '01', + 'potencias_contratadas': potencias_contratadas, + 'modo_control_potencia': '1', + 'marca_medida_con_perdidas': 'S', + 'tension_del_suministro': '10', + 'vas_trafo': '50', + 'porcentaje_perdidas': '05', + } + condiciones_contractuales.feed(condiciones_contractuales_fields) + autoconsumo = get_autoconsumo('distri') + + # Contrato + contrato = e2.Contrato() + contrato_fields = { + 'id_contrato': id_contrato, + 'autoconsumo': autoconsumo, + 'tipo_contrato_atr': '01', + 'cups_principal': 'ES1234000000000001JN0F', + 'condiciones_contractuales': condiciones_contractuales, + } + contrato.feed(contrato_fields) + + # PuntosDeMedida + puntos_de_medida = self.puntos_de_medida + self.puntos_de_medida.punto_de_medida_list[0].feed({"comentarios": "Comentario sobre Punto Medida"}) + + # RegistroDoc + doc1 = c1.RegistroDoc() + registro_doc_fields1 = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'https://www.google.com/', + } + doc1.feed(registro_doc_fields1) + # RegistrosDocumento + registros = c1.RegistrosDocumento() + registros_documento_fields = { + 'registro_doc_list': doc1, + } + registros.feed(registros_documento_fields) + + # IdCliente + id_cliente = e2.IdCliente() + id_cliente_fields = { + 'tipo_identificador': 'NI', + 'identificador': 'B36385870', + 'tipo_persona': 'J', + } + id_cliente.feed(id_cliente_fields) + + # ActivacionReposicion + activacion_reposicion = e2.ActivacionReposicion() + activacion_reposicion_fields = { + 'datos_notificacion': datos_notificacion, + 'contrato': contrato, + 'puntos_de_medida': puntos_de_medida, + 'id_cliente': id_cliente, + 'registros_documento': registros, + 'comentarios': 'Comentarios Varios' + } + activacion_reposicion.feed(activacion_reposicion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'activacion_reposicion': activacion_reposicion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e205.read()) + + def test_create_pas06(self): + # MensajeActivacionReposicion + mensaje = e2.MensajeNotificacionActivacionPorReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='06') + + # DatosNotificacion + datos_activacion = e2.DatosActivacion() + datos_activacion_fields = { + 'fecha': '2016-08-21', + 'resultado_activacion': '01', + 'en_servicio': 'S', + } + datos_activacion.feed(datos_activacion_fields) + + # Contrato + contrato = e2.Contrato() + id_contrato = e2.IdContrato() + id_contrato.feed({'cod_contrato': '00001'}) + contrato.feed({'id_contrato': id_contrato}) + + # PuntosDeMedida + puntos_de_medida = self.puntos_de_medida + self.puntos_de_medida.punto_de_medida_list[0].feed({"comentarios": "Comentarios Varios"}) + + # ActivacionReposicion + notificacion_activacion_reposicion = e2.NotificacionActivacionPorReposicion() + notificacion_activacion_reposicion_fields = { + 'datos_activacion': datos_activacion, + 'contrato': contrato, + 'puntos_de_medida': puntos_de_medida, + } + notificacion_activacion_reposicion.feed(notificacion_activacion_reposicion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'notificacion_activacion_reposicion': notificacion_activacion_reposicion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e206.read()) + + def test_create_pas09_accept(self): + # MensajeActivacionReposicion + mensaje = e2.MensajeAceptacionAnulacion() + + # Cabecera + cabecera = get_header(process='E2', step='09') + + # DatosNotificacion + datos_activacion = e2.DatosActivacion() + datos_activacion_fields = { + 'fecha': '2016-08-21', + 'resultado_activacion': '01', + 'en_servicio': 'S', + } + datos_activacion.feed(datos_activacion_fields) + + # Contrato + contrato = e2.Contrato() + id_contrato = e2.IdContrato() + id_contrato.feed({'cod_contrato': '00001'}) + contrato.feed({'id_contrato': id_contrato}) + + # PuntosDeMedida + puntos_de_medida = self.puntos_de_medida + self.puntos_de_medida.punto_de_medida_list[0].feed({"comentarios": "Comentarios Varios"}) + + # ActivacionReposicion + aceptacion_anulacion = e2.AceptacionAnulacion() + aceptacion_anulacion_fields = { + 'fecha_aceptacion': "2020-05-01", + } + aceptacion_anulacion.feed(aceptacion_anulacion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'aceptacion_anulacion': aceptacion_anulacion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e209_accept.read()) + + def test_create_pas12(self): + # MensajeRechazoReposicion + mensaje = e2.MensajeRechazoReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='12') + + # RechazoReposicion + rechazo_reposicion = e2.RechazoReposicion() + rechazo_reposicion_fields = { + 'fecha_rechazo': '2020-05-01', + } + rechazo_reposicion.feed(rechazo_reposicion_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'rechazo_reposicion': rechazo_reposicion, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e212.read()) + + def test_create_pas13(self): + # MensajeContestacionIncidencia + mensaje = e1.MensajeContestacionIncidencia() + + # Cabecera + cabecera = get_header(process='E2', step='13') + + # Telefono + telefono = e2.Telefono() + telefono_fields = { + 'prefijo_pais': '34', + 'numero': '683834841', + } + telefono.feed(telefono_fields) + + # Contacto + contacto = e2.Contacto() + contacto_fields = { + 'persona_de_contacto': 'Nombre Inventado', + 'telefonos': [telefono], + 'correo_electronico': 'mail_falso@dominio.com', + } + contacto.feed(contacto_fields) + + # ContestacionIncidencia + contestacion_incidencia = e2.ContestacionIncidencia() + contestacion_incidencia_fields = { + 'contestacion_incidencia': '02', + 'contacto': contacto + } + contestacion_incidencia.feed(contestacion_incidencia_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'contestacion_incidencia': contestacion_incidencia, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e213.read()) + + def test_create_pas14(self): + # MensajeContestacionIncidencia + mensaje = e2.MensajeConsultaSolicitudReposicion() + + # Cabecera + cabecera = get_header(process='E2', step='14') + + # Telefono + telefono = e2.Telefono() + telefono_fields = { + 'prefijo_pais': '34', + 'numero': '683834841', + } + telefono.feed(telefono_fields) + + # Contacto + contacto = e2.Contacto() + contacto_fields = { + 'persona_de_contacto': 'Nombre Inventado', + 'telefonos': [telefono], + 'correo_electronico': 'mail_falso@dominio.com', + } + contacto.feed(contacto_fields) + contacto2 = e2.Contacto() + contacto2_fields = { + 'persona_de_contacto': 'Nombre Inventado', + 'telefonos': [telefono], + 'correo_electronico': 'mail_falso@dominio.com', + } + contacto2.feed(contacto2_fields) + + # ContestacionIncidencia + contestacion_incidencia = e2.ContestacionIncidencia() + contestacion_incidencia_fields = { + 'contestacion_incidencia': '02', + 'contacto': contacto + } + contestacion_incidencia.feed(contestacion_incidencia_fields) + + # SolicitudReposicion + solicitud_reposicion = e2.SolicitudReposicionConsulta() + solicitud_reposicion_fields = { + 'codigo_de_solicitud_ref': '201605219400', + 'tipo_de_reposicion': '01', + 'fecha_prevista_accion': '2016-05-05', + 'actuacion_campo': 'N', + } + solicitud_reposicion.feed(solicitud_reposicion_fields) + + # DireccionPS + direccion_ps = t1.DireccionPS() + direccion_ps_fields = { + 'pais': u'Espa帽a', + 'provincia': '17', + 'municipio': '17079', + 'poblacion': '17079000501', + 'tipo_via': 'PZ', + 'cod_postal': '17001', + 'calle': 'MELA MUTERMILCH', + 'numero_finca': '2', + 'duplicador_finca': 'n/a', + 'escalera': '001', + 'piso': '001', + 'puerta': '001', + 'tipo_aclarador_finca': 'BI', + 'aclarador_finca': 'Bloque de Pisos', + } + direccion_ps.feed(direccion_ps_fields) + + # RegistrosDocumento + registros_documento = t1.RegistrosDocumento() + # RegistroDoc + rd1 = t1.RegistroDoc() + registro_doc_fields = { + 'tipo_doc_aportado': '08', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', + } + rd1.feed(registro_doc_fields) + rd2 = t1.RegistroDoc() + registro_doc_fields = { + 'tipo_doc_aportado': '07', + 'direccion_url': 'http://eneracme.com/docs/NIF11111111H.pdf', + } + rd2.feed(registro_doc_fields) + registros_documento_fields = { + 'registro_doc_list': [rd1, rd2], + } + registros_documento.feed(registros_documento_fields) + + mensaje_fields = { + 'cabecera': cabecera, + 'solicitud_reposicion': solicitud_reposicion, + 'direccion_ps': direccion_ps, + 'registros_documentos': registros_documento, + } + mensaje.feed(mensaje_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_e214.read()) + + class test_T1(unittest.TestCase): def setUp(self): @@ -5486,7 +5890,7 @@ def test_create_pas01(self): 'susp_baja_impago_en_curso': 'S', } datos_solicitud.feed(datos_solicitud_fields) - autoconsumo = get_autoconsumo(t1) + autoconsumo = get_autoconsumo() # Contrato contrato = t1.ContratoT101() @@ -5717,7 +6121,7 @@ def test_create_pas05(self): 'porcentaje_perdidas': '05', } condiciones_contractuales.feed(condiciones_contractuales_fields) - autoconsumo = get_autoconsumo(t1) + autoconsumo = get_autoconsumo() # Contrato contrato = t1.Contrato() contrato_fields = { From c4dfcf6f84e55dae8508e78c21c3a4ec8e7790af Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Dec 2024 11:41:31 +0100 Subject: [PATCH 16/19] new corretgir tipus dades i posar funcio deprecated --- gestionatr/input/messages/F1.py | 8 +++++++- gestionatr/input/messages/Q1.py | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gestionatr/input/messages/F1.py b/gestionatr/input/messages/F1.py index ceaa9da8..3e5c8230 100644 --- a/gestionatr/input/messages/F1.py +++ b/gestionatr/input/messages/F1.py @@ -5,6 +5,7 @@ from gestionatr.defs import TARIFES_SEMPRE_MAX, TARIFES_TD from datetime import datetime, date, timedelta from gestionatr.utils import repartir_consums_entre_lectures +import warnings import six # Magnituds d'OCSUM @@ -418,7 +419,7 @@ def numero_dias(self): @property def tipo_pm(self): if hasattr(self._periodo, 'TipoPM'): - return int(self._periodo.TipoPM.text.strip()) + return self._periodo.TipoPM.text.strip() return None @@ -508,6 +509,9 @@ def get_tipus_punt_mesura(self): pass def get_coeficient_repartiment(self): + # la primera es per indicar la crida de la funcio tatxada i la segona es perque surti per consola el avis + warnings.warn("El coeficient de repartiment ja no s'informa en el F1", DeprecationWarning) + warnings.warn("El coeficient de repartiment ja no s'informa en el F1") try: if self.factura.Autoconsumo and self.factura.Autoconsumo.InstalacionGenAutoconsumo: beta_list = [] @@ -526,6 +530,8 @@ def get_coeficient_repartiment(self): pass def get_coeficient_repartiment_from_cr(self): + warnings.warn("El coeficient de repartiment ja no s'informa en el F1", DeprecationWarning) + warnings.warn("El coeficient de repartiment ja no s'informa en el F1") try: for concepte in self.conceptos_repercutibles: if concepte.concepto_repercutible == '82': diff --git a/gestionatr/input/messages/Q1.py b/gestionatr/input/messages/Q1.py index d5c7df79..2920d3eb 100644 --- a/gestionatr/input/messages/Q1.py +++ b/gestionatr/input/messages/Q1.py @@ -256,7 +256,7 @@ def numero_dias(self): @property def tipo_pm(self): if hasattr(self.datos, 'TipoPM'): - return int(self.datos.TipoPM.text.strip()) + return self.datos.TipoPM.text.strip() return None From b108a5d9dd298211432eb5bdfac87a54713336c8 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Dec 2024 11:42:00 +0100 Subject: [PATCH 17/19] new Test --- tests/test_input.py | 270 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 269 insertions(+), 1 deletion(-) diff --git a/tests/test_input.py b/tests/test_input.py index 86ccd18b..a4377c05 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -2022,7 +2022,7 @@ def test_q101(self): self.assertEqual(datos.fecha_desde_factura, u'2016-04-04') self.assertEqual(datos.fecha_hasta_factura, u'2016-05-05') self.assertEqual(datos.numero_dias, 30) - self.assertEqual(datos.tipo_pm, 05) + self.assertEqual(datos.tipo_pm, '05') # Energia Activa energia_activa = q1.energia_activa terminos_energia_activa = energia_activa.terminos_energia_activa @@ -2708,6 +2708,274 @@ def testATRInvoice(self): self.assertEqual(fact.get_info_facturacio_potencia(), u'icp') + def testATRInvoice_Autoconsumo(self): + f1 = F1(self.xml_f101_factura_atr_autoconsumo_output) + f1.parse_xml() + + self.assertEqual(f1.otras_facturas, []) + self.assertEqual(len(f1.facturas_atr), 1) + + fact = f1.facturas_atr[0] + + datos_factura = fact.datos_factura + + direccion_suministro = datos_factura.direccion_suministro + + self.assertEqual(direccion_suministro.pais, u'Espa帽a') + self.assertEqual(direccion_suministro.provincia, u'17') + self.assertEqual(direccion_suministro.municipio, u'17079') + self.assertEqual(direccion_suministro.cod_postal, u'17003') + self.assertEqual(direccion_suministro.calle, u'Nom carrer') + self.assertEqual(direccion_suministro.numero_finca, u'3') + self.assertEqual(direccion_suministro.escalera, u'1') + self.assertEqual(direccion_suministro.piso, u'1') + self.assertEqual(direccion_suministro.puerta, u'1') + + cliente = datos_factura.cliente + + self.assertEqual(cliente.tipo_identificador, u'NI') + self.assertEqual(cliente.identificador, u'70876712G') + self.assertEqual(cliente.tipo_persona, u'F') + + self.assertEqual(datos_factura.cod_contrato, u'111111') + self.assertEqual(datos_factura.codigo_fiscal_factura, u'F0001') + self.assertEqual(datos_factura.tipo_factura, u'N') + self.assertEqual(datos_factura.motivo_facturacion, u'01') + self.assertEqual(datos_factura.fecha_factura, u'2017-05-01') + self.assertEqual(datos_factura.identificador_emisora, u'B11254455') + self.assertEqual(datos_factura.comentarios, u'.') + self.assertEqual(datos_factura.importe_total_factura, 100) + self.assertEqual(datos_factura.saldo_factura, 100) + self.assertEqual(datos_factura.tipo_moneda, u'02') + self.assertEqual(datos_factura.fecha_boe, u'2016-01-01') + self.assertEqual(datos_factura.tarifa_atr_fact, u'001') + self.assertEqual(datos_factura.modo_control_potencia, u'1') + self.assertEqual(datos_factura.marca_medida_con_perdidas, u'N') + self.assertEqual(datos_factura.indicativo_curva_carga, u'02') + self.assertEqual(datos_factura.fecha_desde_factura, u'2017-03-31') + self.assertEqual(datos_factura.fecha_hasta_factura, u'2017-04-30') + self.assertEqual(datos_factura.numero_dias, 30) + + potencia = fact.potencia + + terminos_potencia = potencia.terminos_potencia + self.assertEqual(len(terminos_potencia), 1) + termino_potencia = terminos_potencia[0] + + self.assertEqual(termino_potencia.fecha_desde, u'2017-03-31') + self.assertEqual(termino_potencia.fecha_hasta, u'2017-04-30') + + periodos_potencia = termino_potencia.periodos + self.assertEqual(len(periodos_potencia), 1) + periodo_potencia = periodos_potencia[0] + + self.assertDictEqual( + termino_potencia.get_contracted_periods_by_period(), + {'P1': 1000} + ) + + self.assertEqual(periodo_potencia.potencia_contratada, 1000) + self.assertEqual(periodo_potencia.potencia_max_demandada, 1000) + self.assertEqual(periodo_potencia.potencia_a_facturar, 1000) + self.assertEqual(periodo_potencia.cantidad, 1000) + self.assertEqual(periodo_potencia.precio, 0.05) + self.assertEqual(periodo_potencia.nombre, u'P1') + self.assertEqual(periodo_potencia.es_facturable(), True) + self.assertEqual(periodo_potencia.fecha_desde, u'2017-03-31') + self.assertEqual(periodo_potencia.fecha_hasta, u'2017-04-30') + + self.assertEqual(potencia.penalizacion_no_icp, u'N') + self.assertEqual(potencia.importe_total, 50) + + energia_activa = fact.energia_activa + + terminos_energia_activa = energia_activa.terminos_energia_activa + self.assertEqual(len(terminos_energia_activa), 1) + termino_energia_activa = terminos_energia_activa[0] + + self.assertEqual(termino_energia_activa.fecha_desde, u'2017-03-31') + self.assertEqual(termino_energia_activa.fecha_hasta, u'2017-04-30') + + periodos_energia = termino_energia_activa.periodos + self.assertEqual(len(periodos_energia), 1) + periodo_energia = periodos_energia[0] + + self.assertEqual(periodo_energia.valor_energia_activa, 300) + self.assertEqual(periodo_energia.cantidad, 300) + self.assertEqual(periodo_energia.precio, 0.044027) + self.assertEqual(periodo_energia.nombre, u'P1') + self.assertEqual(periodo_energia.es_facturable(), True) + self.assertEqual(periodo_energia.fecha_desde, u'2017-03-31') + self.assertEqual(periodo_energia.fecha_hasta, u'2017-04-30') + + self.assertEqual(energia_activa.importe_total, 13.21) + # validem els camps relacionats amb el autoconsum + autoconsumo = fact.autoconsumo + terminos_energia_excedentaria = autoconsumo.energia_excedentaria.terminos_energia_excedentaria + self.assertEqual(len(terminos_energia_excedentaria), 1) + termino_energia_excedentaria = terminos_energia_excedentaria[0] + + self.assertEqual(termino_energia_excedentaria.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_excedentaria.fecha_hasta, u'2022-01-31') + + periodos_excedentaria = termino_energia_excedentaria.periodos + self.assertEqual(len(periodos_energia), 3) + + periodo_excedentaria_1 = periodos_excedentaria[0] + self.assertEqual(periodo_excedentaria_1.valor_energia_excedentaria, 134.19) + self.assertEqual(periodo_excedentaria_1.cantidad, 134.19) + self.assertEqual(periodo_excedentaria_1.nombre, u'P1') + self.assertEqual(periodo_excedentaria_1.es_facturable(), True) + self.assertEqual(periodo_excedentaria_1.fecha_desde, u'2021-12-31') + self.assertEqual(periodo_excedentaria_1.fecha_hasta, u'2022-01-31') + + periodo_excedentaria_2 = periodos_excedentaria[1] + self.assertEqual(periodo_excedentaria_2.valor_energia_excedentaria, 73.15) + self.assertEqual(periodo_excedentaria_2.cantidad, 73.15) + self.assertEqual(periodo_excedentaria_2.nombre, u'P2') + self.assertEqual(periodo_excedentaria_2.es_facturable(), True) + self.assertEqual(periodo_excedentaria_2.fecha_desde, u'2021-12-31') + self.assertEqual(periodo_excedentaria_2.fecha_hasta, u'2022-01-31') + + periodo_excedentaria_3 = periodos_excedentaria[2] + self.assertEqual(periodo_excedentaria_3.valor_energia_excedentaria, 116.76) + self.assertEqual(periodo_excedentaria_3.cantidad, 116.76) + self.assertEqual(periodo_excedentaria_3.nombre, u'P3') + self.assertEqual(periodo_excedentaria_3.es_facturable(), True) + self.assertEqual(periodo_excedentaria_3.fecha_desde, u'2021-12-31') + self.assertEqual(periodo_excedentaria_3.fecha_hasta, u'2022-01-31') + # nomes validem les dates perque imprementen la mateixa classe + terminos_energia_neta_gen = autoconsumo.energia_neta_gen.terminos_energia_neta_gen + terminos_energia_autoconsumida = autoconsumo.energia_autoconsumida.terminos_energia_autoconsumida + self.assertEqual(len(terminos_energia_neta_gen), 1) + self.assertEqual(len(terminos_energia_autoconsumida), 1) + + termino_energia_neta_gen = terminos_energia_neta_gen[0] + self.assertEqual(termino_energia_neta_gen.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_neta_gen.fecha_hasta, u'2022-01-31') + + termino_energia_autoconsumida = terminos_energia_autoconsumida[0] + self.assertEqual(termino_energia_autoconsumida.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_autoconsumida.fecha_hasta, u'2022-01-31') + # datos cau + datos_cau = autoconsumo.datos_cau + self.assertEqual(datos_cau.cau, u'ES1234000000000001JN0FA001') + self.assertEqual(datos_cau.colectivo, u'S') + self.assertEqual(datos_cau.esquema_medida, u'B') + # instalacion gen + instalacion_gen_auto = datos_cau.instalacion_gen_autoconsumo[0] + self.assertEqual(instalacion_gen_auto.cil, u'ES1234000000000001JN0F001') + self.assertEqual(instalacion_gen_auto.tipo_instalacion, u'01') + self.assertEqual(instalacion_gen_auto.exento_cargos, u'S') + # energia neta gen + terminos_energia_neta_gen_inst = instalacion_gen_auto.energia_neta_gen.terminos_energia_neta_gen + self.assertEqual(len(terminos_energia_neta_gen_inst), 1) + termino_energia_neta_gen_inst = terminos_energia_neta_gen_inst[0] + self.assertEqual(termino_energia_neta_gen_inst.fecha_desde, u'2021-12-31') + self.assertEqual(termino_energia_neta_gen_inst.fecha_hasta, u'2022-01-31') + + # validem la resta de dades + impuesto_electrico = fact.impuesto_electrico + + self.assertEqual(impuesto_electrico.base, 0) + self.assertEqual(impuesto_electrico.porcentaje, 0) + self.assertEqual(impuesto_electrico.importe, 0) + + # TODO: ConceptoRepercutible + + ivas = fact.ivas + self.assertEqual(len(ivas), 1) + iva = ivas[0] + + self.assertEqual(iva.base, 63.21) + self.assertEqual(iva.porcentaje, 21) + self.assertEqual(iva.importe, 13.27) + + # TODO: IVAReducido + + medidas = fact.medidas + self.assertEqual(len(medidas), 1) + medida = medidas[0] + + self.assertEqual(medida.cod_pm, u'ES1234000000000001JN0F') + + modelos_aparatos = medida.modelos_aparatos + self.assertEqual(len(modelos_aparatos), 1) + modelo_aparato = modelos_aparatos[0] + + self.assertEqual(modelo_aparato.tipo_aparato, u'CC') + self.assertEqual(modelo_aparato.marca_aparato, u'199') + self.assertEqual(modelo_aparato.numero_serie, u'C99999') + self.assertEqual(modelo_aparato.tipo_dhedm, u'1') + self.assertEqual(modelo_aparato.gir_comptador, 10 ** 5) + + integradores = modelo_aparato.integradores + self.assertEqual(len(integradores), 1) + integrador = integradores[0] + + self.assertEqual(integrador.magnitud, u'AE') + self.assertEqual(integrador.codigo_periodo, u'10') + self.assertEqual(integrador.constante_multiplicadora, 1) + self.assertEqual(integrador.numero_ruedas_enteras, 5) + self.assertEqual(integrador.numero_ruedas_decimales, 0) + self.assertEqual(integrador.consumo_calculado, 300) + self.assertEqual(integrador.tipus, u'A') + self.assertEqual(integrador.periode, u'P1') + self.assertEqual(integrador.gir_comptador, 10 ** 5) + self.assertEqual(integrador.ometre, False) + + lectura_desde = integrador.lectura_desde + + self.assertEqual(lectura_desde.fecha, u'2017-03-31') + self.assertEqual(lectura_desde.procedencia, u'30') + self.assertEqual(lectura_desde.lectura, 100) + + lectura_hasta = integrador.lectura_hasta + + ajuste = integrador.ajuste + + self.assertEqual(ajuste, None) + + self.assertEqual(lectura_hasta.fecha, u'2017-04-30') + self.assertEqual(lectura_hasta.procedencia, u'30') + self.assertEqual(lectura_hasta.lectura, 400) + + info_al_consumidor = fact.informacion_al_consumidor + + self.assertEqual(len(info_al_consumidor.periodos), 1) + + periodo_max = info_al_consumidor.periodos[0] + + self.assertEqual(periodo_max.potencia_max_demandada_anio_movil, 3000) + + self.assertEqual(info_al_consumidor.valor_energia_media_cp, 61083.25) + + registro = f1.registro + + self.assertEqual(registro.importe_total, 76.48) + self.assertEqual(registro.saldo_total, 76.48) + self.assertEqual(registro.total_recibos, 1) + self.assertEqual(registro.tipo_moneda, u'02') + self.assertEqual(registro.fecha_valor, u'2017-05-01') + self.assertEqual(registro.fecha_limite_pago, u'2017-06-01') + self.assertEqual(registro.iban, u'ES7712341234161234567890') + self.assertEqual(registro.id_remesa, u'0') + + self.assertDictEqual( + fact.get_create_invoice_params(), + { + 'tipo_rectificadora': 'N', + 'tipo_factura': '01', + 'date_invoice': '2017-05-01', + 'check_total': 100, + 'origin': 'F0001', + 'origin_date_invoice': '2017-05-01', + 'reference': 'F0001', + } + ) + + self.assertEqual(fact.get_info_facturacio_potencia(), u'icp') + def test_integradores_DH(self): f1 = F1(self.xml_f101_integradores_dh) f1.parse_xml() From ec2af0c0e82ee522c6eb81561ceaf437eb48c0b6 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Dec 2024 11:55:38 +0100 Subject: [PATCH 18/19] fix Tests --- tests/test_input.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_input.py b/tests/test_input.py index a4377c05..3ebd92c4 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -2819,7 +2819,7 @@ def testATRInvoice_Autoconsumo(self): self.assertEqual(termino_energia_excedentaria.fecha_hasta, u'2022-01-31') periodos_excedentaria = termino_energia_excedentaria.periodos - self.assertEqual(len(periodos_energia), 3) + self.assertEqual(len(periodos_excedentaria), 3) periodo_excedentaria_1 = periodos_excedentaria[0] self.assertEqual(periodo_excedentaria_1.valor_energia_excedentaria, 134.19) @@ -3211,7 +3211,7 @@ def test_factura_atr_autoconsum_20TD(self): self.assertEqual(termino_energia_excedentaria.fecha_hasta, u'2022-01-31') periodos_excedentaria = termino_energia_excedentaria.periodos - self.assertEqual(len(periodos_energia), 3) + self.assertEqual(len(periodos_excedentaria), 3) periodo_excedentaria_1 = periodos_excedentaria[0] self.assertEqual(periodo_excedentaria_1.valor_energia_excedentaria, 134.19) From 11e35ba38c6b6a63be2dd6fdd0981a7973ff5b41 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 30 Dec 2024 10:25:30 +0100 Subject: [PATCH 19/19] new revisio 19 desembre --- gestionatr/data/TiposSencillos.xsd | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/gestionatr/data/TiposSencillos.xsd b/gestionatr/data/TiposSencillos.xsd index 33e0f2ba..d9604de2 100644 --- a/gestionatr/data/TiposSencillos.xsd +++ b/gestionatr/data/TiposSencillos.xsd @@ -2521,19 +2521,13 @@ Tipo de autoconsumo (Tabla 113) 00 Sin autoconsumo - 01 Autoconsumo tipo 1 - 2A Autoconsumo tipo 2 segun el Art. 13.2.a) del RD 900/2015 - 2B Autoconsumo tipo 2 segun el Art. 13.2.b) del RD 900/2015 11 Sin excedentes 12 Con excedentes + 0C Baja como miembro de autoconsumo colectivo - - - -