The post Generics and virtual functions first appeared on In Fine - Le Blog.
]]>Hybridizer supports generics and virtual functions. These concepts allow writing flexible code with type parameters, defering actual behavior resolution to type instanciation by client code. These are fondamental features of modern languages, easing encapsulation, code factorization and concepts expression.
However in C#, type parameters are resolved at runtime, which comes with a significant performance penalty. Hybridizer maps them to C++ templates, which are resolved at compile time. As such, templates allow inlining and interprocedural optimization as in plain C code. Performance penalty is therefore inexisting.
As an example, we will demonstrate usage of generics on a fun mathematical example : the resolution of heat equation with random walks.
Given a connected bounded 2D domain Ω in ℝ2, its border ∂Ω and a function 𝑓∈:L2(∂Ω), we search 𝑢 such as:
Δ𝑢=0 on Ω
𝑢=𝑓 on ∂Ω
Classic ways to numerically solve this problem involve finite elements or similar discretization methods which come with different regularity constraits on ∂Ω.
It happens we can solve it using montecarlo methods by launching brownian motions. For each point (𝑥,𝑦) in Ω we launch 𝑁 random walks. For each random walk, we wait until it reaches ∂Ω and sample the temperature at exit point. We then sum all those exit temperatures and divide by 𝑁 to get the numerical solution :
This method is quite slow (compared to finite elements or similar). But it has some advantages:
Full explanations can be found on this old research report (in french).
We structured our code as would be a generic mathematical solver. The main class is MonteCarloHeatSolver
, which takes a I2DProblem
to solve it.
This code is generic and solves a problem described by an interface:
public class MonteCarloHeatSolver
{
I2DProblem _problem;
public MonteCarloHeatSolver(I2DProblem problem)
{
_problem = problem;
}
[EntryPoint]
public void Solve()
{
int stopX = _problem.MaxX();
int stopY = _problem.MaxY();
for (int j = 1 + threadIdx.y + blockIdx.y * blockDim.y; j < stopY; j += blockDim.y * gridDim.y) {
for (int i = 1 + threadIdx.x + blockIdx.x * blockDim.x; i < stopX; i += blockDim.x * gridDim.x) {
float2 position;
position.x = i;
position.y = j;
_problem.Solve(position);
}
}
}
}
where actual resolution (geometry related) is deferred to a I2DProblem
. The call to Solve
(virtual) won’t be matched to templates. But the Hybridizer will handle this and dispatch this call correctly at runtime. This will cost a vtable lookup, but only once per thread. Performance critical code is in the random walk and the boundary conditions, which are generic parameters of the 2D problem.
An example of C# code instanciation can be:
var problem = new SquareProblem<SimpleWalker, SimpleBoundaryCondition>(N, iterCount);
var solver = new MonteCarloHeatSolver(problem);
solver.Solve();
We then have two interfaces describing random walks and boundary conditions :
[HybridTemplateConcept]
public interface IRandomWalker
{
[Kernel]
void Init();
[Kernel]
void Walk(float2 f, out float2 t);
}
[HybridTemplateConcept]
public interface IBoundaryCondition
{
[Kernel]
float Temperature(float x, float y);
}
These interfaces are decorated with [HybridTemplateConcept]
which tells the Hybridizer that these types will be used as type parameters. They can be extended by actual classes such as:
public struct SimpleBoundaryCondition : IBoundaryCondition
{
[Kernel]
public float Temperature(float x, float y)
{
if ((x >= 1.0F && y >= 0.5F) || (x <= 0.0F && y <= 0.5F))
return 1.0F;
return 0.0F;
}
}
Generic types using these interfaces have to tell the hybridizer how they want it to generate template code from generics. This is again done by using attributes:
For example:
[HybridRegisterTemplate(Specialize = typeof(SquareProblem<SimpleWalker, SimpleBoundaryCondition>))]
public class SquareProblem<TRandomWalker, TBoundaryCondition>: I2DProblem
where TRandomWalker : struct, IRandomWalker
where TBoundaryCondition: struct, IBoundaryCondition
{
// other interface methods implementations
// ...
[Kernel]
public void Solve(float2 position)
{
TRandomWalker walker = default(TRandomWalker);
TBoundaryCondition boundaryCondition = default(TBoundaryCondition);
walker.Init(); // generic parameter method call -- will be inlined
float temperature = 0.0F;
float size = (float)_N;
for (int iter = 0; iter < _iter; ++iter)
{
float2 f = position;
while (true)
{
float2 t;
walker.Walk(f, out t); // generic parameter method call -- will be inlined
// when on border, break
if(t.x <= 0.0F || t.y >= size || t.x >= size || t.y <= 0.0F)
{
// generic parameter method call -- will be inlined
temperature += boundaryCondition.Temperature((float)t.x * _h, (float)t.y * _h);
break;
}
// otherwise continue walk
f = t;
}
}
_inner[((int)(position.y - 1)) * (_N - 1) + (int)(position.x - 1)] = temperature * _invIter;
}
}
[HybridRegisterTemplate(Specialize = typeof(TetrisProblem<SimpleWalker, TetrisBoundaryCondition>))]
public class TetrisProblem<TRandomWalker, TBoundaryCondition> : I2DProblem
where TRandomWalker : struct, IRandomWalker
where TBoundaryCondition : struct, IBoundaryCondition
{
// actual interface implementation
}
Virtual functions trigger a callvirt
in the MSIL.
IL_005e: callvirt instance void MonteCarloHeatEquation.I2DProblem::Solve
Profiling the generated code with nvvp shows us that a vtable is generated by the Hybridizer (ensuring the right method is called):
On the other hand, IRandomWalker
and IBoundaryCondition
type parameters are mapped to templates. Their methods are therefore inlined, as shown in this nvvp profiling:
By the way: the images above show that your C# code is linked to the sass in the profiler. See our post about debugging and profiling
With few restrictions, you can safely use generics type parameters and dispatchant calls in your C# code. Hybridizer will map that to the correct concept (vtable or template) as your required for.
Dispatchant calls give you full flexibility of an inheritance hierarchy, but come at a performance cost. On the other hand, generics deliver full performance (inlined calls), as long as the right metadata has been provided.
The post Generics and virtual functions first appeared on In Fine - Le Blog.
]]>The post From C# to SIMD : Numerics.Vector and Hybridizer first appeared on In Fine - Le Blog.
]]>System.Numerics.Vector is a library provided by .Net (as a nuget package), which tries to leverage SIMD instruction on target hardware. It exposes a few value types, such as Vector<T>
, which are recognized by RyuJIT as intrinsics.
Supported intrinsics are listed in the core-clr github repository.
This allows C# SIMD acceleration, as long as code is modified to use these intrinsic types, instead of scalar floating point elements.
On the other hand, Hybridizer aims to provide those benefits without being intrusive in the code (only metadata is required).
We naturally wanted to test if System.Numerics.Vector delivers good performance, compared to Hybridizer.
Summary We measured that Numerics.Vector provides good speed-up over C# code as long as no transcendental function is involved (such as Math.Exp), but still lags behind Hybridizer. Because of the lack of some operators and mathematical functions, Numerics can also generate really slow code (when AVX pipeline is broken). In addition, code modification is a heavy process, and can’t easily be rolled back. |
We wrote and ran two benchmarks, and for each of them we have four versions:
Processor is a core i7-4770S @ 3.1GHz (max measured turbo in AVX mode being 3.5GHz). Peak flops is 224 GFlop/s, or 112 GCFlop/s, if we count FMA as one (since our processor supports it).
This is a compute-intensive benchmark. For each element of a large double precision array (8 millions elements: 67MBytes), we iterate twelve times the computation of an exponential’s Taylor expansion (expm1). This is largely enough to enter the compute-bound world, by hiding memory operations latency behind a full bunch of floatin point operations.
Scalar code is simply:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double expm1(double x)
{
return ((((((((((((((15.0 + x)
* x + 210.0)
* x + 2730.0)
* x + 32760.0)
* x + 360360.0)
* x + 3603600.0)
* x + 32432400.0)
* x + 259459200.0)
* x + 1816214400.0)
* x + 10897286400.0)
* x + 54486432000.0)
* x + 217945728000.0)
* x + 653837184000.0)
* x + 1307674368000.0)
* x * 7.6471637318198164759011319857881e-13;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double twelve(double x)
{
return expm1(expm1(expm1(expm1(expm1(expm1(expm1(expm1(expm1(expm1(expm1(x)))))))))));
}
on which we added the AggressiveInlining attribute to help RyuJit to merge operations at JIT time.
The Numerics.Vector version of the code is quite the same:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector<double> expm1(Vector<double> x)
{
return ((((((((((((((new Vector<double>(15.0) + x)
* x + new Vector<double>(210.0))
* x + new Vector<double>(2730.0))
* x + new Vector<double>(32760.0))
* x + new Vector<double>(360360.0))
* x + new Vector<double>(3603600.0))
* x + new Vector<double>(32432400.0))
* x + new Vector<double>(259459200.0))
* x + new Vector<double>(1816214400.0))
* x + new Vector<double>(10897286400.0))
* x + new Vector<double>(54486432000.0))
* x + new Vector<double>(217945728000.0))
* x + new Vector<double>(653837184000.0))
* x + new Vector<double>(1307674368000.0))
* x * new Vector<double>(7.6471637318198164759011319857881e-13);
}
The four versions of this code give the following performance results:
Flavor | Scalar C# | Vector C# | Vector Hyb | Scalar Hyb |
GCFlop/s | 4.31 | 19.95 | 41.29 | 59.65 |
As stated, Numerics.Vector delivers a close to 4x speedup from scalar. However, performance is far from what we reach with the Hybridizer. If we look at generated assembly, it’s quite clear why:
vbroadcastsd ymm0,mmword ptr [7FF7C2255B48h]
vbroadcastsd ymm1,mmword ptr [7FF7C2255B50h]
vbroadcastsd ymm2,mmword ptr [7FF7C2255B58h]
vbroadcastsd ymm3,mmword ptr [7FF7C2255B60h]
vbroadcastsd ymm4,mmword ptr [7FF7C2255B68h]
vbroadcastsd ymm5,mmword ptr [7FF7C2255B70h]
vbroadcastsd ymm7,mmword ptr [7FF7C2255B78h]
vbroadcastsd ymm8,mmword ptr [7FF7C2255B80h]
vaddpd ymm0,ymm0,ymm6
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm1
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm2
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm3
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm4
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm5
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm7
vmulpd ymm0,ymm0,ymm6
vaddpd ymm0,ymm0,ymm8
vmulpd ymm0,ymm0,ymm6
; repeated
Fused multiply add are not reconstructed, and constant operands are reloaded from constant pool at each expm1 invokation. This leads to high registry pressure (for constants), where memory operands could save some.
Here is what the Hybridizer generates from scalar code:
vaddpd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vfmadd213pd ymm1,ymm0,ymmword ptr []
vmulpd ymm0,ymm0,ymm1<br />
vmulpd ymm0,ymm0,ymmword ptr []
vmovapd ymmword ptr [rsp+0A20h],ymm0
; repeated
This reconstructs fused multiply-add, and leverages memory operands to save registers.
Why are we not to peak performance (112GCFlops)? That is because Haswell has two pipelines for FMA, and a latency of 5 (see intel intrinsic guide. To reach peak performance, we would need to interleave 2 independant FMA instruction at each cycle. This could be done by reordering instructions, since reorder buffer is not long enough to execute instructions too far in the pipeline. LLVM, our backend compiler, is not capable of such reordering. To get better performance, we unfortunately have to write assembly by hand (which is not exactly what a C# programmer expects to do in the morning).
In this second benchmark, we need to compute the exponential of all the components of a vector. To do that, we invoke Math.Exp.
Scalar code is:
[EntryPoint]
public static void Apply_scal(double[] d, double[] a, double[] b, double[] c, int start, int stop)
{
int sstart = start + threadIdx.x + blockDim.x * blockIdx.x;
int step = blockDim.x * gridDim.x;
for (int i = sstart; i < stop; i += step)
{
d[i] = a[i] * Math.Exp(b[i]) * Math.Exp(c[i]);
}
}
This function is later called in a Parallel.For
construct.
However, Numerics.Vector does not provide a vectorized exponential function. Therefore, we have to write our own:
[IntrinsicFunction("hybridizer::exp")]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector<double> Exp(Vector<double> x)
{
double[] tmp = new double[Vector<double>.Count];
for(int k = 0; k < Vector<double>.Count; ++k)
{
tmp[k] = Math.Exp(x[k]);
}
return new Vector<double>(tmp);
}
As a glance, we can see the problems: each exponential will first break the AVX context (which cost tens of cycles), and trigger 4 function calls instead of one.
With no surprise, this code performs really badly:
Flavor | Scalar C# | Vector C# | Vector Hyb | Scalar Hyb |
GB/s | 13.42 | 1.80 | 14.91 | 14.13 |
If we look at the generated assembly, it confirms what we suspected (context switched, and ymm register splitting):
vextractf128 xmm9,ymm6,1
vextractf128 xmm10,ymm7,1
vextractf128 xmm11,ymm8,1
call 00007FF8127C6B80 // exp
vinsertf128 ymm8,ymm8,xmm11,1
vinsertf128 ymm7,ymm7,xmm10,1
vinsertf128 ymm6,ymm6,xmm9,1
Branch are expressed using if
or ternary operators in scalar code. However, those are not available in Numerics.Vector, since the code is manually vectorized.
Branches must be expressed using ConditionalSelect
, which leads to code:
public static Vector<double> func(Vector<double> x)
{
Vector<long> mask = Vector.GreaterThan(x, one);
Vector<double> result = Vector.ConditionalSelect(mask, x, one);
return result;
}
As we can see, expressing conditions with Numerics.Vector is not intuitive, intrusive, and bug prone. It’s actually the same as writing AVX compiler intrinsics in C++. On the other hand, Hybridizer supports conditions, which allow you to write the above code this way:
[Kernel]
public static double func(double x)
{
if (x > 1.0)
return x;
return 1.0;
}
Numerics.Vector gives easily reasonable performances on simple code (no branches, no function calls). Speed-up is what we expect (vector unit width) on simple code. However, it’s time-consuming and error-prone to express conditions, and performance is completely broken as soon as some Jitter Intrinsic is missing (such as exponential).
The post From C# to SIMD : Numerics.Vector and Hybridizer first appeared on In Fine - Le Blog.
]]>The post Mandelbrot with Hybridizer first appeared on In Fine - Le Blog.
]]>We describe here the implementation of Mandelbrot fractal image generation using Hybridizer. The language of choice is C#, and implementation is done using 32-bits precision arithmetic.
Mandelbrot set is the set of values c for which the sequence:
remains bounded in the complex plane.
It happens an equivalent definition is:
That means that while calculating 𝑧𝑛 values exceeds 2 at any iteration, the point c is not in the set.
In other words, this can be simulated via this code:
public static int IterCount(float cx, float cy)
{
int result = 0;
float x = 0.0f;
float y = 0.0f;
float xx = 0.0f, yy = 0.0f;
while (xx + yy <= 4.0f && result < maxiter) // are we out of control disk?
{
xx = x * x;
yy = y * y;
float xtmp = xx - yy + cx;
y = 2.0f * x * y + cy; // computes z^2 + c
x = xtmp;
result++;
}
return result;
}
which has to be run for every point (cx, cy) in the complex plane.
To produce an output image, we therefore compute IterCount for every pixel in the square [−2,2]×[−2,2], discretized as a 𝑁×𝑁 square grid:
public static void Run(int[] light)
{
for (int i = 0; i < N; i += 1)
{
for (int j = 0; j < N; j += 1)
{
float x = fromX + i * h;
float y = fromY + j * h;
light[i* N + j] = IterCount(x, y);
}
}
}
where N, h, fromX and fromY are application parameters.
We here compute a 2048×2048 image using C# on a core i7-4770S @ 3.10GHz.
This unoptimized versions runs in 420 milliseconds, yielding
Its crystal clear that this code is embarrassingly parallel, since all pixels are independant from each other.
A first trivial optimization would therefore to make the first loop parallel:
public static void Run(int[] light)
{
Parallel.For(0, N, (i) => {
for (int j = 0; j < N; j += 1)
{
float x = fromX + i * h;
float y = fromY + j * h;
light[i * N + j] = IterCount(x, y);
}
});
}
This second version runs in 67 milliseconds, giving:
In order to run that on a GPU, we just need to decorate the Run method with EntryPointAttribute:
[EntryPoint("run")]
public static void Run(int[] light)
{
Parallel.For(0, N, (i) => {
for (int j = 0; j < N; j += 1)
{
float x = fromX + i * h;
float y = fromY + j * h;
light[i * N + j] = IterCount(x, y);
}
});
}
and some boilerplate code to invoke the generated method:
HybRunner runner = HybRunner.Cuda("Mandelbrot_CUDA.dll").SetDistrib(N, 128);
wrapper = runner.Wrap(new Program());
wrapper.Run(light_cuda);
This modified code runs on the GPU (a 1080 Ti) in 10.6 milliseconds (32 when counting the memory copies), giving:
Launching a block per image line is highly suboptimal, due to the unevenly distribute nature of the computations. For example, threads at the square’s border will immediately converge, while those on the set will take the longest runtime.
This can be seen by profiling the above code using Nsight:
As we can see, half of multiprocessors are idle.
We can instead distribute the work more evenly by using a 2D grid of relatively small blocks.
Fortunately, Hybridizer supports CUDA-like parallelism, so we can modify our entrypoint this way:
[EntryPoint("run")]
public static void Run(int[] light)
{
for (int i = threadIdx.y + blockDim.y * blockIdx.y; i < N; i += blockDim.x * gridDim.x)
{
for (int j = threadIdx.x + blockDim.x * blockIdx.x; j < N; j += blockDim.y * gridDim.y)
{
float x = fromX + i * h;
float y = fromY + j * h;
light[i * N + j] = IterCount(x, y);
}
}
}
and run it with a 2D grid:
HybRunner runner = HybRunner.Cuda("Mandelbrot_CUDA.dll").SetDistrib(32, 32, 16, 16, 1, 0);
The modified code runs now in 920 microseconds on the GPU, meaning:
If we profile the newly generated kernel, we get:
main stall reason being “Other” with 69% followed by instruction fetch for only 5% of not eligible warps.
It’s reasonable to not try further optimization.
In this post we presented a basic usage of hybridizer, from unoptimal c# to highly efficient generated cuda code. We started by optimize our c# code and the migrated it seamlessly to CUDA.
We then optimized our c# code for CUDA GPUs, until we reached a close to peak performance level.
The post Mandelbrot with Hybridizer first appeared on In Fine - Le Blog.
]]>The post Manipuler les dates Javascript en 2021 first appeared on In Fine - Le Blog.
]]>La manipulation native des dates en Javascript n’a jamais été chose facile. Tout cela a changé avec l’arrivé de Moment.js vers 2010 qui a été la première librairie populaire permettant la manipulation simple des dates.
Cependant, l’écosystème Javascript à fortement évolué. avec les optimisations (webpack, tree shaking, typescript), et l’équipe a annoncé la fin de l’évolution du projet Moment.js au profit d’alternative plus optimisé.
Avec l’arrêt de l’évolution de moment.js, cet article à pour but de lister différentes façon de manipuler les dates en 2021.
Depuis ses débuts, manipuler les dates Javascript est contraignant. L’objet Date comporte de nombreux défauts, listé dans cette article:
https://maggiepint.com/2017/04/09/fixing-javascript-date-getting-started/
Ajoutons à cela la manipulation des dates qui n’est pas natif:
En 2011, Moment.js a contribué à faciliter la manipulation des dates, en fournissant une API complète et une documentation claire couvrant de nombreux cas. Elle a aussi permis à utiliser les timezone.
Moment.js a été construit sur l’écosystème web d’il y a dix ans. Le monde Javascript évoluant très vite (webpack, structures immuables, tree shaking), ainsin que l’émergence de nouvelle librairie utilisant les optimisations actuelle, Moment.js a été déclaré par ses contributeurs comme un projet legacy et n’est donc plus conseillé pour de nouveau projet.
Des comparatifs sont disponible pour permettre de choisir quelles libraries date utiliser selon ses préférences:
https://github.com/you-dont-need/You-Dont-Need-Momentjs
Nous allons donc voir quelques façons de manipuler les dates en Javascript en 2021.
Date-fns, créé en 2014, propose un ensemble de fonctions (plus de 180 fonctions), a la particularité de manipuler l’objet Date, d’utiliser le paradigme fonctionnel, de supporter le tree-shaking, d’être immutable par nature, et d’être un projet bien maintenu avec de nombreuse étoile github.
https://bestofjs.org/projects/date-fns
Le tree-shaking permet de supprimer les fonctions inutiles à la compilation du projet. Si on n’utilise que quelques fonctions, tout le reste est supprimé, permettant de maîtriser le poid du projet (à la différence de moment.js où le tree shaking n’est pas possible car toutes les fonctions sont groupé dans une instance de l’objet Moment)
La doc date-fns est complète avec de nombreux exemple
https://date-fns.org/docs/Getting-Started
Voici quelque exemple de manipulation de date avec date-fns
Parsing date
parseISO('2020-06-11T09:30:30')
//=> Thu Jun 11 2020 09:30:30
Format date
// Code example
import { format, formatDistance, formatRelative, subDays } from 'date-fns'
format(new Date(2020, 6, 11), 'MM/dd/yyyy')
//=> '11/07/2014'
formatDistance(subDays(new Date(), 3), new Date())
//=> "3 days ago"
formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."
formatISO(new Date(2019, 8, 18, 19, 0, 52))
//=> '2019-09-18T19:00:52Z'
// Represent 18 September 2019 in ISO 8601 format, date only:
formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })
//=> '2019-09-18'
// Represent 18 September 2019 in ISO 8601 format, time only (UTC):
formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })
//=> '19:00:52Z'
Manipulate date
// Code example
addDays(new Date(2014, 8, 1), 10)
//=> Thu Sep 11 2014 00:00:00
const result = addBusinessDays(new Date(2014, 8, 1), 10)
//=> Mon Sep 15 2014 00:00:00 (skipped weekend days)
Date-fns also contains tons of conditional helpers well named (isFuture, isSunday, isSameWeek)
// Code example
isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))
//=> false
isSunday(new Date(2014, 8, 21))
//=> true
var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))
//=> true
isFuture(new Date(2014, 11, 31))
//=> false
Si on ne souhaite pas utiliser de librairie externe, on peut définir son propre fichier utilitaire de date.
Le projet 30 second of code propose des snippets de fonctions communes. Sans devoir réinventer la logique, on peut consulter ce site et copier les fonctions intéressante afin de les intégrer dans projet Javascript. https://www.30secondsofcode.org/js/t/date/p/1
Source: https://www.30secondsofcode.org/js/s/format-duration
const formatDuration = ms => {
if (ms < 0) ms = -ms;
const time = {
day: Math.floor(ms / 86400000),
hour: Math.floor(ms / 3600000) % 24,
minute: Math.floor(ms / 60000) % 60,
second: Math.floor(ms / 1000) % 60,
millisecond: Math.floor(ms) % 1000
};
return Object.entries(time)
.filter(val => val[1] !== 0)
.map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)
.join(', ');
};
// EXAMPLES
formatDuration(1001); // '1 second, 1 millisecond'
formatDuration(34325055574);
// '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'
Source: https://www.30secondsofcode.org/js/s/is-between-dates
const isBetweenDates = (dateStart, dateEnd, date) =>
date > dateStart && date < dateEnd;
// EXAMPLES
isBetweenDates(
new Date(2010, 11, 20),
new Date(2010, 11, 30),
new Date(2010, 11, 19)
); // false
isBetweenDates(
new Date(2010, 11, 20),
new Date(2010, 11, 30),
new Date(2010, 11, 25)
); // true
Afin de moderniser la manipulation natives des dates, l’équipe de TC39 formalise une nouvelle spécification, sous le nom de Temporal, qui sera intégré nativement dans les moteurs Javascript, sans librairie externe.
https://tc39.es/proposal-temporal/docs/index.html
// On peut sélectionner la date, l'heure ou les deux
const date = Temporal.now.plainDateISO().toString();
=> "2020-04-25"
const time = Temporal.now.plainTimeISO().toString();
=> "12:52:48.389968386"
const dateTime = Temporal.now.plainDateTimeISO().toString();
=> "2020-04-25T12:52:48.389968386"
Temporal sera un objet global, comme l’objet Math. Comme pour Moment et Date fns, on va retrouver de nombreuses fonctions de création, manipulation et formattage de date.
De plus, Temporal cherche à combler les défauts de Date, en particulier en donnant plus de flexibilité sur la manipulation des timezone. Pour cela, il existe plusieurs type pour représenter des dates: sans zone (PlainDate, PlainTime, PlainDateTime…) et avec zone (Instant, ZonedDateTime).
La convertion entre les deux systèmes de date doit se faire avec attention, l’API Temporal proposant différentes manière pour convertir d’une date sans zone vers une date avec zone.
// Représente une dateTime sans zone
const dateTime = Temporal.PlainDateTime.from({
year: 2020,
month: 04,
day: 25,
hour: 12
});
=> 2020-04-25T12:00:00
// Représente une dateTime avec une zone
const zonedDateTime = Temporal.ZonedDateTime.from({
// IANA Zone
// https://www.iana.org/time-zones
timeZone: 'America/Los_Angeles',
year: 2020,
month: 04,
day: 25,
hour: 12
});
=> 2020-04-25T12:00:00-07:00[America/Los_Angeles]
// Représente un Instant zoné dans le temps
Temporal.Instant.from("2020-04-25T12:52:48Z")
=> 2020-04-25T12:52:48Z
// Convertir une date sans zone à une date zoné
dateTime.toZonedDateTime('Asia/Seoul')
=> 2020-04-25T12:00:00+09:00[Asia/Seoul]
// Convertir une date zoné vers une date sans zone
Temporal.PlainDateTime.from(zonedDateTime)
=> 2020-04-25T12:00:00
A ce jour (Mai 2021), Temporal est en Stage 3, en cours d’implémentation dans les différents moteurs Javascript (Navigateur web, nodejs…)
De nombreux autres exemples sont disponible sur le cookbook (sur Chrome ou Edge, vous pouvez ouvrir Dev tools et utiliser l’objet Temporal directement depuis la console)
https://tc39.es/proposal-temporal/docs/cookbook.html
Moment.js est maintenant considéré comme obsolète pour les nouveaux projets. En remplacement, on peut utiliser date-fns pour le côté fonctionnel, et il existe d’autre librairie (luxon, dayjs) selon le style de programmation préféré. Il est également possible d’utiliser des sites de snippets pour copier les fonctions de manipulation de date sans dépendre d’une librairie externe. Mais tout cela sera rendu obsolète avec l’arrivé de Temporal proposé par TC39, actuellement en stage 3. Temporal sera donc nativement supporté par les moteurs Javascript (navigateur et node.js)
The post Manipuler les dates Javascript en 2021 first appeared on In Fine - Le Blog.
]]>The post 10 Conseils pour réussir une Certification Cloud ! first appeared on In Fine - Le Blog.
]]>Ca y est, vous êtes décidés à passer une certification Cloud AWS, Azure, GCP, IBM etc. ! Peu importe vos motivations (obligations professionnelles, pour se réorienter, pour affirmer son rôle etc..), je vous donne ici 10 conseils pour avoir le mental de réussir:
Si vous êtes bilingue anglais, passez directement au conseil suivant
Si comme pour moi, l’anglais ne vous a jamais passionné, sachez qu’il est indispensable dans le monde du Cloud. Il n’est pas nécessaire de (bien) parler anglais au travail, mais lire l’anglais et l’écouter est in-di-spen-sa-ble !
Vous devez progresser de sorte que vous ne soyez plus sûr si la doc ou la vidéo que vous regardiez était en français ou en anglais. Cela doit être naturelle pour vous. Les examens sont en anglais et vous partez déjà avec un handicap par rapport aux anglophones.
Pour vous améliorer, arrêtez immédiatement tous les documents en français et faites strictement tout en anglais. Si vous êtes fan de série américaine, japonaise ou coréenne, activez les sous-titre en anglais. Ça peut être dur au début mais accrochez-vous car ça vous servira toute la vie.
Oui, donnez-vous les moyens de réussir !
Vous n’êtes pas le/la seul(e) à passer une certification. Des centaines de personnes se préparent en ce moment-même et ils disposent pour la plupart d’outils pédagogiques: e-learning, formation en présentielle, travaux pratiques dans des labs, livres spécialisées etc. Oui, je vous conseille de mettre parfois la main à la poche ..ou celle de votre boîte
Pour les plateformes de e-learning, je vous conseille:
Vous pouvez bien sûr vous contenter de la documentation gratuite en ligne pour AWS et GCP. Mais cela vous prendra plus de temps et vous serez moins préparé que d’autres pour le même examen, c’est dommage !
On n’a pas forcément tous l’opportunité de pratiquer dans un contexte professionnel (i.e. un projet cloud) mais la pratique est très importante en plus de la théorie. Créez-vous au minimum un compte gratuit, la plupart des fournisseurs de cloud le propose, ça serait bête de s’en priver.
Se préparer à l’examen prend du temps. Il est probable que cela soit sur votre temps perso, le soir et le week-end. Et moins on utilise son temps perso, et mieux c’est pour vous ! Mais pour que vous y passiez moins de temps, il faut que le temps consacré soit efficient: tranquillité et concentration au maximum.
Prévenez votre entourage proche. Expliquer-leur la difficulté des examens et que vous ne serez pas disponible pendant une, deux, voire trois heures.. même si vous êtes à la maison et que votre famille est dans la pièce à côté. Soyons en paix avec ceux qu’on aime
Cela paraît évident? Mais à quel point doit-on connaître les produits ?
Tout d’abord, identifiez les produits principaux. En effet, il y a des dizaines de produits Cloud mais on ne vous demande pas de tous les connaître. En général, il faut connaître les concepts réseaux (VPC, subnet, load balancer..), sécurité (IAM, certificate, firewall..), les différents types de calcul (VM, container, function..) et les produits populaires (services managées de base de données sql et nosql, services big data, services de messages..).
Ensuite, en fonction du niveau de votre certification:
Niveau débutant: le nom du service, la catégorie et le principal cas d’usage.
Exemple: EFS est un service de disque réseau. On s’en sert pour partager un espace disque entre plusieurs machines sous linux.
Niveau professionnel: les possibles options du service, les différences entre chaque option et la combination de plusieurs services avec des options bien précises pour répondre à un besoin.
Exemple: En utilisant un disque persistant de type SSD à la place d’un type HD, le chiffrement du disque passe de AES-128 à AES-256.
az, aws, docker, kubectl, gsutil… vous connaissez ? Si la réponse est non, ce n’est pas bien Ceux sont des “Command Line Interface” (CLI pour les geeks). Ils permettent de faire à peu près tout pour commander vos ressources cloud.
Je ne dis pas qu’il faut connaître toutes les options de chaque commande mais il faut au moins parcourir toute la liste de sorte que vous sachiez à peu près ce que fait la commande juste en la voyant.
C’est plus facile (et rapide) que de savoir quelle commande taper pour exécuter telle ou telle action. Croyez-moi, vous serez bien dégoutés à l’examen de voir une commande sans savoir de quoi il s’agit. Un point perdu facilement, c’est dommage..
C’est notamment valable pour les questions où il faut se creuser les méninges. Pas pour les questions cadeaux du type: “Que veut dire l’acronyme RDS chez AWS?”
Une erreur fréquente est de vouloir tout optimiser en même temps dans une solution: résilient et performant et sécurisé et économique et ceci et cela etc..
Or, chaque question concerne un scope bien fini. Identifier le domaine pour lequel la question est posée vous permet de concentrer votre réflexion. Si vous êtes très expérimentés, vous pourrez facilement vous appuyer sur des patterns et répondre sans trop réfléchir. Pour les autres, je vous conseille le modèle “cake architecture” de google.
Pensez couche par couche. Identifiez la couche sur laquelle porte la question. Les couches sont d’importance équivalentes.
Hein?! Quoi?! Connaître les services et les commandes, ça ne suffit pas ?
En fait, c’est la base. Plus vous lirez de documentations et plus vous serez à l’aise à l’examen. Il n’y a pas que les services et les commandes, mais aussi:
Plus vous lirez (en anglais), moins vous serez confrontés à des nouveautés à l’examen, moins vous réfléchirez et plus vous aurez de temps pour répondre aux questions difficiles. Et surtout, vous aurez plus de valeurs pour créer une solution en situation réelle !
Si vous passez l’examen dans un centre, ne vous attendez pas à trouver un environnement confortable et propice à la concentration. Vous pouvez avoir un bureau de 60cm de large, avec des panneaux sur les côtés (bah oui, comme les voisins sont proches, il faut éviter de regarder l’écran d’à côté ), une chaise scolaire, peu de chauffage en hiver, pas de clim l’été etc..
Sachez aussi que dans la même pièce, d’autres passeront un examen cloud, un examen scrum ou même le code de la route. Tous les examens n’ayant pas la même durée et ne commençant pas en même temps, vous pourrez donc entendre les gens entrer et sortir de la pièce ! Sans compter les bruits venant de la fenêtre (si ! si!). Heureusement, on vous fournit des boules quies ou un casque anti-bruit.
Je vous dis ça car vous n’y pourrez rien. Il est donc inutile de bougonner dans son coin et de penser à améliorer les conditions. Acceptez cette situation immédiatement et concentrez-vous sur l’écran et votre examen. On est beaucoup à être passé par là et on s’en est sorti. Pourquoi pas vous?
Les examens durent entre 1h30 et 3h30. Il est important de bien gérer son temps. Je vais vous parler des types de questions et comment les gérer:
Les questions cadeaux: C’est le type de question tellement simple qu’on croirait qu’il y a un piège. Non, ne perdez pas votre temps, répondez rapidement et passez à la question suivante. Personnellement, je pense que c’est pour être sûr que personne n’ait zéro à l’examen. Exemple: Which one is a database service ? a) VPC, b) IAM, c) DB, d) VPN
Les questions dont les réponses sont identiques à un ou deux mots près: Pour ne rien arranger, c’est en général les questions et les réponses les plus longues à lire. Ne perdez pas de temps à lire justement ! Identifiez les 80% du texte qui se répètent et ne vous concentrez que sur les deux mots qui changent.
Les questions dont les réponses sont complètement différentes et n’ont aucun rapport entre elles: Très longues à lire, je vous conseille d’éliminer ce qui vous semble absurde à la première lecture. Relisez ensuite bien la question pour repérer ce qui pourrait faire pencher la balancer sur une des réponses restantes. Si après trois lectures, vous n’avez pas trouvé la réponse, cochez selon votre intuition, marquez la question et revenez-y à la fin.
Les questions où selon vous deux réponses sont possibles: pour trancher, imaginez-vous en train d’implémenter les deux solutions au bureau. Laquelle des deux semblerait plus difficile à mettre en œuvre? Que penseraient vos collègues de votre choix? Oui, l’avis des autres compte, même s’ils ne sont pas là avec vous à l’examen.
Les questions où vous ne connaissez pas assez bien le service: Ne perdez pas votre temps à essayer de trouver la fonctionnalité du service que vous ne connaissez pas. Cocher au pif en vous fiant à votre intuition et marquer la question pour éventuellement y revenir à la fin.
Marquer les questions est un outil puissant qui permet évidemment de retrouver rapidement les questions où on a douté.
Mais cela a une autre fonctionnalité bien utile: estimer ses chances de réussites à l’examen !
Supposons que l’examen contiennent 60 questions et que vous savez que le niveau requis pour réussir est de 75%. Cela signifie que vous pouvez vous planter à 15 questions sur 60! Bien que chaque question ne valent pas le même nombre de points et que le niveau requis peut varier, partez quand même sur cette estimation.
Si vous avez marqué moins de 10 questions, vous pouvez souffler, c’est quasiment dans la poche
Si vous avez marqué plus de 20 questions.. aïe aïe aïe ! Mais tout n’est pas perdu. Si vous avez bien géré le temps avec mes conseils numéro 1 et 9, il devrait vous rester au moins 30 minutes. Largement assez pour usez vos méninges sur les questions marquées. Quand vous répondez, enlevez le marquage sur la question et débrouillez-vous pour être au moins en-dessous de 15 marquages. Statistiquement, en répondant au pif, vous pouvez avoir 3-4 bonnes réponses sur les 15 marquages. Vous augmentez d’autant plus vos chances si vous avez éliminé une ou deux réponses dans ces questions, de sorte que votre choix au pif ne porte plus que sur deux ou trois possibilités. Grattez les points jusqu’à la dernière seconde
Voilà, j’espère que ces quelques conseils vous mettront en confiance, bon courage, la certification est à la portée de tous !
The post 10 Conseils pour réussir une Certification Cloud ! first appeared on In Fine - Le Blog.
]]>The post Tests informatiques first appeared on In Fine - Le Blog.
]]>Les tests informatiques sont destinés à évaluer si un système informatique et ses composants satisfont les exigences métier ou pas. Cette activité résulte des différences qu’il pourrait y avoir entre le résultat attendu et le résultat réellement obtenu.
Les tests peuvent couvrir l’analyse et la vérification des exigences métier, la révision de la conception ainsi que la vérification et la validation du code d’un développeur. Les tests peuvent commencer dès la phase de recueil du besoin et dure jusqu’au déploiement de l’application livrée. Si le démarrage des tests peut commencer assez tôt dans le cycle de développement en imaginant les cas de tests, y mettre fin serait un casse-tête face à un testeur perfectionniste. L’arrêt des tests arrive en général quand les dates jalons sont atteintes, quand les cas de tests couvrent un certain périmètre fonctionnel, quand le taux d’anomalies est réduit à un minimum ou tout simplement par une décision de gestion. Il y a beaucoup de termes en relation avec les tests. Passons les en revue.
Vérification (tests unitaires, tests d’intégration) | Validation (recette) |
Est-ce construit/codé correctement ? | Est-ce que c’est codé correctement vis-à-vis des exigences ? |
Assurer que l’application couvre toutes les fonctionnalités demandées | Assurer que le comportement obtenu est bon |
Effectué par les développeurs | Effectué par des recetteurs, homologateurs ou testeurs indépendants de l’équipe de développement |
Vision statique et objective car elle est accès sur le code et sa logique | Vision dynamique et subjective car l’application est testée par rapport aux exigences métier et à des décisions de l’utilisateur |
L’assurance qualité est une activité visant l’implémentation de processus, de procédures et de standards dans le contexte du développement d’applications informatiques. Elle a pour but la prévention d’anomalies et fait partie du cycle de vie des tests d’applications informatiques.
Le contrôle qualité est une activité destinée à vérifier que le logiciel développé respecte les exigences métier. Il met en application les processus définit par l’assurance qualité. C’est une activité corrective et se focalise sue un logiciel particulier. Il peut être considéré que le contrôle qualité est un sous-ensemble de l’assurance qualité.
Les tests informatiques sont l’activité d’identification des bugs, anomalies et défauts d’un logiciel. Ils sont un sous-ensemble de l’assurance qualité.
L’audit est un examen des processus de testing exitants. Il est mené par un organisme externe aux développeurs et aux testeurs et délivre un certificat ou un accréditation. C’est une comparaison des processus documentés et des processus vraiment déroulés. L’audit peut se décliner en audit de conformité, audit légal, audit interne, audit du système et autres.
Les inspections sont des examens des exigences métiers, de la conception et du code. Elles sont effectués par une tierce personne et vise au respect des processus documentés. A différence de l’audit, il n’y a pas de certifications.
Le testing est l’identification de bogue, d’anomalies et de défauts. C’est une activité qui vise le repérage mais pas la correction. Cette dernière est réalisée par d’autres équipes
Le débogage est l’identification, la qualification et la correction des anomalies.
La norme ISO/IEC 9126 définit un langage de modélisation de la qualité des logiciels. Le langage de description utilise des termes tels que “facteurs qualité” , “caractéristiques, “sous-caractéristiques ,”métriques” pour classer de façon arborescente et structurée, sur la base de définitions standardisées, un vocable de plusieurs dizaines de propriétés en “ité” (portabilité, maintenabilité, fiabilité, etc.)
ISO/IEC 9241-11 aborde l’usage d’un produit par des utilisateurs dans un contexte donnée afin d’atteindre des objectifs de safistaction et d’efficacité.
ISO/IEC 25000 remplace ISO-9126 and ISO-14598 et définit des guides d’utilisation SQUARE (Software product Quality Requirements and Evaluation)
IEEE est l’acronyme de “institute of Electrical and Electronics Engineers”. Il définit aussi des normes spécifiques à des contextes du testing comme les tests unitaires, les plans des tests et de recette, la classification des anomalies etc.
Les tests peuvent être catégorisés suivant la manière comme ils sont réalisés. Ils sont soit manuels soit automatisés
Lors des tests manuels, le testeur adopte le point de vue de l’utilisateur final et procède à la recherche d’un comportement non-conforme. Il y a plusieurs niveaux de profondeur de testing. Ceux-ci seront expliqués par la suite.
Les tests automatisés sont effectués quand le testeur écrit un script d’automatisation et les tests eux-mêmes sont exécutés par un logiciel dédié à l’exécution des tests. L’automatisation permet de dérouler plusieurs fois le même test ce qui est propice aux tests de non régression. Les domaines qui se prêtent à l’automatisation sont des transactions comme le login ou le remplissage de formulaires ou l’accès simultané peut générer des pics d’utilisation. Il est recommandé d’automatiser dans de très grands projets, quand la même fonctionnalité est testée fréquemment, quand les exigences sont stables, dans des situations visant des critères de performance et de robustesse d’accès.
Les étapes de l’automatisation sont les suivantes :
Parmi les logiciels d’automatisation on trouve entre autres HP Quick Test Professional, Selenium, IBM Rational Functional Tester, SilkTest, TestComplete, Testing Anywhere, WinRunner, LaodRunner, Visual Studio Test Professional et WATIR.
Dans la méthode de boite noire, le testeur n’a pas de connaissances sur le code et l’architecture. Le testeur utilise l’IHM et examine les résultats obtenues. Les avantages sont l’’adaptation à des périmètres très grands, la bonne séparation de la vision de l’utilisateur final et du développeur et l’absence de connaissances techniques poussées. Le risque de cette méthode est la couverture inappropriée de certaines parties du logiciel.
Dans la méthode de la boite blanche, une investigation détaillée de la structure et de la logique du code est conduite. Une connaissance technique du langage de programmation et des modules des logiciels testés est requise. En boite blanche, le code peut être optimisé et il est plus probable de couvrir la totalité des cas. D’un autre côté, cette métode est plus couteuse dans le sens où il faut maintenir des outils spécialisés comme les analyseurs de code et de débogage. Aussi les ressources sont plus chères car il faut qu’elles aient la connaissance des techniques en lien avec le logiciel testé.
Dans la méthode de boite grise, le testeur a accès aux documents de conception et au modèle de base de données. Ceci lui permet de préparer les données de tests et les scénarios de tests.
Il y a deux niveaux de tests, chacun divisé en sous-catégories : Les tests fonctionnels et les tests non fonctionnels
Les tests fonctionnels se basent sur les spécifications fonctionnelles. Le logiciel est testé dans un environnement afin de vérifier sa conformité aux exigences (requirements). Les étapes qui les composent sont les suivantes ;
Sous catégories des tests fonctionnels | Description |
Tests unitaires | Ce test est réalisé par le développeur afin de vérifier que le module livré est conforme. Il se focalise sur la fonctionnalité livrée |
Tests d’intégration | Ces tests succèdent les tests unitaires. Ils vérifient le fonctionnement d’un ensemble de modules et sont exécutés de la forme « bottom-up » et ensuite « top-down ». Dis d’une autre façon, soit les tests sont organisés par empilement de modules testés, soit par un ensemble de modules non-testés et commandés par le module de plus haut niveau qui les testent. Les tests d’intégration sont réalisés par l’équipe de développement |
Tests système | Après les tests d’intégration, les tests système confrontent l’application à des données réelles dans un environnement proche de celui de production. Ces tests valident les exigences métier et l’architecture applicative. En général, ils sont exécutés par des testeurs de l’éditeur. |
Tests de non régression | Les tests de non-régression contrôlent que les évolutions d’un système, les nouveaux modules, n’ont pas d’effet de bord sur les fonctionnalités existantes. Ceci minimise les risques de l’ensemble suite au rajout ou la modification d’un fonctionnalité. Il est donc important de conserver l’historique des tests puisque ceux-ci pourront être rejoués à nouveau sur des livraisons futures |
Recette (User Acceptance Test) | Les UAT comme son nom l’indique sont réalisés par les utilisateurs finaux. Leur finalité est d’avoir l’accord client sur le bon fonctionnement de l’application.Suivant le type d’application il y aura des tests pour des versions alpha et des versions beta. Les tests des versions alpha se réalisent en binôme entre les développeurs et l’assurance qualité. L’intention est de corriger des erreurs de cosmétique, des enchainements illogiques, etc. Les tests beta sont réalisés sur une version diffusée auprès d’un échantillon d’utilisateur représentatif du grand public. |
Les tests non-fonctionnels sont basés sur des critères applicatifs détaillés dans le dossier d’architecture système, les exigences non-fonctionnelles. Ils sont donc menés par des experts techniques
Les tests de performance cherchent à identifier des problèmes de performance et des goulots d’étranglement. Les différentes causes peuvent être la lenteur du réseau, les traitements des bases de données, la répartition de charge (load balancing). Parmi les tests de performance, les tests de charge simulent des connexions et des manipulations de données avec des scripts d’automatisation. Ainsi l’application dévoile son comportement aux heures de pointe de l’utilisation. Les tests de stress poussent le système à ses limites et dans des situations risqué (perte de connexion au réseau ou à une base de données ou surcharge des processus machine)
Les tests de convivialité (usability) permettent d’évaluer la satisfaction de l’utilisateur quand celui-ci se fixe un objectif opérationnel et quand cet objectif est atteint de manière efficace. Ils mesurent les interactions de l’utilisateur dans l’atteinte d’un but précis.
Les tests de sécurité ont pour vocation l’identification de failles et de vulnérabilités en termes de sécurité. Ces tests garantissent la confidentialité, l’intégrité des données, la protection contre des attaques malveillantes, le respect de réglementations spécifiques à la banque etc…
Les tests de portabilité assurent que l’application peut être installée et exécutée dans un autre système.
A part ces catégories de tests, l’IEEE-Std 830 – 1993 liste 13 exigences non-fonctionnelles :
Le plan de tests résume la stratégie de tests visée pour l’application. Il inclut les sections suivantes :
Les scénarios de test sont des regroupements de cas de tests. Le cas de test est un ensemble de pas à suivre. Elle est représentative d’un situation opérationnelle. Voici l’exemple du formalisme de représentation.
A l’issue des tests, des anomalies seront relevées dans des fiches descriptives. Il sera important donc de dressée la matrice de traçabilité. Ce document fait le lien entre les exigences, les tests prévus, les tests exécutés et les anomalies déclarées.
L’outil « Quality Center » permet d’informatiser e processus. Le module « requirements » permet de saisir les exigences. Le module « Test Plan » permet de décrire les cas de tests et les organisent sous forme arborescente de sorte à produire des scénarios de tests. Le module « Test Lab » représente une exécution donnée pour un scénario de tests. Un scénario de tests peut être exécuté plusieurs fois . L’exécution peut avoir lieu manuellement ou automatiquement. De ce fait, Quality Center permet de générer des scripts d’automatisation. Après une exécution, les anomalies déclarées peuvent être liés aux cas de tests. Finalement, Quality Center offre la possibilité de générer des rapport sur l’état d’avancement des tests.
Références
Sujet (Quality Center) | Lien |
introduction | http://www.youtube.com/watch?v=RoHYqeBxcY&list=PL3751912B18050F7F |
modules | http://www.youtube.com/watch?v=fBREaBJPYc8&list=PL3751912B18050F7F |
requirements | http://www.youtube.com/watch?v=fBREaBJPYc8&list=PL3751912B18050F7F |
Test plan module | http://www.youtube.com/watch?v=Gm6pnKmFjAA&list=PL3751912B18050F7F |
Automated test case design | http://www.youtube.com/watch?v=6-tcVrnEyAU&list=PL3751912B18050F7F |
Test linkage | http://www.youtube.com/watch?v=QormvqA0_eQ&list=PL3751912B18050F7F |
Test lab module | http://www.youtube.com/watch?v=mvoGw8GRbs4&list=PL3751912B18050F7F |
Run automated test | http://www.youtube.com/watch?v=QSKh-UiVHco&list=PL3751912B18050F7F |
Defects module | http://www.youtube.com/watch?v=rC9noc_FrpU&list=PL3751912B18050F7F |
Defects linkage | http://www.youtube.com/watch?v=VVI-p9YI57w&list=PL3751912B18050F7F |
favorites | http://www.youtube.com/watch?v=-qCMLvxGfvw&list=PL3751912B18050F7F |
traceability | http://www.youtube.com/watch?v=j87YjWVewXQ&list=PL3751912B18050F7F |
Graphs and reports | http://www.youtube.com/watch?v=CyDaLj_dhyA&list=PL3751912B18050F7F |
Analysis graphs | http://www.youtube.com/watch?v=Wdm7RzPbTio&list=PL3751912B18050F7F |
The post Tests informatiques first appeared on In Fine - Le Blog.
]]>The post Les paiements par carte first appeared on In Fine - Le Blog.
]]>Le présent article se concentre sur l’histoire des cartes bancaires, les bases des transactions par carte et les retraits dans les distributeurs automatiques de billets, la norme EVM des cartes à puces et finalement la norme SEPA des cartes (SCS, SEPA card scheme).
En France, le groupement des cartes bancaires est le groupement d’intérêt économique qui gère le réseau interbancaire français des distributeurs de billets et de terminaux électroniques de paiement. Ce réseau est indépendant des réseaux Visa et MasterCard et est interconnecté à ceux-ci. Le site www.cartes-bancaires.com résume l’histoire des avancées technologiques des cinquante dernières années. Il est surprenant d’apercevoir les changements encourus. Ce qui était une innovation pendant le vingtième siècle, du point de vue du vingt-et-unième n’est qu’un objet de la vie courante comme le sont la voiture, la télévision ou internet.
Année | Evènement |
1967 | Première carte de paiement grâce à l’association de six banques |
1968 | Premier distributeur de billets installé à Paris |
1971 | Première carte à piste magnétique |
1973 | Première fois qu’il est possible de payer par carte à l’étranger |
1974 | Invention de la carte à puce |
1975 | Première piste magnétique aux normes ISO |
1978 | Premiers paiements par carte sur l’autoroute de Normandie |
1980 | Premier terminaux de paiements électronique (TPE, minitel) |
1984 | Création du groupement de paiement par carte, début de l’interbancarité |
1985 | Apposition d’un symbole ultraviolet sur les cartes bancaires |
1986 | Première carte à puce commercialisée |
1987 | CB intègre l’hologramme sécuritaire sur les cartes à puces |
1990 | CB lance le code secret à quatre chiffres |
1992 | Commercialisation de la puce à toutes les CB |
1996 | Première hotline pour faire opposition en cas de perte ou de vol |
1997 | La carte à puce modèle français commence à s’exporter à l’étranger |
1998 | La carte à puce passe aux normes EMV |
1999 | Premier paiement par carte en Euros |
2000 | Le cryptogramme visuel est apposé aux cartes bancaires pour sécuriser la VAD (vente à distance) |
2001 | Le nombre de paiement par carte dépasse celui par chèque |
2002 | CB met en place un système de détection des yescards |
2005 | Un nouveau réseau e-rsb (opérateur de routage des autorisations bancaires, e-rsb.com) pour accompagner la croissance des cartes bancaires |
2006 | Lancement du DDA (dynamic date authentification) sur les cartes bancaires |
2007 | Première carte co-brandée |
2009 | Transposition de la directive sur les services de paiement pour la mise en œuvre du SEPA |
2010 | Déploiement des authentifications fortes pour les paiements sur internet |
2011 | CB agrée les premiers TPE pour les paiements sans contact |
L’expérience de retrait d’argent dans un distributeur automatique de billet et le règlement d’une somme d’argent sur un terminal de paiement électronique chez un commerçant sont des actions courantes. Le titulaire de la carte (cardholder) utilise le TPE d’un commerçant (merchant) ou le DAB d’une banque quelconque. Dans les deux cas, le titulaire de la carte initie la demande d’autorisation qui transite par le réseau de carte (card scheme). La demande est transmise de l’acquéreur (acquirer) vers l’émetteur de la carte (issuer). Une fois que l’autorisation est donnée par l’émetteur, celle-ci retourne sur le terminal (DAB,TPE) comme dans la figure ci-après.
Figure 1, L’opération de paiement (source cartes bancaires)
Dans un deuxième temps, les règlements ont lieu. Régulièrement, les transactions bancaires sont remises à la banque du commerçant, l’acquéreur, et celui-ci crédite le compte du commerçant. Les transactions des commerçants, clients de l’acquéreur, sont transmises à la chambre de compensation de détail. En France, elle s’appelle CORE (COmpensation REtail). Finalement, les sommes sont débitées des comptes des titulaires de la carte.
Figure 2, le règlement et la compensation (source cartes bancaires)
Le tiulaire de la carte (cardholder) est le nom de la personne qui est inscrit sur la carte. Le porteur et le titulaire peuvent être différents. C’est le cas des cartes professionnelles.
Le commerçant (merchant) signe un contrat avec l’acquéreur où sont stipulées les conditions d’utilisation des terminaux et les commissions prélevées sur chaque transaction ou type de carte.
L’acquéreur (card acquirer) est l’entité qui gère le compte du commerçant. Il transmet les informations des transactions aux émetteurs de cartes pour traitement ultérieur et garantit que le compte du commerçant est crédité.
L’émetteur de cartes (card issuer) est l’institution financière qui met à disposition la carte au titulaire de la carte. Il gère le compte du titulaire et peut lui octroyer une ligne de crédit. Il autorise les transactions sur les TPE ou DAB et garantit que le paiement sera régler auprès de l’acquéreur en fonction des arrangements commerciaux établis avec le réseau de cartes.
Entre l’émetteur et l’acquéreur se trouve le réseau de d’acceptation de paiements (card scheme). Le réseau de cartes fait référence à l’infrastructure interbancaire d’acceptation de paiement par carte. En France ce réseau est indépendant des réseaux internationaux tels que Visa ou Mastercard. Il s’appelle e-rsb. Le terme « card scheme » fait aussi référence au contrat commercial qui permet à une marque donnée de carte de paiements de fonctionner dans un cadre légal, organisationnel et opérationnel. Un réseau de carte assure les standards techniques des TPE, des DAB et de l’infrastructure technique d’échanges. Il établit aussi les termes légaux en cas de fraude et de litige.
Il y a deux configurations possibles pour les réseaux de paiements.
Figure 3, système quatre coins (source wikipedia)
Le système quatre coins sépare l’acquéreur de l’émetteur. C’est un réseau ouvert ou une banque ou une institution financière peut devenir membre à condition de respecter le cadre technique du réseau. Visa et Mastercard en sont des exemples.
Figure 4, système 3 coins (source wikipedia)
Le système de trois coins est un réseau ou l’acquéreur et l’émetteur sont le même. Il n’y aura donc pas besoin de passer par une chambre de compensation ni de régler des commissions entre acquéreur et émetteur. C’est un réseau fermé. Diners et American Express en sont des exemples.
Figure 5, Les commissions (source : payment systems, ECB)
Chaque fois qu’un paiement par carte a lieu, la commission d’interchange est prélevée. Elle couvre les coûts de traitement, les coûts des garantis en cas de fraude et la période de crédit accordée au titulaire de la carte. Elle est calculée suivant un pourcentage de la transaction, suivant un coût fixe par opération ou une combinaison des deux. La commission d’interchange est payée par l’acquéreur à l’émetteur. De leur côté, le commerçant paie une commission à l’acquéreur et le titulaire de la carte paie une commission à l’émetteur. Suivant le type de carte, le titulaire aura droit à certains bénéfices comme le service de rapatriement en cas d’accident et autres. Dans le cas d’un retrait d’espèces, les mêmes types de commissions sont prélevées sauf pour le sens de la commission d’interchange. Celle-ci est payée par l’émetteur à l’acquéreur principalement pour la maintenance du distributeur de billets. On peut se douter que ces commissions peuvent être un débat houleux entre les commerçants et les acquéreurs ou entre les acquéreurs, les émetteurs et les réseaux d’acceptation de paiement par carte. Le réseau d’acceptation de cartes peut forcer les commerçants à n’utiliser qu’une marque de carte. Les grands groupes commerciaux peuvent négocier des tarifs à leur avantage. Enfin, le gouvernement peut intervenir dans l’adoption d’un code de conduite et de transparence comme ç’a pu être le cas au Canada (cf : http://paymentsystemreview.ca)
EMV est l’acronyme de “Europay, MasterCard et Visa”. C’est un standard d’interopérabilité entre les cartes à puces (smartcard, IC card, integrated chip card) les TPE (terminaux de paiements électroniques, POS, point of sale) et les DAB (distributeurs automatiques de billets, ATM, automated teller machine) destiné à identifier les transactions des cartes de débit et de crédit par contact direct ou sans contact entre la carte et les terminaux.
EMVco est l’organisme chargé du maintien des spécifications et regroupe des réseaux de cartes américains, japonais et chinois.
Les avantages de la norme EVM sont:
La normes est composée de quatre volumes. Le premier est consacré aux caractéristiques de la carte à puce. Le deuxième aborde la sécurité, les protocoles de cryptage, les méthodes d’authentification et ses messages. Le troisième volume s’enfonce dans les dédales de la programmation de la carte. le quatrième volume détails les exigences des terminaux et des IHM.
Voici un aperçu des volumes 2 et 3. Les étapes du traitement d’une transaction se divisent comme il suit.
Le conseil européen sur les paiements (european payment council) maintient la norme SCS. La migration vers CSC a eu lieu en 2010 et la norme continue d’être mise à jour par exemple sur les paiements par mobile et paiements sans contact.
D’après la source http://sepafrance-temp.fr, Conformément au cadre d’interopérabilité SEPA, les paiements par carte doivent respecter les principes suivants :
La norme CSC comporte six volumes.
La norme CSC basée sur le standard EMV est la pierre angulaire des paiements sur terminaux auprès des commerçants et distributeurs de billets. Mais ces modes de paiements ne seraient pas désuets? Le conseil européen sur les paiements a déjà commencé les discussions sur les normes des paiements sans contact et des paiements par mobile. Ces deux modes de paiement utilisent l’identification par radio-fréquence (RDFI, radio frequency identification). Soit la puce électronique de la carte est équipée de cette technologie, soit elle est intégrée à une puce insérée dans le téléphone portable. Il ne reste plus qu’à expérimenter ces nouveaux modes de paiement. Et si on manque d’imagination, il y des mises en scène sur le net:
Mode de paiement | Mise en scène |
Paiement sans contact (01 net) | https://www.youtube.com/watch?v=0t8Gksf3_I8 |
Paiement par mobile (BPCE) | https://www.youtube.com/watch?v=k9CThqQUJcw |
Références
Document, Sujet | Lien, contenu |
Università Ca Foscari, payment systems, Maurizio Marek | http://www.dsi.unive.it/~marek/files/09.5%20-%20payment%20systems.pdf |
SCS , SEPA card scheme (books of the 7th version) | http://www.europeanpaymentscouncil.eu/content.cfm?page=sepa_vision_for_cards |
EMV (Europay, Visa, Mastercard) | Wikipedia en anglais et en Francais |
Introduction to EMV specifications | https://www.emvco.com/best_practices.aspx?id=217 |
Groupe de travail sur l’examen du système de paiement : le marché des cartes de crédit et de débit | http://paymentsystemreview.ca/index.php/rapports/a-propos-du-dialogue-nos-documents-de-discussion/les-marches-des-cartes-de-credit-et-de-debit/indexe68f.html?lang=fr |
http://www.cartes-bancaires.com/ | http://www.cartes-bancaires.com/ |
Wikipedia on card payment topics | Major cards : American Express, MasterCard, Debit MasterCard, Maestro, Visa, Visa Debit, Visa ElectronRegional and specialty cards: Carte Bleue, Electronic Payment Services (EPS)Accounts : Bank card number,Card enclosure,Credit card balance transfer,Credit limit,Revolving account,Deposit account,Current/Checking account,Savings accountDebt : Cash advance, Charge-off, Maxed out, Interest, Grace period, Introductory rate, Universal defaultPayment :Card not present transaction, Chargeback, Controlled payment number, DisputeFees:Interchange fee ,Interchange fee, SurchargeSecurity :Card security code,Chargeback fraud,Credit card fraud,Credit card hijacking,EnculturationTechnology :Automated teller machine,Contactless payment,Credit card terminal,EMV,Interbank network,Magnetic stripe card,Smart card |
Autres sujets (Wikipedia) | Payment card industryPayments as a platformList of online payment service providersPayment service providerelectronic commerceMobile TicketingMobile BankingMobile commerce service providerMobile dial codeMobile PaymentsLa monétiqueLa billettiqueLa carte téléphoniqueLe prépaiementLa carte cadeau dématérialisée (ou e-gift)Le DCC (Dynamic Currency Conversion)Le PME (Porte-Monnaie Electronique)Le paiement par téléphone mobileLe marketing monétique
Le paiement sans contact (NFC) |
Sur e-RSB | http://www.cartes-bancaires.com/cbmag/fr/26/actu/actu.htm |
Sur STET-CORE | https://www.banque-france.fr/eurosysteme-et-international/sepa/systeme-de-paiement-de-masse.html |
http://www.stet.eu | |
http://fr.wikipedia.org/wiki/Syst%C3%A8me_STET-CORE |
–>
The post Les paiements par carte first appeared on In Fine - Le Blog.
]]>The post Introduction aux accords de Bâle I, II et III first appeared on In Fine - Le Blog.
]]>Bâle est une ville en Suisse où se concentrent beaucoup d’horlogers. Elle abrite aussi le musée Tinguely, un artiste connu grâce à ses sculptures animées. La banque des règlements internationaux (BRI ou International Settlement Bank, ISB), la banque centrale de toutes les banques centrales, y siège aussi. Celle-ci héberge le comité de Bâle sur le contrôle bancaire (Basel Committee on Banking Supervision, BCBS) . Ce club des gouverneurs des banques centrales se réunit quatre fois par an et mène des discussions autour du contrôle, de la surveillance et de la règlementation des banques. Cherchons de comprendre le contexte économique conduisant aux trois différents accords de Bâle et comment la vie des banques se synchronise à l’heure de l’application des normes prudentielles émanant du comité de Bâle.
Pendant les années 80, le comité de Bâle a tablé sur l’établissement de normes internationales sur le capital minimum qu’une banque devait détenir afin de garantir sa stabilité. En 1987, le « capital adequacy framework » (accord de Bâle I) est proposé par le comité. Celui-ci est validé en l’espace de 2 ans par 150 pays et adapté au cadre juridique de chacun d’entre eux. Le comité fixe des normes (guidelines) et celles-ci, une fois transposées dans les pays, par consensus, deviennent des “lois internationales”.
Les banques peuvent investir comme bon leur semble mais il est important qu’elles ne fassent pas faillite et qu’elles ne prennent pas de risques excessifs. Donc, la logique veut que plus la banque investit, plus elle doit avoir de capitaux propres.
Les représentants des États-Unis et des états européens sont arrivé à un accord sur une formule du capital réglementaire, le ratio de Cooke. Ce capital doit être supérieur ou égal à 8% des actifs pondérés. Par actif, il est sous-entendu crédit accordé aux clients.
Au moment de la validation du texte, fin des années 80, les banques des deux côtés de l’Atlantique vivaient des contextes différents. En Europe, la plupart de banques appartenaient aux états et, si elles étaient déficitaires, les états les renflouaient avec l’argent du contribuable. Une vague de privatisation a commencé et les accords de Bâle I permettaient aux banques européennes de constituer « un capital privé ». De leur côté, les banques américaines étaient déjà privatisées et capitalisées. Elles ont demandé l’introduction du tableau de pondérations pour ne pas être désavantagées dans leurs affaires.
Les valeurs des pondérations W des crédits sont les suivantes :
Il est important de noter qu’à ce stade les notions de risque et de pricing (valorisation des actifs) sont absentes. La valeur de l’actif est la valeur du crédit. C’est une valeur directe. Le texte de Bâle I ne faisait que trente pages. Les publications successives atteindront 350 pour Bâle II et 1000 pour Bâle III.
De 1989 à 1993, les banques européennes cherchent du capital privé et sont, en conséquence, cotées en bourse. Le but de Bâle I est atteint. Dès 1996, le premier accord commence à dévoiler ses défaillances dans un contexte économique ayant muté. Il y a quatre défaillances :
En 2007, les accords de Bâle II en sont à une cinquième version et deviennent une loi applicable à tous les pays membres du BRI. En voici les conséquences.
Bâle II se structure en 3 piliers : l’exigence de fonds propres, la procédure de surveillance de la gestion des fonds propres et la discipline de marché. La documentation disponible consacre plus son attention sur le premier d’entre eux.
Le premier pilier, l’exigence de fonds propres, se base principalement sur le risque de crédit. Celui-ci a deux composantes. D’abord le risque de contrepartie (default risk). Ce risque est l’éventualité de ne plus être payé par son débiteur. La deuxième composante est le risque de recouvrement (recovery risk) qui mesure l’éventualité ou pas de récupérer une partie du capital prêté à la contrepartie défaillante. Plus une banque se protège avec des instruments facilitant le recouvrement (collatéral), plus elle peut assumer des profils de clients risqués. Le risque de contrepartie se déclenche dès lors qu’il y a un retard de 90 jours dans un paiement. Si le taux de rotation des créances client et des dettes fournisseurs est supérieur à 90 jours, les entreprises devront donc les raccourcir.
Indépendamment de la maturité du prêt ou de l’instrument, le risque de crédit (probability of default, PD) est calculé à un an puis il est recalculé chaque année. Les banques devront connaitre quatre variables (LGD, EAD, MVC et RR) pour chaque client et pour chaque opération de chaque client. Les impacts sur l’organisation et les systèmes d’information sont évidents.
LGD (loss given default) mesure le risque de recouvrement:
Le ratio de Cooke pour le calcul du capital réglementaire devient le ratio de McDonough où RWA signifie risk weighted asset (Ai.Wi). Les RWA, , du ratio de Cooke sont comptabilisés pour 3 types de risques différents Wi(crédit), Wj (marché) et Wk (opérationnel) .
RWA = f(PD;LGD) x EAD où f respecte une loi normale
Expected Loss = EL = PDxLGDxEAD
Le risque de crédit peut être calculé suivant trois méthodes: une approche standard, IRB (Internal Rating-Based Approach), IRB avancée . Le risque de marché peut être calculé avec la méthode VaR (value at risk). Le risque opérationnel peut être calculé avec trois méthodes: BIA (basic indicator approach) , STA (standardized approach) et AMA (advanced measurement approach).
RC est divisé en trois couches (tier en anglais). Tier 1 est l’ensemble de les capitaux propres de la banque (equity, les parts de actionnaires et les réserves). Tier 2 est du capital supplémentaire incluant par exemple des provisions. Tier 3 est la composante requise pour faire face au risque de marché.
Le deuxième pilier est la procédure de surveillance de la gestion des fonds propres au cours de laquelle les banques doivent être capables de prouver l’origine et la validité des calculs du ratio de McDonough. C’est le back testing. En cas de crise d’un secteur de l’économie, les banque devront prouver que leurs capitaux réglementaires leur permettent de résister aux conditions défavorables.
Le troisième pilier, la discipline de marché , est la mise à disposition publique d’informations sur l’actif, les risques et leur gestion. C’est de l’information disponible pour les investisseurs avertis.
Après la crise de 2008, en 2009 le comité de Bâle s’est réuni afin de retoucher certains fondements de Bâle II. La nouvelle mouture a été nommée Bâle 2.5. Bâle 2.5 s’est appliqué principalement en Europe à partir de 2011 via la transposition de normes en lois votées par le parlement. Elles sont connues sous le nom de CRD2 et CRD3 (CRD : capital requirement directive). Les améliorations impactent les risques sur les titrisations et les instruments financiers complexes. Les capitaux hybrides sont diminués dans la constitution de la couche « Tier 1 » du capital réglementaire. Aussi, dans le domaine des risques de marché, les pondérations sont modifiées.
Bâle II se focalise principalement sur le niveau de capital que les prêteurs d’argent devaient avoir. Les prêts ont un risque et constituer une réserve permet en principe de faire face à des crises. Bâle III augmente le niveau de ce capital de réserve de base de 2,5% à 7%. En plus de la réforme sur la qualité du niveau de capital requis, Bâle III introduit deux autres axes d’améliorations.
Le premier axe est un effort de réduction de la taille du bilan via une limite sur le volume d’activité en fonction du volume des capitaux propres. Ainsi le ratio sur l’effet de levier (leverage ratio) contrôle la taille du bilan.
Le second axe est la règle sur la liquidité. Les coffres d’une banque se remplissent au passif du bilan avec les dépôts des clients et se vident à l’actif du bilan avec les crédits accordés aux clients. Avec le temps, les intérêts sur les crédits reviennent au passif sous forme d’encaissements. Bâle III soumet les banques à des simulations de scénarios de stress de 30 jours et d’un an au cours desquels la possibilité de se refinancer dans le marché interbancaire et de recevoir les intérêts est interrompue.
Quel est l’impact sur le fonctionnement des banques ? La règle sur la liquidité impacte le ROE (return on équity). En effet, le ROE diminue puisqu’il est défini comme le résultat net sur le capital disponible. Au numérateur, le résultat net diminue et au dénominateur le capital augmente. Ceci pousse les banques à chercher ou à retenir plus de liquidité. En conséquence, les activités de cash management et de factoring deviennent complémentaires aux activités « traditionnelles » de dépôt et de prêt. Plus la relation avec un client est « intime », plus les capitaux resteront au sein de la banque. Autrement dit, si un client regroupe ses activités de cash management avec une banque, au final, les opérations ne seront que du book to book et le besoin en liquidité sera moindre car la liquidité est retenu et ne part pas vers d’autres banques.
La Figure 1 montre l’évolution des capitaux réglementaires entre Bâle II et Bâle III.
Figure : la recomposition des parts du capital réglementaire entre Bâle II et III
Le Common Equity Tier 1 (CET1) est composé de fonds propres (titres émis par la banque conservés sur le long terme), bénéfices non-répartis (retained earnings) et de réserves. Il sera augmenté progressivement sur plusieurs années (voir calendrier plus bas).
La part « conservation buffer » doit être mise de côté pour faire face à des périodes de récession. Les banques qui ne le constituent pas ne pourront pas distribuer des dividendes ou des bonus.
La part contrecyclique (coutercyclical buffer) fait partie de la part « conservation buffer » et sera garni suivant la législation de chaque pays. Par contre-cycle, il est entendu qu’en période de “boom”, quand les crédits s’accordent facilement, les banques épargnent. En période de récession, alors que la liquidité s’assèche, la part contrecyclique est utilisée pour accorder des crédits.
La part Tier 2 est composée de réserves inattendues (undisclosed reserves, revaluation reserves), de provisions générales, d’ instruments hybrides (ie : Ce type d’instrument a des caractéristiques de dette et de fond propre. Il exige un décaissement sous forme de coupon et s’intègre après aux fonds propres. Les obligations convertibles en actions à maturité en sont un cas) et d’actions préférentielles (preferred stock).
La part tier 3 disparait dans les accords de Bâle III.
Ici le leitmotiv est “amasser de l’argent de réserve en cas de coup dur”. Certaines banques voient leur rentabilité menacée. Certains analystes prédisent le retrait des banques de certains pans d’activités, l’octroi de plus en plus difficile de crédits ou le basculement vers le shadow banking comme solution de repli vers une rentabilité majeure.
La figure ci-après montre les changements dans le calcul des risques entre Bâle II, Bâle 2.5 et Bâle III.
Figure : Modification du calcul des risques (source : Moodyesanalytics)
Le LCR couvre la notion de « stress test » pendant 30 jours. Ce ratio à calculer régulièrement montre que la banque est prête à tout moment à affronter une crise de liquidité pendant un mois.
Le respect de ce ratio permet à la banque de résister à une crise de liquidité qui se prolongerait pendant un an.
Ce ratio est calculé de sorte à éviter une croissance excessive du bilan. C’est un ratio qui ne se base pas sur des calculs de risques.
Ce ratio est généralement respecté par les banques. Il oscille entre 10% et 40%.
Le calendrier ci-dessous souligne l’application progressive des mesures prises par Bâle III. Bâle II n’a pas été appliqué par les banques américaines. En ce moment, les banques américaines se focalisent dans l’application du Dood-Franck Act. Cependant, elles se conformeront à Bâle III. Le chantier d’application sera plus complexe pour les banques américaines que pour les européennes.
Figure: calendrier de Bâle III
Les accords de Bâle I ont renforcé la constitution du capital réglementaire (CR). Bâle II a introduit 3 piliers. Les risques de crédit, de marché et opérationnels sont pris en compte dans les calculs du CR. A ce premier pilier s’ en ajoutent deux autres, à savoir, les procédures de surveillance et la discipline de marché. Bâle 2.5 a incorporé des mesures contre les défaillances dévoilées par les évènements de la crise de 2008. Les risques de la titrisation et les expositions sur le trading book devaient être prise en compte. Bâle III améliore les 3 piliers existants et rajoute des mesures sur la liquidité. Le comité de Bâle se réunit régulièrement. Les discussions récentes abordent le shadow banking , ce système bancaire parallèle basé sur le crédit financé par des activités de marché et échappant aux normes prudentielles des accords Bâle. C’est une source de financement alternative mais aussi un mécanisme par où les banques peuvent s’adonner à l’arbitrage réglementaire et diminuer les effets voulus par les accords de Bâle.
références
Source | liens |
Università di Bocconi,Corporate and Investment Banking 05/23 (accordo di Basilea I) | https://www.youtube.com/watch?v=LGDrOR3cJrg |
Università di Bocconi,Corporate and Investment Banking 06/23 (accordo di Basilea II) | https://www.youtube.com/watch?v=WMv2qZoJ4oI |
Basel III verständlich erklärt | https://www.youtube.com/watch?v=8zEu3PkvOOg |
Basel III (BNP Paribas) | https://www.youtube.com/watch?v=CVsjFVEZnCE&list |
WIkipedia | Versions françaises et anglaises sur les accords de Bâle, la ville de Bâle, Bâle I, Bâle II, Bâle III, la banque des règlements internationaux, conseil de stabilité financière |
Fimarkets : shadow banking | http://www.fimarkets.com/pages/shadow_banking.php |
THE CREDIT MELTDOWN AND THE SHADOW BANKING SYSTEM: WHAT BASEL III MISSED | http://www.webofdebt.com/articles/basel3_fail.php |
Basel III: Stronger Banks and a More Resilient Financial System | http://www.bis.org/speeches/sp110406.pdf |
Bâle I (texte de la BRI) | https://www.bis.org/publ/bcbs04a.pdf |
Bâle II (texte de la BRI) | https://www.bis.org/publ/bcbs128.pdf |
The post Introduction aux accords de Bâle I, II et III first appeared on In Fine - Le Blog.
]]>The post Qu’est ce qu’une banque de finance et d’investissement? first appeared on In Fine - Le Blog.
]]>A différence de la banque de détail (BDDF) qui s’adresse au grand public, la banque de financement et d’investissement ou BFI (CIB ou corporate investment banking) propose ses services exclusivement aux grandes entreprises, aux institutions financières et aux institutions publiques. Elle s’occupe aussi des transactions à montant élevé. Les activités de la BFI sont souvent scindées en activités de bas de bilan pour la partie financement et en activités de haut de bilan pour la partie investissement. Cherchons à comprendre cette terminologie au regard du schéma simplifié du bilan d’une entreprise.
Actifs (Emplois, les crédits) | Passif (ressources, les débits) |
Haut de bilan (Long Terme) pour la banque d’investissement | |
ImmobilisationsCréances | Fonds propres (vue comme la dette envers les actionnaires ou les propriétaires)Capitaux de réserveEmprunts LT |
Bas de Bilan (Moyen terme, court terme) pour la banque de financement | |
StocksCréancesTrésorerie | Dettes FournisseursDécouverts |
Une banque de financement (corporate banking) ou banque commerciale s’occupe des activités de dépôt et de crédit. Elle crée des crédits directs. Elle facilite des moyens de paiements en commerce international (crédit documentaire, lettres de change), vent des services de gestion de trésorerie et aide ses clients à placer des investissements sur des produits financiers déjà existants. Elle est impliquée dans les opérations qui modifient les postes comptables du bas de bilan. Ce sont l’actif et le passif les plus liquides. Ce sont les actifs et les passifs circulants. La rémunération de la banque de financement provient des intérêts et des services autour de la gestion de l’argent. Dans toutes ces activités la banque risque ses fonds soit parce qu’elle a des participations dans les entreprises soit parce qu’elle prête son argent.
Une banque d’investissement (investment banking) se focalise plutôt sur les activités de conseil, d’intermédiation et d’exécution des opérations de haut de bilan, soit des écritures comptables qui représentent le long terme. Il existe aussi le concept de banque d’affaires. Il est de nos jours assimilé à celui de banque d’investissement. L’activité de la banque d’affaires s’intéresse à la finance d’entreprise (corporate finance) et fait partie intégrante des activités de la banque d’investissement. Les autres activités majeures d’une banque d’investissement sont celles des marchés financiers (global capital markets) et celles des opérations de financement (structured finance). La rémunération provient des honoraires facturés aux clients pour ses bons conseils juridiques et financiers. Dans toutes ces activités, la banque ne risque ses ni ses fonds ni son argent. Si une opération ne marche pas, elle risque par contre sa réputation.
Le terme « banque d’affaires » est l’équivalent de « merchant bank » en anglais. C’est une banque qui prend des participations dans des sociétés et monte des dossiers de financement d’entreprises. La partie financement sur le long terme (haut de bilan) et la partie conseil sont donc intimement liées. L’une peu faire appel à l’autre et vice-versa.
Par la suite seront développer les services qu’offre la banque de financement et les domaines stratégiques ou peuvent se positionnées les banque d’investissement : les marchés financiers, la finance d’entreprise, le private equity, la finance structurée, la gestion d’actifs et la gestion des risques. Les différentes informations ci-dessous ont été collectées en visitant les sites internet de plusieurs banques. L’idée est de donner un premier aperçu sur ces sujets.
La banque de financement (BF, corporate banking) est l’activité d’intermédiation au cours de laquelle les dépôts sont convertis en prêts. Elle comprend aussi tous les services permettant aux clients de gérer leur argent et d’avoir une visibilité sur leurs opérations. Conscientes des particularités de des clients coporate, la BF segmente le marché par secteur industriel. Des services spécialisés sont créés par spécialisation du client (énergie, télécommunications, maritime, aéronautique, immobilier). Suivant la stratégie de la banque, celle-ci visera les PME-PMI, les multinationales, les institutions publiques ou les institutions financières. Dépendant de la taille de leur réseau, la présence des BF sera de type nationale, régionale ou internationale. Ainsi la BF propose toute une panoplie de services dans le but de fidéliser ses clients.
Une fois que les activités de conseil de banque d’investissement tablent sur un produit financier ou la meilleure façon d’emprunter, la BF se charge d’engager ses moyens. Elle mettra en place soit des crédits directs pour des financements court terme, soit des crédits-bails (leasing) pour l’achat d’un moyen de production (immobilier, véhicules). Elle pourra de même allier ses efforts avec d’autres confrères dans le but de financer un projet auquel elle n’aurait pas pu faire face toute seule (crédits syndiqués ou syndicated loans).
En commerce international, une banque peut faciliter les opérations d’import-export avec les remises documentaires et les crédits documentaires. La remise documentaire est une technique d’encaissement par laquelle l’exportateur donne mandat à sa banque de remettre des documents d’export à la banque de l’importateur, qui les remettra à son client. C’est initié par le vendeur-exportateur et convient quand la confiance règne entre les négociants. Le crédit documentaire est la promesse donnée par le banquier de l’importateur à un exportateur étranger selon laquelle le montant de sa créance lui sera réglé, pourvu qu’il apporte, à l’aide de documents énumérés, la preuve de l’expédition des marchandises à destination du pays importateur. C’est initié par l’acheteur-importateur et c’est beaucoup plus sécurisé que la remise documentaire. La BF met en général à disposition un portail informatique ou les exportateurs peuvent suivre les étapes de création de crédits documentaires ou de contrôler les garanties de livraison. Elle active aussi son réseau de banques correspondantes gérant les relations avec les partenaires commerciaux de ses clients.
De point de vue comptable, les autres postes auxquels peut s’attaquer une BF sont les créances et les dettes fournisseurs (accounts receivables and accounts payable). Soit la BF facilite l’infrastructure et l’automatisation de paiements de factures, soit elle vend des services d’affacturage (factoring : relance et recouvrement, suivi des créances) et d’escompte (génération de trésorerie par vente de créances client). Certaines banques appellent ceci les services de supply chain. Si les achats sont effectués par les employés dans l’exercice de leur profession, le service de cartes bancaires facilitera la gestion des frais professionnels.
La BF peut adresser ses services au trésorier des entreprises. Voyons de façon simplifiée comment ce dernier raisonne et en donnant quelques définitions
Actif=Passif
Immos+Stocks+Créances+Tréso=Fonds Propres+EmpruntsLT+ dettes Fournisseurs+Découverts
Tréso= (Fonds Propres+EmpruntsLT-Immos)-(Stocks+Créances-dettes Fournisseurs- Découverts)
Tréso=Fond de Roulement – Besoin en Fond de Roulement
TR=FR-BFR
Si le FR (fond de roulement) reste « constant » sur le court terme, le trésorier devra équilibrer cette formule à son avantage. Il tâchera de maintenir une trésorerie positive ou proche de zéro recourant à des produits financiers liquides en cas de besoins de caisse. Les BF mettront à disposition leurs systèmes de paiements et de gestion et centralisation de trésorerie et l’infrastructure l’accompagnant (canaux sécurisés, accès au chambres de compensation, accès aux banques correspondantes). Ainsi, un portail informatique dédié au « cash management » permet d’initier des paiements, de contrôler les autorisations lors de ces initiations, de recevoir des rapports sur les comptes. Ce genre d’offre de services fournit au trésorier une vue d’ensemble sur les comptes et ses flux puis sur le statut des paiements initiés.
L’offre de services peut s’étendre sur des portails d’exécution d’opérations de change (sport, forwards, swaps) ou de pre-trade, exécution et post-trade sur les marchés des capitaux (commodidties, titres, produits indexés). La BF exerce donc le métier de gestion de portefeuille et joue le rôle dépositaire de titres. Elle s’adapte même aux croyances de ses clients avec des départements spécialisés en finance islamique.
L’ECM est l’activité de services financiers offerts par rapport aux instruments financiers émis par les clients.
Dans le marché primaire, l’activité est guidée par la bourse et les privatisations. La banque d’investissement (BI) gère la relation avec ses clients ayant comme objectif la création de nouveaux produits financiers. Les services sont les suivants :
Le marché secondaire est le marché des titres d’ « occasion ». Après l’émission des titres ceux-ci peuvent être achetés et vendus. Parmi les services proposés on trouve :
Lorsqu’une entreprise choisit une stratégie financière donnée, la BFI l’aide à la mettre en place. Cette activité peut se décomposer en plusieurs types d’interventions :
Les services en M&A font appel à d’autres activités de la BFI comme l’origination, le conseil, les prêts. Ce sont les activités de marché des capitaux et de banque de financement.
Dans l’activité de « Private Equity », la BFI investit pour compte propre dans des titres de sociétés non-cotées en bourse. Ces titres ont une liquidité basse et il est très difficile d’en évaluer le prix. La BFI devra décider si elle investit directement ou via une structure telle que les OPCVM, si elle sera actionnaire majoritaire ou minoritaire et à quel moment dans le cycle de vie (start up, croissance, maturité, crise). Approfondir le sujet du « private equity » serait équivalent à parler de la participation d’une entité morale dans la gestion d’entreprise. Selon le type d’engagements pris, la banque peut participer en tant qu’actionnaire dans les assemblées générales ou au conseil de surveillance. Si elle est majoritaire, elle peut nommer les dirigeants et influer directement sur la stratégie de l’entreprise. Le private equity est complémentaire avec le « wealth managemen »t car quel est le meilleur endroit pour trouver ses investisseurs si ce n’est parmi si clients fortunés.
La finance structurée englobe les activités nécessitant un grand investissement initial sous forme de prêt et générant un cash-flow qui garantit le remboursement des fonds de financement.
Les projets de grande dimension et à haut risque, comme les constructions d’ingénierie civile (tunnels, ponts, barrages), font appel à une banque ou à un groupe de banques. Vue l’ampleur de l’investissement, aucun acteur privé n’est capable d’en assumer le risque à lui seul. Un fond commun de créances (FCC ou SPV, special purpose vehicle) est créé. Dans l’actif du bilan de cette entité se trouve l’œuvre d’ingénierie et au passif la structure du prêt façonné par le cash-flow du projet. Le cash-flow peut être soutenu par des lois et des décrets publics. S’il s’agit d’une route, les péages rempliront les caisses sur le très long terme.
Pour les LBO (leveraged acquisition / leveraged buyout), une structure juridique est créée afin d’acheter une entreprise. L’actif de cette entité juridique est composé du cash-flow (bénéfices) généré par l’entreprise achetée. Le passif comporte les fonds propres des investisseurs et l’emprunt pour l’achat de l’entreprise. Il est sous-entendu que la rentabilité de l’entreprise achetée est supérieure au taux du crédit. Ce type de montage peut mener au retrait de la cotation d’une société anonyme.
La Titrisation (securitization) est la vente d’une activité du bilan comme produit financier appelé ABS (asset backed securities ou titre adossée à des créances). L’exemple le plus connu est celui des subprimes ou les emprunts immobiliers sont vendus comme des titres, les RMBA (residencial mortgage backed securities). Les remboursements effectués par les emprunteurs constituent le gain sur les titres. La titrisation a des avantages pour les banques. C’est une source de financement moins cher que les prêts accordés par la banque centrale ou par le marché interbancaire. En titrisant, les créances sortent de l’actif, ce qui favorise le respect des ratios de solvabilité imposé par Bâle II et III. Finalement, le risque de crédit est transféré au FCC qui se dotera d’un mécanisme de couverture pour y faire face.
Comme son nom l’indique, la gestion d’actifs ou « asset management » est un service de gestion d’actifs (des possessions financières et non financières) offerts par la banque pour le compte d’un tiers. Le public visé peut être une personne dont la fortune atteint un montant conséquent. Dans ce cas-là, ça s’appelle plutôt « wealth management ». S’il s’agit d’immobilier, la banque aura surement une entité « real estate ». La gestion de portefeuille d’actions peut aussi être incluse dans cette branche du métier de banque d’investissement.
Dans le cas du « wealth management », le conseiller cherche à établir un plan d’ingénierie patrimoniale puis à conserver ou plutôt augmenter la valeur des actifs qui lui sont confiés. Il y aura une phase d’orientation au cours de laquelle le client fixera ses choix sur les achats et investissement qu’il voudrait réaliser (constitution d’une pension, achat d’un bien immobilier, succession, etc…). Avec le pouvoir de gestion accordé au banquier, matérialisé par le mandat de gestion, les produits financiers sont conçus et sélectionnés puis des ordres sont exécutés dans le marché des capitaux.
Les banques se sont caractérisées par la création de produits dérivés tels que les forwards, les futures, les options et les swaps. Ces produits financiers peuvent être utilisés pour couvrir les risques d’intérêt ou le risque de crédit. Si les sous-jacents ne sont plus des titres mais des évènements avec une probabilité quelconque de se produire, la banque commence à empiéter dans les activités de l’assurance. L’exemple le plus parlant est celui des CDS ou « credit default swaps ».
Les CDS peuvent être assimilés à des polices d’assurance. Les titres assurés seront par exemple des bonds. L’entité qui s’assure ses bonds paye une annuité (premium) et se protège contre un événement de défaut bancaire de la contrepartie émettant les bonds (impossibilité de paiement, banqueroute ou autre). Les CDS peuvent être perçus comme un pari sur la défaillance d’une entreprise. D’un autre côté, et au-delà de ces intentions spéculatives malveillantes, le CDS peut permettre à une entreprise en besoin de fonds de s’en procurer plus facilement. Supposons que la politique d’un fond d’investissement soit de n’investir que sur des entreprises ayant une note A+ dans l’échelle d’une agence de notation quelconque. Si l’entreprise de l’exemple considéré est notée A-, le fond d’investissement ne pourra pas lui accorder le crédit sous forme de bonds. Cependant un montage financier avec une BI, dont la note est A+, peut contourner cet empêchement et satisfaire tous les trois entités. Le fond d’investissement peut donc acheter les bonds émis par l’entreprise. En même temps, la BI adosse à ces bonds un CDS, ce qui a pour effet de relevé la note de A- à A+ car la BI se porte garante. L’entreprise paye des intérêts sur ses bonds à un taux annuel T. Le fond d’investissement gagne ces intérêts et en reverse un partie à la BI qui correspond au forfait annuel (premium) de la police d’assurance (CDS).
The post Qu’est ce qu’une banque de finance et d’investissement? first appeared on In Fine - Le Blog.
]]>The post Les informations essentielles du rulebook SDD first appeared on In Fine - Le Blog.
]]>Le rulebook est la spécification contenant les régles métier du virement SEPA. Le but de ce document est de donner un aperçu rapide du contenu du rulebook et d’e faire le parallèle avec les guide d’implémentation (Implémentation guides, IG). Sur 250 pages que compte le rulebook seulement la première centaine contient des informations fonctionnelles. Le reste ce sont des considérations sur le droits et obligations des entités adhérentes à l’utilisation de SEPA et le fonctionnement de l’organisme en charge de la modification des rulebooks et de guide d’implémentation.
Le premier bloc important donne les aspects généraux du virement SEPA. Le deuxième bloc important est celui contenant le diagramme des dates . Le troisième bloc est celui de la définition des transactions R. C’est ce qu’il se passe quand le virement n’aboutit pas normalement.
Pour rappel voici les définitions :
Avant comptabilisation :
Après la comptabilisation :
Les conventions expliquent comment se présente la suite du document.
Le quatrième bloc important est le résumé des six processus sur un diagramme de type swimlane. Une bande représente un acteur et les étapes sont représentées sur chaque bande. Les six processus sont :
Le cinquième bloc important est la description détaillée de chaque étape. La sixième section est celle décrivant les datasets (regroupement de données) et la description de chaque attribut Pour mémoire voici les datasets
Les données du prélèvements (CORE : particuliers, B2B :entreprises):
Données spécifiques aux mandats des particuliers :
Données spécifiques aux mandats des entreprises :
Après les droits et obligation des participants (rights and obligations of participants) se trouve un lexique des termes utilisés.
Les fichiers ISO20022 sont les conteneurs des datasets DS-xx. Les guide d’implémentations indiquent les balises du fichier XML ISO20022 ou vont les attributs AT-xx
Identifiant | FIchier iso20022 | Commentaire |
DS-01 The Mandate. Le mandat | ( Non applicable car se réfère au mandat papier ).Pas de message ISO | Le jeu de données du DS-01 fournit la liste ordonnée des données (attributs durulebook) qui doivent apparaître dans le formulaire de ‘mandat-papier’ et qui seronttransmises selon les règles du Scheme dans les jeux de données DS-03 et DS-04. |
DS-02dematerialised Mandate( Le Mandat dématérialisé) | Non applicable. Pas de message ISO. | Le jeu de données du DS-02 fournit la liste des données qui doivent êtreenregistrées par le créancier dans un mandat au format fichier électronique pour lesbesoins d’éxécution des processus de débit direct SEPA (comme préparer l’instruction de débit direct selon le jeu de données DS-03) |
DS-03Customer to bank Collection( Instruction Client de Débit Direct) | CORE CUSTOMER-TO-BANK IGCustomer Direct Debit Initiation (pain.008.001.02)SDD Prélèvement SEPA(Customer Direct Debit Initiation)échanges C to FI – Clients conventionnés a BDF | La liste d’attributs du DS-03 représente la serie complète des données (attributs du rulebook) qui peuvent être fournies par le Créancier et être transportées selon lesrègles du “Scheme” par le jeu de données DS-04. |
DS-04 The inter-bank Collection( Instruction de Débit DirectInterbancaire) | CORE INTER-BANK IGFI to FI Customer Direct Debit (pacs.003.001.02)SDD Prélèvement SEPA (Fi to Fi Customer Direct Debit)échanges FI to FI – Participants indirects _BDF – BDF_CSM | Le jeu de données DS-04 fournit la liste des données (attributs du Rulebook)requises pour le message interbancaire de prélèvement. |
DS-05Direct debit Rejection, Return orRefund of a Collection or a Reversal( Message pour le Reject, Return ouRefund d’une instruction de DébitDirect). | CORE INTER-BANK IG(pacs.004.001.02)Format d’échange du SDD Returnéchanges FI to FI Participants indirects BDF – BDF – CSM | Le jeu de données DS-05 fournit la liste des données (attributs du Rulebook)requises pour les messages des Rejet (Reject) , Retour (Return) ou Remboursement (Refund) de Prélèvement.Avant comptabilisation :Refus (refusal ) : sur base de la pré-notification, le débiteur refuse de payer et la banque du débiteur envoie un rejet à la banque du créancierRejet (reject) : transaction inexécutable à cause d’une erreur ou d’un refusRévocation (revocation) :action à l’initiative du créancier empêchant la transmission de la demande d’encaissement à la banque du débiteurDemande d’annulation (Request for cancellation ):demande d’annulation de la demande d’encaissement par le créancier ou sa banque. Elle est adressée à la banque du débiteurAprès la comptabilisation :
Retour (Return) : prélèvement impayé Remboursement (Refund ) : demande de remboursement effectuée par le débiteur Rectification (Reversal) : demande de remboursement effectuée par le créancier |
CORE INTER-BANK IGReject FI to FI Payment Status Report (pacs.002.001.03)Format d’échange du SDD Reject – (rejet avant règlement interbancaire) échanges FI to FIParticipants indirects n BDF – BDFn CSM | ||
CORE CUSTOMER-TO-BANK IGBank to Customer Direct Debit Reject Dataset (Based on DS-05) Payment Status Report (pain.002.001.03)pain.002.001.0x – Format d’échange C to Fi du SDD Reject (rejet avant règlement interbancaire) | ||
DS-06 Bank to customer Direct Debit Information( Instruction d’ Information de DébitDirect du client débiteur) | Non applicable. Pas de message ISO. | Le jeu de données DS-06 fournit la liste des informations minimales (attributs du rulebook) d’un Débit Direct que la Banque du Débiteur a besoin de mettre à la disposition du Client Débiteur. |
DS-07 The inter-bank Reversal for a Collection by the Creditor. | CORE INTER-BANK IG (DS-07)Use of the Payment Reversal (pacs.007.001.02)pain.007.001.0x : message Client-Banque de Reversement de SDD par le Créancier ( Reversal – Customer Payment Reversalin combination with DS-03 ) échanges C to Fi – Clients Conventionnésa BDF | La liste d’attributs du DS-07 représente la serie complète des données qui peuvent être fournies par le Créancier et être transportées selon les règles du “Scheme” parle jeu de données DS-07. |
CORE CUSTOMER-TO-BANK IG (DS-07+DS-03)Customer to Bank Payment Reversal (pain.007.001.02)pacs.007.001.0x : message interbancairede Reversement de SDD par le Créancier( Reversal – Payment Reversal )échanges FI to FI -Participants indirects _ BDF-BDF_CSM | Le jeu de données du DS-07 fournit la liste des données (attributs du Rulebook) requises pour le message interbancaire de reversement. | |
DS-08 The request and response message for a claim for the Refund of an unauthorised transaction(Messages de Demande et Réponseà la Demande pour unRemboursement d’une transactionnon autorisée. | Not applicable as there is no specific XML message available (Pas de message ISO) | Le Jeu de données DS-08 fournit la liste des données (attributs du Rulebook)requises dans le message de Demande et Réponse à la Demande deRemboursement d’une transaction non autorisée. |
DS-09 The request and response template for a claim for the Refund of an unauthorised transaction( Formulaire papier de la Demande et de la Réponse à la Demande pour un Remboursement d’ une transaction non autorisée.) | Non applicable papier as this refers to a paper based exchange(Pas de message ISO) | Le Jeu de données DS-09 fournit la liste des données (attributs du Rulebook) quidoivent figurer dans la formulaire papier de la Demande et de la Réponse laDemande de Remboursement d’ une transaction non autorisée. |
DS-10 The request message for obtaining a copy of a Mandate( Message de la Demande d’Obtention de copie de mandat) | Not applicable as there is no specific XML message available yet(Pas de message ISO) | Le Jeu de données DS-10 fournit la liste des données (attributs du Rulebook)requises dans le message de Demande d’ Obtention de copie de mandat |
DS-11 The template for the request and the response for obtaining a copy of a Mandate( Formulaire papier de la Demande etde la Réponse pour l’ Obtention d’une copie de Mandat) | Not applicable as this refers to a paper based exchange (Pas de message ISO ) | Le Jeu de données DS-11 fournit la liste des données (attributs du Rulebook) quidoivent figurer dans la formulaire papier de la Demande et de la Réponse pour l’Obtention d’une copie de Mandat |
DS-12 – The e-Mandate proposal /request message | B2B DIRECT DEBIT SCHEME E-MANDATE SERVICEe-Mandate Proposal/Request Message – Issuing (DS-12)Use of Mandate Initiation Request (pain.009.001.01)B2B DIRECT DEBIT SCHEME E-MANDATE SERVICEE-Mandate Proposal/Request Message – Amendment (DS-12)Use of the Mandate Amendment Request (pain.010.001.01)B2B DIRECT DEBIT SCHEME E-MANDATE SERVICEE-Mandate Proposal/Request Message – Cancellation (Based on DS-12)
Use of the Mandate Cancellation Request (pain.011.001.01) |
|
DS-13 The validation message | B2B DIRECT DEBIT SCHEME E-MANDATE SERVICEe-Mandate Validation Message (DS-13)Use of the Mandate Acceptance Report (pain.012.001.01) | |
DS-14 Creditor to Creditor Bank Advance Mandate Information | B2B SDD ADVANCED MANDATE IGCreditor to Creditor Bank Advance Mandate Information (DS-14) – AMI request on the initial mandateUse of Mandate Initiation Request (pain.009.001.01)B2B SDD ADVANCED MANDATE IGCreditor to Creditor Bank Advance Mandate Information (Based on DS-14) – AMI request on the amended mandateUse of the Mandate Amendment Request (pain.010.001.01) | |
DS-15 Inter-bank Advance Mandate Information | B2B SDD ADVANCED MANDATE IGInter-bank Advance Mandate Information (DS-15) – AMI request on the initial mandateUse of the Mandate Initiation Request (pain.009.001.01) |
PT-04.01 | The Creditor generates the data for the Collection of the transactions. |
PT-04.02 | The Creditor pre-notifies the Debtor of the amount and date on which the Collection will be presented to the Debtor Bank for debit. |
PT-04.02bis | The Debtor may instruct a Refusal to the Debtor Bank. |
PT-04.03 | The Creditor sends the Collections, including the Mandate-related information, to the Creditor Bank. |
PT-04.04 | The Creditor Bank Rejects some Collections received from Creditors. |
PT-04.05 | The Creditor Bank sends the Collections to the CSM. |
PT-04.06 | The CSM Rejects some Collections received from the Creditor Bank |
PT-04.07 | The CSM sends the Collections to the Debtor Bank in accordance with the Settlement Cycle. |
PT-04.08 | The Debtor Bank Rejects some Collections before Settlement. |
PT-04.09 | The Debtor Bank debits the Debtor’s account with the amount of the transaction. |
PT-04.10 | The Debtor Bank sends the returned Collection back to the CSM after Settlement. |
PT-04.11 | The CSM sends the returned Collection back to the Creditor Bank. |
PT-04.12 | The Creditor Bank debits the Creditor with the amount of the returned Collection. |
PT-04.13 | The Creditor must handle the disputed Collection with the Debtor, without involvement of the banks. |
PT-04.15 | If a transaction is disputed, the Debtor may instruct his bank to reimburse the debited amount for a Refund. |
PT-04.16 | The Debtor Bank credits the Debtor’s account and sends the Refund messages to the CSM. |
PT-04.17 | The CSM sends the Collection Refunds to the Creditor Bank. |
PT-04.18 | The Creditor Bank debits the Creditor with the amount of the Refunded Collections. |
PT-04.19 | The Creditor must handle the disputed Collection directly with the Debtor, without involvement of the banks. |
PT-04.20 | The Debtor initiates a request for a Refund (after the eight weeks Refund period) for an Unauthorised Transaction. |
PT-04.21 | The Debtor Bank accepts or rejects the Request for Refund – requests Mandate Copy from Creditor Bank. |
PT-04.22 | The Creditor Bank forwards the request for Refund to the Creditor. |
PT-04.23 | The Creditor investigates the request for Refund and provides a response. |
PT-04.24 | The Debtor Bank decides on the claim, sends the Refund of an Unauthorised Transaction to the CSM. |
PT-04.25 | The CSM sends the Refund of an Unauthorised Transaction to the Creditor Bank. |
PT-04.26 | The Creditor Bank debits the Creditor with the amount of the refunded Unauthorised Transaction. |
PROCESS | ATTRIBUT |
DS-03 – DS-04 – DS-06 | AT-01 The Unique Mandate Reference Référence Unique du Mandat (RUM) |
DS-03 – DS-04 – DS-06 | AT-02 The identifier of the Creditor Identifiant du Créancier SEPA (ICS) |
DS-03 – DS-04 – DS-06 | AT-03 The name of the Creditor Nom du Créancier |
DS-03 – DS-04 DS-07 | AT-04 The account number (IBAN) of the CreditorNuméro de compte (IBAN) du Créancier :- crédité pour un Débit Direct- débité pour un Rejet, Retour, Remboursement (DS-05) ou Reversement(DS-07) de Débit Direct. |
DS-03 – DS-04 | AT-05 The address of the Creditor Adresse du Créancier |
DS-03 – DS-04 – DS-06 | AT-06 The amount of the Collection in euro Montant de l’Instruction de Débit Direct en euro |
DS-03 – DS-04 | AT-07 The account number (IBAN) of the DebtorNuméro de compte (IBAN) du Débiteur- débité pour un Débit Direct- crédité pour un Remboursement (DS-05) ou Reversement (DS-07) de Débit Direct |
AT-08 The identifier of the underlying contract Identifiant du contrat commercial sous-jacent | |
DS-03 – DS-04 | AT-09 The address of the Debtor Adresse du Débiteur |
DS-03 – DS-04 – DS-06 | AT-10 The Creditor’s reference of the Direct Debit Transaction Référence du prélèvement assignée par le Créancier |
DS-03 – DS-04 | AT-11 The Due Date of the Collection Date d’ Echéance de l’ Instruction de Débit Direct ( jour où le paiement du Débiteur est dûau Créancier) |
DS-03 – DS-04DS-07 | AT-12 BIC code of the Creditor Bank Code BIC de la Banque du Créancier |
DS-03 – DS-04 | AT-13 BIC code of the Debtor Bank Code BIC de la Banque du Débiteur |
DS-03 – DS-04 | AT-14 The name of the Debtor Nom du Débiteur |
DS-03 – DS-04 | AT-15 The name of the Debtor reference Party Nom du Tiers Débiteur |
DS-03 – DS-04 | AT-16 The placeholder for the electronic signature data Emplacement pour les données de signature électronique |
DS-03 – DS-04 | AT-17 The type of Mandate (paper, e-Mandate) Type de Mandat (papier ou e-Mandat) |
DS-03 – DS-04 | AT-18 The identifier of the original Creditor who issued the Mandate Ancien Identifiant Créancier SEPA |
DS-03 – DS-04 | AT-19 The unique Mandate reference as given by the original Creditor who issuedthe Mandate Référence de l’ancien Mandat |
DS-03 – DS-04 – DS-06 | AT-20 The identification code of the SchemeCode d’ identification du Scheme (type de prélèvement SEPA) ServiceLevel (Code) : “SEPA” uniquementLocalInstrument(Code ) : “CORE” pour le Core Scheme , “B2B” pour le BusinesstoBusiness Scheme |
DS-03 – DS-04 | AT-21 The transaction type(one-off, recurrent, first, last or Reversal : OOFF, RCUR, FRST, FNAL)Séquence de présentation dans le SDD , permettant de renseigner la séquence deprélèvement SDD-Collection SEPA :- Ponctuel (one-off – OOFF)- Suivant d’une série (recurrent – RCUR)
– Premier d? une série (first – FRST) – Dernier d? une série (final – FNAL) Type de paiement dans le mandat ( recurrent ou ponctuel ) |
DS-03 – DS-04 – DS-06 | AT-22 The Remittance Information sent by the Creditor to the Debtor in the CollectionMotif du paiement non structuré / structuré renseigné par le Créancier et transmis intégralement jusqu’au Débiteur.IG-EPC v4.0 : La Référence du prélèvement SEPA (max 35c) donnée par le Créancier est renseignée dans la partie Structurée du motif de paiement sous la <Creditoreference Information>. |
DS-03 – DS-04 | AT-24 The reason for amendment of the MandateNota : obligatoire en cas de Modifications de mandatMotifs de modification du Mandat par le Créancier et/ou le Débiteur :- Modification de l’ AT-01 (le créancier définit une nouvelle Référence Unique de Mandat RUM)- Modification de l’ AT-02 (nouvel identifiant créancier SEPA ICS)- Modifcation de l’ AT-03 (nouveau nom de Créancier)
– Modification de l’ AT-07 ( le débiteur spécifie un autre compte IBAN dans la même banque destiné à être débité) – Modification de l’ AT-07 ( le débiteur spécifie un autre compte IBAN dans une autre banque pour être débité) – Modifications de l’ AT-01 et de l’ AT-02 |
DS-03 – DS-04 | AT-25 The date of signing of the Mandate Date de signature du Mandat |
DS-03 – DS-04 | AT-26 The Settlement Date of the Collection Date de règlement interbancaire du Débit Direct |
DS-03 – DS-04 | AT-27 Debtor identification code Code Identifiant du Débiteur |
AT-29 The message type submitted in the Debtor validation Request (issuing, amendment, cancellation)Attribut specifique à l’e-mandate.Type de message soumis dans la demande de Validation du débiteur.Valeurs possibles :- Issuing of an e-Mandate (création d’un e-mandat)- Amendment of an e-Mandate.(modification d’ un mandat)
– Cancellation of an e-Mandate.(annulation d’un e-mandat) |
|
DS-07 | AT-31 The Reversal reason code Code motif de Reversement |
AT-33 The signature(s) of the Debtor(s) Signature(s) du Débiteur(s) | |
AT-36 The signing date of the cancellation of the Mandate Date de la Signature de l’ Annulation du Mandat (signée par le Débiteur) | |
DS-03 – DS-04 AT-37 The identification code of the Debtor Reference Party Code Identifiant du Tiers Débiteur | |
DS-03 – DS-04 AT-38 The name of the Creditor Reference Party Nom du Tiers Créancier | |
DS-03 – DS-04 AT-39 The identification code of the Creditor Reference Party Code Identifiant du Tiers Créancier | |
DS-04DS-07 | AT-43 The Creditor Bank’s reference of the Collection Référence assignée au prélèvement par la Banque du CréancierDS-07 AT-44 The amount of the Reversal in euro.Montant du reversement en euroIG-EPC v4.0 : le montant du reversement est égal au montant d’origine AT-06 plus un montant éventuel de commissions |
AT-45 The Debtor Bank’s reference of the requestRéférence de la Demande (pour une Réclamation d’un remboursement d’une transaction non autorisée ou pour une Obtention de copie de Mandat) donnée par la Banque du Débiteur et transmise jusqu’ à la banque du Créancier | |
AT-46 The Refund request type code Code du Type de la Demande de Remboursement | |
AT-47 The Date of receipt of the request by the Debtor Bank Date de réception par la Banque du Débiteur d’une demande initiée par le Débiteur | |
AT-48 The Date of sending the request by the Debtor Bank Date d’ envoi d’une Demande par la Banque du Débiteur (à destination de la Banque du Créancier ) | |
AT-49 The Name of the Debtor Bank Nom de la Banque du Débiteur | |
AT-50 The Debtor Bank contact detailsDétails des contacts de la Banque du Débiteur qui peuvent être utilisés par la banque duCréancier ou par le Créancier | |
AT-51 The e-mail address or fax number of the Debtor Bank where the copy of the Mandate should be sentAdresse-mail ou numéro de fax de la Banque du Débiteur où la copie du Mandat doit être envoyée | |
AT-52 The indication that a confirmation of the receipt of the request by the CreditorBank is requested (yes/no) Indicateur (oui / non ) qu’ une Confirmation de réception d’une Demande en provenance de la banque du Créditeur est requise. | |
AT-53 The Debit date of the Collection ( obligatoire si différent de Settlement Date of the collection)Date de débit de l’Instruction de Débit Direct date à laquelle le compte du débiteur est effectivement débité) | |
AT-54 The latest Collection Date Date d’échance du dernier Débit Direct | |
AT-54 The latest Collection Date Date d’échance du dernier Débit Direct | |
AT-56 The Reference of the response of the Creditor Référence de la Réponse du Créancier | |
AT-57 The Response type codesCodes du Type de réponse. Valeurs code disponibles :1 – Le Créancier accepte la réclamation de remboursement présentée par le débiteur (applicable dans une demande de remboursement)2 – Le Créancier fournit une copie du Mandat (applicable dans une demande de remboursement)3 – Réclamation contestée par le Créancier (applicable dans une demande deremboursement)4 – Le Créancier fournit une copie du Mandat (valeur par défaut applicable dans une
demande de copie de mandat) 5 – Le Créancier ne fournit pas la copie du Mandat (applicable dans une demande de copie de mandat) |
|
DS-03 – DS-04 | AT-58 The purpose of the Collection (optionnel) Nature du prélèvement (transmise jusqu’au débiteur) |
DS-03 – DS-04 | AT-59 The category purpose of the Collection (optionnel)Type de service (attaché au lot de prélèvement)Règle RB : Si la donnée Category Purpose est présente dans le DS-03, la banque du Créancier -en accord avec le Créancier- n’a pas l’obligation de transmettre cette donnée jusqu’à la banque du débiteur (DS-04) |
DS-03 – DS-04 | x AT-60 The reference of the validation made by the Debtor Bank Attribut spécifique à l’e-mandate.Référence de validation de l’ e-Mandat donnée par la banque du débiteur |
AT-61 The result of the Debtor Validation ( yes / no)Attribut specifique à l’e-mandate résultat oui / non communiqué par la banque du débiteur au débiteur après exécution duvalidation du DébiteurThe date of sending the response of the Creditor Date d’envoi de la réponse du Créancier |
LES ATTRIBUTS Return ,Refund, Reject et Reversal
PROCESS | ATTRIBUT |
DS-05 AT-R1 | Type of “R” messageType de message “R” :- Rejet d’un Débit Direct (Reject)- Retour d’un Débit Direct (Return )- Remboursement d’ un Débit Direct (Refund) |
DS-05 – DS-07 AT-R2 | Identification of the type of party initiating the “R” messageIdentifiant de l’ initiateur du “R” message :- Banque du Créancier (pour Reject, Reversal)- Banque du Débiteur (pour Reject, Return)- Mécanisme de compensation et de règlement (pour Reject uniquement)- Créancier (pour Reversal uniquement)
– Débiteur (pour Refund uniquement) |
DS-05 AT-R3 | The Reason Code for Non-Acceptance (Reject, Return or Refund) Code Motif de Rejet, Retour ou Remboursement |
DS-05 – DS-07 AT-R4 | The Settlement Date for the Return or Refund instruction (DS-05) or theReversal (DS-07)Date de Règlement interbancaire d’un Retour, d’un Remboursement ou d’un Reversement |
DS-05 AT-R5 | Specific reference of the bank initiating the Reject/Return/Refund forReject/Return/Refund.Référence du Rejet /Retour /Remboursement assignée par la banque initiatrice du Rejet/Retour /Remboursement |
DS-05 AT-R6 | The Refund compensation recovered by the Debtor Bank from the CreditorBankMontant en euro de l’Indemnité Compensatoire de Remboursement calculée etrecouvrée par la Banque du Débiteur ( cette donnée est transmise dans le messageinterbancaire de Refund jusque la banque du Créancier) |
DS-07 AT-R7 | The specific reference of the Creditor Bank for the Reversal Référence du Reversement assignée par la banque du Créancier |
DS-05 AT-R8 | The Amount of Balancing Payments bilateraly agreed between the Debtor Bank and the Creditor Bank on R-Message (DS-05)Montant en euro de commissions pour les R-messages convenu en biltatéral entre la banque du débiteur et la banque du créancier .EPC V4.0 : Ce montant est collecté par la banque du Débiteur |
DS-05 | An exact copy of all the attributes of the received DS-04 which is beingreturned/rejected/refunded OR the received DS-07,except attribute AT-31 of DS-07 which is being returnedUne copie exacte de tous les attributs du DS-04 reçu qui est retourné / rejeté /remboursé OU du DS-07 reçu ,excepté l’ attribut AT-31 du DS-07,qui est retourné |
DS-07 | An exact copy of all the attributes of the original DS-04 which is being reversed Une copie exacte de tous les attributs du DS-04 d’origine qui est reversé |
The post Les informations essentielles du rulebook SDD first appeared on In Fine - Le Blog.
]]>